'use strict'; var obsidian = require('obsidian'); var require$$2 = require('zlib'); var require$$3 = require('fs'); var require$$4 = require('http'); var require$$5 = require('https'); var require$$6 = require('url'); function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } var require$$2__default = /*#__PURE__*/_interopDefaultLegacy(require$$2); var require$$3__default = /*#__PURE__*/_interopDefaultLegacy(require$$3); var require$$4__default = /*#__PURE__*/_interopDefaultLegacy(require$$4); var require$$5__default = /*#__PURE__*/_interopDefaultLegacy(require$$5); var require$$6__default = /*#__PURE__*/_interopDefaultLegacy(require$$6); /*! ***************************************************************************** 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 ExtractPDFHighlightsPluginSettings = /** @class */ (function () { function ExtractPDFHighlightsPluginSettings() { this.includePageNumber = false; this.includeHighlightColor = false; this.createLinks = false; } return ExtractPDFHighlightsPluginSettings; }()); var ExtractPDFHighlightsPluginSettingsTab = /** @class */ (function (_super) { __extends(ExtractPDFHighlightsPluginSettingsTab, _super); function ExtractPDFHighlightsPluginSettingsTab(app, plugin) { var _this = _super.call(this, app, plugin) || this; _this.plugin = plugin; return _this; } ExtractPDFHighlightsPluginSettingsTab.prototype.display = function () { var _this = this; var containerEl = this.containerEl; containerEl.empty(); containerEl.createEl('h2', { text: 'Extract PDF Highlights.' }); new obsidian.Setting(containerEl) .setName('Include page number') .setDesc('If enabled, adds a `(Page X)` to each highlight.') .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.includePageNumber).onChange(function (value) { _this.plugin.settings.includePageNumber = value; _this.plugin.saveData(_this.plugin.settings); }); }); new obsidian.Setting(containerEl) .setName('Include highlighter color') .setDesc('If enabled, adds a color tag to each highlight based on the highlighter color used in the PDF') .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.includeHighlightColor).onChange(function (value) { _this.plugin.settings.includeHighlightColor = value; _this.plugin.saveData(_this.plugin.settings); }); }); new obsidian.Setting(containerEl) .setName('Create links') .setDesc('If enabled, turns each list item into a markdown link') .addToggle(function (toggle) { return toggle.setValue(_this.plugin.settings.createLinks).onChange(function (value) { _this.plugin.settings.createLinks = value; _this.plugin.saveData(_this.plugin.settings); }); }); }; return ExtractPDFHighlightsPluginSettingsTab; }(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 commonjsRequire () { throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs'); } /** * Just run the callback through setImmediate, so that it appears * asynchronous, even when unnecessary. */ function ensure(modules, callback) { setImmediate(callback); } var nodeEnsure = ensure; var extracthighlights_worker = createCommonjsModule(function (module, exports) { /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2018 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 /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __w_extracthighlights_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __w_extracthighlights_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __w_extracthighlights_require__.m = modules; /******/ /******/ // expose the module cache /******/ __w_extracthighlights_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __w_extracthighlights_require__.d = function(exports, name, getter) { /******/ if(!__w_extracthighlights_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __w_extracthighlights_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __w_extracthighlights_require__.t = function(value, mode) { /******/ if(mode & 1) value = __w_extracthighlights_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __w_extracthighlights_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_extracthighlights_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __w_extracthighlights_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __w_extracthighlights_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __w_extracthighlights_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __w_extracthighlights_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __w_extracthighlights_require__(__w_extracthighlights_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var extracthighlightsCoreWorker = __w_extracthighlights_require__(1); exports.WorkerMessageHandler = extracthighlightsCoreWorker.WorkerMessageHandler; /***/ }), /* 1 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.WorkerMessageHandler = exports.WorkerTask = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); var _util = __w_extracthighlights_require__(6); var _pdf_manager = __w_extracthighlights_require__(151); var _is_node = _interopRequireDefault(__w_extracthighlights_require__(9)); var _message_handler = __w_extracthighlights_require__(189); var _primitives = __w_extracthighlights_require__(155); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var WorkerTask = function WorkerTaskClosure() { function WorkerTask(name) { this.name = name; this.terminated = false; this._capability = (0, _util.createPromiseCapability)(); } WorkerTask.prototype = { get finished() { return this._capability.promise; }, finish: function finish() { this._capability.resolve(); }, terminate: function terminate() { this.terminated = true; }, ensureNotTerminated: function ensureNotTerminated() { if (this.terminated) { throw new Error('Worker task was terminated'); } } }; return WorkerTask; }(); exports.WorkerTask = WorkerTask; var PDFWorkerStream = function PDFWorkerStreamClosure() { function PDFWorkerStream(msgHandler) { this._msgHandler = msgHandler; this._contentLength = null; this._fullRequestReader = null; this._rangeRequestReaders = []; } PDFWorkerStream.prototype = { getFullReader: function getFullReader() { (0, _util.assert)(!this._fullRequestReader); this._fullRequestReader = new PDFWorkerStreamReader(this._msgHandler); return this._fullRequestReader; }, getRangeReader: function getRangeReader(begin, end) { var reader = new PDFWorkerStreamRangeReader(begin, end, this._msgHandler); this._rangeRequestReaders.push(reader); return reader; }, cancelAllRequests: function cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } }; function PDFWorkerStreamReader(msgHandler) { var _this = this; this._msgHandler = msgHandler; this._contentLength = null; this._isRangeSupported = false; this._isStreamingSupported = false; var readableStream = this._msgHandler.sendWithStream('GetReader'); this._reader = readableStream.getReader(); this._headersReady = this._msgHandler.sendWithPromise('ReaderHeadersReady').then(function (data) { _this._isStreamingSupported = data.isStreamingSupported; _this._isRangeSupported = data.isRangeSupported; _this._contentLength = data.contentLength; }); } PDFWorkerStreamReader.prototype = { get headersReady() { return this._headersReady; }, get contentLength() { return this._contentLength; }, get isStreamingSupported() { return this._isStreamingSupported; }, get isRangeSupported() { return this._isRangeSupported; }, read: function read() { return this._reader.read().then(function (_ref) { var value = _ref.value, done = _ref.done; if (done) { return { value: undefined, done: true }; } return { value: value.buffer, done: false }; }); }, cancel: function cancel(reason) { this._reader.cancel(reason); } }; function PDFWorkerStreamRangeReader(begin, end, msgHandler) { this._msgHandler = msgHandler; this.onProgress = null; var readableStream = this._msgHandler.sendWithStream('GetRangeReader', { begin: begin, end: end }); this._reader = readableStream.getReader(); } PDFWorkerStreamRangeReader.prototype = { get isStreamingSupported() { return false; }, read: function read() { return this._reader.read().then(function (_ref2) { var value = _ref2.value, done = _ref2.done; if (done) { return { value: undefined, done: true }; } return { value: value.buffer, done: false }; }); }, cancel: function cancel(reason) { this._reader.cancel(reason); } }; return PDFWorkerStream; }(); var WorkerMessageHandler = { setup: function setup(handler, port) { var testMessageProcessed = false; handler.on('test', function wphSetupTest(data) { if (testMessageProcessed) { return; } testMessageProcessed = true; if (!(data instanceof Uint8Array)) { handler.send('test', false); return; } var supportTransfers = data[0] === 255; handler.postMessageTransfers = supportTransfers; var xhr = new XMLHttpRequest(); var responseExists = 'response' in xhr; try { xhr.responseType; } catch (e) { responseExists = false; } if (!responseExists) { handler.send('test', false); return; } handler.send('test', { supportTypedArray: true, supportTransfers: supportTransfers }); }); handler.on('configure', function wphConfigure(data) { (0, _util.setVerbosityLevel)(data.verbosity); }); handler.on('GetDocRequest', function wphSetupDoc(data) { return WorkerMessageHandler.createDocumentHandler(data, port); }); }, createDocumentHandler: function createDocumentHandler(docParams, port) { var pdfManager; var terminated = false; var cancelXHRs = null; var WorkerTasks = []; var apiVersion = docParams.apiVersion; var workerVersion = '2.1.266'; if (apiVersion !== workerVersion) { throw new Error("The API version \"".concat(apiVersion, "\" does not match ") + "the Worker version \"".concat(workerVersion, "\".")); } var docId = docParams.docId; var docBaseUrl = docParams.docBaseUrl; var workerHandlerName = docParams.docId + '_worker'; var handler = new _message_handler.MessageHandler(workerHandlerName, docId, port); handler.postMessageTransfers = docParams.postMessageTransfers; function ensureNotTerminated() { if (terminated) { throw new Error('Worker was terminated'); } } function startWorkerTask(task) { WorkerTasks.push(task); } function finishWorkerTask(task) { task.finish(); var i = WorkerTasks.indexOf(task); WorkerTasks.splice(i, 1); } function loadDocument(_x) { return _loadDocument.apply(this, arguments); } function _loadDocument() { _loadDocument = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee(recoveryMode) { var _ref6, _ref7, numPages, fingerprint; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return pdfManager.ensureDoc('checkHeader'); case 2: _context.next = 4; return pdfManager.ensureDoc('parseStartXRef'); case 4: _context.next = 6; return pdfManager.ensureDoc('parse', [recoveryMode]); case 6: if (recoveryMode) { _context.next = 9; break; } _context.next = 9; return pdfManager.ensureDoc('checkFirstPage'); case 9: _context.next = 11; return Promise.all([pdfManager.ensureDoc('numPages'), pdfManager.ensureDoc('fingerprint')]); case 11: _ref6 = _context.sent; _ref7 = _slicedToArray(_ref6, 2); numPages = _ref7[0]; fingerprint = _ref7[1]; return _context.abrupt("return", { numPages: numPages, fingerprint: fingerprint }); case 16: case "end": return _context.stop(); } } }, _callee, this); })); return _loadDocument.apply(this, arguments); } function getPdfManager(data, evaluatorOptions) { var pdfManagerCapability = (0, _util.createPromiseCapability)(); var pdfManager; var source = data.source; if (source.data) { try { pdfManager = new _pdf_manager.LocalPdfManager(docId, source.data, source.password, evaluatorOptions, docBaseUrl); pdfManagerCapability.resolve(pdfManager); } catch (ex) { pdfManagerCapability.reject(ex); } return pdfManagerCapability.promise; } var pdfStream, cachedChunks = []; try { pdfStream = new PDFWorkerStream(handler); } catch (ex) { pdfManagerCapability.reject(ex); return pdfManagerCapability.promise; } var fullRequest = pdfStream.getFullReader(); fullRequest.headersReady.then(function () { if (!fullRequest.isRangeSupported) { return; } var disableAutoFetch = source.disableAutoFetch || fullRequest.isStreamingSupported; pdfManager = new _pdf_manager.NetworkPdfManager(docId, pdfStream, { msgHandler: handler, password: source.password, length: fullRequest.contentLength, disableAutoFetch: disableAutoFetch, rangeChunkSize: source.rangeChunkSize }, evaluatorOptions, docBaseUrl); for (var i = 0; i < cachedChunks.length; i++) { pdfManager.sendProgressiveData(cachedChunks[i]); } cachedChunks = []; pdfManagerCapability.resolve(pdfManager); cancelXHRs = null; }).catch(function (reason) { pdfManagerCapability.reject(reason); cancelXHRs = null; }); var loaded = 0; var flushChunks = function flushChunks() { var pdfFile = (0, _util.arraysToBytes)(cachedChunks); if (source.length && pdfFile.length !== source.length) { (0, _util.warn)('reported HTTP length is different from actual'); } try { pdfManager = new _pdf_manager.LocalPdfManager(docId, pdfFile, source.password, evaluatorOptions, docBaseUrl); pdfManagerCapability.resolve(pdfManager); } catch (ex) { pdfManagerCapability.reject(ex); } cachedChunks = []; }; var readPromise = new Promise(function (resolve, reject) { var readChunk = function readChunk(chunk) { try { ensureNotTerminated(); if (chunk.done) { if (!pdfManager) { flushChunks(); } cancelXHRs = null; return; } var data = chunk.value; loaded += (0, _util.arrayByteLength)(data); if (!fullRequest.isStreamingSupported) { handler.send('DocProgress', { loaded: loaded, total: Math.max(loaded, fullRequest.contentLength || 0) }); } if (pdfManager) { pdfManager.sendProgressiveData(data); } else { cachedChunks.push(data); } 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 cancelXHRs() { pdfStream.cancelAllRequests('abort'); }; return pdfManagerCapability.promise; } function setupDoc(data) { function onSuccess(doc) { ensureNotTerminated(); handler.send('GetDoc', { pdfInfo: doc }); } function onFailure(e) { ensureNotTerminated(); if (e instanceof _util.PasswordException) { var task = new WorkerTask('PasswordException: response ' + e.code); startWorkerTask(task); handler.sendWithPromise('PasswordRequest', e).then(function (data) { finishWorkerTask(task); pdfManager.updatePassword(data.password); pdfManagerReady(); }).catch(function (boundException) { finishWorkerTask(task); handler.send('PasswordException', boundException); }.bind(null, e)); } else if (e instanceof _util.InvalidPDFException) { handler.send('InvalidPDF', e); } else if (e instanceof _util.MissingPDFException) { handler.send('MissingPDF', e); } else if (e instanceof _util.UnexpectedResponseException) { handler.send('UnexpectedResponse', e); } else { handler.send('UnknownError', new _util.UnknownErrorException(e.message, e.toString())); } } function pdfManagerReady() { ensureNotTerminated(); loadDocument(false).then(onSuccess, function loadFailure(ex) { ensureNotTerminated(); if (!(ex instanceof _util.XRefParseException)) { onFailure(ex); return; } pdfManager.requestLoadedStream(); pdfManager.onLoadedStream().then(function () { ensureNotTerminated(); loadDocument(true).then(onSuccess, onFailure); }); }, onFailure); } ensureNotTerminated(); var evaluatorOptions = { forceDataSchema: data.disableCreateObjectURL, maxImageSize: data.maxImageSize, disableFontFace: data.disableFontFace, nativeImageDecoderSupport: data.nativeImageDecoderSupport, ignoreErrors: data.ignoreErrors, isEvalSupported: data.isEvalSupported }; getPdfManager(data, evaluatorOptions).then(function (newPdfManager) { if (terminated) { newPdfManager.terminate(); 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 (_ref3) { var _ref4 = _slicedToArray(_ref3, 4), rotate = _ref4[0], ref = _ref4[1], userUnit = _ref4[2], view = _ref4[3]; return { rotate: rotate, ref: ref, userUnit: userUnit, view: view }; }); }); }); handler.on('GetPageIndex', function wphSetupGetPageIndex(data) { var ref = new _primitives.Ref(data.ref.num, data.ref.gen); var catalog = pdfManager.pdfDocument.catalog; return catalog.getPageIndex(ref); }); 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('GetPageMode', function wphSetupGetPageMode(data) { return pdfManager.ensureCatalog('pageMode'); }); handler.on('getOpenActionDestination', function (data) { return pdfManager.ensureCatalog('openActionDestination'); }); handler.on('GetAttachments', function wphSetupGetAttachments(data) { return pdfManager.ensureCatalog('attachments'); }); handler.on('GetJavaScript', function wphSetupGetJavaScript(data) { return pdfManager.ensureCatalog('javaScript'); }); handler.on('GetOutline', function wphSetupGetOutline(data) { return pdfManager.ensureCatalog('documentOutline'); }); 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('GetData', function wphSetupGetData(data) { pdfManager.requestLoadedStream(); return pdfManager.onLoadedStream().then(function (stream) { return stream.bytes; }); }); handler.on('GetStats', function wphSetupGetStats(data) { return pdfManager.pdfDocument.xref.stats; }); handler.on('GetAnnotations', function (_ref5) { var pageIndex = _ref5.pageIndex, intent = _ref5.intent; return pdfManager.getPage(pageIndex).then(function (page) { return page.getAnnotationsData(intent); }); }); handler.on('RenderPageRequest', function wphSetupRenderPage(data) { var pageIndex = data.pageIndex; pdfManager.getPage(pageIndex).then(function (page) { var task = new WorkerTask('RenderPageRequest: page ' + pageIndex); startWorkerTask(task); var pageNum = pageIndex + 1; var start = Date.now(); page.getOperatorList({ handler: handler, task: task, intent: data.intent, renderInteractiveForms: data.renderInteractiveForms }).then(function (operatorList) { finishWorkerTask(task); (0, _util.info)('page=' + pageNum + ' - getOperatorList: time=' + (Date.now() - start) + 'ms, len=' + operatorList.totalLength); }, function (e) { finishWorkerTask(task); if (task.terminated) { return; } handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.unknown }); var minimumStackMessage = 'worker.js: while trying to getPage() and getOperatorList()'; var wrappedException; if (typeof e === 'string') { wrappedException = { message: e, stack: minimumStackMessage }; } else if (_typeof(e) === 'object') { wrappedException = { message: e.message || e.toString(), stack: e.stack || minimumStackMessage }; } else { wrappedException = { message: 'Unknown exception type: ' + _typeof(e), stack: minimumStackMessage }; } handler.send('PageError', { pageNum: pageNum, error: wrappedException, intent: data.intent }); }); }); }, this); handler.on('GetTextContent', function wphExtractText(data, sink) { var pageIndex = data.pageIndex; sink.onPull = function (desiredSize) {}; sink.onCancel = function (reason) {}; pdfManager.getPage(pageIndex).then(function (page) { var task = new WorkerTask('GetTextContent: page ' + pageIndex); startWorkerTask(task); var pageNum = pageIndex + 1; var start = Date.now(); page.extractTextContent({ handler: handler, task: task, sink: sink, normalizeWhitespace: data.normalizeWhitespace, combineTextItems: data.combineTextItems }).then(function () { finishWorkerTask(task); (0, _util.info)('text indexing: page=' + pageNum + ' - time=' + (Date.now() - start) + 'ms'); sink.close(); }, function (reason) { finishWorkerTask(task); if (task.terminated) { return; } sink.error(reason); throw reason; }); }); }); handler.on('FontFallback', function (data) { return pdfManager.fontFallback(data.id, handler); }); handler.on('Cleanup', function wphCleanup(data) { return pdfManager.cleanup(); }); handler.on('Terminate', function wphTerminate(data) { terminated = true; if (pdfManager) { pdfManager.terminate(); pdfManager = null; } if (cancelXHRs) { cancelXHRs(); } var waitOn = []; WorkerTasks.forEach(function (task) { 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; }, initializeFromPort: function initializeFromPort(port) { var 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' && !(0, _is_node.default)() && typeof self !== 'undefined' && isMessagePort(self)) { WorkerMessageHandler.initializeFromPort(self); } /***/ }), /* 2 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = __w_extracthighlights_require__(3); /***/ }), /* 3 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var g = function () { return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; }() || Function("return this")(); var hadRuntime = g.regeneratorRuntime && Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0; var oldRuntime = hadRuntime && g.regeneratorRuntime; g.regeneratorRuntime = undefined; module.exports = __w_extracthighlights_require__(4); if (hadRuntime) { g.regeneratorRuntime = oldRuntime; } else { try { delete g.regeneratorRuntime; } catch (e) { g.regeneratorRuntime = undefined; } } /***/ }), /* 4 */ /***/ (function(module, exports, __w_extracthighlights_require__) { /* WEBPACK VAR INJECTION */(function(module) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } !function (global) { var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined$1; var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; var inModule = ( _typeof(module)) === "object"; var runtime = global.regeneratorRuntime; if (runtime) { if (inModule) { module.exports = runtime; } return; } runtime = global.regeneratorRuntime = inModule ? module.exports : {}; function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } runtime.wrap = wrap; function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { prototype[method] = function (arg) { return this._invoke(method, arg); }; }); } runtime.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; runtime.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; if (!(toStringTagSymbol in genFun)) { genFun[toStringTagSymbol] = "GeneratorFunction"; } } genFun.prototype = Object.create(Gp); return genFun; }; runtime.awrap = function (arg) { return { __await: arg }; }; function AsyncIterator(generator) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { return Promise.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } return Promise.resolve(value).then(function (unwrapped) { result.value = unwrapped; resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new Promise(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; runtime.AsyncIterator = AsyncIterator; runtime.async = function (innerFn, outerFn, self, tryLocsList) { var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); return runtime.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; context.method = "throw"; context.arg = record.arg; } } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined$1) { context.delegate = null; if (context.method === "throw") { if (delegate.iterator.return) { context.method = "return"; context.arg = undefined$1; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; if (context.method !== "return") { context.method = "next"; context.arg = undefined$1; } } else { return info; } context.delegate = null; return ContinueSentinel; } defineIteratorMethods(Gp); Gp[toStringTagSymbol] = "Generator"; Gp[iteratorSymbol] = function () { return this; }; Gp.toString = function () { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } runtime.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined$1; next.done = true; return next; }; return next.next = next; } } return { next: doneResult }; } runtime.values = values; function doneResult() { return { value: undefined$1, done: true }; } Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { this.prev = 0; this.next = 0; this.sent = this._sent = undefined$1; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined$1; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined$1; } } } }, stop: function stop() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { context.method = "next"; context.arg = undefined$1; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function complete(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { this.arg = undefined$1; } return ContinueSentinel; } }; }(function () { return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; }() || Function("return this")()); /* WEBPACK VAR INJECTION */}.call(this, __w_extracthighlights_require__(5)(module))); /***/ }), /* 5 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (module) { if (!module.webpackPolyfill) { module.deprecate = function () {}; module.paths = []; if (!module.children) module.children = []; Object.defineProperty(module, "loaded", { enumerable: true, get: function get() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function get() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }), /* 6 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.toRomanNumerals = toRomanNumerals; exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; exports.bytesToString = bytesToString; exports.createPromiseCapability = createPromiseCapability; exports.deprecated = deprecated; exports.getInheritableProperty = getInheritableProperty; exports.getLookupTableFactory = getLookupTableFactory; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isBool = isBool; exports.isEmptyObj = isEmptyObj; exports.isNum = isNum; exports.isString = isString; exports.isSpace = isSpace; exports.isSameOrigin = isSameOrigin; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; exports.isLittleEndian = isLittleEndian; exports.isEvalSupported = isEvalSupported; exports.log2 = log2; exports.readInt8 = readInt8; exports.readUint16 = readUint16; exports.readUint32 = readUint32; exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; exports.stringToUTF8String = stringToUTF8String; exports.utf8StringToString = utf8StringToString; exports.warn = warn; exports.unreachable = unreachable; Object.defineProperty(exports, "ReadableStream", { enumerable: true, get: function get() { return _streams_polyfill.ReadableStream; } }); Object.defineProperty(exports, "URL", { enumerable: true, get: function get() { return _url_polyfill.URL; } }); exports.createObjectURL = exports.FormatError = exports.XRefParseException = exports.XRefEntryException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = void 0; __w_extracthighlights_require__(7); var _streams_polyfill = __w_extracthighlights_require__(147); var _url_polyfill = __w_extracthighlights_require__(149); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; var NativeImageDecoding = { NONE: 'none', DECODE: 'decode', DISPLAY: 'display' }; exports.NativeImageDecoding = NativeImageDecoding; var 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; var 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; var ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; exports.ImageKind = ImageKind; var 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; var AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, NOZOOM: 0x08, NOROTATE: 0x10, NOVIEW: 0x20, READONLY: 0x40, LOCKED: 0x80, TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; exports.AnnotationFlag = AnnotationFlag; var 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; var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; exports.AnnotationBorderStyleType = AnnotationBorderStyleType; var StreamType = { UNKNOWN: 0, FLATE: 1, LZW: 2, DCT: 3, JPX: 4, JBIG: 5, A85: 6, AHX: 7, CCF: 8, RL: 9 }; exports.StreamType = StreamType; var FontType = { UNKNOWN: 0, TYPE1: 1, TYPE1C: 2, CIDFONTTYPE0: 3, CIDFONTTYPE0C: 4, TRUETYPE: 5, CIDFONTTYPE2: 6, TYPE3: 7, OPENTYPE: 8, TYPE0: 9, MMTYPE1: 10 }; exports.FontType = FontType; var VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; exports.VerbosityLevel = VerbosityLevel; var CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; exports.CMapCompressionType = CMapCompressionType; var 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; var UNSUPPORTED_FEATURES = { unknown: 'unknown', forms: 'forms', javaScript: 'javaScript', smask: 'smask', shadingPattern: 'shadingPattern', font: 'font' }; exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; var PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; var 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 deprecated(details) { console.log('Deprecated API usage: ' + details); } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function isSameOrigin(baseUrl, otherUrl) { try { var base = new _url_polyfill.URL(baseUrl); if (!base.origin || base.origin === 'null') { return false; } } catch (e) { return false; } var other = new _url_polyfill.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) { if (!url) { return null; } try { var absoluteUrl = baseUrl ? new _url_polyfill.URL(url, baseUrl) : new _url_polyfill.URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (ex) {} return null; } function shadow(obj, prop, value) { Object.defineProperty(obj, prop, { value: value, enumerable: true, configurable: true, writable: false }); return value; } function getLookupTableFactory(initializer) { var lookup; return function () { if (initializer) { lookup = Object.create(null); initializer(lookup); initializer = null; } return lookup; }; } var PasswordException = function PasswordExceptionClosure() { function PasswordException(msg, code) { this.name = 'PasswordException'; this.message = msg; this.code = code; } PasswordException.prototype = new Error(); PasswordException.constructor = PasswordException; return PasswordException; }(); exports.PasswordException = PasswordException; var UnknownErrorException = function UnknownErrorExceptionClosure() { function UnknownErrorException(msg, details) { this.name = 'UnknownErrorException'; this.message = msg; this.details = details; } UnknownErrorException.prototype = new Error(); UnknownErrorException.constructor = UnknownErrorException; return UnknownErrorException; }(); exports.UnknownErrorException = UnknownErrorException; var InvalidPDFException = function InvalidPDFExceptionClosure() { function InvalidPDFException(msg) { this.name = 'InvalidPDFException'; this.message = msg; } InvalidPDFException.prototype = new Error(); InvalidPDFException.constructor = InvalidPDFException; return InvalidPDFException; }(); exports.InvalidPDFException = InvalidPDFException; var MissingPDFException = function MissingPDFExceptionClosure() { function MissingPDFException(msg) { this.name = 'MissingPDFException'; this.message = msg; } MissingPDFException.prototype = new Error(); MissingPDFException.constructor = MissingPDFException; return MissingPDFException; }(); exports.MissingPDFException = MissingPDFException; var UnexpectedResponseException = function UnexpectedResponseExceptionClosure() { function UnexpectedResponseException(msg, status) { this.name = 'UnexpectedResponseException'; this.message = msg; this.status = status; } UnexpectedResponseException.prototype = new Error(); UnexpectedResponseException.constructor = UnexpectedResponseException; return UnexpectedResponseException; }(); exports.UnexpectedResponseException = UnexpectedResponseException; var MissingDataException = function MissingDataExceptionClosure() { function MissingDataException(begin, end) { this.begin = begin; this.end = end; this.message = 'Missing data [' + begin + ', ' + end + ')'; } MissingDataException.prototype = new Error(); MissingDataException.prototype.name = 'MissingDataException'; MissingDataException.constructor = MissingDataException; return MissingDataException; }(); exports.MissingDataException = MissingDataException; var XRefEntryException = function XRefEntryExceptionClosure() { function XRefEntryException(msg) { this.message = msg; } XRefEntryException.prototype = new Error(); XRefEntryException.prototype.name = 'XRefEntryException'; XRefEntryException.constructor = XRefEntryException; return XRefEntryException; }(); exports.XRefEntryException = XRefEntryException; var XRefParseException = function XRefParseExceptionClosure() { function XRefParseException(msg) { this.message = msg; } XRefParseException.prototype = new Error(); XRefParseException.prototype.name = 'XRefParseException'; XRefParseException.constructor = XRefParseException; return XRefParseException; }(); exports.XRefParseException = XRefParseException; var FormatError = function FormatErrorClosure() { function FormatError(msg) { this.message = msg; } FormatError.prototype = new Error(); FormatError.prototype.name = 'FormatError'; FormatError.constructor = FormatError; return FormatError; }(); exports.FormatError = FormatError; var AbortException = function AbortExceptionClosure() { function AbortException(msg) { this.name = 'AbortException'; this.message = msg; } AbortException.prototype = new Error(); AbortException.constructor = AbortException; return AbortException; }(); exports.AbortException = AbortException; var NullCharactersRegExp = /\x00/g; function removeNullCharacters(str) { if (typeof str !== 'string') { warn('The argument for removeNullCharacters must be a string.'); return str; } return str.replace(NullCharactersRegExp, ''); } function bytesToString(bytes) { assert(bytes !== null && _typeof(bytes) === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString'); var length = bytes.length; var MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } var strBuf = []; for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); var 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'); var length = str.length; var bytes = new Uint8Array(length); for (var 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); return arr.byteLength; } function arraysToBytes(arr) { if (arr.length === 1 && arr[0] instanceof Uint8Array) { return arr[0]; } var resultLength = 0; var i, ii = arr.length; var item, itemLength; for (i = 0; i < ii; i++) { item = arr[i]; itemLength = arrayByteLength(item); resultLength += itemLength; } var pos = 0; var data = new Uint8Array(resultLength); for (i = 0; i < ii; i++) { item = arr[i]; if (!(item instanceof Uint8Array)) { if (typeof item === 'string') { item = stringToBytes(item); } else { item = new Uint8Array(item); } } 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 log2(x) { if (x <= 0) { return 0; } return Math.ceil(Math.log2(x)); } function readInt8(data, start) { return data[start] << 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 isLittleEndian() { var buffer8 = new Uint8Array(4); buffer8[0] = 1; var view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } function isEvalSupported() { try { new Function(''); return true; } catch (e) { return false; } } function getInheritableProperty(_ref) { var dict = _ref.dict, key = _ref.key, _ref$getArray = _ref.getArray, getArray = _ref$getArray === void 0 ? false : _ref$getArray, _ref$stopWhenFound = _ref.stopWhenFound, stopWhenFound = _ref$stopWhenFound === void 0 ? true : _ref$stopWhenFound; var LOOP_LIMIT = 100; var loopCount = 0; var values; while (dict) { var value = getArray ? dict.getArray(key) : dict.get(key); if (value !== undefined) { if (stopWhenFound) { return value; } if (!values) { values = []; } values.push(value); } if (++loopCount > LOOP_LIMIT) { warn("getInheritableProperty: maximum loop count exceeded for \"".concat(key, "\"")); break; } dict = dict.get('Parent'); } return values; } var Util = function UtilClosure() { function Util() {} var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')']; Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { rgbBuf[1] = r; rgbBuf[3] = g; rgbBuf[5] = b; return rgbBuf.join(''); }; Util.transform = function Util_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]]; }; Util.applyTransform = function Util_applyTransform(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; }; Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { var d = m[0] * m[3] - m[1] * m[2]; var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; }; Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) { var p1 = Util.applyTransform(r, m); var p2 = Util.applyTransform(r.slice(2, 4), m); var p3 = Util.applyTransform([r[0], r[3]], m); var 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])]; }; Util.inverseTransform = function Util_inverseTransform(m) { var 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]; }; Util.apply3dTransform = function Util_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]]; }; Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) { var transpose = [m[0], m[2], m[1], m[3]]; var a = m[0] * transpose[0] + m[1] * transpose[2]; var b = m[0] * transpose[1] + m[1] * transpose[3]; var c = m[2] * transpose[0] + m[3] * transpose[2]; var d = m[2] * transpose[1] + m[3] * transpose[3]; var first = (a + d) / 2; var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; var sx = first + second || 1; var sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; }; Util.normalizeRect = function Util_normalizeRect(rect) { var 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; }; Util.intersect = function Util_intersect(rect1, rect2) { function compare(a, b) { return a - b; } var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare), orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare), 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 false; } 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 false; } return result; }; return Util; }(); exports.Util = Util; var 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) { var lowerCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; assert(Number.isInteger(number) && number > 0, 'The number should be a positive integer.'); var pos, romanBuf = []; 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]); var romanStr = romanBuf.join(''); return lowerCase ? romanStr.toLowerCase() : romanStr; } var 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) { var i, n = str.length, strBuf = []; if (str[0] === '\xFE' && str[1] === '\xFF') { for (i = 2; i < n; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); } } else { for (i = 0; i < n; ++i) { var code = PDFStringTranslateTable[str.charCodeAt(i)]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); } } return strBuf.join(''); } function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } function isEmptyObj(obj) { for (var key in obj) { return false; } return true; } 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 isSpace(ch) { return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A; } function createPromiseCapability() { var capability = Object.create(null); var isSettled = false; Object.defineProperty(capability, 'settled', { get: function 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; } var createObjectURL = function createObjectURLClosure() { var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; return function createObjectURL(data, contentType) { var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!forceDataSchema && _url_polyfill.URL.createObjectURL) { var blob = new Blob([data], { type: contentType }); return _url_polyfill.URL.createObjectURL(blob); } var buffer = 'data:' + contentType + ';base64,'; for (var i = 0, ii = data.length; i < ii; i += 3) { var b1 = data[i] & 0xFF; var b2 = data[i + 1] & 0xFF; var b3 = data[i + 2] & 0xFF; var d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64; var d4 = i + 2 < ii ? b3 & 0x3F : 64; buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; } return buffer; }; }(); exports.createObjectURL = createObjectURL; /***/ }), /* 7 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var globalScope = __w_extracthighlights_require__(8); if (!globalScope._extracthighlightsCompatibilityChecked) { globalScope._extracthighlightsCompatibilityChecked = true; var isNodeJS = __w_extracthighlights_require__(9); var hasDOM = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object' && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object'; (function checkNodeBtoa() { if (globalScope.btoa || !isNodeJS()) { return; } globalScope.btoa = function (chars) { return Buffer.from(chars, 'binary').toString('base64'); }; })(); (function checkNodeAtob() { if (globalScope.atob || !isNodeJS()) { return; } globalScope.atob = function (input) { return Buffer.from(input, 'base64').toString('binary'); }; })(); (function checkChildNodeRemove() { if (!hasDOM) { return; } if (typeof Element.prototype.remove !== 'undefined') { return; } Element.prototype.remove = function () { if (this.parentNode) { this.parentNode.removeChild(this); } }; })(); (function checkDOMTokenListAddRemove() { if (!hasDOM || isNodeJS()) { return; } var div = document.createElement('div'); div.classList.add('testOne', 'testTwo'); if (div.classList.contains('testOne') === true && div.classList.contains('testTwo') === true) { return; } var OriginalDOMTokenListAdd = DOMTokenList.prototype.add; var OriginalDOMTokenListRemove = DOMTokenList.prototype.remove; DOMTokenList.prototype.add = function () { for (var _len = arguments.length, tokens = new Array(_len), _key = 0; _key < _len; _key++) { tokens[_key] = arguments[_key]; } for (var _i = 0; _i < tokens.length; _i++) { var token = tokens[_i]; OriginalDOMTokenListAdd.call(this, token); } }; DOMTokenList.prototype.remove = function () { for (var _len2 = arguments.length, tokens = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { tokens[_key2] = arguments[_key2]; } for (var _i2 = 0; _i2 < tokens.length; _i2++) { var token = tokens[_i2]; OriginalDOMTokenListRemove.call(this, token); } }; })(); (function checkDOMTokenListToggle() { if (!hasDOM || isNodeJS()) { return; } var div = document.createElement('div'); if (div.classList.toggle('test', 0) === false) { return; } DOMTokenList.prototype.toggle = function (token) { var force = arguments.length > 1 ? !!arguments[1] : !this.contains(token); return this[force ? 'add' : 'remove'](token), force; }; })(); (function checkStringStartsWith() { if (String.prototype.startsWith) { return; } __w_extracthighlights_require__(10); })(); (function checkStringEndsWith() { if (String.prototype.endsWith) { return; } __w_extracthighlights_require__(40); })(); (function checkStringIncludes() { if (String.prototype.includes) { return; } __w_extracthighlights_require__(42); })(); (function checkArrayIncludes() { if (Array.prototype.includes) { return; } __w_extracthighlights_require__(44); })(); (function checkArrayFrom() { if (Array.from) { return; } __w_extracthighlights_require__(51); })(); (function checkObjectAssign() { if (Object.assign) { return; } __w_extracthighlights_require__(74); })(); (function checkMathLog2() { if (Math.log2) { return; } Math.log2 = __w_extracthighlights_require__(79); })(); (function checkNumberIsNaN() { if (Number.isNaN) { return; } Number.isNaN = __w_extracthighlights_require__(81); })(); (function checkNumberIsInteger() { if (Number.isInteger) { return; } Number.isInteger = __w_extracthighlights_require__(83); })(); (function checkPromise() { if (globalScope.Promise && globalScope.Promise.prototype && globalScope.Promise.prototype.finally) { return; } globalScope.Promise = __w_extracthighlights_require__(86); })(); (function checkWeakMap() { if (globalScope.WeakMap) { return; } globalScope.WeakMap = __w_extracthighlights_require__(106); })(); (function checkWeakSet() { if (globalScope.WeakSet) { return; } globalScope.WeakSet = __w_extracthighlights_require__(123); })(); (function checkStringCodePointAt() { if (String.codePointAt) { return; } String.codePointAt = __w_extracthighlights_require__(127); })(); (function checkStringFromCodePoint() { if (String.fromCodePoint) { return; } String.fromCodePoint = __w_extracthighlights_require__(129); })(); (function checkSymbol() { if (globalScope.Symbol) { return; } __w_extracthighlights_require__(131); })(); (function checkStringPadStart() { if (String.prototype.padStart) { return; } __w_extracthighlights_require__(138); })(); (function checkStringPadEnd() { if (String.prototype.padEnd) { return; } __w_extracthighlights_require__(142); })(); (function checkObjectValues() { if (Object.values) { return; } Object.values = __w_extracthighlights_require__(144); })(); } /***/ }), /* 8 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = typeof window !== 'undefined' && window.Math === Math ? window : typeof commonjsGlobal !== 'undefined' && commonjsGlobal.Math === Math ? commonjsGlobal : typeof self !== 'undefined' && self.Math === Math ? self : {}; /***/ }), /* 9 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } module.exports = function isNodeJS() { return (typeof process === "undefined" ? "undefined" : _typeof(process)) === 'object' && process + '' === '[object process]' && !process.versions['nw']; }; /***/ }), /* 10 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(11); module.exports = __w_extracthighlights_require__(14).String.startsWith; /***/ }), /* 11 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var toLength = __w_extracthighlights_require__(30); var context = __w_extracthighlights_require__(32); var STARTS_WITH = 'startsWith'; var $startsWith = ''[STARTS_WITH]; $export($export.P + $export.F * __w_extracthighlights_require__(39)(STARTS_WITH), 'String', { startsWith: function startsWith(searchString) { var that = context(this, searchString, STARTS_WITH); var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)); var search = String(searchString); return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search; } }); /***/ }), /* 12 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(13); var core = __w_extracthighlights_require__(14); var hide = __w_extracthighlights_require__(15); var redefine = __w_extracthighlights_require__(25); var ctx = __w_extracthighlights_require__(28); var PROTOTYPE = 'prototype'; var $export = function $export(type, name, source) { var IS_FORCED = type & $export.F; var IS_GLOBAL = type & $export.G; var IS_STATIC = type & $export.S; var IS_PROTO = type & $export.P; var IS_BIND = type & $export.B; var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); var key, own, out, exp; if (IS_GLOBAL) source = name; for (key in source) { own = !IS_FORCED && target && target[key] !== undefined; out = (own ? target : source)[key]; exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; if (target) redefine(target, key, out, type & $export.U); if (exports[key] != out) hide(exports, key, exp); if (IS_PROTO && expProto[key] != out) expProto[key] = out; } }; global.core = core; $export.F = 1; $export.G = 2; $export.S = 4; $export.P = 8; $export.B = 16; $export.W = 32; $export.U = 64; $export.R = 128; module.exports = $export; /***/ }), /* 13 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); if (typeof __g == 'number') __g = global; /***/ }), /* 14 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var core = module.exports = { version: '2.6.2' }; if (typeof __e == 'number') __e = core; /***/ }), /* 15 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var dP = __w_extracthighlights_require__(16); var createDesc = __w_extracthighlights_require__(24); module.exports = __w_extracthighlights_require__(20) ? function (object, key, value) { return dP.f(object, key, createDesc(1, value)); } : function (object, key, value) { object[key] = value; return object; }; /***/ }), /* 16 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(17); var IE8_DOM_DEFINE = __w_extracthighlights_require__(19); var toPrimitive = __w_extracthighlights_require__(23); var dP = Object.defineProperty; exports.f = __w_extracthighlights_require__(20) ? Object.defineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); anObject(Attributes); if (IE8_DOM_DEFINE) try { return dP(O, P, Attributes); } catch (e) {} if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); if ('value' in Attributes) O[P] = Attributes.value; return O; }; /***/ }), /* 17 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); module.exports = function (it) { if (!isObject(it)) throw TypeError(it + ' is not an object!'); return it; }; /***/ }), /* 18 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } module.exports = function (it) { return _typeof(it) === 'object' ? it !== null : typeof it === 'function'; }; /***/ }), /* 19 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = !__w_extracthighlights_require__(20) && !__w_extracthighlights_require__(21)(function () { return Object.defineProperty(__w_extracthighlights_require__(22)('div'), 'a', { get: function get() { return 7; } }).a != 7; }); /***/ }), /* 20 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = !__w_extracthighlights_require__(21)(function () { return Object.defineProperty({}, 'a', { get: function get() { return 7; } }).a != 7; }); /***/ }), /* 21 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (exec) { try { return !!exec(); } catch (e) { return true; } }; /***/ }), /* 22 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); var document = __w_extracthighlights_require__(13).document; var is = isObject(document) && isObject(document.createElement); module.exports = function (it) { return is ? document.createElement(it) : {}; }; /***/ }), /* 23 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); module.exports = function (it, S) { if (!isObject(it)) return it; var fn, val; if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; throw TypeError("Can't convert object to primitive value"); }; /***/ }), /* 24 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value: value }; }; /***/ }), /* 25 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(13); var hide = __w_extracthighlights_require__(15); var has = __w_extracthighlights_require__(26); var SRC = __w_extracthighlights_require__(27)('src'); var TO_STRING = 'toString'; var $toString = Function[TO_STRING]; var TPL = ('' + $toString).split(TO_STRING); __w_extracthighlights_require__(14).inspectSource = function (it) { return $toString.call(it); }; (module.exports = function (O, key, val, safe) { var isFunction = typeof val == 'function'; if (isFunction) has(val, 'name') || hide(val, 'name', key); if (O[key] === val) return; if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); if (O === global) { O[key] = val; } else if (!safe) { delete O[key]; hide(O, key, val); } else if (O[key]) { O[key] = val; } else { hide(O, key, val); } })(Function.prototype, TO_STRING, function toString() { return typeof this == 'function' && this[SRC] || $toString.call(this); }); /***/ }), /* 26 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var hasOwnProperty = {}.hasOwnProperty; module.exports = function (it, key) { return hasOwnProperty.call(it, key); }; /***/ }), /* 27 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var id = 0; var px = Math.random(); module.exports = function (key) { return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); }; /***/ }), /* 28 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var aFunction = __w_extracthighlights_require__(29); module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; switch (length) { case 1: return function (a) { return fn.call(that, a); }; case 2: return function (a, b) { return fn.call(that, a, b); }; case 3: return function (a, b, c) { return fn.call(that, a, b, c); }; } return function () { return fn.apply(that, arguments); }; }; /***/ }), /* 29 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (it) { if (typeof it != 'function') throw TypeError(it + ' is not a function!'); return it; }; /***/ }), /* 30 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toInteger = __w_extracthighlights_require__(31); var min = Math.min; module.exports = function (it) { return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; }; /***/ }), /* 31 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ceil = Math.ceil; var floor = Math.floor; module.exports = function (it) { return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); }; /***/ }), /* 32 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isRegExp = __w_extracthighlights_require__(33); var defined = __w_extracthighlights_require__(38); module.exports = function (that, searchString, NAME) { if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!"); return String(defined(that)); }; /***/ }), /* 33 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); var cof = __w_extracthighlights_require__(34); var MATCH = __w_extracthighlights_require__(35)('match'); module.exports = function (it) { var isRegExp; return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); }; /***/ }), /* 34 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toString = {}.toString; module.exports = function (it) { return toString.call(it).slice(8, -1); }; /***/ }), /* 35 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var store = __w_extracthighlights_require__(36)('wks'); var uid = __w_extracthighlights_require__(27); var _Symbol = __w_extracthighlights_require__(13).Symbol; var USE_SYMBOL = typeof _Symbol == 'function'; var $exports = module.exports = function (name) { return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name)); }; $exports.store = store; /***/ }), /* 36 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var core = __w_extracthighlights_require__(14); var global = __w_extracthighlights_require__(13); var SHARED = '__core-js_shared__'; var store = global[SHARED] || (global[SHARED] = {}); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: core.version, mode: __w_extracthighlights_require__(37) ? 'pure' : 'global', copyright: '© 2019 Denis Pushkarev (zloirock.ru)' }); /***/ }), /* 37 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = false; /***/ }), /* 38 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; }; /***/ }), /* 39 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var MATCH = __w_extracthighlights_require__(35)('match'); module.exports = function (KEY) { var re = /./; try { '/./'[KEY](re); } catch (e) { try { re[MATCH] = false; return !'/./'[KEY](re); } catch (f) {} } return true; }; /***/ }), /* 40 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(41); module.exports = __w_extracthighlights_require__(14).String.endsWith; /***/ }), /* 41 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var toLength = __w_extracthighlights_require__(30); var context = __w_extracthighlights_require__(32); var ENDS_WITH = 'endsWith'; var $endsWith = ''[ENDS_WITH]; $export($export.P + $export.F * __w_extracthighlights_require__(39)(ENDS_WITH), 'String', { endsWith: function endsWith(searchString) { var that = context(this, searchString, ENDS_WITH); var endPosition = arguments.length > 1 ? arguments[1] : undefined; var len = toLength(that.length); var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len); var search = String(searchString); return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search; } }); /***/ }), /* 42 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(43); module.exports = __w_extracthighlights_require__(14).String.includes; /***/ }), /* 43 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var context = __w_extracthighlights_require__(32); var INCLUDES = 'includes'; $export($export.P + $export.F * __w_extracthighlights_require__(39)(INCLUDES), 'String', { includes: function includes(searchString) { return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); } }); /***/ }), /* 44 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(45); module.exports = __w_extracthighlights_require__(14).Array.includes; /***/ }), /* 45 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var $includes = __w_extracthighlights_require__(46)(true); $export($export.P, 'Array', { includes: function includes(el) { return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); } }); __w_extracthighlights_require__(50)('includes'); /***/ }), /* 46 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toIObject = __w_extracthighlights_require__(47); var toLength = __w_extracthighlights_require__(30); var toAbsoluteIndex = __w_extracthighlights_require__(49); module.exports = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIObject($this); var length = toLength(O.length); var index = toAbsoluteIndex(fromIndex, length); var value; if (IS_INCLUDES && el != el) while (length > index) { value = O[index++]; if (value != value) return true; } else for (; length > index; index++) { if (IS_INCLUDES || index in O) { if (O[index] === el) return IS_INCLUDES || index || 0; } } return !IS_INCLUDES && -1; }; }; /***/ }), /* 47 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var IObject = __w_extracthighlights_require__(48); var defined = __w_extracthighlights_require__(38); module.exports = function (it) { return IObject(defined(it)); }; /***/ }), /* 48 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var cof = __w_extracthighlights_require__(34); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { return cof(it) == 'String' ? it.split('') : Object(it); }; /***/ }), /* 49 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toInteger = __w_extracthighlights_require__(31); var max = Math.max; var min = Math.min; module.exports = function (index, length) { index = toInteger(index); return index < 0 ? max(index + length, 0) : min(index, length); }; /***/ }), /* 50 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var UNSCOPABLES = __w_extracthighlights_require__(35)('unscopables'); var ArrayProto = Array.prototype; if (ArrayProto[UNSCOPABLES] == undefined) __w_extracthighlights_require__(15)(ArrayProto, UNSCOPABLES, {}); module.exports = function (key) { ArrayProto[UNSCOPABLES][key] = true; }; /***/ }), /* 51 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(52); __w_extracthighlights_require__(67); module.exports = __w_extracthighlights_require__(14).Array.from; /***/ }), /* 52 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $at = __w_extracthighlights_require__(53)(true); __w_extracthighlights_require__(54)(String, 'String', function (iterated) { this._t = String(iterated); this._i = 0; }, function () { var O = this._t; var index = this._i; var point; if (index >= O.length) return { value: undefined, done: true }; point = $at(O, index); this._i += point.length; return { value: point, done: false }; }); /***/ }), /* 53 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toInteger = __w_extracthighlights_require__(31); var defined = __w_extracthighlights_require__(38); module.exports = function (TO_STRING) { return function (that, pos) { var s = String(defined(that)); var i = toInteger(pos); var l = s.length; var a, b; if (i < 0 || i >= l) return TO_STRING ? '' : undefined; a = s.charCodeAt(i); return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; }; }; /***/ }), /* 54 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var LIBRARY = __w_extracthighlights_require__(37); var $export = __w_extracthighlights_require__(12); var redefine = __w_extracthighlights_require__(25); var hide = __w_extracthighlights_require__(15); var Iterators = __w_extracthighlights_require__(55); var $iterCreate = __w_extracthighlights_require__(56); var setToStringTag = __w_extracthighlights_require__(64); var getPrototypeOf = __w_extracthighlights_require__(65); var ITERATOR = __w_extracthighlights_require__(35)('iterator'); var BUGGY = !([].keys && 'next' in [].keys()); var FF_ITERATOR = '@@iterator'; var KEYS = 'keys'; var VALUES = 'values'; var returnThis = function returnThis() { return this; }; module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { $iterCreate(Constructor, NAME, next); var getMethod = function getMethod(kind) { if (!BUGGY && kind in proto) return proto[kind]; switch (kind) { case KEYS: return function keys() { return new Constructor(this, kind); }; case VALUES: return function values() { return new Constructor(this, kind); }; } return function entries() { return new Constructor(this, kind); }; }; var TAG = NAME + ' Iterator'; var DEF_VALUES = DEFAULT == VALUES; var VALUES_BUG = false; var proto = Base.prototype; var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; var $default = $native || getMethod(DEFAULT); var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; var methods, key, IteratorPrototype; if ($anyNative) { IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { setToStringTag(IteratorPrototype, TAG, true); if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); } } if (DEF_VALUES && $native && $native.name !== VALUES) { VALUES_BUG = true; $default = function values() { return $native.call(this); }; } if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { hide(proto, ITERATOR, $default); } Iterators[NAME] = $default; Iterators[TAG] = returnThis; if (DEFAULT) { methods = { values: DEF_VALUES ? $default : getMethod(VALUES), keys: IS_SET ? $default : getMethod(KEYS), entries: $entries }; if (FORCED) for (key in methods) { if (!(key in proto)) redefine(proto, key, methods[key]); } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); } return methods; }; /***/ }), /* 55 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = {}; /***/ }), /* 56 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var create = __w_extracthighlights_require__(57); var descriptor = __w_extracthighlights_require__(24); var setToStringTag = __w_extracthighlights_require__(64); var IteratorPrototype = {}; __w_extracthighlights_require__(15)(IteratorPrototype, __w_extracthighlights_require__(35)('iterator'), function () { return this; }); module.exports = function (Constructor, NAME, next) { Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); setToStringTag(Constructor, NAME + ' Iterator'); }; /***/ }), /* 57 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(17); var dPs = __w_extracthighlights_require__(58); var enumBugKeys = __w_extracthighlights_require__(62); var IE_PROTO = __w_extracthighlights_require__(61)('IE_PROTO'); var Empty = function Empty() {}; var PROTOTYPE = 'prototype'; var _createDict = function createDict() { var iframe = __w_extracthighlights_require__(22)('iframe'); var i = enumBugKeys.length; var lt = '<'; var gt = '>'; var iframeDocument; iframe.style.display = 'none'; __w_extracthighlights_require__(63).appendChild(iframe); iframe.src = 'javascript:'; iframeDocument = iframe.contentWindow.document; iframeDocument.open(); iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); iframeDocument.close(); _createDict = iframeDocument.F; while (i--) { delete _createDict[PROTOTYPE][enumBugKeys[i]]; } return _createDict(); }; module.exports = Object.create || function create(O, Properties) { var result; if (O !== null) { Empty[PROTOTYPE] = anObject(O); result = new Empty(); Empty[PROTOTYPE] = null; result[IE_PROTO] = O; } else result = _createDict(); return Properties === undefined ? result : dPs(result, Properties); }; /***/ }), /* 58 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var dP = __w_extracthighlights_require__(16); var anObject = __w_extracthighlights_require__(17); var getKeys = __w_extracthighlights_require__(59); module.exports = __w_extracthighlights_require__(20) ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = getKeys(Properties); var length = keys.length; var i = 0; var P; while (length > i) { dP.f(O, P = keys[i++], Properties[P]); } return O; }; /***/ }), /* 59 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $keys = __w_extracthighlights_require__(60); var enumBugKeys = __w_extracthighlights_require__(62); module.exports = Object.keys || function keys(O) { return $keys(O, enumBugKeys); }; /***/ }), /* 60 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var has = __w_extracthighlights_require__(26); var toIObject = __w_extracthighlights_require__(47); var arrayIndexOf = __w_extracthighlights_require__(46)(false); var IE_PROTO = __w_extracthighlights_require__(61)('IE_PROTO'); module.exports = function (object, names) { var O = toIObject(object); var i = 0; var result = []; var key; for (key in O) { if (key != IE_PROTO) has(O, key) && result.push(key); } while (names.length > i) { if (has(O, key = names[i++])) { ~arrayIndexOf(result, key) || result.push(key); } } return result; }; /***/ }), /* 61 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var shared = __w_extracthighlights_require__(36)('keys'); var uid = __w_extracthighlights_require__(27); module.exports = function (key) { return shared[key] || (shared[key] = uid(key)); }; /***/ }), /* 62 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(','); /***/ }), /* 63 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var document = __w_extracthighlights_require__(13).document; module.exports = document && document.documentElement; /***/ }), /* 64 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var def = __w_extracthighlights_require__(16).f; var has = __w_extracthighlights_require__(26); var TAG = __w_extracthighlights_require__(35)('toStringTag'); module.exports = function (it, tag, stat) { if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); }; /***/ }), /* 65 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var has = __w_extracthighlights_require__(26); var toObject = __w_extracthighlights_require__(66); var IE_PROTO = __w_extracthighlights_require__(61)('IE_PROTO'); var ObjectProto = Object.prototype; module.exports = Object.getPrototypeOf || function (O) { O = toObject(O); if (has(O, IE_PROTO)) return O[IE_PROTO]; if (typeof O.constructor == 'function' && O instanceof O.constructor) { return O.constructor.prototype; } return O instanceof Object ? ObjectProto : null; }; /***/ }), /* 66 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var defined = __w_extracthighlights_require__(38); module.exports = function (it) { return Object(defined(it)); }; /***/ }), /* 67 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ctx = __w_extracthighlights_require__(28); var $export = __w_extracthighlights_require__(12); var toObject = __w_extracthighlights_require__(66); var call = __w_extracthighlights_require__(68); var isArrayIter = __w_extracthighlights_require__(69); var toLength = __w_extracthighlights_require__(30); var createProperty = __w_extracthighlights_require__(70); var getIterFn = __w_extracthighlights_require__(71); $export($export.S + $export.F * !__w_extracthighlights_require__(73)(function (iter) { Array.from(iter); }), 'Array', { from: function from(arrayLike) { var O = toObject(arrayLike); var C = typeof this == 'function' ? this : Array; var aLen = arguments.length; var mapfn = aLen > 1 ? arguments[1] : undefined; var mapping = mapfn !== undefined; var index = 0; var iterFn = getIterFn(O); var length, result, step, iterator; if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); } } else { length = toLength(O.length); for (result = new C(length); length > index; index++) { createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); } } result.length = index; return result; } }); /***/ }), /* 68 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(17); module.exports = function (iterator, fn, value, entries) { try { return entries ? fn(anObject(value)[0], value[1]) : fn(value); } catch (e) { var ret = iterator['return']; if (ret !== undefined) anObject(ret.call(iterator)); throw e; } }; /***/ }), /* 69 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var Iterators = __w_extracthighlights_require__(55); var ITERATOR = __w_extracthighlights_require__(35)('iterator'); var ArrayProto = Array.prototype; module.exports = function (it) { return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); }; /***/ }), /* 70 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $defineProperty = __w_extracthighlights_require__(16); var createDesc = __w_extracthighlights_require__(24); module.exports = function (object, index, value) { if (index in object) $defineProperty.f(object, index, createDesc(0, value));else object[index] = value; }; /***/ }), /* 71 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var classof = __w_extracthighlights_require__(72); var ITERATOR = __w_extracthighlights_require__(35)('iterator'); var Iterators = __w_extracthighlights_require__(55); module.exports = __w_extracthighlights_require__(14).getIteratorMethod = function (it) { if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; }; /***/ }), /* 72 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var cof = __w_extracthighlights_require__(34); var TAG = __w_extracthighlights_require__(35)('toStringTag'); var ARG = cof(function () { return arguments; }()) == 'Arguments'; var tryGet = function tryGet(it, key) { try { return it[key]; } catch (e) {} }; module.exports = function (it) { var O, T, B; return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T : ARG ? cof(O) : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; }; /***/ }), /* 73 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ITERATOR = __w_extracthighlights_require__(35)('iterator'); var SAFE_CLOSING = false; try { var riter = [7][ITERATOR](); riter['return'] = function () { SAFE_CLOSING = true; }; Array.from(riter, function () { throw 2; }); } catch (e) {} module.exports = function (exec, skipClosing) { if (!skipClosing && !SAFE_CLOSING) return false; var safe = false; try { var arr = [7]; var iter = arr[ITERATOR](); iter.next = function () { return { done: safe = true }; }; arr[ITERATOR] = function () { return iter; }; exec(arr); } catch (e) {} return safe; }; /***/ }), /* 74 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(75); module.exports = __w_extracthighlights_require__(14).Object.assign; /***/ }), /* 75 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); $export($export.S + $export.F, 'Object', { assign: __w_extracthighlights_require__(76) }); /***/ }), /* 76 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var getKeys = __w_extracthighlights_require__(59); var gOPS = __w_extracthighlights_require__(77); var pIE = __w_extracthighlights_require__(78); var toObject = __w_extracthighlights_require__(66); var IObject = __w_extracthighlights_require__(48); var $assign = Object.assign; module.exports = !$assign || __w_extracthighlights_require__(21)(function () { var A = {}; var B = {}; var S = Symbol(); var K = 'abcdefghijklmnopqrst'; A[S] = 7; K.split('').forEach(function (k) { B[k] = k; }); return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; }) ? function assign(target, source) { var T = toObject(target); var aLen = arguments.length; var index = 1; var getSymbols = gOPS.f; var isEnum = pIE.f; while (aLen > index) { var S = IObject(arguments[index++]); var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); var length = keys.length; var j = 0; var key; while (length > j) { if (isEnum.call(S, key = keys[j++])) T[key] = S[key]; } } return T; } : $assign; /***/ }), /* 77 */ /***/ (function(module, exports, __w_extracthighlights_require__) { exports.f = Object.getOwnPropertySymbols; /***/ }), /* 78 */ /***/ (function(module, exports, __w_extracthighlights_require__) { exports.f = {}.propertyIsEnumerable; /***/ }), /* 79 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(80); module.exports = __w_extracthighlights_require__(14).Math.log2; /***/ }), /* 80 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); $export($export.S, 'Math', { log2: function log2(x) { return Math.log(x) / Math.LN2; } }); /***/ }), /* 81 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(82); module.exports = __w_extracthighlights_require__(14).Number.isNaN; /***/ }), /* 82 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); $export($export.S, 'Number', { isNaN: function isNaN(number) { return number != number; } }); /***/ }), /* 83 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(84); module.exports = __w_extracthighlights_require__(14).Number.isInteger; /***/ }), /* 84 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); $export($export.S, 'Number', { isInteger: __w_extracthighlights_require__(85) }); /***/ }), /* 85 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); var floor = Math.floor; module.exports = function isInteger(it) { return !isObject(it) && isFinite(it) && floor(it) === it; }; /***/ }), /* 86 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(87); __w_extracthighlights_require__(52); __w_extracthighlights_require__(88); __w_extracthighlights_require__(91); __w_extracthighlights_require__(104); __w_extracthighlights_require__(105); module.exports = __w_extracthighlights_require__(14).Promise; /***/ }), /* 87 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var classof = __w_extracthighlights_require__(72); var test = {}; test[__w_extracthighlights_require__(35)('toStringTag')] = 'z'; if (test + '' != '[object z]') { __w_extracthighlights_require__(25)(Object.prototype, 'toString', function toString() { return '[object ' + classof(this) + ']'; }, true); } /***/ }), /* 88 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $iterators = __w_extracthighlights_require__(89); var getKeys = __w_extracthighlights_require__(59); var redefine = __w_extracthighlights_require__(25); var global = __w_extracthighlights_require__(13); var hide = __w_extracthighlights_require__(15); var Iterators = __w_extracthighlights_require__(55); var wks = __w_extracthighlights_require__(35); var ITERATOR = wks('iterator'); var TO_STRING_TAG = wks('toStringTag'); var ArrayValues = Iterators.Array; var DOMIterables = { CSSRuleList: true, CSSStyleDeclaration: false, CSSValueList: false, ClientRectList: false, DOMRectList: false, DOMStringList: false, DOMTokenList: true, DataTransferItemList: false, FileList: false, HTMLAllCollection: false, HTMLCollection: false, HTMLFormElement: false, HTMLSelectElement: false, MediaList: true, MimeTypeArray: false, NamedNodeMap: false, NodeList: true, PaintRequestList: false, Plugin: false, PluginArray: false, SVGLengthList: false, SVGNumberList: false, SVGPathSegList: false, SVGPointList: false, SVGStringList: false, SVGTransformList: false, SourceBufferList: false, StyleSheetList: true, TextTrackCueList: false, TextTrackList: false, TouchList: false }; for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) { var NAME = collections[i]; var explicit = DOMIterables[NAME]; var Collection = global[NAME]; var proto = Collection && Collection.prototype; var key; if (proto) { if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues); if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); Iterators[NAME] = ArrayValues; if (explicit) for (key in $iterators) { if (!proto[key]) redefine(proto, key, $iterators[key], true); } } } /***/ }), /* 89 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var addToUnscopables = __w_extracthighlights_require__(50); var step = __w_extracthighlights_require__(90); var Iterators = __w_extracthighlights_require__(55); var toIObject = __w_extracthighlights_require__(47); module.exports = __w_extracthighlights_require__(54)(Array, 'Array', function (iterated, kind) { this._t = toIObject(iterated); this._i = 0; this._k = kind; }, function () { var O = this._t; var kind = this._k; var index = this._i++; if (!O || index >= O.length) { this._t = undefined; return step(1); } if (kind == 'keys') return step(0, index); if (kind == 'values') return step(0, O[index]); return step(0, [index, O[index]]); }, 'values'); Iterators.Arguments = Iterators.Array; addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); /***/ }), /* 90 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (done, value) { return { value: value, done: !!done }; }; /***/ }), /* 91 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var LIBRARY = __w_extracthighlights_require__(37); var global = __w_extracthighlights_require__(13); var ctx = __w_extracthighlights_require__(28); var classof = __w_extracthighlights_require__(72); var $export = __w_extracthighlights_require__(12); var isObject = __w_extracthighlights_require__(18); var aFunction = __w_extracthighlights_require__(29); var anInstance = __w_extracthighlights_require__(92); var forOf = __w_extracthighlights_require__(93); var speciesConstructor = __w_extracthighlights_require__(94); var task = __w_extracthighlights_require__(95).set; var microtask = __w_extracthighlights_require__(97)(); var newPromiseCapabilityModule = __w_extracthighlights_require__(98); var perform = __w_extracthighlights_require__(99); var userAgent = __w_extracthighlights_require__(100); var promiseResolve = __w_extracthighlights_require__(101); var PROMISE = 'Promise'; var TypeError = global.TypeError; var process = global.process; var versions = process && process.versions; var v8 = versions && versions.v8 || ''; var $Promise = global[PROMISE]; var isNode = classof(process) == 'process'; var empty = function empty() {}; var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; var USE_NATIVE = !!function () { try { var promise = $Promise.resolve(1); var FakePromise = (promise.constructor = {})[__w_extracthighlights_require__(35)('species')] = function (exec) { exec(empty, empty); }; return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise && v8.indexOf('6.6') !== 0 && userAgent.indexOf('Chrome/66') === -1; } catch (e) {} }(); var isThenable = function isThenable(it) { var then; return isObject(it) && typeof (then = it.then) == 'function' ? then : false; }; var notify = function notify(promise, isReject) { if (promise._n) return; promise._n = true; var chain = promise._c; microtask(function () { var value = promise._v; var ok = promise._s == 1; var i = 0; var run = function run(reaction) { var handler = ok ? reaction.ok : reaction.fail; var resolve = reaction.resolve; var reject = reaction.reject; var domain = reaction.domain; var result, then, exited; try { if (handler) { if (!ok) { if (promise._h == 2) onHandleUnhandled(promise); promise._h = 1; } if (handler === true) result = value;else { if (domain) domain.enter(); result = handler(value); if (domain) { domain.exit(); exited = true; } } if (result === reaction.promise) { reject(TypeError('Promise-chain cycle')); } else if (then = isThenable(result)) { then.call(result, resolve, reject); } else resolve(result); } else reject(value); } catch (e) { if (domain && !exited) domain.exit(); reject(e); } }; while (chain.length > i) { run(chain[i++]); } promise._c = []; promise._n = false; if (isReject && !promise._h) onUnhandled(promise); }); }; var onUnhandled = function onUnhandled(promise) { task.call(global, function () { var value = promise._v; var unhandled = isUnhandled(promise); var result, handler, console; if (unhandled) { result = perform(function () { if (isNode) { process.emit('unhandledRejection', value, promise); } else if (handler = global.onunhandledrejection) { handler({ promise: promise, reason: value }); } else if ((console = global.console) && console.error) { console.error('Unhandled promise rejection', value); } }); promise._h = isNode || isUnhandled(promise) ? 2 : 1; } promise._a = undefined; if (unhandled && result.e) throw result.v; }); }; var isUnhandled = function isUnhandled(promise) { return promise._h !== 1 && (promise._a || promise._c).length === 0; }; var onHandleUnhandled = function onHandleUnhandled(promise) { task.call(global, function () { var handler; if (isNode) { process.emit('rejectionHandled', promise); } else if (handler = global.onrejectionhandled) { handler({ promise: promise, reason: promise._v }); } }); }; var $reject = function $reject(value) { var promise = this; if (promise._d) return; promise._d = true; promise = promise._w || promise; promise._v = value; promise._s = 2; if (!promise._a) promise._a = promise._c.slice(); notify(promise, true); }; var $resolve = function $resolve(value) { var promise = this; var then; if (promise._d) return; promise._d = true; promise = promise._w || promise; try { if (promise === value) throw TypeError("Promise can't be resolved itself"); if (then = isThenable(value)) { microtask(function () { var wrapper = { _w: promise, _d: false }; try { then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); } catch (e) { $reject.call(wrapper, e); } }); } else { promise._v = value; promise._s = 1; notify(promise, false); } } catch (e) { $reject.call({ _w: promise, _d: false }, e); } }; if (!USE_NATIVE) { $Promise = function Promise(executor) { anInstance(this, $Promise, PROMISE, '_h'); aFunction(executor); Internal.call(this); try { executor(ctx($resolve, this, 1), ctx($reject, this, 1)); } catch (err) { $reject.call(this, err); } }; Internal = function Promise(executor) { this._c = []; this._a = undefined; this._s = 0; this._d = false; this._v = undefined; this._h = 0; this._n = false; }; Internal.prototype = __w_extracthighlights_require__(102)($Promise.prototype, { then: function then(onFulfilled, onRejected) { var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; reaction.fail = typeof onRejected == 'function' && onRejected; reaction.domain = isNode ? process.domain : undefined; this._c.push(reaction); if (this._a) this._a.push(reaction); if (this._s) notify(this, false); return reaction.promise; }, 'catch': function _catch(onRejected) { return this.then(undefined, onRejected); } }); OwnPromiseCapability = function OwnPromiseCapability() { var promise = new Internal(); this.promise = promise; this.resolve = ctx($resolve, promise, 1); this.reject = ctx($reject, promise, 1); }; newPromiseCapabilityModule.f = newPromiseCapability = function newPromiseCapability(C) { return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); }; } $export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise }); __w_extracthighlights_require__(64)($Promise, PROMISE); __w_extracthighlights_require__(103)(PROMISE); Wrapper = __w_extracthighlights_require__(14)[PROMISE]; $export($export.S + $export.F * !USE_NATIVE, PROMISE, { reject: function reject(r) { var capability = newPromiseCapability(this); var $$reject = capability.reject; $$reject(r); return capability.promise; } }); $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { resolve: function resolve(x) { return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); } }); $export($export.S + $export.F * !(USE_NATIVE && __w_extracthighlights_require__(73)(function (iter) { $Promise.all(iter)['catch'](empty); })), PROMISE, { all: function all(iterable) { var C = this; var capability = newPromiseCapability(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var values = []; var index = 0; var remaining = 1; forOf(iterable, false, function (promise) { var $index = index++; var alreadyCalled = false; values.push(undefined); remaining++; C.resolve(promise).then(function (value) { if (alreadyCalled) return; alreadyCalled = true; values[$index] = value; --remaining || resolve(values); }, reject); }); --remaining || resolve(values); }); if (result.e) reject(result.v); return capability.promise; }, race: function race(iterable) { var C = this; var capability = newPromiseCapability(C); var reject = capability.reject; var result = perform(function () { forOf(iterable, false, function (promise) { C.resolve(promise).then(capability.resolve, reject); }); }); if (result.e) reject(result.v); return capability.promise; } }); /***/ }), /* 92 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (it, Constructor, name, forbiddenField) { if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) { throw TypeError(name + ': incorrect invocation!'); } return it; }; /***/ }), /* 93 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ctx = __w_extracthighlights_require__(28); var call = __w_extracthighlights_require__(68); var isArrayIter = __w_extracthighlights_require__(69); var anObject = __w_extracthighlights_require__(17); var toLength = __w_extracthighlights_require__(30); var getIterFn = __w_extracthighlights_require__(71); var BREAK = {}; var RETURN = {}; var _exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); var f = ctx(fn, that, entries ? 2 : 1); var index = 0; var length, step, iterator, result; if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); if (result === BREAK || result === RETURN) return result; } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { result = call(iterator, f, step.value, entries); if (result === BREAK || result === RETURN) return result; } }; _exports.BREAK = BREAK; _exports.RETURN = RETURN; /***/ }), /* 94 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(17); var aFunction = __w_extracthighlights_require__(29); var SPECIES = __w_extracthighlights_require__(35)('species'); module.exports = function (O, D) { var C = anObject(O).constructor; var S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); }; /***/ }), /* 95 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ctx = __w_extracthighlights_require__(28); var invoke = __w_extracthighlights_require__(96); var html = __w_extracthighlights_require__(63); var cel = __w_extracthighlights_require__(22); var global = __w_extracthighlights_require__(13); var process = global.process; var setTask = global.setImmediate; var clearTask = global.clearImmediate; var MessageChannel = global.MessageChannel; var Dispatch = global.Dispatch; var counter = 0; var queue = {}; var ONREADYSTATECHANGE = 'onreadystatechange'; var defer, channel, port; var run = function run() { var id = +this; if (queue.hasOwnProperty(id)) { var fn = queue[id]; delete queue[id]; fn(); } }; var listener = function listener(event) { run.call(event.data); }; if (!setTask || !clearTask) { setTask = function setImmediate(fn) { var args = []; var i = 1; while (arguments.length > i) { args.push(arguments[i++]); } queue[++counter] = function () { invoke(typeof fn == 'function' ? fn : Function(fn), args); }; defer(counter); return counter; }; clearTask = function clearImmediate(id) { delete queue[id]; }; if (__w_extracthighlights_require__(34)(process) == 'process') { defer = function defer(id) { process.nextTick(ctx(run, id, 1)); }; } else if (Dispatch && Dispatch.now) { defer = function defer(id) { Dispatch.now(ctx(run, id, 1)); }; } else if (MessageChannel) { channel = new MessageChannel(); port = channel.port2; channel.port1.onmessage = listener; defer = ctx(port.postMessage, port, 1); } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { defer = function defer(id) { global.postMessage(id + '', '*'); }; global.addEventListener('message', listener, false); } else if (ONREADYSTATECHANGE in cel('script')) { defer = function defer(id) { html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { html.removeChild(this); run.call(id); }; }; } else { defer = function defer(id) { setTimeout(ctx(run, id, 1), 0); }; } } module.exports = { set: setTask, clear: clearTask }; /***/ }), /* 96 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (fn, args, that) { var un = that === undefined; switch (args.length) { case 0: return un ? fn() : fn.call(that); case 1: return un ? fn(args[0]) : fn.call(that, args[0]); case 2: return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]); case 3: return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]); case 4: return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]); } return fn.apply(that, args); }; /***/ }), /* 97 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(13); var macrotask = __w_extracthighlights_require__(95).set; var Observer = global.MutationObserver || global.WebKitMutationObserver; var process = global.process; var Promise = global.Promise; var isNode = __w_extracthighlights_require__(34)(process) == 'process'; module.exports = function () { var head, last, notify; var flush = function flush() { var parent, fn; if (isNode && (parent = process.domain)) parent.exit(); while (head) { fn = head.fn; head = head.next; try { fn(); } catch (e) { if (head) notify();else last = undefined; throw e; } } last = undefined; if (parent) parent.enter(); }; if (isNode) { notify = function notify() { process.nextTick(flush); }; } else if (Observer && !(global.navigator && global.navigator.standalone)) { var toggle = true; var node = document.createTextNode(''); new Observer(flush).observe(node, { characterData: true }); notify = function notify() { node.data = toggle = !toggle; }; } else if (Promise && Promise.resolve) { var promise = Promise.resolve(undefined); notify = function notify() { promise.then(flush); }; } else { notify = function notify() { macrotask.call(global, flush); }; } return function (fn) { var task = { fn: fn, next: undefined }; if (last) last.next = task; if (!head) { head = task; notify(); } last = task; }; }; /***/ }), /* 98 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var aFunction = __w_extracthighlights_require__(29); function PromiseCapability(C) { var resolve, reject; this.promise = new C(function ($$resolve, $$reject) { if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); resolve = $$resolve; reject = $$reject; }); this.resolve = aFunction(resolve); this.reject = aFunction(reject); } module.exports.f = function (C) { return new PromiseCapability(C); }; /***/ }), /* 99 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (exec) { try { return { e: false, v: exec() }; } catch (e) { return { e: true, v: e }; } }; /***/ }), /* 100 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(13); var navigator = global.navigator; module.exports = navigator && navigator.userAgent || ''; /***/ }), /* 101 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(17); var isObject = __w_extracthighlights_require__(18); var newPromiseCapability = __w_extracthighlights_require__(98); module.exports = function (C, x) { anObject(C); if (isObject(x) && x.constructor === C) return x; var promiseCapability = newPromiseCapability.f(C); var resolve = promiseCapability.resolve; resolve(x); return promiseCapability.promise; }; /***/ }), /* 102 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var redefine = __w_extracthighlights_require__(25); module.exports = function (target, src, safe) { for (var key in src) { redefine(target, key, src[key], safe); } return target; }; /***/ }), /* 103 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(13); var dP = __w_extracthighlights_require__(16); var DESCRIPTORS = __w_extracthighlights_require__(20); var SPECIES = __w_extracthighlights_require__(35)('species'); module.exports = function (KEY) { var C = global[KEY]; if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { configurable: true, get: function get() { return this; } }); }; /***/ }), /* 104 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var core = __w_extracthighlights_require__(14); var global = __w_extracthighlights_require__(13); var speciesConstructor = __w_extracthighlights_require__(94); var promiseResolve = __w_extracthighlights_require__(101); $export($export.P + $export.R, 'Promise', { 'finally': function _finally(onFinally) { var C = speciesConstructor(this, core.Promise || global.Promise); var isFunction = typeof onFinally == 'function'; return this.then(isFunction ? function (x) { return promiseResolve(C, onFinally()).then(function () { return x; }); } : onFinally, isFunction ? function (e) { return promiseResolve(C, onFinally()).then(function () { throw e; }); } : onFinally); } }); /***/ }), /* 105 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var newPromiseCapability = __w_extracthighlights_require__(98); var perform = __w_extracthighlights_require__(99); $export($export.S, 'Promise', { 'try': function _try(callbackfn) { var promiseCapability = newPromiseCapability.f(this); var result = perform(callbackfn); (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v); return promiseCapability.promise; } }); /***/ }), /* 106 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(87); __w_extracthighlights_require__(88); __w_extracthighlights_require__(107); __w_extracthighlights_require__(119); __w_extracthighlights_require__(121); module.exports = __w_extracthighlights_require__(14).WeakMap; /***/ }), /* 107 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var each = __w_extracthighlights_require__(108)(0); var redefine = __w_extracthighlights_require__(25); var meta = __w_extracthighlights_require__(112); var assign = __w_extracthighlights_require__(76); var weak = __w_extracthighlights_require__(113); var isObject = __w_extracthighlights_require__(18); var fails = __w_extracthighlights_require__(21); var validate = __w_extracthighlights_require__(114); var WEAK_MAP = 'WeakMap'; var getWeak = meta.getWeak; var isExtensible = Object.isExtensible; var uncaughtFrozenStore = weak.ufstore; var tmp = {}; var InternalMap; var wrapper = function wrapper(get) { return function WeakMap() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }; var methods = { get: function get(key) { if (isObject(key)) { var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); return data ? data[this._i] : undefined; } }, set: function set(key, value) { return weak.def(validate(this, WEAK_MAP), key, value); } }; var $WeakMap = module.exports = __w_extracthighlights_require__(115)(WEAK_MAP, wrapper, methods, weak, true, true); if (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) { InternalMap = weak.getConstructor(wrapper, WEAK_MAP); assign(InternalMap.prototype, methods); meta.NEED = true; each(['delete', 'has', 'get', 'set'], function (key) { var proto = $WeakMap.prototype; var method = proto[key]; redefine(proto, key, function (a, b) { if (isObject(a) && !isExtensible(a)) { if (!this._f) this._f = new InternalMap(); var result = this._f[key](a, b); return key == 'set' ? this : result; } return method.call(this, a, b); }); }); } /***/ }), /* 108 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ctx = __w_extracthighlights_require__(28); var IObject = __w_extracthighlights_require__(48); var toObject = __w_extracthighlights_require__(66); var toLength = __w_extracthighlights_require__(30); var asc = __w_extracthighlights_require__(109); module.exports = function (TYPE, $create) { var IS_MAP = TYPE == 1; var IS_FILTER = TYPE == 2; var IS_SOME = TYPE == 3; var IS_EVERY = TYPE == 4; var IS_FIND_INDEX = TYPE == 6; var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; var create = $create || asc; return function ($this, callbackfn, that) { var O = toObject($this); var self = IObject(O); var f = ctx(callbackfn, that, 3); var length = toLength(self.length); var index = 0; var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; var val, res; for (; length > index; index++) { if (NO_HOLES || index in self) { val = self[index]; res = f(val, index, O); if (TYPE) { if (IS_MAP) result[index] = res;else if (res) switch (TYPE) { case 3: return true; case 5: return val; case 6: return index; case 2: result.push(val); } else if (IS_EVERY) return false; } } } return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; }; }; /***/ }), /* 109 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var speciesConstructor = __w_extracthighlights_require__(110); module.exports = function (original, length) { return new (speciesConstructor(original))(length); }; /***/ }), /* 110 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); var isArray = __w_extracthighlights_require__(111); var SPECIES = __w_extracthighlights_require__(35)('species'); module.exports = function (original) { var C; if (isArray(original)) { C = original.constructor; if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; if (isObject(C)) { C = C[SPECIES]; if (C === null) C = undefined; } } return C === undefined ? Array : C; }; /***/ }), /* 111 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var cof = __w_extracthighlights_require__(34); module.exports = Array.isArray || function isArray(arg) { return cof(arg) == 'Array'; }; /***/ }), /* 112 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var META = __w_extracthighlights_require__(27)('meta'); var isObject = __w_extracthighlights_require__(18); var has = __w_extracthighlights_require__(26); var setDesc = __w_extracthighlights_require__(16).f; var id = 0; var isExtensible = Object.isExtensible || function () { return true; }; var FREEZE = !__w_extracthighlights_require__(21)(function () { return isExtensible(Object.preventExtensions({})); }); var setMeta = function setMeta(it) { setDesc(it, META, { value: { i: 'O' + ++id, w: {} } }); }; var fastKey = function fastKey(it, create) { if (!isObject(it)) return _typeof(it) == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; if (!has(it, META)) { if (!isExtensible(it)) return 'F'; if (!create) return 'E'; setMeta(it); } return it[META].i; }; var getWeak = function getWeak(it, create) { if (!has(it, META)) { if (!isExtensible(it)) return true; if (!create) return false; setMeta(it); } return it[META].w; }; var onFreeze = function onFreeze(it) { if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); return it; }; var meta = module.exports = { KEY: META, NEED: false, fastKey: fastKey, getWeak: getWeak, onFreeze: onFreeze }; /***/ }), /* 113 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var redefineAll = __w_extracthighlights_require__(102); var getWeak = __w_extracthighlights_require__(112).getWeak; var anObject = __w_extracthighlights_require__(17); var isObject = __w_extracthighlights_require__(18); var anInstance = __w_extracthighlights_require__(92); var forOf = __w_extracthighlights_require__(93); var createArrayMethod = __w_extracthighlights_require__(108); var $has = __w_extracthighlights_require__(26); var validate = __w_extracthighlights_require__(114); var arrayFind = createArrayMethod(5); var arrayFindIndex = createArrayMethod(6); var id = 0; var uncaughtFrozenStore = function uncaughtFrozenStore(that) { return that._l || (that._l = new UncaughtFrozenStore()); }; var UncaughtFrozenStore = function UncaughtFrozenStore() { this.a = []; }; var findUncaughtFrozen = function findUncaughtFrozen(store, key) { return arrayFind(store.a, function (it) { return it[0] === key; }); }; UncaughtFrozenStore.prototype = { get: function get(key) { var entry = findUncaughtFrozen(this, key); if (entry) return entry[1]; }, has: function has(key) { return !!findUncaughtFrozen(this, key); }, set: function set(key, value) { var entry = findUncaughtFrozen(this, key); if (entry) entry[1] = value;else this.a.push([key, value]); }, 'delete': function _delete(key) { var index = arrayFindIndex(this.a, function (it) { return it[0] === key; }); if (~index) this.a.splice(index, 1); return !!~index; } }; module.exports = { getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) { var C = wrapper(function (that, iterable) { anInstance(that, C, NAME, '_i'); that._t = NAME; that._i = id++; that._l = undefined; if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); }); redefineAll(C.prototype, { 'delete': function _delete(key) { if (!isObject(key)) return false; var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); return data && $has(data, this._i) && delete data[this._i]; }, has: function has(key) { if (!isObject(key)) return false; var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); return data && $has(data, this._i); } }); return C; }, def: function def(that, key, value) { var data = getWeak(anObject(key), true); if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value; return that; }, ufstore: uncaughtFrozenStore }; /***/ }), /* 114 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); module.exports = function (it, TYPE) { if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); return it; }; /***/ }), /* 115 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(13); var $export = __w_extracthighlights_require__(12); var redefine = __w_extracthighlights_require__(25); var redefineAll = __w_extracthighlights_require__(102); var meta = __w_extracthighlights_require__(112); var forOf = __w_extracthighlights_require__(93); var anInstance = __w_extracthighlights_require__(92); var isObject = __w_extracthighlights_require__(18); var fails = __w_extracthighlights_require__(21); var $iterDetect = __w_extracthighlights_require__(73); var setToStringTag = __w_extracthighlights_require__(64); var inheritIfRequired = __w_extracthighlights_require__(116); module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { var Base = global[NAME]; var C = Base; var ADDER = IS_MAP ? 'set' : 'add'; var proto = C && C.prototype; var O = {}; var fixMethod = function fixMethod(KEY) { var fn = proto[KEY]; redefine(proto, KEY, KEY == 'delete' ? function (a) { return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); } : KEY == 'has' ? function has(a) { return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); } : KEY == 'get' ? function get(a) { return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; } : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }); }; if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { new C().entries().next(); }))) { C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); redefineAll(C.prototype, methods); meta.NEED = true; } else { var instance = new C(); var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); var BUGGY_ZERO = !IS_WEAK && fails(function () { var $instance = new C(); var index = 5; while (index--) { $instance[ADDER](index, index); } return !$instance.has(-0); }); if (!ACCEPT_ITERABLES) { C = wrapper(function (target, iterable) { anInstance(target, C, NAME); var that = inheritIfRequired(new Base(), target, C); if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); return that; }); C.prototype = proto; proto.constructor = C; } if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { fixMethod('delete'); fixMethod('has'); IS_MAP && fixMethod('get'); } if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); if (IS_WEAK && proto.clear) delete proto.clear; } setToStringTag(C, NAME); O[NAME] = C; $export($export.G + $export.W + $export.F * (C != Base), O); if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); return C; }; /***/ }), /* 116 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); var setPrototypeOf = __w_extracthighlights_require__(117).set; module.exports = function (that, target, C) { var S = target.constructor; var P; if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { setPrototypeOf(that, P); } return that; }; /***/ }), /* 117 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(18); var anObject = __w_extracthighlights_require__(17); var check = function check(O, proto) { anObject(O); if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); }; module.exports = { set: Object.setPrototypeOf || ('__proto__' in {} ? function (test, buggy, set) { try { set = __w_extracthighlights_require__(28)(Function.call, __w_extracthighlights_require__(118).f(Object.prototype, '__proto__').set, 2); set(test, []); buggy = !(test instanceof Array); } catch (e) { buggy = true; } return function setPrototypeOf(O, proto) { check(O, proto); if (buggy) O.__proto__ = proto;else set(O, proto); return O; }; }({}, false) : undefined), check: check }; /***/ }), /* 118 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var pIE = __w_extracthighlights_require__(78); var createDesc = __w_extracthighlights_require__(24); var toIObject = __w_extracthighlights_require__(47); var toPrimitive = __w_extracthighlights_require__(23); var has = __w_extracthighlights_require__(26); var IE8_DOM_DEFINE = __w_extracthighlights_require__(19); var gOPD = Object.getOwnPropertyDescriptor; exports.f = __w_extracthighlights_require__(20) ? gOPD : function getOwnPropertyDescriptor(O, P) { O = toIObject(O); P = toPrimitive(P, true); if (IE8_DOM_DEFINE) try { return gOPD(O, P); } catch (e) {} if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); }; /***/ }), /* 119 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(120)('WeakMap'); /***/ }), /* 120 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); module.exports = function (COLLECTION) { $export($export.S, COLLECTION, { of: function of() { var length = arguments.length; var A = new Array(length); while (length--) { A[length] = arguments[length]; } return new this(A); } }); }; /***/ }), /* 121 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(122)('WeakMap'); /***/ }), /* 122 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var aFunction = __w_extracthighlights_require__(29); var ctx = __w_extracthighlights_require__(28); var forOf = __w_extracthighlights_require__(93); module.exports = function (COLLECTION) { $export($export.S, COLLECTION, { from: function from(source) { var mapFn = arguments[1]; var mapping, A, n, cb; aFunction(this); mapping = mapFn !== undefined; if (mapping) aFunction(mapFn); if (source == undefined) return new this(); A = []; if (mapping) { n = 0; cb = ctx(mapFn, arguments[2], 2); forOf(source, false, function (nextItem) { A.push(cb(nextItem, n++)); }); } else { forOf(source, false, A.push, A); } return new this(A); } }); }; /***/ }), /* 123 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(87); __w_extracthighlights_require__(88); __w_extracthighlights_require__(124); __w_extracthighlights_require__(125); __w_extracthighlights_require__(126); module.exports = __w_extracthighlights_require__(14).WeakSet; /***/ }), /* 124 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var weak = __w_extracthighlights_require__(113); var validate = __w_extracthighlights_require__(114); var WEAK_SET = 'WeakSet'; __w_extracthighlights_require__(115)(WEAK_SET, function (get) { return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }, { add: function add(value) { return weak.def(validate(this, WEAK_SET), value, true); } }, weak, false, true); /***/ }), /* 125 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(120)('WeakSet'); /***/ }), /* 126 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(122)('WeakSet'); /***/ }), /* 127 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(128); module.exports = __w_extracthighlights_require__(14).String.codePointAt; /***/ }), /* 128 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var $at = __w_extracthighlights_require__(53)(false); $export($export.P, 'String', { codePointAt: function codePointAt(pos) { return $at(this, pos); } }); /***/ }), /* 129 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(130); module.exports = __w_extracthighlights_require__(14).String.fromCodePoint; /***/ }), /* 130 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var toAbsoluteIndex = __w_extracthighlights_require__(49); var fromCharCode = String.fromCharCode; var $fromCodePoint = String.fromCodePoint; $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { fromCodePoint: function fromCodePoint(x) { var res = []; var aLen = arguments.length; var i = 0; var code; while (aLen > i) { code = +arguments[i++]; if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point'); res.push(code < 0x10000 ? fromCharCode(code) : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)); } return res.join(''); } }); /***/ }), /* 131 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(132); __w_extracthighlights_require__(87); module.exports = __w_extracthighlights_require__(14).Symbol; /***/ }), /* 132 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var global = __w_extracthighlights_require__(13); var has = __w_extracthighlights_require__(26); var DESCRIPTORS = __w_extracthighlights_require__(20); var $export = __w_extracthighlights_require__(12); var redefine = __w_extracthighlights_require__(25); var META = __w_extracthighlights_require__(112).KEY; var $fails = __w_extracthighlights_require__(21); var shared = __w_extracthighlights_require__(36); var setToStringTag = __w_extracthighlights_require__(64); var uid = __w_extracthighlights_require__(27); var wks = __w_extracthighlights_require__(35); var wksExt = __w_extracthighlights_require__(133); var wksDefine = __w_extracthighlights_require__(134); var enumKeys = __w_extracthighlights_require__(135); var isArray = __w_extracthighlights_require__(111); var anObject = __w_extracthighlights_require__(17); var isObject = __w_extracthighlights_require__(18); var toIObject = __w_extracthighlights_require__(47); var toPrimitive = __w_extracthighlights_require__(23); var createDesc = __w_extracthighlights_require__(24); var _create = __w_extracthighlights_require__(57); var gOPNExt = __w_extracthighlights_require__(136); var $GOPD = __w_extracthighlights_require__(118); var $DP = __w_extracthighlights_require__(16); var $keys = __w_extracthighlights_require__(59); var gOPD = $GOPD.f; var dP = $DP.f; var gOPN = gOPNExt.f; var $Symbol = global.Symbol; var $JSON = global.JSON; var _stringify = $JSON && $JSON.stringify; var PROTOTYPE = 'prototype'; var HIDDEN = wks('_hidden'); var TO_PRIMITIVE = wks('toPrimitive'); var isEnum = {}.propertyIsEnumerable; var SymbolRegistry = shared('symbol-registry'); var AllSymbols = shared('symbols'); var OPSymbols = shared('op-symbols'); var ObjectProto = Object[PROTOTYPE]; var USE_NATIVE = typeof $Symbol == 'function'; var QObject = global.QObject; var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; var setSymbolDesc = DESCRIPTORS && $fails(function () { return _create(dP({}, 'a', { get: function get() { return dP(this, 'a', { value: 7 }).a; } })).a != 7; }) ? function (it, key, D) { var protoDesc = gOPD(ObjectProto, key); if (protoDesc) delete ObjectProto[key]; dP(it, key, D); if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc); } : dP; var wrap = function wrap(tag) { var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); sym._k = tag; return sym; }; var isSymbol = USE_NATIVE && _typeof($Symbol.iterator) == 'symbol' ? function (it) { return _typeof(it) == 'symbol'; } : function (it) { return it instanceof $Symbol; }; var $defineProperty = function defineProperty(it, key, D) { if (it === ObjectProto) $defineProperty(OPSymbols, key, D); anObject(it); key = toPrimitive(key, true); anObject(D); if (has(AllSymbols, key)) { if (!D.enumerable) { if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {})); it[HIDDEN][key] = true; } else { if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; D = _create(D, { enumerable: createDesc(0, false) }); } return setSymbolDesc(it, key, D); } return dP(it, key, D); }; var $defineProperties = function defineProperties(it, P) { anObject(it); var keys = enumKeys(P = toIObject(P)); var i = 0; var l = keys.length; var key; while (l > i) { $defineProperty(it, key = keys[i++], P[key]); } return it; }; var $create = function create(it, P) { return P === undefined ? _create(it) : $defineProperties(_create(it), P); }; var $propertyIsEnumerable = function propertyIsEnumerable(key) { var E = isEnum.call(this, key = toPrimitive(key, true)); if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false; return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; }; var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { it = toIObject(it); key = toPrimitive(key, true); if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return; var D = gOPD(it, key); if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; return D; }; var $getOwnPropertyNames = function getOwnPropertyNames(it) { var names = gOPN(toIObject(it)); var result = []; var i = 0; var key; while (names.length > i) { if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key); } return result; }; var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { var IS_OP = it === ObjectProto; var names = gOPN(IS_OP ? OPSymbols : toIObject(it)); var result = []; var i = 0; var key; while (names.length > i) { if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]); } return result; }; if (!USE_NATIVE) { $Symbol = function _Symbol() { if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!'); var tag = uid(arguments.length > 0 ? arguments[0] : undefined); var $set = function $set(value) { if (this === ObjectProto) $set.call(OPSymbols, value); if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; setSymbolDesc(this, tag, createDesc(1, value)); }; if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set }); return wrap(tag); }; redefine($Symbol[PROTOTYPE], 'toString', function toString() { return this._k; }); $GOPD.f = $getOwnPropertyDescriptor; $DP.f = $defineProperty; __w_extracthighlights_require__(137).f = gOPNExt.f = $getOwnPropertyNames; __w_extracthighlights_require__(78).f = $propertyIsEnumerable; __w_extracthighlights_require__(77).f = $getOwnPropertySymbols; if (DESCRIPTORS && !__w_extracthighlights_require__(37)) { redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); } wksExt.f = function (name) { return wrap(wks(name)); }; } $export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol }); for (var es6Symbols = 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'.split(','), j = 0; es6Symbols.length > j;) { wks(es6Symbols[j++]); } for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) { wksDefine(wellKnownSymbols[k++]); } $export($export.S + $export.F * !USE_NATIVE, 'Symbol', { 'for': function _for(key) { return has(SymbolRegistry, key += '') ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key); }, keyFor: function keyFor(sym) { if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!'); for (var key in SymbolRegistry) { if (SymbolRegistry[key] === sym) return key; } }, useSetter: function useSetter() { setter = true; }, useSimple: function useSimple() { setter = false; } }); $export($export.S + $export.F * !USE_NATIVE, 'Object', { create: $create, defineProperty: $defineProperty, defineProperties: $defineProperties, getOwnPropertyDescriptor: $getOwnPropertyDescriptor, getOwnPropertyNames: $getOwnPropertyNames, getOwnPropertySymbols: $getOwnPropertySymbols }); $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () { var S = $Symbol(); return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}'; })), 'JSON', { stringify: function stringify(it) { var args = [it]; var i = 1; var replacer, $replacer; while (arguments.length > i) { args.push(arguments[i++]); } $replacer = replacer = args[1]; if (!isObject(replacer) && it === undefined || isSymbol(it)) return; if (!isArray(replacer)) replacer = function replacer(key, value) { if (typeof $replacer == 'function') value = $replacer.call(this, key, value); if (!isSymbol(value)) return value; }; args[1] = replacer; return _stringify.apply($JSON, args); } }); $Symbol[PROTOTYPE][TO_PRIMITIVE] || __w_extracthighlights_require__(15)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); setToStringTag($Symbol, 'Symbol'); setToStringTag(Math, 'Math', true); setToStringTag(global.JSON, 'JSON', true); /***/ }), /* 133 */ /***/ (function(module, exports, __w_extracthighlights_require__) { exports.f = __w_extracthighlights_require__(35); /***/ }), /* 134 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(13); var core = __w_extracthighlights_require__(14); var LIBRARY = __w_extracthighlights_require__(37); var wksExt = __w_extracthighlights_require__(133); var defineProperty = __w_extracthighlights_require__(16).f; module.exports = function (name) { var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) }); }; /***/ }), /* 135 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var getKeys = __w_extracthighlights_require__(59); var gOPS = __w_extracthighlights_require__(77); var pIE = __w_extracthighlights_require__(78); module.exports = function (it) { var result = getKeys(it); var getSymbols = gOPS.f; if (getSymbols) { var symbols = getSymbols(it); var isEnum = pIE.f; var i = 0; var key; while (symbols.length > i) { if (isEnum.call(it, key = symbols[i++])) result.push(key); } } return result; }; /***/ }), /* 136 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var toIObject = __w_extracthighlights_require__(47); var gOPN = __w_extracthighlights_require__(137).f; var toString = {}.toString; var windowNames = (typeof window === "undefined" ? "undefined" : _typeof(window)) == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; var getWindowNames = function getWindowNames(it) { try { return gOPN(it); } catch (e) { return windowNames.slice(); } }; module.exports.f = function getOwnPropertyNames(it) { return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); }; /***/ }), /* 137 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $keys = __w_extracthighlights_require__(60); var hiddenKeys = __w_extracthighlights_require__(62).concat('length', 'prototype'); exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { return $keys(O, hiddenKeys); }; /***/ }), /* 138 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(139); module.exports = __w_extracthighlights_require__(14).String.padStart; /***/ }), /* 139 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var $pad = __w_extracthighlights_require__(140); var userAgent = __w_extracthighlights_require__(100); $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { padStart: function padStart(maxLength) { return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); } }); /***/ }), /* 140 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toLength = __w_extracthighlights_require__(30); var repeat = __w_extracthighlights_require__(141); var defined = __w_extracthighlights_require__(38); module.exports = function (that, maxLength, fillString, left) { var S = String(defined(that)); var stringLength = S.length; var fillStr = fillString === undefined ? ' ' : String(fillString); var intMaxLength = toLength(maxLength); if (intMaxLength <= stringLength || fillStr == '') return S; var fillLen = intMaxLength - stringLength; var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); return left ? stringFiller + S : S + stringFiller; }; /***/ }), /* 141 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toInteger = __w_extracthighlights_require__(31); var defined = __w_extracthighlights_require__(38); module.exports = function repeat(count) { var str = String(defined(this)); var res = ''; var n = toInteger(count); if (n < 0 || n == Infinity) throw RangeError("Count can't be negative"); for (; n > 0; (n >>>= 1) && (str += str)) { if (n & 1) res += str; } return res; }; /***/ }), /* 142 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(143); module.exports = __w_extracthighlights_require__(14).String.padEnd; /***/ }), /* 143 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var $pad = __w_extracthighlights_require__(140); var userAgent = __w_extracthighlights_require__(100); $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { padEnd: function padEnd(maxLength) { return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); } }); /***/ }), /* 144 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(145); module.exports = __w_extracthighlights_require__(14).Object.values; /***/ }), /* 145 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(12); var $values = __w_extracthighlights_require__(146)(false); $export($export.S, 'Object', { values: function values(it) { return $values(it); } }); /***/ }), /* 146 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var getKeys = __w_extracthighlights_require__(59); var toIObject = __w_extracthighlights_require__(47); var isEnum = __w_extracthighlights_require__(78).f; module.exports = function (isEntries) { return function (it) { var O = toIObject(it); var keys = getKeys(O); var length = keys.length; var i = 0; var result = []; var key; while (length > i) { if (isEnum.call(O, key = keys[i++])) { result.push(isEntries ? [key, O[key]] : O[key]); } } return result; }; }; /***/ }), /* 147 */ /***/ (function(module, exports, __w_extracthighlights_require__) { { var isReadableStreamSupported = false; if (typeof ReadableStream !== 'undefined') { try { new ReadableStream({ start: function start(controller) { controller.close(); } }); isReadableStreamSupported = true; } catch (e) {} } if (isReadableStreamSupported) { exports.ReadableStream = ReadableStream; } else { exports.ReadableStream = __w_extracthighlights_require__(148).ReadableStream; } } /***/ }), /* 148 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); } (function (e, a) { for (var i in a) { e[i] = a[i]; } })(exports, function (modules) { var installedModules = {}; function __w_extracthighlights_require__(moduleId) { if (installedModules[moduleId]) return installedModules[moduleId].exports; var module = installedModules[moduleId] = { i: moduleId, l: false, exports: {} }; modules[moduleId].call(module.exports, module, module.exports, __w_extracthighlights_require__); module.l = true; return module.exports; } __w_extracthighlights_require__.m = modules; __w_extracthighlights_require__.c = installedModules; __w_extracthighlights_require__.i = function (value) { return value; }; __w_extracthighlights_require__.d = function (exports, name, getter) { if (!__w_extracthighlights_require__.o(exports, name)) { Object.defineProperty(exports, name, { configurable: false, enumerable: true, get: getter }); } }; __w_extracthighlights_require__.n = function (module) { var getter = module && module.__esModule ? function getDefault() { return module['default']; } : function getModuleExports() { return module; }; __w_extracthighlights_require__.d(getter, 'a', getter); return getter; }; __w_extracthighlights_require__.o = function (object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; __w_extracthighlights_require__.p = ""; return __w_extracthighlights_require__(__w_extracthighlights_require__.s = 7); }([function (module, exports, __w_extracthighlights_require__) { var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { return _typeof2(obj); } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj); }; var _require = __w_extracthighlights_require__(1), assert = _require.assert; function IsPropertyKey(argument) { return typeof argument === 'string' || (typeof argument === 'undefined' ? 'undefined' : _typeof(argument)) === 'symbol'; } exports.typeIsObject = function (x) { return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null || typeof x === 'function'; }; exports.createDataProperty = function (o, p, v) { assert(exports.typeIsObject(o)); Object.defineProperty(o, p, { value: v, writable: true, enumerable: true, configurable: true }); }; exports.createArrayFromList = function (elements) { return elements.slice(); }; exports.ArrayBufferCopy = function (dest, destOffset, src, srcOffset, n) { new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset); }; exports.CreateIterResultObject = function (value, done) { assert(typeof done === 'boolean'); var obj = {}; Object.defineProperty(obj, 'value', { value: value, enumerable: true, writable: true, configurable: true }); Object.defineProperty(obj, 'done', { value: done, enumerable: true, writable: true, configurable: true }); return obj; }; exports.IsFiniteNonNegativeNumber = function (v) { if (Number.isNaN(v)) { return false; } if (v === Infinity) { return false; } if (v < 0) { return false; } return true; }; function Call(F, V, args) { if (typeof F !== 'function') { throw new TypeError('Argument is not a function'); } return Function.prototype.apply.call(F, V, args); } exports.InvokeOrNoop = function (O, P, args) { assert(O !== undefined); assert(IsPropertyKey(P)); assert(Array.isArray(args)); var method = O[P]; if (method === undefined) { return undefined; } return Call(method, O, args); }; exports.PromiseInvokeOrNoop = function (O, P, args) { assert(O !== undefined); assert(IsPropertyKey(P)); assert(Array.isArray(args)); try { return Promise.resolve(exports.InvokeOrNoop(O, P, args)); } catch (returnValueE) { return Promise.reject(returnValueE); } }; exports.PromiseInvokeOrPerformFallback = function (O, P, args, F, argsF) { assert(O !== undefined); assert(IsPropertyKey(P)); assert(Array.isArray(args)); assert(Array.isArray(argsF)); var method = void 0; try { method = O[P]; } catch (methodE) { return Promise.reject(methodE); } if (method === undefined) { return F.apply(null, argsF); } try { return Promise.resolve(Call(method, O, args)); } catch (e) { return Promise.reject(e); } }; exports.TransferArrayBuffer = function (O) { return O.slice(); }; exports.ValidateAndNormalizeHighWaterMark = function (highWaterMark) { highWaterMark = Number(highWaterMark); if (Number.isNaN(highWaterMark) || highWaterMark < 0) { throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN'); } return highWaterMark; }; exports.ValidateAndNormalizeQueuingStrategy = function (size, highWaterMark) { if (size !== undefined && typeof size !== 'function') { throw new TypeError('size property of a queuing strategy must be a function'); } highWaterMark = exports.ValidateAndNormalizeHighWaterMark(highWaterMark); return { size: size, highWaterMark: highWaterMark }; }; }, function (module, exports, __w_extracthighlights_require__) { function rethrowAssertionErrorRejection(e) { if (e && e.constructor === AssertionError) { setTimeout(function () { throw e; }, 0); } } function AssertionError(message) { this.name = 'AssertionError'; this.message = message || ''; this.stack = new Error().stack; } AssertionError.prototype = Object.create(Error.prototype); AssertionError.prototype.constructor = AssertionError; function assert(value, message) { if (!value) { throw new AssertionError(message); } } module.exports = { rethrowAssertionErrorRejection: rethrowAssertionErrorRejection, AssertionError: AssertionError, assert: assert }; }, function (module, exports, __w_extracthighlights_require__) { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var _require = __w_extracthighlights_require__(0), InvokeOrNoop = _require.InvokeOrNoop, PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, typeIsObject = _require.typeIsObject; var _require2 = __w_extracthighlights_require__(1), assert = _require2.assert, rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection; var _require3 = __w_extracthighlights_require__(3), DequeueValue = _require3.DequeueValue, EnqueueValueWithSize = _require3.EnqueueValueWithSize, PeekQueueValue = _require3.PeekQueueValue, ResetQueue = _require3.ResetQueue; var WritableStream = function () { function WritableStream() { var underlyingSink = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, size = _ref.size, _ref$highWaterMark = _ref.highWaterMark, highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark; _classCallCheck(this, WritableStream); this._state = 'writable'; this._storedError = undefined; this._writer = undefined; this._writableStreamController = undefined; this._writeRequests = []; this._inFlightWriteRequest = undefined; this._closeRequest = undefined; this._inFlightCloseRequest = undefined; this._pendingAbortRequest = undefined; this._backpressure = false; var type = underlyingSink.type; if (type !== undefined) { throw new RangeError('Invalid type is specified'); } this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark); this._writableStreamController.__startSteps(); } _createClass(WritableStream, [{ key: 'abort', value: function abort(reason) { if (IsWritableStream(this) === false) { return Promise.reject(streamBrandCheckException('abort')); } if (IsWritableStreamLocked(this) === true) { return Promise.reject(new TypeError('Cannot abort a stream that already has a writer')); } return WritableStreamAbort(this, reason); } }, { key: 'getWriter', value: function getWriter() { if (IsWritableStream(this) === false) { throw streamBrandCheckException('getWriter'); } return AcquireWritableStreamDefaultWriter(this); } }, { key: 'locked', get: function get() { if (IsWritableStream(this) === false) { throw streamBrandCheckException('locked'); } return IsWritableStreamLocked(this); } }]); return WritableStream; }(); module.exports = { AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter, IsWritableStream: IsWritableStream, IsWritableStreamLocked: IsWritableStreamLocked, WritableStream: WritableStream, WritableStreamAbort: WritableStreamAbort, WritableStreamDefaultControllerError: WritableStreamDefaultControllerError, WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation, WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease, WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite, WritableStreamCloseQueuedOrInFlight: WritableStreamCloseQueuedOrInFlight }; function AcquireWritableStreamDefaultWriter(stream) { return new WritableStreamDefaultWriter(stream); } function IsWritableStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) { return false; } return true; } function IsWritableStreamLocked(stream) { assert(IsWritableStream(stream) === true, 'IsWritableStreamLocked should only be used on known writable streams'); if (stream._writer === undefined) { return false; } return true; } function WritableStreamAbort(stream, reason) { var state = stream._state; if (state === 'closed') { return Promise.resolve(undefined); } if (state === 'errored') { return Promise.reject(stream._storedError); } var error = new TypeError('Requested to abort'); if (stream._pendingAbortRequest !== undefined) { return Promise.reject(error); } assert(state === 'writable' || state === 'erroring', 'state must be writable or erroring'); var wasAlreadyErroring = false; if (state === 'erroring') { wasAlreadyErroring = true; reason = undefined; } var promise = new Promise(function (resolve, reject) { stream._pendingAbortRequest = { _resolve: resolve, _reject: reject, _reason: reason, _wasAlreadyErroring: wasAlreadyErroring }; }); if (wasAlreadyErroring === false) { WritableStreamStartErroring(stream, error); } return promise; } function WritableStreamAddWriteRequest(stream) { assert(IsWritableStreamLocked(stream) === true); assert(stream._state === 'writable'); var promise = new Promise(function (resolve, reject) { var writeRequest = { _resolve: resolve, _reject: reject }; stream._writeRequests.push(writeRequest); }); return promise; } function WritableStreamDealWithRejection(stream, error) { var state = stream._state; if (state === 'writable') { WritableStreamStartErroring(stream, error); return; } assert(state === 'erroring'); WritableStreamFinishErroring(stream); } function WritableStreamStartErroring(stream, reason) { assert(stream._storedError === undefined, 'stream._storedError === undefined'); assert(stream._state === 'writable', 'state must be writable'); var controller = stream._writableStreamController; assert(controller !== undefined, 'controller must not be undefined'); stream._state = 'erroring'; stream._storedError = reason; var writer = stream._writer; if (writer !== undefined) { WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); } if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) { WritableStreamFinishErroring(stream); } } function WritableStreamFinishErroring(stream) { assert(stream._state === 'erroring', 'stream._state === erroring'); assert(WritableStreamHasOperationMarkedInFlight(stream) === false, 'WritableStreamHasOperationMarkedInFlight(stream) === false'); stream._state = 'errored'; stream._writableStreamController.__errorSteps(); var storedError = stream._storedError; for (var i = 0; i < stream._writeRequests.length; i++) { var writeRequest = stream._writeRequests[i]; writeRequest._reject(storedError); } stream._writeRequests = []; if (stream._pendingAbortRequest === undefined) { WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var abortRequest = stream._pendingAbortRequest; stream._pendingAbortRequest = undefined; if (abortRequest._wasAlreadyErroring === true) { abortRequest._reject(storedError); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var promise = stream._writableStreamController.__abortSteps(abortRequest._reason); promise.then(function () { abortRequest._resolve(); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }, function (reason) { abortRequest._reject(reason); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }); } function WritableStreamFinishInFlightWrite(stream) { assert(stream._inFlightWriteRequest !== undefined); stream._inFlightWriteRequest._resolve(undefined); stream._inFlightWriteRequest = undefined; } function WritableStreamFinishInFlightWriteWithError(stream, error) { assert(stream._inFlightWriteRequest !== undefined); stream._inFlightWriteRequest._reject(error); stream._inFlightWriteRequest = undefined; assert(stream._state === 'writable' || stream._state === 'erroring'); WritableStreamDealWithRejection(stream, error); } function WritableStreamFinishInFlightClose(stream) { assert(stream._inFlightCloseRequest !== undefined); stream._inFlightCloseRequest._resolve(undefined); stream._inFlightCloseRequest = undefined; var state = stream._state; assert(state === 'writable' || state === 'erroring'); if (state === 'erroring') { stream._storedError = undefined; if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._resolve(); stream._pendingAbortRequest = undefined; } } stream._state = 'closed'; var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseResolve(writer); } assert(stream._pendingAbortRequest === undefined, 'stream._pendingAbortRequest === undefined'); assert(stream._storedError === undefined, 'stream._storedError === undefined'); } function WritableStreamFinishInFlightCloseWithError(stream, error) { assert(stream._inFlightCloseRequest !== undefined); stream._inFlightCloseRequest._reject(error); stream._inFlightCloseRequest = undefined; assert(stream._state === 'writable' || stream._state === 'erroring'); if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._reject(error); stream._pendingAbortRequest = undefined; } WritableStreamDealWithRejection(stream, error); } function WritableStreamCloseQueuedOrInFlight(stream) { if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamHasOperationMarkedInFlight(stream) { if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamMarkCloseRequestInFlight(stream) { assert(stream._inFlightCloseRequest === undefined); assert(stream._closeRequest !== undefined); stream._inFlightCloseRequest = stream._closeRequest; stream._closeRequest = undefined; } function WritableStreamMarkFirstWriteRequestInFlight(stream) { assert(stream._inFlightWriteRequest === undefined, 'there must be no pending write request'); assert(stream._writeRequests.length !== 0, 'writeRequests must not be empty'); stream._inFlightWriteRequest = stream._writeRequests.shift(); } function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { assert(stream._state === 'errored', '_stream_.[[state]] is `"errored"`'); if (stream._closeRequest !== undefined) { assert(stream._inFlightCloseRequest === undefined); stream._closeRequest._reject(stream._storedError); stream._closeRequest = undefined; } var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseReject(writer, stream._storedError); writer._closedPromise.catch(function () {}); } } function WritableStreamUpdateBackpressure(stream, backpressure) { assert(stream._state === 'writable'); assert(WritableStreamCloseQueuedOrInFlight(stream) === false); var writer = stream._writer; if (writer !== undefined && backpressure !== stream._backpressure) { if (backpressure === true) { defaultWriterReadyPromiseReset(writer); } else { assert(backpressure === false); defaultWriterReadyPromiseResolve(writer); } } stream._backpressure = backpressure; } var WritableStreamDefaultWriter = function () { function WritableStreamDefaultWriter(stream) { _classCallCheck(this, WritableStreamDefaultWriter); if (IsWritableStream(stream) === false) { throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance'); } if (IsWritableStreamLocked(stream) === true) { throw new TypeError('This stream has already been locked for exclusive writing by another writer'); } this._ownerWritableStream = stream; stream._writer = this; var state = stream._state; if (state === 'writable') { if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) { defaultWriterReadyPromiseInitialize(this); } else { defaultWriterReadyPromiseInitializeAsResolved(this); } defaultWriterClosedPromiseInitialize(this); } else if (state === 'erroring') { defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError); this._readyPromise.catch(function () {}); defaultWriterClosedPromiseInitialize(this); } else if (state === 'closed') { defaultWriterReadyPromiseInitializeAsResolved(this); defaultWriterClosedPromiseInitializeAsResolved(this); } else { assert(state === 'errored', 'state must be errored'); var storedError = stream._storedError; defaultWriterReadyPromiseInitializeAsRejected(this, storedError); this._readyPromise.catch(function () {}); defaultWriterClosedPromiseInitializeAsRejected(this, storedError); this._closedPromise.catch(function () {}); } } _createClass(WritableStreamDefaultWriter, [{ key: 'abort', value: function abort(reason) { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('abort')); } if (this._ownerWritableStream === undefined) { return Promise.reject(defaultWriterLockException('abort')); } return WritableStreamDefaultWriterAbort(this, reason); } }, { key: 'close', value: function close() { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('close')); } var stream = this._ownerWritableStream; if (stream === undefined) { return Promise.reject(defaultWriterLockException('close')); } if (WritableStreamCloseQueuedOrInFlight(stream) === true) { return Promise.reject(new TypeError('cannot close an already-closing stream')); } return WritableStreamDefaultWriterClose(this); } }, { key: 'releaseLock', value: function releaseLock() { if (IsWritableStreamDefaultWriter(this) === false) { throw defaultWriterBrandCheckException('releaseLock'); } var stream = this._ownerWritableStream; if (stream === undefined) { return; } assert(stream._writer !== undefined); WritableStreamDefaultWriterRelease(this); } }, { key: 'write', value: function write(chunk) { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('write')); } if (this._ownerWritableStream === undefined) { return Promise.reject(defaultWriterLockException('write to')); } return WritableStreamDefaultWriterWrite(this, chunk); } }, { key: 'closed', get: function get() { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('closed')); } return this._closedPromise; } }, { key: 'desiredSize', get: function get() { if (IsWritableStreamDefaultWriter(this) === false) { throw defaultWriterBrandCheckException('desiredSize'); } if (this._ownerWritableStream === undefined) { throw defaultWriterLockException('desiredSize'); } return WritableStreamDefaultWriterGetDesiredSize(this); } }, { key: 'ready', get: function get() { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('ready')); } return this._readyPromise; } }]); return WritableStreamDefaultWriter; }(); function IsWritableStreamDefaultWriter(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) { return false; } return true; } function WritableStreamDefaultWriterAbort(writer, reason) { var stream = writer._ownerWritableStream; assert(stream !== undefined); return WritableStreamAbort(stream, reason); } function WritableStreamDefaultWriterClose(writer) { var stream = writer._ownerWritableStream; assert(stream !== undefined); var state = stream._state; if (state === 'closed' || state === 'errored') { return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be closed')); } assert(state === 'writable' || state === 'erroring'); assert(WritableStreamCloseQueuedOrInFlight(stream) === false); var promise = new Promise(function (resolve, reject) { var closeRequest = { _resolve: resolve, _reject: reject }; stream._closeRequest = closeRequest; }); if (stream._backpressure === true && state === 'writable') { defaultWriterReadyPromiseResolve(writer); } WritableStreamDefaultControllerClose(stream._writableStreamController); return promise; } function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { var stream = writer._ownerWritableStream; assert(stream !== undefined); var state = stream._state; if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { return Promise.resolve(); } if (state === 'errored') { return Promise.reject(stream._storedError); } assert(state === 'writable' || state === 'erroring'); return WritableStreamDefaultWriterClose(writer); } function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) { if (writer._closedPromiseState === 'pending') { defaultWriterClosedPromiseReject(writer, error); } else { defaultWriterClosedPromiseResetToRejected(writer, error); } writer._closedPromise.catch(function () {}); } function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) { if (writer._readyPromiseState === 'pending') { defaultWriterReadyPromiseReject(writer, error); } else { defaultWriterReadyPromiseResetToRejected(writer, error); } writer._readyPromise.catch(function () {}); } function WritableStreamDefaultWriterGetDesiredSize(writer) { var stream = writer._ownerWritableStream; var state = stream._state; if (state === 'errored' || state === 'erroring') { return null; } if (state === 'closed') { return 0; } return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController); } function WritableStreamDefaultWriterRelease(writer) { var stream = writer._ownerWritableStream; assert(stream !== undefined); assert(stream._writer === writer); var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\'s closedness'); WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); stream._writer = undefined; writer._ownerWritableStream = undefined; } function WritableStreamDefaultWriterWrite(writer, chunk) { var stream = writer._ownerWritableStream; assert(stream !== undefined); var controller = stream._writableStreamController; var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); if (stream !== writer._ownerWritableStream) { return Promise.reject(defaultWriterLockException('write to')); } var state = stream._state; if (state === 'errored') { return Promise.reject(stream._storedError); } if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { return Promise.reject(new TypeError('The stream is closing or closed and cannot be written to')); } if (state === 'erroring') { return Promise.reject(stream._storedError); } assert(state === 'writable'); var promise = WritableStreamAddWriteRequest(stream); WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); return promise; } var WritableStreamDefaultController = function () { function WritableStreamDefaultController(stream, underlyingSink, size, highWaterMark) { _classCallCheck(this, WritableStreamDefaultController); if (IsWritableStream(stream) === false) { throw new TypeError('WritableStreamDefaultController can only be constructed with a WritableStream instance'); } if (stream._writableStreamController !== undefined) { throw new TypeError('WritableStreamDefaultController instances can only be created by the WritableStream constructor'); } this._controlledWritableStream = stream; this._underlyingSink = underlyingSink; this._queue = undefined; this._queueTotalSize = undefined; ResetQueue(this); this._started = false; var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); this._strategySize = normalizedStrategy.size; this._strategyHWM = normalizedStrategy.highWaterMark; var backpressure = WritableStreamDefaultControllerGetBackpressure(this); WritableStreamUpdateBackpressure(stream, backpressure); } _createClass(WritableStreamDefaultController, [{ key: 'error', value: function error(e) { if (IsWritableStreamDefaultController(this) === false) { throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController'); } var state = this._controlledWritableStream._state; if (state !== 'writable') { return; } WritableStreamDefaultControllerError(this, e); } }, { key: '__abortSteps', value: function __abortSteps(reason) { return PromiseInvokeOrNoop(this._underlyingSink, 'abort', [reason]); } }, { key: '__errorSteps', value: function __errorSteps() { ResetQueue(this); } }, { key: '__startSteps', value: function __startSteps() { var _this = this; var startResult = InvokeOrNoop(this._underlyingSink, 'start', [this]); var stream = this._controlledWritableStream; Promise.resolve(startResult).then(function () { assert(stream._state === 'writable' || stream._state === 'erroring'); _this._started = true; WritableStreamDefaultControllerAdvanceQueueIfNeeded(_this); }, function (r) { assert(stream._state === 'writable' || stream._state === 'erroring'); _this._started = true; WritableStreamDealWithRejection(stream, r); }).catch(rethrowAssertionErrorRejection); } }]); return WritableStreamDefaultController; }(); function WritableStreamDefaultControllerClose(controller) { EnqueueValueWithSize(controller, 'close', 0); WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { var strategySize = controller._strategySize; if (strategySize === undefined) { return 1; } try { return strategySize(chunk); } catch (chunkSizeE) { WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); return 1; } } function WritableStreamDefaultControllerGetDesiredSize(controller) { return controller._strategyHWM - controller._queueTotalSize; } function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { var writeRecord = { chunk: chunk }; try { EnqueueValueWithSize(controller, writeRecord, chunkSize); } catch (enqueueE) { WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); return; } var stream = controller._controlledWritableStream; if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function IsWritableStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSink')) { return false; } return true; } function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) { var stream = controller._controlledWritableStream; if (controller._started === false) { return; } if (stream._inFlightWriteRequest !== undefined) { return; } var state = stream._state; if (state === 'closed' || state === 'errored') { return; } if (state === 'erroring') { WritableStreamFinishErroring(stream); return; } if (controller._queue.length === 0) { return; } var writeRecord = PeekQueueValue(controller); if (writeRecord === 'close') { WritableStreamDefaultControllerProcessClose(controller); } else { WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk); } } function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { if (controller._controlledWritableStream._state === 'writable') { WritableStreamDefaultControllerError(controller, error); } } function WritableStreamDefaultControllerProcessClose(controller) { var stream = controller._controlledWritableStream; WritableStreamMarkCloseRequestInFlight(stream); DequeueValue(controller); assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued'); var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', []); sinkClosePromise.then(function () { WritableStreamFinishInFlightClose(stream); }, function (reason) { WritableStreamFinishInFlightCloseWithError(stream, reason); }).catch(rethrowAssertionErrorRejection); } function WritableStreamDefaultControllerProcessWrite(controller, chunk) { var stream = controller._controlledWritableStream; WritableStreamMarkFirstWriteRequestInFlight(stream); var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]); sinkWritePromise.then(function () { WritableStreamFinishInFlightWrite(stream); var state = stream._state; assert(state === 'writable' || state === 'erroring'); DequeueValue(controller); if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, function (reason) { WritableStreamFinishInFlightWriteWithError(stream, reason); }).catch(rethrowAssertionErrorRejection); } function WritableStreamDefaultControllerGetBackpressure(controller) { var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller); return desiredSize <= 0; } function WritableStreamDefaultControllerError(controller, error) { var stream = controller._controlledWritableStream; assert(stream._state === 'writable'); WritableStreamStartErroring(stream, error); } function streamBrandCheckException(name) { return new TypeError('WritableStream.prototype.' + name + ' can only be used on a WritableStream'); } function defaultWriterBrandCheckException(name) { return new TypeError('WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter'); } function defaultWriterLockException(name) { return new TypeError('Cannot ' + name + ' a stream using a released writer'); } function defaultWriterClosedPromiseInitialize(writer) { writer._closedPromise = new Promise(function (resolve, reject) { writer._closedPromise_resolve = resolve; writer._closedPromise_reject = reject; writer._closedPromiseState = 'pending'; }); } function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) { writer._closedPromise = Promise.reject(reason); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseInitializeAsResolved(writer) { writer._closedPromise = Promise.resolve(undefined); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'resolved'; } function defaultWriterClosedPromiseReject(writer, reason) { assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); writer._closedPromise_reject(reason); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseResetToRejected(writer, reason) { assert(writer._closedPromise_resolve === undefined, 'writer._closedPromise_resolve === undefined'); assert(writer._closedPromise_reject === undefined, 'writer._closedPromise_reject === undefined'); assert(writer._closedPromiseState !== 'pending', 'writer._closedPromiseState is not pending'); writer._closedPromise = Promise.reject(reason); writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseResolve(writer) { assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); writer._closedPromise_resolve(undefined); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'resolved'; } function defaultWriterReadyPromiseInitialize(writer) { writer._readyPromise = new Promise(function (resolve, reject) { writer._readyPromise_resolve = resolve; writer._readyPromise_reject = reject; }); writer._readyPromiseState = 'pending'; } function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) { writer._readyPromise = Promise.reject(reason); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseInitializeAsResolved(writer) { writer._readyPromise = Promise.resolve(undefined); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'fulfilled'; } function defaultWriterReadyPromiseReject(writer, reason) { assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); writer._readyPromise_reject(reason); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseReset(writer) { assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); writer._readyPromise = new Promise(function (resolve, reject) { writer._readyPromise_resolve = resolve; writer._readyPromise_reject = reject; }); writer._readyPromiseState = 'pending'; } function defaultWriterReadyPromiseResetToRejected(writer, reason) { assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); writer._readyPromise = Promise.reject(reason); writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseResolve(writer) { assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); writer._readyPromise_resolve(undefined); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'fulfilled'; } }, function (module, exports, __w_extracthighlights_require__) { var _require = __w_extracthighlights_require__(0), IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber; var _require2 = __w_extracthighlights_require__(1), assert = _require2.assert; exports.DequeueValue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); assert(container._queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.'); var pair = container._queue.shift(); container._queueTotalSize -= pair.size; if (container._queueTotalSize < 0) { container._queueTotalSize = 0; } return pair.value; }; exports.EnqueueValueWithSize = function (container, value, size) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].'); size = Number(size); if (!IsFiniteNonNegativeNumber(size)) { throw new RangeError('Size must be a finite, non-NaN, non-negative number.'); } container._queue.push({ value: value, size: size }); container._queueTotalSize += size; }; exports.PeekQueueValue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); assert(container._queue.length > 0, 'Spec-level failure: should never peek at an empty queue.'); var pair = container._queue[0]; return pair.value; }; exports.ResetQueue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].'); container._queue = []; container._queueTotalSize = 0; }; }, function (module, exports, __w_extracthighlights_require__) { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var _require = __w_extracthighlights_require__(0), ArrayBufferCopy = _require.ArrayBufferCopy, CreateIterResultObject = _require.CreateIterResultObject, IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber, InvokeOrNoop = _require.InvokeOrNoop, PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, TransferArrayBuffer = _require.TransferArrayBuffer, ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark; var _require2 = __w_extracthighlights_require__(0), createArrayFromList = _require2.createArrayFromList, createDataProperty = _require2.createDataProperty, typeIsObject = _require2.typeIsObject; var _require3 = __w_extracthighlights_require__(1), assert = _require3.assert, rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection; var _require4 = __w_extracthighlights_require__(3), DequeueValue = _require4.DequeueValue, EnqueueValueWithSize = _require4.EnqueueValueWithSize, ResetQueue = _require4.ResetQueue; var _require5 = __w_extracthighlights_require__(2), AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter, IsWritableStream = _require5.IsWritableStream, IsWritableStreamLocked = _require5.IsWritableStreamLocked, WritableStreamAbort = _require5.WritableStreamAbort, WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation, WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease, WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite, WritableStreamCloseQueuedOrInFlight = _require5.WritableStreamCloseQueuedOrInFlight; var ReadableStream = function () { function ReadableStream() { var underlyingSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, size = _ref.size, highWaterMark = _ref.highWaterMark; _classCallCheck(this, ReadableStream); this._state = 'readable'; this._reader = undefined; this._storedError = undefined; this._disturbed = false; this._readableStreamController = undefined; var type = underlyingSource.type; var typeString = String(type); if (typeString === 'bytes') { if (highWaterMark === undefined) { highWaterMark = 0; } this._readableStreamController = new ReadableByteStreamController(this, underlyingSource, highWaterMark); } else if (type === undefined) { if (highWaterMark === undefined) { highWaterMark = 1; } this._readableStreamController = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark); } else { throw new RangeError('Invalid type is specified'); } } _createClass(ReadableStream, [{ key: 'cancel', value: function cancel(reason) { if (IsReadableStream(this) === false) { return Promise.reject(streamBrandCheckException('cancel')); } if (IsReadableStreamLocked(this) === true) { return Promise.reject(new TypeError('Cannot cancel a stream that already has a reader')); } return ReadableStreamCancel(this, reason); } }, { key: 'getReader', value: function getReader() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, mode = _ref2.mode; if (IsReadableStream(this) === false) { throw streamBrandCheckException('getReader'); } if (mode === undefined) { return AcquireReadableStreamDefaultReader(this); } mode = String(mode); if (mode === 'byob') { return AcquireReadableStreamBYOBReader(this); } throw new RangeError('Invalid mode is specified'); } }, { key: 'pipeThrough', value: function pipeThrough(_ref3, options) { var writable = _ref3.writable, readable = _ref3.readable; var promise = this.pipeTo(writable, options); ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise); return readable; } }, { key: 'pipeTo', value: function pipeTo(dest) { var _this = this; var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, preventClose = _ref4.preventClose, preventAbort = _ref4.preventAbort, preventCancel = _ref4.preventCancel; if (IsReadableStream(this) === false) { return Promise.reject(streamBrandCheckException('pipeTo')); } if (IsWritableStream(dest) === false) { return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo\'s first argument must be a WritableStream')); } preventClose = Boolean(preventClose); preventAbort = Boolean(preventAbort); preventCancel = Boolean(preventCancel); if (IsReadableStreamLocked(this) === true) { return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')); } if (IsWritableStreamLocked(dest) === true) { return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')); } var reader = AcquireReadableStreamDefaultReader(this); var writer = AcquireWritableStreamDefaultWriter(dest); var shuttingDown = false; var currentWrite = Promise.resolve(); return new Promise(function (resolve, reject) { function pipeLoop() { currentWrite = Promise.resolve(); if (shuttingDown === true) { return Promise.resolve(); } return writer._readyPromise.then(function () { return ReadableStreamDefaultReaderRead(reader).then(function (_ref5) { var value = _ref5.value, done = _ref5.done; if (done === true) { return; } currentWrite = WritableStreamDefaultWriterWrite(writer, value).catch(function () {}); }); }).then(pipeLoop); } isOrBecomesErrored(_this, reader._closedPromise, function (storedError) { if (preventAbort === false) { shutdownWithAction(function () { return WritableStreamAbort(dest, storedError); }, true, storedError); } else { shutdown(true, storedError); } }); isOrBecomesErrored(dest, writer._closedPromise, function (storedError) { if (preventCancel === false) { shutdownWithAction(function () { return ReadableStreamCancel(_this, storedError); }, true, storedError); } else { shutdown(true, storedError); } }); isOrBecomesClosed(_this, reader._closedPromise, function () { if (preventClose === false) { shutdownWithAction(function () { return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); }); } else { shutdown(); } }); if (WritableStreamCloseQueuedOrInFlight(dest) === true || dest._state === 'closed') { var destClosed = new TypeError('the destination writable stream closed before all data could be piped to it'); if (preventCancel === false) { shutdownWithAction(function () { return ReadableStreamCancel(_this, destClosed); }, true, destClosed); } else { shutdown(true, destClosed); } } pipeLoop().catch(function (err) { currentWrite = Promise.resolve(); rethrowAssertionErrorRejection(err); }); function waitForWritesToFinish() { var oldCurrentWrite = currentWrite; return currentWrite.then(function () { return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; }); } function isOrBecomesErrored(stream, promise, action) { if (stream._state === 'errored') { action(stream._storedError); } else { promise.catch(action).catch(rethrowAssertionErrorRejection); } } function isOrBecomesClosed(stream, promise, action) { if (stream._state === 'closed') { action(); } else { promise.then(action).catch(rethrowAssertionErrorRejection); } } function shutdownWithAction(action, originalIsError, originalError) { if (shuttingDown === true) { return; } shuttingDown = true; if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) { waitForWritesToFinish().then(doTheRest); } else { doTheRest(); } function doTheRest() { action().then(function () { return finalize(originalIsError, originalError); }, function (newError) { return finalize(true, newError); }).catch(rethrowAssertionErrorRejection); } } function shutdown(isError, error) { if (shuttingDown === true) { return; } shuttingDown = true; if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) { waitForWritesToFinish().then(function () { return finalize(isError, error); }).catch(rethrowAssertionErrorRejection); } else { finalize(isError, error); } } function finalize(isError, error) { WritableStreamDefaultWriterRelease(writer); ReadableStreamReaderGenericRelease(reader); if (isError) { reject(error); } else { resolve(undefined); } } }); } }, { key: 'tee', value: function tee() { if (IsReadableStream(this) === false) { throw streamBrandCheckException('tee'); } var branches = ReadableStreamTee(this, false); return createArrayFromList(branches); } }, { key: 'locked', get: function get() { if (IsReadableStream(this) === false) { throw streamBrandCheckException('locked'); } return IsReadableStreamLocked(this); } }]); return ReadableStream; }(); module.exports = { ReadableStream: ReadableStream, IsReadableStreamDisturbed: IsReadableStreamDisturbed, ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose, ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue, ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError, ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize }; function AcquireReadableStreamBYOBReader(stream) { return new ReadableStreamBYOBReader(stream); } function AcquireReadableStreamDefaultReader(stream) { return new ReadableStreamDefaultReader(stream); } function IsReadableStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) { return false; } return true; } function IsReadableStreamDisturbed(stream) { assert(IsReadableStream(stream) === true, 'IsReadableStreamDisturbed should only be used on known readable streams'); return stream._disturbed; } function IsReadableStreamLocked(stream) { assert(IsReadableStream(stream) === true, 'IsReadableStreamLocked should only be used on known readable streams'); if (stream._reader === undefined) { return false; } return true; } function ReadableStreamTee(stream, cloneForBranch2) { assert(IsReadableStream(stream) === true); assert(typeof cloneForBranch2 === 'boolean'); var reader = AcquireReadableStreamDefaultReader(stream); var teeState = { closedOrErrored: false, canceled1: false, canceled2: false, reason1: undefined, reason2: undefined }; teeState.promise = new Promise(function (resolve) { teeState._resolve = resolve; }); var pull = create_ReadableStreamTeePullFunction(); pull._reader = reader; pull._teeState = teeState; pull._cloneForBranch2 = cloneForBranch2; var cancel1 = create_ReadableStreamTeeBranch1CancelFunction(); cancel1._stream = stream; cancel1._teeState = teeState; var cancel2 = create_ReadableStreamTeeBranch2CancelFunction(); cancel2._stream = stream; cancel2._teeState = teeState; var underlyingSource1 = Object.create(Object.prototype); createDataProperty(underlyingSource1, 'pull', pull); createDataProperty(underlyingSource1, 'cancel', cancel1); var branch1Stream = new ReadableStream(underlyingSource1); var underlyingSource2 = Object.create(Object.prototype); createDataProperty(underlyingSource2, 'pull', pull); createDataProperty(underlyingSource2, 'cancel', cancel2); var branch2Stream = new ReadableStream(underlyingSource2); pull._branch1 = branch1Stream._readableStreamController; pull._branch2 = branch2Stream._readableStreamController; reader._closedPromise.catch(function (r) { if (teeState.closedOrErrored === true) { return; } ReadableStreamDefaultControllerError(pull._branch1, r); ReadableStreamDefaultControllerError(pull._branch2, r); teeState.closedOrErrored = true; }); return [branch1Stream, branch2Stream]; } function create_ReadableStreamTeePullFunction() { function f() { var reader = f._reader, branch1 = f._branch1, branch2 = f._branch2, teeState = f._teeState; return ReadableStreamDefaultReaderRead(reader).then(function (result) { assert(typeIsObject(result)); var value = result.value; var done = result.done; assert(typeof done === 'boolean'); if (done === true && teeState.closedOrErrored === false) { if (teeState.canceled1 === false) { ReadableStreamDefaultControllerClose(branch1); } if (teeState.canceled2 === false) { ReadableStreamDefaultControllerClose(branch2); } teeState.closedOrErrored = true; } if (teeState.closedOrErrored === true) { return; } var value1 = value; var value2 = value; if (teeState.canceled1 === false) { ReadableStreamDefaultControllerEnqueue(branch1, value1); } if (teeState.canceled2 === false) { ReadableStreamDefaultControllerEnqueue(branch2, value2); } }); } return f; } function create_ReadableStreamTeeBranch1CancelFunction() { function f(reason) { var stream = f._stream, teeState = f._teeState; teeState.canceled1 = true; teeState.reason1 = reason; if (teeState.canceled2 === true) { var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]); var cancelResult = ReadableStreamCancel(stream, compositeReason); teeState._resolve(cancelResult); } return teeState.promise; } return f; } function create_ReadableStreamTeeBranch2CancelFunction() { function f(reason) { var stream = f._stream, teeState = f._teeState; teeState.canceled2 = true; teeState.reason2 = reason; if (teeState.canceled1 === true) { var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]); var cancelResult = ReadableStreamCancel(stream, compositeReason); teeState._resolve(cancelResult); } return teeState.promise; } return f; } function ReadableStreamAddReadIntoRequest(stream) { assert(IsReadableStreamBYOBReader(stream._reader) === true); assert(stream._state === 'readable' || stream._state === 'closed'); var promise = new Promise(function (resolve, reject) { var readIntoRequest = { _resolve: resolve, _reject: reject }; stream._reader._readIntoRequests.push(readIntoRequest); }); return promise; } function ReadableStreamAddReadRequest(stream) { assert(IsReadableStreamDefaultReader(stream._reader) === true); assert(stream._state === 'readable'); var promise = new Promise(function (resolve, reject) { var readRequest = { _resolve: resolve, _reject: reject }; stream._reader._readRequests.push(readRequest); }); return promise; } function ReadableStreamCancel(stream, reason) { stream._disturbed = true; if (stream._state === 'closed') { return Promise.resolve(undefined); } if (stream._state === 'errored') { return Promise.reject(stream._storedError); } ReadableStreamClose(stream); var sourceCancelPromise = stream._readableStreamController.__cancelSteps(reason); return sourceCancelPromise.then(function () { return undefined; }); } function ReadableStreamClose(stream) { assert(stream._state === 'readable'); stream._state = 'closed'; var reader = stream._reader; if (reader === undefined) { return undefined; } if (IsReadableStreamDefaultReader(reader) === true) { for (var i = 0; i < reader._readRequests.length; i++) { var _resolve = reader._readRequests[i]._resolve; _resolve(CreateIterResultObject(undefined, true)); } reader._readRequests = []; } defaultReaderClosedPromiseResolve(reader); return undefined; } function ReadableStreamError(stream, e) { assert(IsReadableStream(stream) === true, 'stream must be ReadableStream'); assert(stream._state === 'readable', 'state must be readable'); stream._state = 'errored'; stream._storedError = e; var reader = stream._reader; if (reader === undefined) { return undefined; } if (IsReadableStreamDefaultReader(reader) === true) { for (var i = 0; i < reader._readRequests.length; i++) { var readRequest = reader._readRequests[i]; readRequest._reject(e); } reader._readRequests = []; } else { assert(IsReadableStreamBYOBReader(reader), 'reader must be ReadableStreamBYOBReader'); for (var _i = 0; _i < reader._readIntoRequests.length; _i++) { var readIntoRequest = reader._readIntoRequests[_i]; readIntoRequest._reject(e); } reader._readIntoRequests = []; } defaultReaderClosedPromiseReject(reader, e); reader._closedPromise.catch(function () {}); } function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) { var reader = stream._reader; assert(reader._readIntoRequests.length > 0); var readIntoRequest = reader._readIntoRequests.shift(); readIntoRequest._resolve(CreateIterResultObject(chunk, done)); } function ReadableStreamFulfillReadRequest(stream, chunk, done) { var reader = stream._reader; assert(reader._readRequests.length > 0); var readRequest = reader._readRequests.shift(); readRequest._resolve(CreateIterResultObject(chunk, done)); } function ReadableStreamGetNumReadIntoRequests(stream) { return stream._reader._readIntoRequests.length; } function ReadableStreamGetNumReadRequests(stream) { return stream._reader._readRequests.length; } function ReadableStreamHasBYOBReader(stream) { var reader = stream._reader; if (reader === undefined) { return false; } if (IsReadableStreamBYOBReader(reader) === false) { return false; } return true; } function ReadableStreamHasDefaultReader(stream) { var reader = stream._reader; if (reader === undefined) { return false; } if (IsReadableStreamDefaultReader(reader) === false) { return false; } return true; } var ReadableStreamDefaultReader = function () { function ReadableStreamDefaultReader(stream) { _classCallCheck(this, ReadableStreamDefaultReader); if (IsReadableStream(stream) === false) { throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance'); } if (IsReadableStreamLocked(stream) === true) { throw new TypeError('This stream has already been locked for exclusive reading by another reader'); } ReadableStreamReaderGenericInitialize(this, stream); this._readRequests = []; } _createClass(ReadableStreamDefaultReader, [{ key: 'cancel', value: function cancel(reason) { if (IsReadableStreamDefaultReader(this) === false) { return Promise.reject(defaultReaderBrandCheckException('cancel')); } if (this._ownerReadableStream === undefined) { return Promise.reject(readerLockException('cancel')); } return ReadableStreamReaderGenericCancel(this, reason); } }, { key: 'read', value: function read() { if (IsReadableStreamDefaultReader(this) === false) { return Promise.reject(defaultReaderBrandCheckException('read')); } if (this._ownerReadableStream === undefined) { return Promise.reject(readerLockException('read from')); } return ReadableStreamDefaultReaderRead(this); } }, { key: 'releaseLock', value: function releaseLock() { if (IsReadableStreamDefaultReader(this) === false) { throw defaultReaderBrandCheckException('releaseLock'); } if (this._ownerReadableStream === undefined) { return; } if (this._readRequests.length > 0) { throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); } ReadableStreamReaderGenericRelease(this); } }, { key: 'closed', get: function get() { if (IsReadableStreamDefaultReader(this) === false) { return Promise.reject(defaultReaderBrandCheckException('closed')); } return this._closedPromise; } }]); return ReadableStreamDefaultReader; }(); var ReadableStreamBYOBReader = function () { function ReadableStreamBYOBReader(stream) { _classCallCheck(this, ReadableStreamBYOBReader); if (!IsReadableStream(stream)) { throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source'); } if (IsReadableByteStreamController(stream._readableStreamController) === false) { throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source'); } if (IsReadableStreamLocked(stream)) { throw new TypeError('This stream has already been locked for exclusive reading by another reader'); } ReadableStreamReaderGenericInitialize(this, stream); this._readIntoRequests = []; } _createClass(ReadableStreamBYOBReader, [{ key: 'cancel', value: function cancel(reason) { if (!IsReadableStreamBYOBReader(this)) { return Promise.reject(byobReaderBrandCheckException('cancel')); } if (this._ownerReadableStream === undefined) { return Promise.reject(readerLockException('cancel')); } return ReadableStreamReaderGenericCancel(this, reason); } }, { key: 'read', value: function read(view) { if (!IsReadableStreamBYOBReader(this)) { return Promise.reject(byobReaderBrandCheckException('read')); } if (this._ownerReadableStream === undefined) { return Promise.reject(readerLockException('read from')); } if (!ArrayBuffer.isView(view)) { return Promise.reject(new TypeError('view must be an array buffer view')); } if (view.byteLength === 0) { return Promise.reject(new TypeError('view must have non-zero byteLength')); } return ReadableStreamBYOBReaderRead(this, view); } }, { key: 'releaseLock', value: function releaseLock() { if (!IsReadableStreamBYOBReader(this)) { throw byobReaderBrandCheckException('releaseLock'); } if (this._ownerReadableStream === undefined) { return; } if (this._readIntoRequests.length > 0) { throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); } ReadableStreamReaderGenericRelease(this); } }, { key: 'closed', get: function get() { if (!IsReadableStreamBYOBReader(this)) { return Promise.reject(byobReaderBrandCheckException('closed')); } return this._closedPromise; } }]); return ReadableStreamBYOBReader; }(); function IsReadableStreamBYOBReader(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) { return false; } return true; } function IsReadableStreamDefaultReader(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) { return false; } return true; } function ReadableStreamReaderGenericInitialize(reader, stream) { reader._ownerReadableStream = stream; stream._reader = reader; if (stream._state === 'readable') { defaultReaderClosedPromiseInitialize(reader); } else if (stream._state === 'closed') { defaultReaderClosedPromiseInitializeAsResolved(reader); } else { assert(stream._state === 'errored', 'state must be errored'); defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError); reader._closedPromise.catch(function () {}); } } function ReadableStreamReaderGenericCancel(reader, reason) { var stream = reader._ownerReadableStream; assert(stream !== undefined); return ReadableStreamCancel(stream, reason); } function ReadableStreamReaderGenericRelease(reader) { assert(reader._ownerReadableStream !== undefined); assert(reader._ownerReadableStream._reader === reader); if (reader._ownerReadableStream._state === 'readable') { defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness')); } else { defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness')); } reader._closedPromise.catch(function () {}); reader._ownerReadableStream._reader = undefined; reader._ownerReadableStream = undefined; } function ReadableStreamBYOBReaderRead(reader, view) { var stream = reader._ownerReadableStream; assert(stream !== undefined); stream._disturbed = true; if (stream._state === 'errored') { return Promise.reject(stream._storedError); } return ReadableByteStreamControllerPullInto(stream._readableStreamController, view); } function ReadableStreamDefaultReaderRead(reader) { var stream = reader._ownerReadableStream; assert(stream !== undefined); stream._disturbed = true; if (stream._state === 'closed') { return Promise.resolve(CreateIterResultObject(undefined, true)); } if (stream._state === 'errored') { return Promise.reject(stream._storedError); } assert(stream._state === 'readable'); return stream._readableStreamController.__pullSteps(); } var ReadableStreamDefaultController = function () { function ReadableStreamDefaultController(stream, underlyingSource, size, highWaterMark) { _classCallCheck(this, ReadableStreamDefaultController); if (IsReadableStream(stream) === false) { throw new TypeError('ReadableStreamDefaultController can only be constructed with a ReadableStream instance'); } if (stream._readableStreamController !== undefined) { throw new TypeError('ReadableStreamDefaultController instances can only be created by the ReadableStream constructor'); } this._controlledReadableStream = stream; this._underlyingSource = underlyingSource; this._queue = undefined; this._queueTotalSize = undefined; ResetQueue(this); this._started = false; this._closeRequested = false; this._pullAgain = false; this._pulling = false; var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); this._strategySize = normalizedStrategy.size; this._strategyHWM = normalizedStrategy.highWaterMark; var controller = this; var startResult = InvokeOrNoop(underlyingSource, 'start', [this]); Promise.resolve(startResult).then(function () { controller._started = true; assert(controller._pulling === false); assert(controller._pullAgain === false); ReadableStreamDefaultControllerCallPullIfNeeded(controller); }, function (r) { ReadableStreamDefaultControllerErrorIfNeeded(controller, r); }).catch(rethrowAssertionErrorRejection); } _createClass(ReadableStreamDefaultController, [{ key: 'close', value: function close() { if (IsReadableStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('close'); } if (this._closeRequested === true) { throw new TypeError('The stream has already been closed; do not close it again!'); } var state = this._controlledReadableStream._state; if (state !== 'readable') { throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed'); } ReadableStreamDefaultControllerClose(this); } }, { key: 'enqueue', value: function enqueue(chunk) { if (IsReadableStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('enqueue'); } if (this._closeRequested === true) { throw new TypeError('stream is closed or draining'); } var state = this._controlledReadableStream._state; if (state !== 'readable') { throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to'); } return ReadableStreamDefaultControllerEnqueue(this, chunk); } }, { key: 'error', value: function error(e) { if (IsReadableStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('error'); } var stream = this._controlledReadableStream; if (stream._state !== 'readable') { throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored'); } ReadableStreamDefaultControllerError(this, e); } }, { key: '__cancelSteps', value: function __cancelSteps(reason) { ResetQueue(this); return PromiseInvokeOrNoop(this._underlyingSource, 'cancel', [reason]); } }, { key: '__pullSteps', value: function __pullSteps() { var stream = this._controlledReadableStream; if (this._queue.length > 0) { var chunk = DequeueValue(this); if (this._closeRequested === true && this._queue.length === 0) { ReadableStreamClose(stream); } else { ReadableStreamDefaultControllerCallPullIfNeeded(this); } return Promise.resolve(CreateIterResultObject(chunk, false)); } var pendingPromise = ReadableStreamAddReadRequest(stream); ReadableStreamDefaultControllerCallPullIfNeeded(this); return pendingPromise; } }, { key: 'desiredSize', get: function get() { if (IsReadableStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('desiredSize'); } return ReadableStreamDefaultControllerGetDesiredSize(this); } }]); return ReadableStreamDefaultController; }(); function IsReadableStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSource')) { return false; } return true; } function ReadableStreamDefaultControllerCallPullIfNeeded(controller) { var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller); if (shouldPull === false) { return undefined; } if (controller._pulling === true) { controller._pullAgain = true; return undefined; } assert(controller._pullAgain === false); controller._pulling = true; var pullPromise = PromiseInvokeOrNoop(controller._underlyingSource, 'pull', [controller]); pullPromise.then(function () { controller._pulling = false; if (controller._pullAgain === true) { controller._pullAgain = false; return ReadableStreamDefaultControllerCallPullIfNeeded(controller); } return undefined; }, function (e) { ReadableStreamDefaultControllerErrorIfNeeded(controller, e); }).catch(rethrowAssertionErrorRejection); return undefined; } function ReadableStreamDefaultControllerShouldCallPull(controller) { var stream = controller._controlledReadableStream; if (stream._state === 'closed' || stream._state === 'errored') { return false; } if (controller._closeRequested === true) { return false; } if (controller._started === false) { return false; } if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); if (desiredSize > 0) { return true; } return false; } function ReadableStreamDefaultControllerClose(controller) { var stream = controller._controlledReadableStream; assert(controller._closeRequested === false); assert(stream._state === 'readable'); controller._closeRequested = true; if (controller._queue.length === 0) { ReadableStreamClose(stream); } } function ReadableStreamDefaultControllerEnqueue(controller, chunk) { var stream = controller._controlledReadableStream; assert(controller._closeRequested === false); assert(stream._state === 'readable'); if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { ReadableStreamFulfillReadRequest(stream, chunk, false); } else { var chunkSize = 1; if (controller._strategySize !== undefined) { var strategySize = controller._strategySize; try { chunkSize = strategySize(chunk); } catch (chunkSizeE) { ReadableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); throw chunkSizeE; } } try { EnqueueValueWithSize(controller, chunk, chunkSize); } catch (enqueueE) { ReadableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); throw enqueueE; } } ReadableStreamDefaultControllerCallPullIfNeeded(controller); return undefined; } function ReadableStreamDefaultControllerError(controller, e) { var stream = controller._controlledReadableStream; assert(stream._state === 'readable'); ResetQueue(controller); ReadableStreamError(stream, e); } function ReadableStreamDefaultControllerErrorIfNeeded(controller, e) { if (controller._controlledReadableStream._state === 'readable') { ReadableStreamDefaultControllerError(controller, e); } } function ReadableStreamDefaultControllerGetDesiredSize(controller) { var stream = controller._controlledReadableStream; var state = stream._state; if (state === 'errored') { return null; } if (state === 'closed') { return 0; } return controller._strategyHWM - controller._queueTotalSize; } var ReadableStreamBYOBRequest = function () { function ReadableStreamBYOBRequest(controller, view) { _classCallCheck(this, ReadableStreamBYOBRequest); this._associatedReadableByteStreamController = controller; this._view = view; } _createClass(ReadableStreamBYOBRequest, [{ key: 'respond', value: function respond(bytesWritten) { if (IsReadableStreamBYOBRequest(this) === false) { throw byobRequestBrandCheckException('respond'); } if (this._associatedReadableByteStreamController === undefined) { throw new TypeError('This BYOB request has been invalidated'); } ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten); } }, { key: 'respondWithNewView', value: function respondWithNewView(view) { if (IsReadableStreamBYOBRequest(this) === false) { throw byobRequestBrandCheckException('respond'); } if (this._associatedReadableByteStreamController === undefined) { throw new TypeError('This BYOB request has been invalidated'); } if (!ArrayBuffer.isView(view)) { throw new TypeError('You can only respond with array buffer views'); } ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view); } }, { key: 'view', get: function get() { return this._view; } }]); return ReadableStreamBYOBRequest; }(); var ReadableByteStreamController = function () { function ReadableByteStreamController(stream, underlyingByteSource, highWaterMark) { _classCallCheck(this, ReadableByteStreamController); if (IsReadableStream(stream) === false) { throw new TypeError('ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source'); } if (stream._readableStreamController !== undefined) { throw new TypeError('ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source'); } this._controlledReadableStream = stream; this._underlyingByteSource = underlyingByteSource; this._pullAgain = false; this._pulling = false; ReadableByteStreamControllerClearPendingPullIntos(this); this._queue = this._queueTotalSize = undefined; ResetQueue(this); this._closeRequested = false; this._started = false; this._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark); var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize; if (autoAllocateChunkSize !== undefined) { if (Number.isInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) { throw new RangeError('autoAllocateChunkSize must be a positive integer'); } } this._autoAllocateChunkSize = autoAllocateChunkSize; this._pendingPullIntos = []; var controller = this; var startResult = InvokeOrNoop(underlyingByteSource, 'start', [this]); Promise.resolve(startResult).then(function () { controller._started = true; assert(controller._pulling === false); assert(controller._pullAgain === false); ReadableByteStreamControllerCallPullIfNeeded(controller); }, function (r) { if (stream._state === 'readable') { ReadableByteStreamControllerError(controller, r); } }).catch(rethrowAssertionErrorRejection); } _createClass(ReadableByteStreamController, [{ key: 'close', value: function close() { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('close'); } if (this._closeRequested === true) { throw new TypeError('The stream has already been closed; do not close it again!'); } var state = this._controlledReadableStream._state; if (state !== 'readable') { throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed'); } ReadableByteStreamControllerClose(this); } }, { key: 'enqueue', value: function enqueue(chunk) { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('enqueue'); } if (this._closeRequested === true) { throw new TypeError('stream is closed or draining'); } var state = this._controlledReadableStream._state; if (state !== 'readable') { throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to'); } if (!ArrayBuffer.isView(chunk)) { throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController'); } ReadableByteStreamControllerEnqueue(this, chunk); } }, { key: 'error', value: function error(e) { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('error'); } var stream = this._controlledReadableStream; if (stream._state !== 'readable') { throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored'); } ReadableByteStreamControllerError(this, e); } }, { key: '__cancelSteps', value: function __cancelSteps(reason) { if (this._pendingPullIntos.length > 0) { var firstDescriptor = this._pendingPullIntos[0]; firstDescriptor.bytesFilled = 0; } ResetQueue(this); return PromiseInvokeOrNoop(this._underlyingByteSource, 'cancel', [reason]); } }, { key: '__pullSteps', value: function __pullSteps() { var stream = this._controlledReadableStream; assert(ReadableStreamHasDefaultReader(stream) === true); if (this._queueTotalSize > 0) { assert(ReadableStreamGetNumReadRequests(stream) === 0); var entry = this._queue.shift(); this._queueTotalSize -= entry.byteLength; ReadableByteStreamControllerHandleQueueDrain(this); var view = void 0; try { view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength); } catch (viewE) { return Promise.reject(viewE); } return Promise.resolve(CreateIterResultObject(view, false)); } var autoAllocateChunkSize = this._autoAllocateChunkSize; if (autoAllocateChunkSize !== undefined) { var buffer = void 0; try { buffer = new ArrayBuffer(autoAllocateChunkSize); } catch (bufferE) { return Promise.reject(bufferE); } var pullIntoDescriptor = { buffer: buffer, byteOffset: 0, byteLength: autoAllocateChunkSize, bytesFilled: 0, elementSize: 1, ctor: Uint8Array, readerType: 'default' }; this._pendingPullIntos.push(pullIntoDescriptor); } var promise = ReadableStreamAddReadRequest(stream); ReadableByteStreamControllerCallPullIfNeeded(this); return promise; } }, { key: 'byobRequest', get: function get() { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('byobRequest'); } if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) { var firstDescriptor = this._pendingPullIntos[0]; var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled); this._byobRequest = new ReadableStreamBYOBRequest(this, view); } return this._byobRequest; } }, { key: 'desiredSize', get: function get() { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('desiredSize'); } return ReadableByteStreamControllerGetDesiredSize(this); } }]); return ReadableByteStreamController; }(); function IsReadableByteStreamController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_underlyingByteSource')) { return false; } return true; } function IsReadableStreamBYOBRequest(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) { return false; } return true; } function ReadableByteStreamControllerCallPullIfNeeded(controller) { var shouldPull = ReadableByteStreamControllerShouldCallPull(controller); if (shouldPull === false) { return undefined; } if (controller._pulling === true) { controller._pullAgain = true; return undefined; } assert(controller._pullAgain === false); controller._pulling = true; var pullPromise = PromiseInvokeOrNoop(controller._underlyingByteSource, 'pull', [controller]); pullPromise.then(function () { controller._pulling = false; if (controller._pullAgain === true) { controller._pullAgain = false; ReadableByteStreamControllerCallPullIfNeeded(controller); } }, function (e) { if (controller._controlledReadableStream._state === 'readable') { ReadableByteStreamControllerError(controller, e); } }).catch(rethrowAssertionErrorRejection); return undefined; } function ReadableByteStreamControllerClearPendingPullIntos(controller) { ReadableByteStreamControllerInvalidateBYOBRequest(controller); controller._pendingPullIntos = []; } function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) { assert(stream._state !== 'errored', 'state must not be errored'); var done = false; if (stream._state === 'closed') { assert(pullIntoDescriptor.bytesFilled === 0); done = true; } var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); if (pullIntoDescriptor.readerType === 'default') { ReadableStreamFulfillReadRequest(stream, filledView, done); } else { assert(pullIntoDescriptor.readerType === 'byob'); ReadableStreamFulfillReadIntoRequest(stream, filledView, done); } } function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) { var bytesFilled = pullIntoDescriptor.bytesFilled; var elementSize = pullIntoDescriptor.elementSize; assert(bytesFilled <= pullIntoDescriptor.byteLength); assert(bytesFilled % elementSize === 0); return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize); } function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) { controller._queue.push({ buffer: buffer, byteOffset: byteOffset, byteLength: byteLength }); controller._queueTotalSize += byteLength; } function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) { var elementSize = pullIntoDescriptor.elementSize; var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize; var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled); var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy; var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize; var totalBytesToCopyRemaining = maxBytesToCopy; var ready = false; if (maxAlignedBytes > currentAlignedBytes) { totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled; ready = true; } var queue = controller._queue; while (totalBytesToCopyRemaining > 0) { var headOfQueue = queue[0]; var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength); var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy); if (headOfQueue.byteLength === bytesToCopy) { queue.shift(); } else { headOfQueue.byteOffset += bytesToCopy; headOfQueue.byteLength -= bytesToCopy; } controller._queueTotalSize -= bytesToCopy; ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor); totalBytesToCopyRemaining -= bytesToCopy; } if (ready === false) { assert(controller._queueTotalSize === 0, 'queue must be empty'); assert(pullIntoDescriptor.bytesFilled > 0); assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize); } return ready; } function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) { assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos[0] === pullIntoDescriptor); ReadableByteStreamControllerInvalidateBYOBRequest(controller); pullIntoDescriptor.bytesFilled += size; } function ReadableByteStreamControllerHandleQueueDrain(controller) { assert(controller._controlledReadableStream._state === 'readable'); if (controller._queueTotalSize === 0 && controller._closeRequested === true) { ReadableStreamClose(controller._controlledReadableStream); } else { ReadableByteStreamControllerCallPullIfNeeded(controller); } } function ReadableByteStreamControllerInvalidateBYOBRequest(controller) { if (controller._byobRequest === undefined) { return; } controller._byobRequest._associatedReadableByteStreamController = undefined; controller._byobRequest._view = undefined; controller._byobRequest = undefined; } function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) { assert(controller._closeRequested === false); while (controller._pendingPullIntos.length > 0) { if (controller._queueTotalSize === 0) { return; } var pullIntoDescriptor = controller._pendingPullIntos[0]; if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) { ReadableByteStreamControllerShiftPendingPullInto(controller); ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor); } } } function ReadableByteStreamControllerPullInto(controller, view) { var stream = controller._controlledReadableStream; var elementSize = 1; if (view.constructor !== DataView) { elementSize = view.constructor.BYTES_PER_ELEMENT; } var ctor = view.constructor; var pullIntoDescriptor = { buffer: view.buffer, byteOffset: view.byteOffset, byteLength: view.byteLength, bytesFilled: 0, elementSize: elementSize, ctor: ctor, readerType: 'byob' }; if (controller._pendingPullIntos.length > 0) { pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); controller._pendingPullIntos.push(pullIntoDescriptor); return ReadableStreamAddReadIntoRequest(stream); } if (stream._state === 'closed') { var emptyView = new view.constructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0); return Promise.resolve(CreateIterResultObject(emptyView, true)); } if (controller._queueTotalSize > 0) { if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) { var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); ReadableByteStreamControllerHandleQueueDrain(controller); return Promise.resolve(CreateIterResultObject(filledView, false)); } if (controller._closeRequested === true) { var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); ReadableByteStreamControllerError(controller, e); return Promise.reject(e); } } pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); controller._pendingPullIntos.push(pullIntoDescriptor); var promise = ReadableStreamAddReadIntoRequest(stream); ReadableByteStreamControllerCallPullIfNeeded(controller); return promise; } function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) { firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer); assert(firstDescriptor.bytesFilled === 0, 'bytesFilled must be 0'); var stream = controller._controlledReadableStream; if (ReadableStreamHasBYOBReader(stream) === true) { while (ReadableStreamGetNumReadIntoRequests(stream) > 0) { var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller); ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor); } } } function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) { if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) { throw new RangeError('bytesWritten out of range'); } ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor); if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) { return; } ReadableByteStreamControllerShiftPendingPullInto(controller); var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize; if (remainderSize > 0) { var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end); ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength); } pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); pullIntoDescriptor.bytesFilled -= remainderSize; ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor); ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); } function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) { var firstDescriptor = controller._pendingPullIntos[0]; var stream = controller._controlledReadableStream; if (stream._state === 'closed') { if (bytesWritten !== 0) { throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream'); } ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor); } else { assert(stream._state === 'readable'); ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor); } } function ReadableByteStreamControllerShiftPendingPullInto(controller) { var descriptor = controller._pendingPullIntos.shift(); ReadableByteStreamControllerInvalidateBYOBRequest(controller); return descriptor; } function ReadableByteStreamControllerShouldCallPull(controller) { var stream = controller._controlledReadableStream; if (stream._state !== 'readable') { return false; } if (controller._closeRequested === true) { return false; } if (controller._started === false) { return false; } if (ReadableStreamHasDefaultReader(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } if (ReadableStreamHasBYOBReader(stream) === true && ReadableStreamGetNumReadIntoRequests(stream) > 0) { return true; } if (ReadableByteStreamControllerGetDesiredSize(controller) > 0) { return true; } return false; } function ReadableByteStreamControllerClose(controller) { var stream = controller._controlledReadableStream; assert(controller._closeRequested === false); assert(stream._state === 'readable'); if (controller._queueTotalSize > 0) { controller._closeRequested = true; return; } if (controller._pendingPullIntos.length > 0) { var firstPendingPullInto = controller._pendingPullIntos[0]; if (firstPendingPullInto.bytesFilled > 0) { var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); ReadableByteStreamControllerError(controller, e); throw e; } } ReadableStreamClose(stream); } function ReadableByteStreamControllerEnqueue(controller, chunk) { var stream = controller._controlledReadableStream; assert(controller._closeRequested === false); assert(stream._state === 'readable'); var buffer = chunk.buffer; var byteOffset = chunk.byteOffset; var byteLength = chunk.byteLength; var transferredBuffer = TransferArrayBuffer(buffer); if (ReadableStreamHasDefaultReader(stream) === true) { if (ReadableStreamGetNumReadRequests(stream) === 0) { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); } else { assert(controller._queue.length === 0); var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength); ReadableStreamFulfillReadRequest(stream, transferredView, false); } } else if (ReadableStreamHasBYOBReader(stream) === true) { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); } else { assert(IsReadableStreamLocked(stream) === false, 'stream must not be locked'); ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); } } function ReadableByteStreamControllerError(controller, e) { var stream = controller._controlledReadableStream; assert(stream._state === 'readable'); ReadableByteStreamControllerClearPendingPullIntos(controller); ResetQueue(controller); ReadableStreamError(stream, e); } function ReadableByteStreamControllerGetDesiredSize(controller) { var stream = controller._controlledReadableStream; var state = stream._state; if (state === 'errored') { return null; } if (state === 'closed') { return 0; } return controller._strategyHWM - controller._queueTotalSize; } function ReadableByteStreamControllerRespond(controller, bytesWritten) { bytesWritten = Number(bytesWritten); if (IsFiniteNonNegativeNumber(bytesWritten) === false) { throw new RangeError('bytesWritten must be a finite'); } assert(controller._pendingPullIntos.length > 0); ReadableByteStreamControllerRespondInternal(controller, bytesWritten); } function ReadableByteStreamControllerRespondWithNewView(controller, view) { assert(controller._pendingPullIntos.length > 0); var firstDescriptor = controller._pendingPullIntos[0]; if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) { throw new RangeError('The region specified by view does not match byobRequest'); } if (firstDescriptor.byteLength !== view.byteLength) { throw new RangeError('The buffer of view has different capacity than byobRequest'); } firstDescriptor.buffer = view.buffer; ReadableByteStreamControllerRespondInternal(controller, view.byteLength); } function streamBrandCheckException(name) { return new TypeError('ReadableStream.prototype.' + name + ' can only be used on a ReadableStream'); } function readerLockException(name) { return new TypeError('Cannot ' + name + ' a stream using a released reader'); } function defaultReaderBrandCheckException(name) { return new TypeError('ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader'); } function defaultReaderClosedPromiseInitialize(reader) { reader._closedPromise = new Promise(function (resolve, reject) { reader._closedPromise_resolve = resolve; reader._closedPromise_reject = reject; }); } function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) { reader._closedPromise = Promise.reject(reason); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function defaultReaderClosedPromiseInitializeAsResolved(reader) { reader._closedPromise = Promise.resolve(undefined); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function defaultReaderClosedPromiseReject(reader, reason) { assert(reader._closedPromise_resolve !== undefined); assert(reader._closedPromise_reject !== undefined); reader._closedPromise_reject(reason); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function defaultReaderClosedPromiseResetToRejected(reader, reason) { assert(reader._closedPromise_resolve === undefined); assert(reader._closedPromise_reject === undefined); reader._closedPromise = Promise.reject(reason); } function defaultReaderClosedPromiseResolve(reader) { assert(reader._closedPromise_resolve !== undefined); assert(reader._closedPromise_reject !== undefined); reader._closedPromise_resolve(undefined); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function byobReaderBrandCheckException(name) { return new TypeError('ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader'); } function defaultControllerBrandCheckException(name) { return new TypeError('ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController'); } function byobRequestBrandCheckException(name) { return new TypeError('ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest'); } function byteStreamControllerBrandCheckException(name) { return new TypeError('ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController'); } function ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise) { try { Promise.prototype.then.call(promise, undefined, function () {}); } catch (e) {} } }, function (module, exports, __w_extracthighlights_require__) { var transformStream = __w_extracthighlights_require__(6); var readableStream = __w_extracthighlights_require__(4); var writableStream = __w_extracthighlights_require__(2); exports.TransformStream = transformStream.TransformStream; exports.ReadableStream = readableStream.ReadableStream; exports.IsReadableStreamDisturbed = readableStream.IsReadableStreamDisturbed; exports.ReadableStreamDefaultControllerClose = readableStream.ReadableStreamDefaultControllerClose; exports.ReadableStreamDefaultControllerEnqueue = readableStream.ReadableStreamDefaultControllerEnqueue; exports.ReadableStreamDefaultControllerError = readableStream.ReadableStreamDefaultControllerError; exports.ReadableStreamDefaultControllerGetDesiredSize = readableStream.ReadableStreamDefaultControllerGetDesiredSize; exports.AcquireWritableStreamDefaultWriter = writableStream.AcquireWritableStreamDefaultWriter; exports.IsWritableStream = writableStream.IsWritableStream; exports.IsWritableStreamLocked = writableStream.IsWritableStreamLocked; exports.WritableStream = writableStream.WritableStream; exports.WritableStreamAbort = writableStream.WritableStreamAbort; exports.WritableStreamDefaultControllerError = writableStream.WritableStreamDefaultControllerError; exports.WritableStreamDefaultWriterCloseWithErrorPropagation = writableStream.WritableStreamDefaultWriterCloseWithErrorPropagation; exports.WritableStreamDefaultWriterRelease = writableStream.WritableStreamDefaultWriterRelease; exports.WritableStreamDefaultWriterWrite = writableStream.WritableStreamDefaultWriterWrite; }, function (module, exports, __w_extracthighlights_require__) { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var _require = __w_extracthighlights_require__(1), assert = _require.assert; var _require2 = __w_extracthighlights_require__(0), InvokeOrNoop = _require2.InvokeOrNoop, PromiseInvokeOrPerformFallback = _require2.PromiseInvokeOrPerformFallback, PromiseInvokeOrNoop = _require2.PromiseInvokeOrNoop, typeIsObject = _require2.typeIsObject; var _require3 = __w_extracthighlights_require__(4), ReadableStream = _require3.ReadableStream, ReadableStreamDefaultControllerClose = _require3.ReadableStreamDefaultControllerClose, ReadableStreamDefaultControllerEnqueue = _require3.ReadableStreamDefaultControllerEnqueue, ReadableStreamDefaultControllerError = _require3.ReadableStreamDefaultControllerError, ReadableStreamDefaultControllerGetDesiredSize = _require3.ReadableStreamDefaultControllerGetDesiredSize; var _require4 = __w_extracthighlights_require__(2), WritableStream = _require4.WritableStream, WritableStreamDefaultControllerError = _require4.WritableStreamDefaultControllerError; function TransformStreamCloseReadable(transformStream) { if (transformStream._errored === true) { throw new TypeError('TransformStream is already errored'); } if (transformStream._readableClosed === true) { throw new TypeError('Readable side is already closed'); } TransformStreamCloseReadableInternal(transformStream); } function TransformStreamEnqueueToReadable(transformStream, chunk) { if (transformStream._errored === true) { throw new TypeError('TransformStream is already errored'); } if (transformStream._readableClosed === true) { throw new TypeError('Readable side is already closed'); } var controller = transformStream._readableController; try { ReadableStreamDefaultControllerEnqueue(controller, chunk); } catch (e) { transformStream._readableClosed = true; TransformStreamErrorIfNeeded(transformStream, e); throw transformStream._storedError; } var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); var maybeBackpressure = desiredSize <= 0; if (maybeBackpressure === true && transformStream._backpressure === false) { TransformStreamSetBackpressure(transformStream, true); } } function TransformStreamError(transformStream, e) { if (transformStream._errored === true) { throw new TypeError('TransformStream is already errored'); } TransformStreamErrorInternal(transformStream, e); } function TransformStreamCloseReadableInternal(transformStream) { assert(transformStream._errored === false); assert(transformStream._readableClosed === false); try { ReadableStreamDefaultControllerClose(transformStream._readableController); } catch (e) { assert(false); } transformStream._readableClosed = true; } function TransformStreamErrorIfNeeded(transformStream, e) { if (transformStream._errored === false) { TransformStreamErrorInternal(transformStream, e); } } function TransformStreamErrorInternal(transformStream, e) { assert(transformStream._errored === false); transformStream._errored = true; transformStream._storedError = e; if (transformStream._writableDone === false) { WritableStreamDefaultControllerError(transformStream._writableController, e); } if (transformStream._readableClosed === false) { ReadableStreamDefaultControllerError(transformStream._readableController, e); } } function TransformStreamReadableReadyPromise(transformStream) { assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); if (transformStream._backpressure === false) { return Promise.resolve(); } assert(transformStream._backpressure === true, '_backpressure should have been initialized'); return transformStream._backpressureChangePromise; } function TransformStreamSetBackpressure(transformStream, backpressure) { assert(transformStream._backpressure !== backpressure, 'TransformStreamSetBackpressure() should be called only when backpressure is changed'); if (transformStream._backpressureChangePromise !== undefined) { transformStream._backpressureChangePromise_resolve(backpressure); } transformStream._backpressureChangePromise = new Promise(function (resolve) { transformStream._backpressureChangePromise_resolve = resolve; }); transformStream._backpressureChangePromise.then(function (resolution) { assert(resolution !== backpressure, '_backpressureChangePromise should be fulfilled only when backpressure is changed'); }); transformStream._backpressure = backpressure; } function TransformStreamDefaultTransform(chunk, transformStreamController) { var transformStream = transformStreamController._controlledTransformStream; TransformStreamEnqueueToReadable(transformStream, chunk); return Promise.resolve(); } function TransformStreamTransform(transformStream, chunk) { assert(transformStream._errored === false); assert(transformStream._transforming === false); assert(transformStream._backpressure === false); transformStream._transforming = true; var transformer = transformStream._transformer; var controller = transformStream._transformStreamController; var transformPromise = PromiseInvokeOrPerformFallback(transformer, 'transform', [chunk, controller], TransformStreamDefaultTransform, [chunk, controller]); return transformPromise.then(function () { transformStream._transforming = false; return TransformStreamReadableReadyPromise(transformStream); }, function (e) { TransformStreamErrorIfNeeded(transformStream, e); return Promise.reject(e); }); } function IsTransformStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) { return false; } return true; } function IsTransformStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) { return false; } return true; } var TransformStreamSink = function () { function TransformStreamSink(transformStream, startPromise) { _classCallCheck(this, TransformStreamSink); this._transformStream = transformStream; this._startPromise = startPromise; } _createClass(TransformStreamSink, [{ key: 'start', value: function start(c) { var transformStream = this._transformStream; transformStream._writableController = c; return this._startPromise.then(function () { return TransformStreamReadableReadyPromise(transformStream); }); } }, { key: 'write', value: function write(chunk) { var transformStream = this._transformStream; return TransformStreamTransform(transformStream, chunk); } }, { key: 'abort', value: function abort() { var transformStream = this._transformStream; transformStream._writableDone = true; TransformStreamErrorInternal(transformStream, new TypeError('Writable side aborted')); } }, { key: 'close', value: function close() { var transformStream = this._transformStream; assert(transformStream._transforming === false); transformStream._writableDone = true; var flushPromise = PromiseInvokeOrNoop(transformStream._transformer, 'flush', [transformStream._transformStreamController]); return flushPromise.then(function () { if (transformStream._errored === true) { return Promise.reject(transformStream._storedError); } if (transformStream._readableClosed === false) { TransformStreamCloseReadableInternal(transformStream); } return Promise.resolve(); }).catch(function (r) { TransformStreamErrorIfNeeded(transformStream, r); return Promise.reject(transformStream._storedError); }); } }]); return TransformStreamSink; }(); var TransformStreamSource = function () { function TransformStreamSource(transformStream, startPromise) { _classCallCheck(this, TransformStreamSource); this._transformStream = transformStream; this._startPromise = startPromise; } _createClass(TransformStreamSource, [{ key: 'start', value: function start(c) { var transformStream = this._transformStream; transformStream._readableController = c; return this._startPromise.then(function () { assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); if (transformStream._backpressure === true) { return Promise.resolve(); } assert(transformStream._backpressure === false, '_backpressure should have been initialized'); return transformStream._backpressureChangePromise; }); } }, { key: 'pull', value: function pull() { var transformStream = this._transformStream; assert(transformStream._backpressure === true, 'pull() should be never called while _backpressure is false'); assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); TransformStreamSetBackpressure(transformStream, false); return transformStream._backpressureChangePromise; } }, { key: 'cancel', value: function cancel() { var transformStream = this._transformStream; transformStream._readableClosed = true; TransformStreamErrorInternal(transformStream, new TypeError('Readable side canceled')); } }]); return TransformStreamSource; }(); var TransformStreamDefaultController = function () { function TransformStreamDefaultController(transformStream) { _classCallCheck(this, TransformStreamDefaultController); if (IsTransformStream(transformStream) === false) { throw new TypeError('TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance'); } if (transformStream._transformStreamController !== undefined) { throw new TypeError('TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor'); } this._controlledTransformStream = transformStream; } _createClass(TransformStreamDefaultController, [{ key: 'enqueue', value: function enqueue(chunk) { if (IsTransformStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('enqueue'); } TransformStreamEnqueueToReadable(this._controlledTransformStream, chunk); } }, { key: 'close', value: function close() { if (IsTransformStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('close'); } TransformStreamCloseReadable(this._controlledTransformStream); } }, { key: 'error', value: function error(reason) { if (IsTransformStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('error'); } TransformStreamError(this._controlledTransformStream, reason); } }, { key: 'desiredSize', get: function get() { if (IsTransformStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('desiredSize'); } var transformStream = this._controlledTransformStream; var readableController = transformStream._readableController; return ReadableStreamDefaultControllerGetDesiredSize(readableController); } }]); return TransformStreamDefaultController; }(); var TransformStream = function () { function TransformStream() { var transformer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, TransformStream); this._transformer = transformer; var readableStrategy = transformer.readableStrategy, writableStrategy = transformer.writableStrategy; this._transforming = false; this._errored = false; this._storedError = undefined; this._writableController = undefined; this._readableController = undefined; this._transformStreamController = undefined; this._writableDone = false; this._readableClosed = false; this._backpressure = undefined; this._backpressureChangePromise = undefined; this._backpressureChangePromise_resolve = undefined; this._transformStreamController = new TransformStreamDefaultController(this); var startPromise_resolve = void 0; var startPromise = new Promise(function (resolve) { startPromise_resolve = resolve; }); var source = new TransformStreamSource(this, startPromise); this._readable = new ReadableStream(source, readableStrategy); var sink = new TransformStreamSink(this, startPromise); this._writable = new WritableStream(sink, writableStrategy); assert(this._writableController !== undefined); assert(this._readableController !== undefined); var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(this._readableController); TransformStreamSetBackpressure(this, desiredSize <= 0); var transformStream = this; var startResult = InvokeOrNoop(transformer, 'start', [transformStream._transformStreamController]); startPromise_resolve(startResult); startPromise.catch(function (e) { if (transformStream._errored === false) { transformStream._errored = true; transformStream._storedError = e; } }); } _createClass(TransformStream, [{ key: 'readable', get: function get() { if (IsTransformStream(this) === false) { throw streamBrandCheckException('readable'); } return this._readable; } }, { key: 'writable', get: function get() { if (IsTransformStream(this) === false) { throw streamBrandCheckException('writable'); } return this._writable; } }]); return TransformStream; }(); module.exports = { TransformStream: TransformStream }; function defaultControllerBrandCheckException(name) { return new TypeError('TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController'); } function streamBrandCheckException(name) { return new TypeError('TransformStream.prototype.' + name + ' can only be used on a TransformStream'); } }, function (module, exports, __w_extracthighlights_require__) { module.exports = __w_extracthighlights_require__(5); }])); /***/ }), /* 149 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } { var isURLSupported = false; try { if (typeof URL === 'function' && _typeof(URL.prototype) === 'object' && 'origin' in URL.prototype) { var u = new URL('b', 'http://a'); u.pathname = 'c%20d'; isURLSupported = u.href === 'http://a/c%20d'; } } catch (ex) {} if (isURLSupported) { exports.URL = URL; } else { var PolyfillURL = __w_extracthighlights_require__(150).URL; var OriginalURL = __w_extracthighlights_require__(8).URL; if (OriginalURL) { PolyfillURL.createObjectURL = function (blob) { return OriginalURL.createObjectURL.apply(OriginalURL, arguments); }; PolyfillURL.revokeObjectURL = function (url) { OriginalURL.revokeObjectURL(url); }; } exports.URL = PolyfillURL; } } /***/ }), /* 150 */ /***/ (function(module, exports, __w_extracthighlights_require__) { (function URLConstructorClosure() { var relative = Object.create(null); relative['ftp'] = 21; relative['file'] = 0; relative['gopher'] = 70; relative['http'] = 80; relative['https'] = 443; relative['ws'] = 80; relative['wss'] = 443; var relativePathDotMapping = Object.create(null); relativePathDotMapping['%2e'] = '.'; relativePathDotMapping['.%2e'] = '..'; relativePathDotMapping['%2e.'] = '..'; relativePathDotMapping['%2e%2e'] = '..'; function isRelativeScheme(scheme) { return relative[scheme] !== undefined; } function invalid() { clear.call(this); this._isInvalid = true; } function IDNAToASCII(h) { if (h === '') { invalid.call(this); } return h.toLowerCase(); } function percentEscape(c) { var unicode = c.charCodeAt(0); if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) === -1) { return c; } return encodeURIComponent(c); } function percentEscapeQuery(c) { var unicode = c.charCodeAt(0); if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) === -1) { return c; } return encodeURIComponent(c); } var EOF, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; function parse(input, stateOverride, base) { var state = stateOverride || 'scheme start', cursor = 0, buffer = '', seenAt = false, seenBracket = false; loop: while ((input[cursor - 1] !== EOF || cursor === 0) && !this._isInvalid) { var c = input[cursor]; switch (state) { case 'scheme start': if (c && ALPHA.test(c)) { buffer += c.toLowerCase(); state = 'scheme'; } else if (!stateOverride) { buffer = ''; state = 'no scheme'; continue; } else { break loop; } break; case 'scheme': if (c && ALPHANUMERIC.test(c)) { buffer += c.toLowerCase(); } else if (c === ':') { this._scheme = buffer; buffer = ''; if (stateOverride) { break loop; } if (isRelativeScheme(this._scheme)) { this._isRelative = true; } if (this._scheme === 'file') { state = 'relative'; } else if (this._isRelative && base && base._scheme === this._scheme) { state = 'relative or authority'; } else if (this._isRelative) { state = 'authority first slash'; } else { state = 'scheme data'; } } else if (!stateOverride) { buffer = ''; cursor = 0; state = 'no scheme'; continue; } else if (c === EOF) { break loop; } else { break loop; } break; case 'scheme data': if (c === '?') { this._query = '?'; state = 'query'; } else if (c === '#') { this._fragment = '#'; state = 'fragment'; } else { if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { this._schemeData += percentEscape(c); } } break; case 'no scheme': if (!base || !isRelativeScheme(base._scheme)) { invalid.call(this); } else { state = 'relative'; continue; } break; case 'relative or authority': if (c === '/' && input[cursor + 1] === '/') { state = 'authority ignore slashes'; } else { state = 'relative'; continue; } break; case 'relative': this._isRelative = true; if (this._scheme !== 'file') { this._scheme = base._scheme; } if (c === EOF) { this._host = base._host; this._port = base._port; this._path = base._path.slice(); this._query = base._query; this._username = base._username; this._password = base._password; break loop; } else if (c === '/' || c === '\\') { state = 'relative slash'; } else if (c === '?') { this._host = base._host; this._port = base._port; this._path = base._path.slice(); this._query = '?'; this._username = base._username; this._password = base._password; state = 'query'; } else if (c === '#') { this._host = base._host; this._port = base._port; this._path = base._path.slice(); this._query = base._query; this._fragment = '#'; this._username = base._username; this._password = base._password; state = 'fragment'; } else { var nextC = input[cursor + 1]; var nextNextC = input[cursor + 2]; if (this._scheme !== 'file' || !ALPHA.test(c) || nextC !== ':' && nextC !== '|' || nextNextC !== EOF && nextNextC !== '/' && nextNextC !== '\\' && nextNextC !== '?' && nextNextC !== '#') { this._host = base._host; this._port = base._port; this._username = base._username; this._password = base._password; this._path = base._path.slice(); this._path.pop(); } state = 'relative path'; continue; } break; case 'relative slash': if (c === '/' || c === '\\') { if (this._scheme === 'file') { state = 'file host'; } else { state = 'authority ignore slashes'; } } else { if (this._scheme !== 'file') { this._host = base._host; this._port = base._port; this._username = base._username; this._password = base._password; } state = 'relative path'; continue; } break; case 'authority first slash': if (c === '/') { state = 'authority second slash'; } else { state = 'authority ignore slashes'; continue; } break; case 'authority second slash': state = 'authority ignore slashes'; if (c !== '/') { continue; } break; case 'authority ignore slashes': if (c !== '/' && c !== '\\') { state = 'authority'; continue; } break; case 'authority': if (c === '@') { if (seenAt) { buffer += '%40'; } seenAt = true; for (var i = 0; i < buffer.length; i++) { var cp = buffer[i]; if (cp === '\t' || cp === '\n' || cp === '\r') { continue; } if (cp === ':' && this._password === null) { this._password = ''; continue; } var tempC = percentEscape(cp); if (this._password !== null) { this._password += tempC; } else { this._username += tempC; } } buffer = ''; } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { cursor -= buffer.length; buffer = ''; state = 'host'; continue; } else { buffer += c; } break; case 'file host': if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { if (buffer.length === 2 && ALPHA.test(buffer[0]) && (buffer[1] === ':' || buffer[1] === '|')) { state = 'relative path'; } else if (buffer.length === 0) { state = 'relative path start'; } else { this._host = IDNAToASCII.call(this, buffer); buffer = ''; state = 'relative path start'; } continue; } else if (c === '\t' || c === '\n' || c === '\r') ; else { buffer += c; } break; case 'host': case 'hostname': if (c === ':' && !seenBracket) { this._host = IDNAToASCII.call(this, buffer); buffer = ''; state = 'port'; if (stateOverride === 'hostname') { break loop; } } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { this._host = IDNAToASCII.call(this, buffer); buffer = ''; state = 'relative path start'; if (stateOverride) { break loop; } continue; } else if (c !== '\t' && c !== '\n' && c !== '\r') { if (c === '[') { seenBracket = true; } else if (c === ']') { seenBracket = false; } buffer += c; } else ; break; case 'port': if (/[0-9]/.test(c)) { buffer += c; } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' || stateOverride) { if (buffer !== '') { var temp = parseInt(buffer, 10); if (temp !== relative[this._scheme]) { this._port = temp + ''; } buffer = ''; } if (stateOverride) { break loop; } state = 'relative path start'; continue; } else if (c === '\t' || c === '\n' || c === '\r') ; else { invalid.call(this); } break; case 'relative path start': state = 'relative path'; if (c !== '/' && c !== '\\') { continue; } break; case 'relative path': if (c === EOF || c === '/' || c === '\\' || !stateOverride && (c === '?' || c === '#')) { var tmp; if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { buffer = tmp; } if (buffer === '..') { this._path.pop(); if (c !== '/' && c !== '\\') { this._path.push(''); } } else if (buffer === '.' && c !== '/' && c !== '\\') { this._path.push(''); } else if (buffer !== '.') { if (this._scheme === 'file' && this._path.length === 0 && buffer.length === 2 && ALPHA.test(buffer[0]) && buffer[1] === '|') { buffer = buffer[0] + ':'; } this._path.push(buffer); } buffer = ''; if (c === '?') { this._query = '?'; state = 'query'; } else if (c === '#') { this._fragment = '#'; state = 'fragment'; } } else if (c !== '\t' && c !== '\n' && c !== '\r') { buffer += percentEscape(c); } break; case 'query': if (!stateOverride && c === '#') { this._fragment = '#'; state = 'fragment'; } else if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { this._query += percentEscapeQuery(c); } break; case 'fragment': if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { this._fragment += c; } break; } cursor++; } } function clear() { this._scheme = ''; this._schemeData = ''; this._username = ''; this._password = null; this._host = ''; this._port = ''; this._path = []; this._query = ''; this._fragment = ''; this._isInvalid = false; this._isRelative = false; } function JURL(url, base) { if (base !== undefined && !(base instanceof JURL)) { base = new JURL(String(base)); } this._url = url; clear.call(this); var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ''); parse.call(this, input, null, base); } JURL.prototype = { toString: function toString() { return this.href; }, get href() { if (this._isInvalid) { return this._url; } var authority = ''; if (this._username !== '' || this._password !== null) { authority = this._username + (this._password !== null ? ':' + this._password : '') + '@'; } return this.protocol + (this._isRelative ? '//' + authority + this.host : '') + this.pathname + this._query + this._fragment; }, set href(value) { clear.call(this); parse.call(this, value); }, get protocol() { return this._scheme + ':'; }, set protocol(value) { if (this._isInvalid) { return; } parse.call(this, value + ':', 'scheme start'); }, get host() { return this._isInvalid ? '' : this._port ? this._host + ':' + this._port : this._host; }, set host(value) { if (this._isInvalid || !this._isRelative) { return; } parse.call(this, value, 'host'); }, get hostname() { return this._host; }, set hostname(value) { if (this._isInvalid || !this._isRelative) { return; } parse.call(this, value, 'hostname'); }, get port() { return this._port; }, set port(value) { if (this._isInvalid || !this._isRelative) { return; } parse.call(this, value, 'port'); }, get pathname() { return this._isInvalid ? '' : this._isRelative ? '/' + this._path.join('/') : this._schemeData; }, set pathname(value) { if (this._isInvalid || !this._isRelative) { return; } this._path = []; parse.call(this, value, 'relative path start'); }, get search() { return this._isInvalid || !this._query || this._query === '?' ? '' : this._query; }, set search(value) { if (this._isInvalid || !this._isRelative) { return; } this._query = '?'; if (value[0] === '?') { value = value.slice(1); } parse.call(this, value, 'query'); }, get hash() { return this._isInvalid || !this._fragment || this._fragment === '#' ? '' : this._fragment; }, set hash(value) { if (this._isInvalid) { return; } this._fragment = '#'; if (value[0] === '#') { value = value.slice(1); } parse.call(this, value, 'fragment'); }, get origin() { var host; if (this._isInvalid || !this._scheme) { return ''; } switch (this._scheme) { case 'data': case 'file': case 'javascript': case 'mailto': return 'null'; case 'blob': try { return new JURL(this._schemeData).origin || 'null'; } catch (_) {} return 'null'; } host = this.host; if (!host) { return ''; } return this._scheme + '://' + host; } }; exports.URL = JURL; })(); /***/ }), /* 151 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.NetworkPdfManager = exports.LocalPdfManager = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); var _util = __w_extracthighlights_require__(6); var _chunked_stream = __w_extracthighlights_require__(152); var _document = __w_extracthighlights_require__(153); var _stream = __w_extracthighlights_require__(157); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var BasePdfManager = /*#__PURE__*/ function () { function BasePdfManager() { _classCallCheck(this, BasePdfManager); if (this.constructor === BasePdfManager) { (0, _util.unreachable)('Cannot initialize BasePdfManager.'); } } _createClass(BasePdfManager, [{ key: "onLoadedStream", value: function onLoadedStream() { (0, _util.unreachable)('Abstract method `onLoadedStream` called'); } }, { key: "ensureDoc", value: function ensureDoc(prop, args) { return this.ensure(this.pdfDocument, prop, args); } }, { key: "ensureXRef", value: function ensureXRef(prop, args) { return this.ensure(this.pdfDocument.xref, prop, args); } }, { key: "ensureCatalog", value: function ensureCatalog(prop, args) { return this.ensure(this.pdfDocument.catalog, prop, args); } }, { key: "getPage", value: function getPage(pageIndex) { return this.pdfDocument.getPage(pageIndex); } }, { key: "fontFallback", value: function fontFallback(id, handler) { return this.pdfDocument.fontFallback(id, handler); } }, { key: "cleanup", value: function cleanup() { return this.pdfDocument.cleanup(); } }, { key: "ensure", value: function () { var _ensure = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee(obj, prop, args) { return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: (0, _util.unreachable)('Abstract method `ensure` called'); case 1: case "end": return _context.stop(); } } }, _callee, this); })); function ensure(_x, _x2, _x3) { return _ensure.apply(this, arguments); } return ensure; }() }, { key: "requestRange", value: function requestRange(begin, end) { (0, _util.unreachable)('Abstract method `requestRange` called'); } }, { key: "requestLoadedStream", value: function requestLoadedStream() { (0, _util.unreachable)('Abstract method `requestLoadedStream` called'); } }, { key: "sendProgressiveData", value: function sendProgressiveData(chunk) { (0, _util.unreachable)('Abstract method `sendProgressiveData` called'); } }, { key: "updatePassword", value: function updatePassword(password) { this._password = password; } }, { key: "terminate", value: function terminate() { (0, _util.unreachable)('Abstract method `terminate` called'); } }, { key: "docId", get: function get() { return this._docId; } }, { key: "password", get: function get() { return this._password; } }, { key: "docBaseUrl", get: function get() { var docBaseUrl = null; if (this._docBaseUrl) { var absoluteUrl = (0, _util.createValidAbsoluteUrl)(this._docBaseUrl); if (absoluteUrl) { docBaseUrl = absoluteUrl.href; } else { (0, _util.warn)("Invalid absolute docBaseUrl: \"".concat(this._docBaseUrl, "\".")); } } return (0, _util.shadow)(this, 'docBaseUrl', docBaseUrl); } }]); return BasePdfManager; }(); var LocalPdfManager = /*#__PURE__*/ function (_BasePdfManager) { _inherits(LocalPdfManager, _BasePdfManager); function LocalPdfManager(docId, data, password, evaluatorOptions, docBaseUrl) { var _this; _classCallCheck(this, LocalPdfManager); _this = _possibleConstructorReturn(this, _getPrototypeOf(LocalPdfManager).call(this)); _this._docId = docId; _this._password = password; _this._docBaseUrl = docBaseUrl; _this.evaluatorOptions = evaluatorOptions; var stream = new _stream.Stream(data); _this.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_assertThisInitialized(_this)), stream); _this._loadedStreamPromise = Promise.resolve(stream); return _this; } _createClass(LocalPdfManager, [{ key: "ensure", value: function () { var _ensure2 = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee2(obj, prop, args) { var value; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: value = obj[prop]; if (!(typeof value === 'function')) { _context2.next = 3; break; } return _context2.abrupt("return", value.apply(obj, args)); case 3: return _context2.abrupt("return", value); case 4: case "end": return _context2.stop(); } } }, _callee2, this); })); function ensure(_x4, _x5, _x6) { return _ensure2.apply(this, arguments); } return ensure; }() }, { key: "requestRange", value: function requestRange(begin, end) { return Promise.resolve(); } }, { key: "requestLoadedStream", value: function requestLoadedStream() {} }, { key: "onLoadedStream", value: function onLoadedStream() { return this._loadedStreamPromise; } }, { key: "terminate", value: function terminate() {} }]); return LocalPdfManager; }(BasePdfManager); exports.LocalPdfManager = LocalPdfManager; var NetworkPdfManager = /*#__PURE__*/ function (_BasePdfManager2) { _inherits(NetworkPdfManager, _BasePdfManager2); function NetworkPdfManager(docId, pdfNetworkStream, args, evaluatorOptions, docBaseUrl) { var _this2; _classCallCheck(this, NetworkPdfManager); _this2 = _possibleConstructorReturn(this, _getPrototypeOf(NetworkPdfManager).call(this)); _this2._docId = docId; _this2._password = args.password; _this2._docBaseUrl = docBaseUrl; _this2.msgHandler = args.msgHandler; _this2.evaluatorOptions = evaluatorOptions; _this2.streamManager = new _chunked_stream.ChunkedStreamManager(pdfNetworkStream, { msgHandler: args.msgHandler, length: args.length, disableAutoFetch: args.disableAutoFetch, rangeChunkSize: args.rangeChunkSize }); _this2.pdfDocument = new _document.PDFDocument(_assertThisInitialized(_assertThisInitialized(_this2)), _this2.streamManager.getStream()); return _this2; } _createClass(NetworkPdfManager, [{ key: "ensure", value: function () { var _ensure3 = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee3(obj, prop, args) { var value; return _regenerator.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: _context3.prev = 0; value = obj[prop]; if (!(typeof value === 'function')) { _context3.next = 4; break; } return _context3.abrupt("return", value.apply(obj, args)); case 4: return _context3.abrupt("return", value); case 7: _context3.prev = 7; _context3.t0 = _context3["catch"](0); if (_context3.t0 instanceof _util.MissingDataException) { _context3.next = 11; break; } throw _context3.t0; case 11: _context3.next = 13; return this.requestRange(_context3.t0.begin, _context3.t0.end); case 13: return _context3.abrupt("return", this.ensure(obj, prop, args)); case 14: case "end": return _context3.stop(); } } }, _callee3, this, [[0, 7]]); })); function ensure(_x7, _x8, _x9) { return _ensure3.apply(this, arguments); } return ensure; }() }, { key: "requestRange", value: function requestRange(begin, end) { return this.streamManager.requestRange(begin, end); } }, { key: "requestLoadedStream", value: function requestLoadedStream() { this.streamManager.requestAllChunks(); } }, { key: "sendProgressiveData", value: function sendProgressiveData(chunk) { this.streamManager.onReceiveData({ chunk: chunk }); } }, { key: "onLoadedStream", value: function onLoadedStream() { return this.streamManager.onLoadedStream(); } }, { key: "terminate", value: function terminate() { this.streamManager.abort(); } }]); return NetworkPdfManager; }(BasePdfManager); exports.NetworkPdfManager = NetworkPdfManager; /***/ }), /* 152 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ChunkedStreamManager = exports.ChunkedStream = void 0; var _util = __w_extracthighlights_require__(6); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var ChunkedStream = /*#__PURE__*/ function () { function ChunkedStream(length, chunkSize, manager) { _classCallCheck(this, ChunkedStream); this.bytes = new Uint8Array(length); this.start = 0; this.pos = 0; this.end = length; this.chunkSize = chunkSize; this.loadedChunks = []; this.numChunksLoaded = 0; this.numChunks = Math.ceil(length / chunkSize); this.manager = manager; this.progressiveDataLength = 0; this.lastSuccessfulEnsureByteChunk = -1; } _createClass(ChunkedStream, [{ key: "getMissingChunks", value: function getMissingChunks() { var chunks = []; for (var chunk = 0, n = this.numChunks; chunk < n; ++chunk) { if (!this.loadedChunks[chunk]) { chunks.push(chunk); } } return chunks; } }, { key: "getBaseStreams", value: function getBaseStreams() { return [this]; } }, { key: "allChunksLoaded", value: function allChunksLoaded() { return this.numChunksLoaded === this.numChunks; } }, { key: "onReceiveData", value: function onReceiveData(begin, chunk) { var chunkSize = this.chunkSize; if (begin % chunkSize !== 0) { throw new Error("Bad begin offset: ".concat(begin)); } var end = begin + chunk.byteLength; if (end % chunkSize !== 0 && end !== this.bytes.length) { throw new Error("Bad end offset: ".concat(end)); } this.bytes.set(new Uint8Array(chunk), begin); var beginChunk = Math.floor(begin / chunkSize); var endChunk = Math.floor((end - 1) / chunkSize) + 1; for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) { if (!this.loadedChunks[curChunk]) { this.loadedChunks[curChunk] = true; ++this.numChunksLoaded; } } } }, { key: "onReceiveProgressiveData", value: function onReceiveProgressiveData(data) { var position = this.progressiveDataLength; var beginChunk = Math.floor(position / this.chunkSize); this.bytes.set(new Uint8Array(data), position); position += data.byteLength; this.progressiveDataLength = position; var endChunk = position >= this.end ? this.numChunks : Math.floor(position / this.chunkSize); for (var curChunk = beginChunk; curChunk < endChunk; ++curChunk) { if (!this.loadedChunks[curChunk]) { this.loadedChunks[curChunk] = true; ++this.numChunksLoaded; } } } }, { key: "ensureByte", value: function ensureByte(pos) { var chunk = Math.floor(pos / this.chunkSize); if (chunk === this.lastSuccessfulEnsureByteChunk) { return; } if (!this.loadedChunks[chunk]) { throw new _util.MissingDataException(pos, pos + 1); } this.lastSuccessfulEnsureByteChunk = chunk; } }, { key: "ensureRange", value: function ensureRange(begin, end) { if (begin >= end) { return; } if (end <= this.progressiveDataLength) { return; } var chunkSize = this.chunkSize; var beginChunk = Math.floor(begin / chunkSize); var endChunk = Math.floor((end - 1) / chunkSize) + 1; for (var chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this.loadedChunks[chunk]) { throw new _util.MissingDataException(begin, end); } } } }, { key: "nextEmptyChunk", value: function nextEmptyChunk(beginChunk) { var numChunks = this.numChunks; for (var i = 0; i < numChunks; ++i) { var chunk = (beginChunk + i) % numChunks; if (!this.loadedChunks[chunk]) { return chunk; } } return null; } }, { key: "hasChunk", value: function hasChunk(chunk) { return !!this.loadedChunks[chunk]; } }, { key: "getByte", value: function getByte() { var pos = this.pos; if (pos >= this.end) { return -1; } this.ensureByte(pos); return this.bytes[this.pos++]; } }, { key: "getUint16", value: function getUint16() { var b0 = this.getByte(); var b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; } }, { key: "getInt32", value: function getInt32() { var b0 = this.getByte(); var b1 = this.getByte(); var b2 = this.getByte(); var b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; } }, { key: "getBytes", value: function getBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.bytes; var pos = this.pos; var strEnd = this.end; if (!length) { this.ensureRange(pos, strEnd); var _subarray = bytes.subarray(pos, strEnd); return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray; } var end = pos + length; if (end > strEnd) { end = strEnd; } this.ensureRange(pos, end); this.pos = end; var subarray = bytes.subarray(pos, end); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; } }, { key: "peekByte", value: function peekByte() { var peekedByte = this.getByte(); this.pos--; return peekedByte; } }, { key: "peekBytes", value: function peekBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; } }, { key: "getByteRange", value: function getByteRange(begin, end) { this.ensureRange(begin, end); return this.bytes.subarray(begin, end); } }, { key: "skip", value: function skip(n) { if (!n) { n = 1; } this.pos += n; } }, { key: "reset", value: function reset() { this.pos = this.start; } }, { key: "moveStart", value: function moveStart() { this.start = this.pos; } }, { key: "makeSubStream", value: function makeSubStream(start, length, dict) { this.ensureRange(start, start + length); function ChunkedStreamSubstream() {} ChunkedStreamSubstream.prototype = Object.create(this); ChunkedStreamSubstream.prototype.getMissingChunks = function () { var chunkSize = this.chunkSize; var beginChunk = Math.floor(this.start / chunkSize); var endChunk = Math.floor((this.end - 1) / chunkSize) + 1; var missingChunks = []; for (var chunk = beginChunk; chunk < endChunk; ++chunk) { if (!this.loadedChunks[chunk]) { missingChunks.push(chunk); } } return missingChunks; }; var subStream = new ChunkedStreamSubstream(); subStream.pos = subStream.start = start; subStream.end = start + length || this.end; subStream.dict = dict; return subStream; } }, { key: "length", get: function get() { return this.end - this.start; } }, { key: "isEmpty", get: function get() { return this.length === 0; } }]); return ChunkedStream; }(); exports.ChunkedStream = ChunkedStream; var ChunkedStreamManager = /*#__PURE__*/ function () { function ChunkedStreamManager(pdfNetworkStream, args) { _classCallCheck(this, ChunkedStreamManager); 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 = Object.create(null); this.requestsByChunk = Object.create(null); this.promisesByRequest = Object.create(null); this.progressiveDataLength = 0; this.aborted = false; this._loadedStreamCapability = (0, _util.createPromiseCapability)(); } _createClass(ChunkedStreamManager, [{ key: "onLoadedStream", value: function onLoadedStream() { return this._loadedStreamCapability.promise; } }, { key: "sendRequest", value: function sendRequest(begin, end) { var _this = this; var rangeReader = this.pdfNetworkStream.getRangeReader(begin, end); if (!rangeReader.isStreamingSupported) { rangeReader.onProgress = this.onProgress.bind(this); } var chunks = [], loaded = 0; var promise = new Promise(function (resolve, reject) { var readChunk = function readChunk(chunk) { try { if (!chunk.done) { var data = chunk.value; chunks.push(data); loaded += (0, _util.arrayByteLength)(data); if (rangeReader.isStreamingSupported) { _this.onProgress({ loaded: loaded }); } rangeReader.read().then(readChunk, reject); return; } var chunkData = (0, _util.arraysToBytes)(chunks); chunks = null; resolve(chunkData); } catch (e) { reject(e); } }; rangeReader.read().then(readChunk, reject); }); promise.then(function (data) { if (_this.aborted) { return; } _this.onReceiveData({ chunk: data, begin: begin }); }); } }, { key: "requestAllChunks", value: function requestAllChunks() { var missingChunks = this.stream.getMissingChunks(); this._requestChunks(missingChunks); return this._loadedStreamCapability.promise; } }, { key: "_requestChunks", value: function _requestChunks(chunks) { var requestId = this.currRequestId++; var chunksNeeded = Object.create(null); this.chunksNeededByRequest[requestId] = chunksNeeded; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = chunks[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _chunk = _step.value; if (!this.stream.hasChunk(_chunk)) { chunksNeeded[_chunk] = true; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } if ((0, _util.isEmptyObj)(chunksNeeded)) { return Promise.resolve(); } var capability = (0, _util.createPromiseCapability)(); this.promisesByRequest[requestId] = capability; var chunksToRequest = []; for (var chunk in chunksNeeded) { chunk = chunk | 0; if (!(chunk in this.requestsByChunk)) { this.requestsByChunk[chunk] = []; chunksToRequest.push(chunk); } this.requestsByChunk[chunk].push(requestId); } if (!chunksToRequest.length) { return capability.promise; } var groupedChunksToRequest = this.groupChunks(chunksToRequest); var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = groupedChunksToRequest[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var groupedChunk = _step2.value; var begin = groupedChunk.beginChunk * this.chunkSize; var end = Math.min(groupedChunk.endChunk * this.chunkSize, this.length); this.sendRequest(begin, end); } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return capability.promise; } }, { key: "getStream", value: function getStream() { return this.stream; } }, { key: "requestRange", value: function requestRange(begin, end) { end = Math.min(end, this.length); var beginChunk = this.getBeginChunk(begin); var endChunk = this.getEndChunk(end); var chunks = []; for (var chunk = beginChunk; chunk < endChunk; ++chunk) { chunks.push(chunk); } return this._requestChunks(chunks); } }, { key: "requestRanges", value: function requestRanges() { var ranges = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var chunksToRequest = []; var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = ranges[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var range = _step3.value; var beginChunk = this.getBeginChunk(range.begin); var endChunk = this.getEndChunk(range.end); for (var chunk = beginChunk; chunk < endChunk; ++chunk) { if (!chunksToRequest.includes(chunk)) { chunksToRequest.push(chunk); } } } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return != null) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } chunksToRequest.sort(function (a, b) { return a - b; }); return this._requestChunks(chunksToRequest); } }, { key: "groupChunks", value: function groupChunks(chunks) { var groupedChunks = []; var beginChunk = -1; var prevChunk = -1; for (var i = 0, ii = chunks.length; i < ii; ++i) { var chunk = chunks[i]; if (beginChunk < 0) { beginChunk = chunk; } if (prevChunk >= 0 && prevChunk + 1 !== chunk) { groupedChunks.push({ beginChunk: beginChunk, endChunk: prevChunk + 1 }); beginChunk = chunk; } if (i + 1 === chunks.length) { groupedChunks.push({ beginChunk: beginChunk, endChunk: chunk + 1 }); } prevChunk = chunk; } return groupedChunks; } }, { key: "onProgress", value: function onProgress(args) { this.msgHandler.send('DocProgress', { loaded: this.stream.numChunksLoaded * this.chunkSize + args.loaded, total: this.length }); } }, { key: "onReceiveData", value: function onReceiveData(args) { var chunk = args.chunk; var isProgressive = args.begin === undefined; var begin = isProgressive ? this.progressiveDataLength : args.begin; var end = begin + chunk.byteLength; var beginChunk = Math.floor(begin / this.chunkSize); var 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.allChunksLoaded()) { this._loadedStreamCapability.resolve(this.stream); } var loadedRequests = []; for (var _chunk2 = beginChunk; _chunk2 < endChunk; ++_chunk2) { var requestIds = this.requestsByChunk[_chunk2] || []; delete this.requestsByChunk[_chunk2]; var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = requestIds[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var requestId = _step4.value; var chunksNeeded = this.chunksNeededByRequest[requestId]; if (_chunk2 in chunksNeeded) { delete chunksNeeded[_chunk2]; } if (!(0, _util.isEmptyObj)(chunksNeeded)) { continue; } loadedRequests.push(requestId); } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return != null) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } } if (!this.disableAutoFetch && (0, _util.isEmptyObj)(this.requestsByChunk)) { var nextEmptyChunk; if (this.stream.numChunksLoaded === 1) { var 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 (var _i = 0; _i < loadedRequests.length; _i++) { var _requestId = loadedRequests[_i]; var capability = this.promisesByRequest[_requestId]; delete this.promisesByRequest[_requestId]; capability.resolve(); } this.msgHandler.send('DocProgress', { loaded: this.stream.numChunksLoaded * this.chunkSize, total: this.length }); } }, { key: "onError", value: function onError(err) { this._loadedStreamCapability.reject(err); } }, { key: "getBeginChunk", value: function getBeginChunk(begin) { return Math.floor(begin / this.chunkSize); } }, { key: "getEndChunk", value: function getEndChunk(end) { return Math.floor((end - 1) / this.chunkSize) + 1; } }, { key: "abort", value: function abort() { this.aborted = true; if (this.pdfNetworkStream) { this.pdfNetworkStream.cancelAllRequests('abort'); } for (var requestId in this.promisesByRequest) { this.promisesByRequest[requestId].reject(new Error('Request was aborted')); } } }]); return ChunkedStreamManager; }(); exports.ChunkedStreamManager = ChunkedStreamManager; /***/ }), /* 153 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFDocument = exports.Page = void 0; var _util = __w_extracthighlights_require__(6); var _obj = __w_extracthighlights_require__(154); var _primitives = __w_extracthighlights_require__(155); var _stream2 = __w_extracthighlights_require__(157); var _annotation = __w_extracthighlights_require__(169); var _crypto = __w_extracthighlights_require__(167); var _parser = __w_extracthighlights_require__(156); var _operator_list = __w_extracthighlights_require__(170); var _evaluator = __w_extracthighlights_require__(171); var _function = __w_extracthighlights_require__(185); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DEFAULT_USER_UNIT = 1.0; var LETTER_SIZE_MEDIABOX = [0, 0, 612, 792]; function isAnnotationRenderable(annotation, intent) { return intent === 'display' && annotation.viewable || intent === 'print' && annotation.printable; } var Page = /*#__PURE__*/ function () { function Page(_ref) { var pdfManager = _ref.pdfManager, xref = _ref.xref, pageIndex = _ref.pageIndex, pageDict = _ref.pageDict, ref = _ref.ref, fontCache = _ref.fontCache, builtInCMapCache = _ref.builtInCMapCache, pdfFunctionFactory = _ref.pdfFunctionFactory; _classCallCheck(this, Page); this.pdfManager = pdfManager; this.pageIndex = pageIndex; this.pageDict = pageDict; this.xref = xref; this.ref = ref; this.fontCache = fontCache; this.builtInCMapCache = builtInCMapCache; this.pdfFunctionFactory = pdfFunctionFactory; this.evaluatorOptions = pdfManager.evaluatorOptions; this.resourcesPromise = null; var uniquePrefix = "p".concat(this.pageIndex, "_"); var idCounters = { obj: 0 }; this.idFactory = { createObjId: function createObjId() { return uniquePrefix + ++idCounters.obj; } }; } _createClass(Page, [{ key: "_getInheritableProperty", value: function _getInheritableProperty(key) { var getArray = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var value = (0, _util.getInheritableProperty)({ dict: this.pageDict, key: key, getArray: 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(this.xref, value); } }, { key: "getContentStream", value: function getContentStream() { var content = this.content; var stream; if (Array.isArray(content)) { var xref = this.xref; var streams = []; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = content[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _stream = _step.value; streams.push(xref.fetchIfRef(_stream)); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } stream = new _stream2.StreamsSequenceStream(streams); } else if ((0, _primitives.isStream)(content)) { stream = content; } else { stream = new _stream2.NullStream(); } return stream; } }, { key: "loadResources", value: function loadResources(keys) { var _this = this; if (!this.resourcesPromise) { this.resourcesPromise = this.pdfManager.ensure(this, 'resources'); } return this.resourcesPromise.then(function () { var objectLoader = new _obj.ObjectLoader(_this.resources, keys, _this.xref); return objectLoader.load(); }); } }, { key: "getOperatorList", value: function getOperatorList(_ref2) { var _this2 = this; var handler = _ref2.handler, task = _ref2.task, intent = _ref2.intent, renderInteractiveForms = _ref2.renderInteractiveForms; var contentStreamPromise = this.pdfManager.ensure(this, 'getContentStream'); var resourcesPromise = this.loadResources(['ExtGState', 'ColorSpace', 'Pattern', 'Shading', 'XObject', 'Font']); var partialEvaluator = new _evaluator.PartialEvaluator({ pdfManager: this.pdfManager, xref: this.xref, handler: handler, pageIndex: this.pageIndex, idFactory: this.idFactory, fontCache: this.fontCache, builtInCMapCache: this.builtInCMapCache, options: this.evaluatorOptions, pdfFunctionFactory: this.pdfFunctionFactory }); var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); var pageListPromise = dataPromises.then(function (_ref3) { var _ref4 = _slicedToArray(_ref3, 1), contentStream = _ref4[0]; var opList = new _operator_list.OperatorList(intent, handler, _this2.pageIndex); handler.send('StartRenderPage', { transparency: partialEvaluator.hasBlendModes(_this2.resources), pageIndex: _this2.pageIndex, intent: intent }); return partialEvaluator.getOperatorList({ stream: contentStream, task: task, resources: _this2.resources, operatorList: opList }).then(function () { return opList; }); }); return Promise.all([pageListPromise, this._parsedAnnotations]).then(function (_ref5) { var _ref6 = _slicedToArray(_ref5, 2), pageOpList = _ref6[0], annotations = _ref6[1]; if (annotations.length === 0) { pageOpList.flush(true); return pageOpList; } var opListPromises = []; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = annotations[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var annotation = _step2.value; if (isAnnotationRenderable(annotation, intent)) { opListPromises.push(annotation.getOperatorList(partialEvaluator, task, renderInteractiveForms)); } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } return Promise.all(opListPromises).then(function (opLists) { pageOpList.addOp(_util.OPS.beginAnnotations, []); var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = opLists[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var opList = _step3.value; pageOpList.addOpList(opList); } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return != null) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } pageOpList.addOp(_util.OPS.endAnnotations, []); pageOpList.flush(true); return pageOpList; }); }); } }, { key: "extractTextContent", value: function extractTextContent(_ref7) { var _this3 = this; var handler = _ref7.handler, task = _ref7.task, normalizeWhitespace = _ref7.normalizeWhitespace, sink = _ref7.sink, combineTextItems = _ref7.combineTextItems; var contentStreamPromise = this.pdfManager.ensure(this, 'getContentStream'); var resourcesPromise = this.loadResources(['ExtGState', 'XObject', 'Font']); var dataPromises = Promise.all([contentStreamPromise, resourcesPromise]); return dataPromises.then(function (_ref8) { var _ref9 = _slicedToArray(_ref8, 1), contentStream = _ref9[0]; var partialEvaluator = new _evaluator.PartialEvaluator({ pdfManager: _this3.pdfManager, xref: _this3.xref, handler: handler, pageIndex: _this3.pageIndex, idFactory: _this3.idFactory, fontCache: _this3.fontCache, builtInCMapCache: _this3.builtInCMapCache, options: _this3.evaluatorOptions, pdfFunctionFactory: _this3.pdfFunctionFactory }); return partialEvaluator.getTextContent({ stream: contentStream, task: task, resources: _this3.resources, normalizeWhitespace: normalizeWhitespace, combineTextItems: combineTextItems, sink: sink }); }); } }, { key: "getAnnotationsData", value: function getAnnotationsData(intent) { return this._parsedAnnotations.then(function (annotations) { var annotationsData = []; for (var i = 0, ii = annotations.length; i < ii; i++) { if (!intent || isAnnotationRenderable(annotations[i], intent)) { annotationsData.push(annotations[i].data); } } return annotationsData; }); } }, { key: "content", get: function get() { return this.pageDict.get('Contents'); } }, { key: "resources", get: function get() { return (0, _util.shadow)(this, 'resources', this._getInheritableProperty('Resources') || _primitives.Dict.empty); } }, { key: "mediaBox", get: function get() { var mediaBox = this._getInheritableProperty('MediaBox', true); if (!Array.isArray(mediaBox) || mediaBox.length !== 4) { return (0, _util.shadow)(this, 'mediaBox', LETTER_SIZE_MEDIABOX); } return (0, _util.shadow)(this, 'mediaBox', mediaBox); } }, { key: "cropBox", get: function get() { var cropBox = this._getInheritableProperty('CropBox', true); if (!Array.isArray(cropBox) || cropBox.length !== 4) { return (0, _util.shadow)(this, 'cropBox', this.mediaBox); } return (0, _util.shadow)(this, 'cropBox', cropBox); } }, { key: "userUnit", get: function get() { var obj = this.pageDict.get('UserUnit'); if (!(0, _util.isNum)(obj) || obj <= 0) { obj = DEFAULT_USER_UNIT; } return (0, _util.shadow)(this, 'userUnit', obj); } }, { key: "view", get: function get() { var mediaBox = this.mediaBox, cropBox = this.cropBox; if (mediaBox === cropBox) { return (0, _util.shadow)(this, 'view', mediaBox); } var intersection = _util.Util.intersect(cropBox, mediaBox); return (0, _util.shadow)(this, 'view', intersection || mediaBox); } }, { key: "rotate", get: function get() { var rotate = this._getInheritableProperty('Rotate') || 0; if (rotate % 90 !== 0) { rotate = 0; } else if (rotate >= 360) { rotate = rotate % 360; } else if (rotate < 0) { rotate = (rotate % 360 + 360) % 360; } return (0, _util.shadow)(this, 'rotate', rotate); } }, { key: "annotations", get: function get() { return (0, _util.shadow)(this, 'annotations', this._getInheritableProperty('Annots') || []); } }, { key: "_parsedAnnotations", get: function get() { var _this4 = this; var parsedAnnotations = this.pdfManager.ensure(this, 'annotations').then(function () { var annotationRefs = _this4.annotations; var annotationPromises = []; for (var i = 0, ii = annotationRefs.length; i < ii; i++) { annotationPromises.push(_annotation.AnnotationFactory.create(_this4.xref, annotationRefs[i], _this4.pdfManager, _this4.idFactory)); } return Promise.all(annotationPromises).then(function (annotations) { return annotations.filter(function isDefined(annotation) { return !!annotation; }); }, function (reason) { (0, _util.warn)("_parsedAnnotations: \"".concat(reason, "\".")); return []; }); }); return (0, _util.shadow)(this, '_parsedAnnotations', parsedAnnotations); } }]); return Page; }(); exports.Page = Page; var FINGERPRINT_FIRST_BYTES = 1024; var EMPTY_FINGERPRINT = '\x00\x00\x00\x00\x00\x00\x00' + '\x00\x00\x00\x00\x00\x00\x00\x00\x00'; function find(stream, needle, limit, backwards) { var pos = stream.pos; var end = stream.end; if (pos + limit > end) { limit = end - pos; } var strBuf = []; for (var i = 0; i < limit; ++i) { strBuf.push(String.fromCharCode(stream.getByte())); } var str = strBuf.join(''); stream.pos = pos; var index = backwards ? str.lastIndexOf(needle) : str.indexOf(needle); if (index === -1) { return false; } stream.pos += index; return true; } var PDFDocument = /*#__PURE__*/ function () { function PDFDocument(pdfManager, arg) { _classCallCheck(this, PDFDocument); var stream; if ((0, _primitives.isStream)(arg)) { stream = arg; } else if ((0, _util.isArrayBuffer)(arg)) { stream = new _stream2.Stream(arg); } else { throw new Error('PDFDocument: Unknown argument type'); } if (stream.length <= 0) { throw new Error('PDFDocument: Stream must have data'); } this.pdfManager = pdfManager; this.stream = stream; this.xref = new _obj.XRef(stream, pdfManager); this.pdfFunctionFactory = new _function.PDFFunctionFactory({ xref: this.xref, isEvalSupported: pdfManager.evaluatorOptions.isEvalSupported }); this._pagePromises = []; } _createClass(PDFDocument, [{ key: "parse", value: function parse(recoveryMode) { this.setup(recoveryMode); var version = this.catalog.catDict.get('Version'); if ((0, _primitives.isName)(version)) { this.pdfFormatVersion = version.name; } try { this.acroForm = this.catalog.catDict.get('AcroForm'); if (this.acroForm) { this.xfa = this.acroForm.get('XFA'); var fields = this.acroForm.get('Fields'); if ((!fields || !Array.isArray(fields) || fields.length === 0) && !this.xfa) { this.acroForm = null; } } } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } (0, _util.info)('Cannot fetch AcroForm entry; assuming no AcroForms are present'); this.acroForm = null; } } }, { key: "checkHeader", value: function checkHeader() { var stream = this.stream; stream.reset(); if (!find(stream, '%PDF-', 1024)) { return; } stream.moveStart(); var MAX_PDF_VERSION_LENGTH = 12; var version = '', ch; while ((ch = stream.getByte()) > 0x20) { if (version.length >= MAX_PDF_VERSION_LENGTH) { break; } version += String.fromCharCode(ch); } if (!this.pdfFormatVersion) { this.pdfFormatVersion = version.substring(5); } } }, { key: "parseStartXRef", value: function parseStartXRef() { this.xref.setStartXRef(this.startXRef); } }, { key: "setup", value: function setup(recoveryMode) { this.xref.parse(recoveryMode); this.catalog = new _obj.Catalog(this.pdfManager, this.xref); } }, { key: "_getLinearizationPage", value: function _getLinearizationPage(pageIndex) { var catalog = this.catalog, linearization = this.linearization; (0, _util.assert)(linearization && linearization.pageFirst === pageIndex); var ref = new _primitives.Ref(linearization.objectNumberFirst, 0); return this.xref.fetchAsync(ref).then(function (obj) { 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(function (reason) { (0, _util.info)(reason); return catalog.getPageDict(pageIndex); }); } }, { key: "getPage", value: function getPage(pageIndex) { var _this5 = this; if (this._pagePromises[pageIndex] !== undefined) { return this._pagePromises[pageIndex]; } var catalog = this.catalog, linearization = this.linearization; var promise = linearization && linearization.pageFirst === pageIndex ? this._getLinearizationPage(pageIndex) : catalog.getPageDict(pageIndex); return this._pagePromises[pageIndex] = promise.then(function (_ref10) { var _ref11 = _slicedToArray(_ref10, 2), pageDict = _ref11[0], ref = _ref11[1]; return new Page({ pdfManager: _this5.pdfManager, xref: _this5.xref, pageIndex: pageIndex, pageDict: pageDict, ref: ref, fontCache: catalog.fontCache, builtInCMapCache: catalog.builtInCMapCache, pdfFunctionFactory: _this5.pdfFunctionFactory }); }); } }, { key: "checkFirstPage", value: function checkFirstPage() { var _this6 = this; return this.getPage(0).catch(function (reason) { if (reason instanceof _util.XRefEntryException) { _this6._pagePromises.length = 0; _this6.cleanup(); throw new _util.XRefParseException(); } }); } }, { key: "fontFallback", value: function fontFallback(id, handler) { return this.catalog.fontFallback(id, handler); } }, { key: "cleanup", value: function cleanup() { return this.catalog.cleanup(); } }, { key: "linearization", get: function get() { var linearization = null; try { linearization = _parser.Linearization.create(this.stream); } catch (err) { if (err instanceof _util.MissingDataException) { throw err; } (0, _util.info)(err); } return (0, _util.shadow)(this, 'linearization', linearization); } }, { key: "startXRef", get: function get() { var stream = this.stream; var startXRef = 0; if (this.linearization) { stream.reset(); if (find(stream, 'endobj', 1024)) { startXRef = stream.pos + 6; } } else { var step = 1024; var startXRefLength = 'startxref'.length; var found = false, pos = stream.end; while (!found && pos > 0) { pos -= step - startXRefLength; if (pos < 0) { pos = 0; } stream.pos = pos; found = find(stream, 'startxref', step, true); } if (found) { stream.skip(9); var ch; do { ch = stream.getByte(); } while ((0, _util.isSpace)(ch)); var 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); } }, { key: "numPages", get: function get() { var linearization = this.linearization; var num = linearization ? linearization.numPages : this.catalog.numPages; return (0, _util.shadow)(this, 'numPages', num); } }, { key: "documentInfo", get: function get() { var 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 }; var docInfo = { PDFFormatVersion: this.pdfFormatVersion, IsLinearized: !!this.linearization, IsAcroFormPresent: !!this.acroForm, IsXFAPresent: !!this.xfa }; var infoDict; try { infoDict = this.xref.trailer.get('Info'); } catch (err) { if (err instanceof _util.MissingDataException) { throw err; } (0, _util.info)('The document information dictionary is invalid.'); } if ((0, _primitives.isDict)(infoDict)) { var _iteratorNormalCompletion4 = true; var _didIteratorError4 = false; var _iteratorError4 = undefined; try { for (var _iterator4 = infoDict.getKeys()[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { var key = _step4.value; var 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 \"".concat(key, "\".")); } } else if (typeof key === 'string') { var customValue = void 0; 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) \"".concat(key, "\".")); continue; } if (!docInfo['Custom']) { docInfo['Custom'] = Object.create(null); } docInfo['Custom'][key] = customValue; } } } catch (err) { _didIteratorError4 = true; _iteratorError4 = err; } finally { try { if (!_iteratorNormalCompletion4 && _iterator4.return != null) { _iterator4.return(); } } finally { if (_didIteratorError4) { throw _iteratorError4; } } } } return (0, _util.shadow)(this, 'documentInfo', docInfo); } }, { key: "fingerprint", get: function get() { var hash; var idArray = this.xref.trailer.get('ID'); if (Array.isArray(idArray) && idArray[0] && (0, _util.isString)(idArray[0]) && idArray[0] !== EMPTY_FINGERPRINT) { hash = (0, _util.stringToBytes)(idArray[0]); } else { if (this.stream.ensureRange) { this.stream.ensureRange(0, Math.min(FINGERPRINT_FIRST_BYTES, this.stream.end)); } hash = (0, _crypto.calculateMD5)(this.stream.bytes.subarray(0, FINGERPRINT_FIRST_BYTES), 0, FINGERPRINT_FIRST_BYTES); } var fingerprint = ''; for (var i = 0, ii = hash.length; i < ii; i++) { var hex = hash[i].toString(16); fingerprint += hex.length === 1 ? '0' + hex : hex; } return (0, _util.shadow)(this, 'fingerprint', fingerprint); } }]); return PDFDocument; }(); exports.PDFDocument = PDFDocument; /***/ }), /* 154 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.FileSpec = exports.XRef = exports.ObjectLoader = exports.Catalog = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); var _parser = __w_extracthighlights_require__(156); var _chunked_stream = __w_extracthighlights_require__(152); var _crypto = __w_extracthighlights_require__(167); var _colorspace = __w_extracthighlights_require__(168); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function fetchDestination(dest) { return (0, _primitives.isDict)(dest) ? dest.get('D') : dest; } var Catalog = /*#__PURE__*/ function () { function Catalog(pdfManager, xref) { _classCallCheck(this, Catalog); this.pdfManager = pdfManager; this.xref = xref; this.catDict = xref.getCatalogObj(); if (!(0, _primitives.isDict)(this.catDict)) { throw new _util.FormatError('Catalog object is not a dictionary.'); } this.fontCache = new _primitives.RefSetCache(); this.builtInCMapCache = new Map(); this.pageKidsCountCache = new _primitives.RefSetCache(); } _createClass(Catalog, [{ key: "_readDocumentOutline", value: function _readDocumentOutline() { var obj = this.catDict.get('Outlines'); if (!(0, _primitives.isDict)(obj)) { return null; } obj = obj.getRaw('First'); if (!(0, _primitives.isRef)(obj)) { return null; } var root = { items: [] }; var queue = [{ obj: obj, parent: root }]; var processed = new _primitives.RefSet(); processed.put(obj); var xref = this.xref, blackColor = new Uint8ClampedArray(3); while (queue.length > 0) { var i = queue.shift(); var outlineDict = xref.fetchIfRef(i.obj); if (outlineDict === null) { continue; } if (!outlineDict.has('Title')) { throw new _util.FormatError('Invalid outline item encountered.'); } var data = { url: null, dest: null }; Catalog.parseDestDictionary({ destDict: outlineDict, resultObj: data, docBaseUrl: this.pdfManager.docBaseUrl }); var title = outlineDict.get('Title'); var flags = outlineDict.get('F') || 0; var color = outlineDict.getArray('C'); var 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); } var outlineItem = { dest: data.dest, url: data.url, unsafeUrl: data.unsafeUrl, newWindow: data.newWindow, title: (0, _util.stringToPDFString)(title), color: rgbColor, count: outlineDict.get('Count'), 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: obj, parent: outlineItem }); processed.put(obj); } obj = outlineDict.getRaw('Next'); if ((0, _primitives.isRef)(obj) && !processed.has(obj)) { queue.push({ obj: obj, parent: i.parent }); processed.put(obj); } } return root.items.length > 0 ? root.items : null; } }, { key: "_readPermissions", value: function _readPermissions() { var encrypt = this.xref.trailer.get('Encrypt'); if (!(0, _primitives.isDict)(encrypt)) { return null; } var flags = encrypt.get('P'); if (!(0, _util.isNum)(flags)) { return null; } flags += Math.pow(2, 32); var permissions = []; for (var key in _util.PermissionFlag) { var value = _util.PermissionFlag[key]; if (flags & value) { permissions.push(value); } } return permissions; } }, { key: "getDestination", value: function getDestination(destinationId) { var obj = this._readDests(); if (obj instanceof NameTree || obj instanceof _primitives.Dict) { return fetchDestination(obj.get(destinationId) || null); } return null; } }, { key: "_readDests", value: function _readDests() { var obj = this.catDict.get('Names'); if (obj && obj.has('Dests')) { return new NameTree(obj.getRaw('Dests'), this.xref); } else if (this.catDict.has('Dests')) { return this.catDict.get('Dests'); } } }, { key: "_readPageLabels", value: function _readPageLabels() { var obj = this.catDict.getRaw('PageLabels'); if (!obj) { return null; } var pageLabels = new Array(this.numPages); var style = null, prefix = ''; var numberTree = new NumberTree(obj, this.xref); var nums = numberTree.getAll(); var currentLabel = '', currentIndex = 1; for (var i = 0, ii = this.numPages; i < ii; i++) { if (i in nums) { var labelDict = nums[i]; 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')) { var 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')) { var 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')) { var 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, _util.toRomanNumerals)(currentIndex, style === 'r'); break; case 'A': case 'a': var LIMIT = 26; var A_UPPER_CASE = 0x41, A_LOWER_CASE = 0x61; var baseCharCode = style === 'a' ? A_LOWER_CASE : A_UPPER_CASE; var letterIndex = currentIndex - 1; var character = String.fromCharCode(baseCharCode + letterIndex % LIMIT); var charBuf = []; for (var 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 \"".concat(style, "\" in PageLabel dictionary.")); } currentLabel = ''; } pageLabels[i] = prefix + currentLabel; currentIndex++; } return pageLabels; } }, { key: "fontFallback", value: function fontFallback(id, handler) { var promises = []; this.fontCache.forEach(function (promise) { promises.push(promise); }); return Promise.all(promises).then(function (translatedFonts) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = translatedFonts[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var translatedFont = _step.value; if (translatedFont.loadedName === id) { translatedFont.fallback(handler); return; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }); } }, { key: "cleanup", value: function cleanup() { var _this = this; this.pageKidsCountCache.clear(); var promises = []; this.fontCache.forEach(function (promise) { promises.push(promise); }); return Promise.all(promises).then(function (translatedFonts) { for (var i = 0, ii = translatedFonts.length; i < ii; i++) { var font = translatedFonts[i].dict; delete font.translated; } _this.fontCache.clear(); _this.builtInCMapCache.clear(); }); } }, { key: "getPageDict", value: function getPageDict(pageIndex) { var capability = (0, _util.createPromiseCapability)(); var nodesToVisit = [this.catDict.getRaw('Pages')]; var xref = this.xref, pageKidsCountCache = this.pageKidsCountCache; var count, currentPageIndex = 0; function next() { var _loop = function _loop() { var currentNode = nodesToVisit.pop(); if ((0, _primitives.isRef)(currentNode)) { count = pageKidsCountCache.get(currentNode); if (count > 0 && currentPageIndex + count < pageIndex) { currentPageIndex += count; return "continue"; } xref.fetchAsync(currentNode).then(function (obj) { if ((0, _primitives.isDict)(obj, 'Page') || (0, _primitives.isDict)(obj) && !obj.has('Kids')) { if (pageIndex === currentPageIndex) { if (currentNode && !pageKidsCountCache.has(currentNode)) { pageKidsCountCache.put(currentNode, 1); } capability.resolve([obj, currentNode]); } else { currentPageIndex++; next(); } return; } nodesToVisit.push(obj); next(); }, capability.reject); return { v: void 0 }; } if (!(0, _primitives.isDict)(currentNode)) { capability.reject(new _util.FormatError('Page dictionary kid reference points to wrong type of object.')); return { v: void 0 }; } count = currentNode.get('Count'); if (Number.isInteger(count) && count >= 0) { var objId = currentNode.objId; if (objId && !pageKidsCountCache.has(objId)) { pageKidsCountCache.put(objId, count); } if (currentPageIndex + count <= pageIndex) { currentPageIndex += count; return "continue"; } } var kids = currentNode.get('Kids'); if (!Array.isArray(kids)) { if ((0, _primitives.isName)(currentNode.get('Type'), 'Page') || !currentNode.has('Type') && currentNode.has('Contents')) { if (currentPageIndex === pageIndex) { capability.resolve([currentNode, null]); return { v: void 0 }; } currentPageIndex++; return "continue"; } capability.reject(new _util.FormatError('Page dictionary kids object is not an array.')); return { v: void 0 }; } for (var last = kids.length - 1; last >= 0; last--) { nodesToVisit.push(kids[last]); } }; while (nodesToVisit.length) { var _ret = _loop(); switch (_ret) { case "continue": continue; default: if (_typeof(_ret) === "object") return _ret.v; } } capability.reject(new Error("Page index ".concat(pageIndex, " not found."))); } next(); return capability.promise; } }, { key: "getPageIndex", value: function getPageIndex(pageRef) { var xref = this.xref; function pagesBeforeRef(kidRef) { var 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; } var kidPromises = []; var found = false; for (var i = 0, ii = kids.length; i < ii; i++) { var 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 (kid) { if (!(0, _primitives.isDict)(kid)) { throw new _util.FormatError('Kid node must be a dictionary.'); } if (kid.has('Count')) { total += kid.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]; }); }); } var total = 0; function next(ref) { return pagesBeforeRef(ref).then(function (args) { if (!args) { return total; } var _args = _slicedToArray(args, 2), count = _args[0], parentRef = _args[1]; total += count; return next(parentRef); }); } return next(pageRef); } }, { key: "metadata", get: function get() { var streamRef = this.catDict.getRaw('Metadata'); if (!(0, _primitives.isRef)(streamRef)) { return (0, _util.shadow)(this, 'metadata', null); } var suppressEncryption = !(this.xref.encrypt && this.xref.encrypt.encryptMetadata); var stream = this.xref.fetch(streamRef, suppressEncryption); var metadata; if (stream && (0, _primitives.isDict)(stream.dict)) { var type = stream.dict.get('Type'); var subtype = stream.dict.get('Subtype'); if ((0, _primitives.isName)(type, 'Metadata') && (0, _primitives.isName)(subtype, 'XML')) { try { metadata = (0, _util.stringToUTF8String)((0, _util.bytesToString)(stream.getBytes())); } catch (e) { if (e instanceof _util.MissingDataException) { throw e; } (0, _util.info)('Skipping invalid metadata.'); } } } return (0, _util.shadow)(this, 'metadata', metadata); } }, { key: "toplevelPagesDict", get: function get() { var 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); } }, { key: "documentOutline", get: function get() { var obj = null; try { obj = this._readDocumentOutline(); } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } (0, _util.warn)('Unable to read document outline.'); } return (0, _util.shadow)(this, 'documentOutline', obj); } }, { key: "permissions", get: function get() { var permissions = null; try { permissions = this._readPermissions(); } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } (0, _util.warn)('Unable to read permissions.'); } return (0, _util.shadow)(this, 'permissions', permissions); } }, { key: "numPages", get: function get() { var 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, 'numPages', obj); } }, { key: "destinations", get: function get() { var obj = this._readDests(), dests = Object.create(null); if (obj instanceof NameTree) { var names = obj.getAll(); for (var name in names) { dests[name] = fetchDestination(names[name]); } } else if (obj instanceof _primitives.Dict) { obj.forEach(function (key, value) { if (value) { dests[key] = fetchDestination(value); } }); } return (0, _util.shadow)(this, 'destinations', dests); } }, { key: "pageLabels", get: function get() { var obj = null; try { obj = this._readPageLabels(); } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } (0, _util.warn)('Unable to read page labels.'); } return (0, _util.shadow)(this, 'pageLabels', obj); } }, { key: "pageMode", get: function get() { var obj = this.catDict.get('PageMode'); var 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); } }, { key: "openActionDestination", get: function get() { var obj = this.catDict.get('OpenAction'); var openActionDest = null; if ((0, _primitives.isDict)(obj)) { var destDict = new _primitives.Dict(this.xref); destDict.set('A', obj); var resultObj = { url: null, dest: null }; Catalog.parseDestDictionary({ destDict: destDict, resultObj: resultObj }); if (Array.isArray(resultObj.dest)) { openActionDest = resultObj.dest; } } else if (Array.isArray(obj)) { openActionDest = obj; } return (0, _util.shadow)(this, 'openActionDestination', openActionDest); } }, { key: "attachments", get: function get() { var obj = this.catDict.get('Names'); var attachments = null; if (obj && obj.has('EmbeddedFiles')) { var nameTree = new NameTree(obj.getRaw('EmbeddedFiles'), this.xref); var names = nameTree.getAll(); for (var name in names) { var fs = new FileSpec(names[name], this.xref); if (!attachments) { attachments = Object.create(null); } attachments[(0, _util.stringToPDFString)(name)] = fs.serializable; } } return (0, _util.shadow)(this, 'attachments', attachments); } }, { key: "javaScript", get: function get() { var obj = this.catDict.get('Names'); var javaScript = null; function appendIfJavaScriptDict(jsDict) { var type = jsDict.get('S'); if (!(0, _primitives.isName)(type, 'JavaScript')) { return; } var js = jsDict.get('JS'); if ((0, _primitives.isStream)(js)) { js = (0, _util.bytesToString)(js.getBytes()); } else if (!(0, _util.isString)(js)) { return; } if (!javaScript) { javaScript = []; } javaScript.push((0, _util.stringToPDFString)(js)); } if (obj && obj.has('JavaScript')) { var nameTree = new NameTree(obj.getRaw('JavaScript'), this.xref); var names = nameTree.getAll(); for (var name in names) { var jsDict = names[name]; if ((0, _primitives.isDict)(jsDict)) { appendIfJavaScriptDict(jsDict); } } } var openActionDict = this.catDict.get('OpenAction'); if ((0, _primitives.isDict)(openActionDict, 'Action')) { var actionType = openActionDict.get('S'); if ((0, _primitives.isName)(actionType, 'Named')) { var action = openActionDict.get('N'); if ((0, _primitives.isName)(action, 'Print')) { if (!javaScript) { javaScript = []; } javaScript.push('print({});'); } } else { appendIfJavaScriptDict(openActionDict); } } return (0, _util.shadow)(this, 'javaScript', javaScript); } }], [{ key: "parseDestDictionary", value: function parseDestDictionary(params) { function addDefaultProtocolToUrl(url) { return url.startsWith('www.') ? "http://".concat(url) : url; } function tryConvertUrlEncoding(url) { try { return (0, _util.stringToUTF8String)(url); } catch (e) { return url; } } var destDict = params.destDict; if (!(0, _primitives.isDict)(destDict)) { (0, _util.warn)('parseDestDictionary: `destDict` must be a dictionary.'); return; } var resultObj = params.resultObj; if (_typeof(resultObj) !== 'object') { (0, _util.warn)('parseDestDictionary: `resultObj` must be an object.'); return; } var docBaseUrl = params.docBaseUrl || null; var action = destDict.get('A'), url, dest; if (!(0, _primitives.isDict)(action) && destDict.has('Dest')) { action = destDict.get('Dest'); } if ((0, _primitives.isDict)(action)) { var actionType = action.get('S'); if (!(0, _primitives.isName)(actionType)) { (0, _util.warn)('parseDestDictionary: Invalid type in Action dictionary.'); return; } var actionName = actionType.name; switch (actionName) { case 'URI': url = action.get('URI'); if ((0, _primitives.isName)(url)) { url = '/' + url.name; } else if ((0, _util.isString)(url)) { url = addDefaultProtocolToUrl(url); } break; case 'GoTo': dest = action.get('D'); break; case 'Launch': case 'GoToR': var urlDict = action.get('F'); if ((0, _primitives.isDict)(urlDict)) { url = urlDict.get('F') || null; } else if ((0, _util.isString)(urlDict)) { url = urlDict; } var remoteDest = action.get('D'); if (remoteDest) { if ((0, _primitives.isName)(remoteDest)) { remoteDest = remoteDest.name; } if ((0, _util.isString)(url)) { var baseUrl = url.split('#')[0]; if ((0, _util.isString)(remoteDest)) { url = baseUrl + '#' + remoteDest; } else if (Array.isArray(remoteDest)) { url = baseUrl + '#' + JSON.stringify(remoteDest); } } } var newWindow = action.get('NewWindow'); if ((0, _util.isBool)(newWindow)) { resultObj.newWindow = newWindow; } break; case 'Named': var namedAction = action.get('N'); if ((0, _primitives.isName)(namedAction)) { resultObj.action = namedAction.name; } break; case 'JavaScript': var jsAction = action.get('JS'); var js; if ((0, _primitives.isStream)(jsAction)) { js = (0, _util.bytesToString)(jsAction.getBytes()); } else if ((0, _util.isString)(jsAction)) { js = jsAction; } if (js) { var URL_OPEN_METHODS = ['app.launchURL', 'window.open']; var regex = new RegExp('^\\s*(' + URL_OPEN_METHODS.join('|').split('.').join('\\.') + ')\\((?:\'|\")([^\'\"]*)(?:\'|\")(?:,\\s*(\\w+)\\)|\\))', 'i'); var jsUrl = regex.exec((0, _util.stringToPDFString)(js)); if (jsUrl && jsUrl[2]) { url = jsUrl[2]; if (jsUrl[3] === 'true' && jsUrl[1] === 'app.launchURL') { resultObj.newWindow = true; } break; } } default: (0, _util.warn)("parseDestDictionary: unsupported action type \"".concat(actionName, "\".")); break; } } else if (destDict.has('Dest')) { dest = destDict.get('Dest'); } if ((0, _util.isString)(url)) { url = tryConvertUrlEncoding(url); var absoluteUrl = (0, _util.createValidAbsoluteUrl)(url, docBaseUrl); 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; } } } }]); return Catalog; }(); exports.Catalog = Catalog; var XRef = function XRefClosure() { function XRef(stream, pdfManager) { this.stream = stream; this.pdfManager = pdfManager; this.entries = []; this.xrefstms = Object.create(null); this.cache = []; this.stats = { streamTypes: [], fontTypes: [] }; } XRef.prototype = { setStartXRef: function XRef_setStartXRef(startXRef) { this.startXRefQueue = [startXRef]; }, parse: function XRef_parse(recoveryMode) { var trailerDict; if (!recoveryMode) { trailerDict = this.readXRef(); } else { (0, _util.warn)('Indexing all PDF objects'); trailerDict = this.indexObjects(); } trailerDict.assignXref(this); this.trailer = trailerDict; var encrypt; try { encrypt = trailerDict.get('Encrypt'); } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } (0, _util.warn)("XRef.parse - Invalid \"Encrypt\" reference: \"".concat(ex, "\".")); } if ((0, _primitives.isDict)(encrypt)) { var ids = trailerDict.get('ID'); var fileId = ids && ids.length ? ids[0] : ''; encrypt.suppressEncryption = true; this.encrypt = new _crypto.CipherTransformFactory(encrypt, fileId, this.pdfManager.password); } var root; try { root = trailerDict.get('Root'); } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } (0, _util.warn)("XRef.parse - Invalid \"Root\" reference: \"".concat(ex, "\".")); } if ((0, _primitives.isDict)(root) && root.has('Pages')) { this.root = root; } else { if (!recoveryMode) { throw new _util.XRefParseException(); } throw new _util.FormatError('Invalid root reference'); } }, processXRefTable: function XRef_processXRefTable(parser) { if (!('tableState' in this)) { this.tableState = { entryNum: 0, streamPos: parser.lexer.stream.pos, parserBuf1: parser.buf1, parserBuf2: parser.buf2 }; } var obj = this.readXRefTable(parser); if (!(0, _primitives.isCmd)(obj, 'trailer')) { throw new _util.FormatError('Invalid XRef table: could not find trailer dictionary'); } var dict = parser.getObj(); if (!(0, _primitives.isDict)(dict) && dict.dict) { dict = dict.dict; } if (!(0, _primitives.isDict)(dict)) { throw new _util.FormatError('Invalid XRef table: could not parse trailer dictionary'); } delete this.tableState; return dict; }, readXRefTable: function XRef_readXRefTable(parser) { var stream = parser.lexer.stream; var tableState = this.tableState; stream.pos = tableState.streamPos; parser.buf1 = tableState.parserBuf1; parser.buf2 = tableState.parserBuf2; var 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(); } var first = tableState.firstEntryNum; var count = tableState.entryCount; if (!Number.isInteger(first) || !Number.isInteger(count)) { throw new _util.FormatError('Invalid XRef table: wrong types in subsection header'); } for (var i = tableState.entryNum; i < count; i++) { tableState.streamPos = stream.pos; tableState.entryNum = i; tableState.parserBuf1 = parser.buf1; tableState.parserBuf2 = parser.buf2; var entry = {}; entry.offset = parser.getObj(); entry.gen = parser.getObj(); var type = parser.getObj(); if ((0, _primitives.isCmd)(type, 'f')) { entry.free = true; } else if ((0, _primitives.isCmd)(type, 'n')) { entry.uncompressed = true; } if (!Number.isInteger(entry.offset) || !Number.isInteger(entry.gen) || !(entry.free || entry.uncompressed)) { throw new _util.FormatError("Invalid entry in XRef subsection: ".concat(first, ", ").concat(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: function XRef_processXRefStream(stream) { if (!('streamState' in this)) { var streamParameters = stream.dict; var byteWidths = streamParameters.get('W'); var range = streamParameters.get('Index'); if (!range) { range = [0, streamParameters.get('Size')]; } this.streamState = { entryRanges: range, byteWidths: byteWidths, entryNum: 0, streamPos: stream.pos }; } this.readXRefStream(stream); delete this.streamState; return stream.dict; }, readXRefStream: function XRef_readXRefStream(stream) { var i, j; var streamState = this.streamState; stream.pos = streamState.streamPos; var byteWidths = streamState.byteWidths; var typeFieldWidth = byteWidths[0]; var offsetFieldWidth = byteWidths[1]; var generationFieldWidth = byteWidths[2]; var entryRanges = streamState.entryRanges; while (entryRanges.length > 0) { var first = entryRanges[0]; var n = entryRanges[1]; if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new _util.FormatError("Invalid XRef range fields: ".concat(first, ", ").concat(n)); } if (!Number.isInteger(typeFieldWidth) || !Number.isInteger(offsetFieldWidth) || !Number.isInteger(generationFieldWidth)) { throw new _util.FormatError("Invalid XRef entry fields length: ".concat(first, ", ").concat(n)); } for (i = streamState.entryNum; i < n; ++i) { streamState.entryNum = i; streamState.streamPos = stream.pos; var type = 0, offset = 0, generation = 0; for (j = 0; j < typeFieldWidth; ++j) { type = type << 8 | stream.getByte(); } if (typeFieldWidth === 0) { type = 1; } for (j = 0; j < offsetFieldWidth; ++j) { offset = offset << 8 | stream.getByte(); } for (j = 0; j < generationFieldWidth; ++j) { generation = generation << 8 | stream.getByte(); } var 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: ".concat(type)); } if (!this.entries[first + i]) { this.entries[first + i] = entry; } } streamState.entryNum = 0; streamState.streamPos = stream.pos; entryRanges.splice(0, 2); } }, indexObjects: function XRef_indexObjects() { var TAB = 0x9, LF = 0xA, CR = 0xD, SPACE = 0x20; var PERCENT = 0x25, LT = 0x3C; function readToken(data, offset) { var 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) { var length = what.length, dataLength = data.length; var skipped = 0; while (offset < dataLength) { var i = 0; while (i < length && data[offset + i] === what[i]) { ++i; } if (i >= length) { break; } offset++; skipped++; } return skipped; } var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; var endobjRegExp = /\bendobj[\b\s]$/; var nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; var CHECK_CONTENT_LENGTH = 25; var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); var objBytes = new Uint8Array([111, 98, 106]); var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); this.entries.length = 0; var stream = this.stream; stream.pos = 0; var buffer = stream.getBytes(); var position = stream.start, length = buffer.length; var trailers = [], xrefStms = []; while (position < length) { var 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; } var token = readToken(buffer, position); var 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)) { var num = m[1] | 0, gen = m[2] | 0; if (typeof this.entries[num] === 'undefined') { this.entries[num] = { offset: position - stream.start, gen: gen, uncompressed: true }; } var contentLength = void 0, startPos = position + token.length; while (startPos < buffer.length) { var endPos = startPos + skipUntil(buffer, startPos, objBytes) + 4; contentLength = endPos - position; var checkPos = Math.max(endPos - CHECK_CONTENT_LENGTH, startPos); var tokenStr = (0, _util.bytesToString)(buffer.subarray(checkPos, endPos)); if (endobjRegExp.test(tokenStr)) { break; } else { var 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; } var content = buffer.subarray(position, position + contentLength); var 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; } } var i, ii; for (i = 0, ii = xrefStms.length; i < ii; ++i) { this.startXRefQueue.push(xrefStms[i]); this.readXRef(true); } var trailerDict; for (i = 0, ii = trailers.length; i < ii; ++i) { stream.pos = trailers[i]; var parser = new _parser.Parser(new _parser.Lexer(stream), true, this, true); var obj = parser.getObj(); if (!(0, _primitives.isCmd)(obj, 'trailer')) { continue; } var dict = parser.getObj(); if (!(0, _primitives.isDict)(dict)) { continue; } var rootDict = void 0; try { rootDict = dict.get('Root'); } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } continue; } if (!(0, _primitives.isDict)(rootDict) || !rootDict.has('Pages')) { continue; } if (dict.has('ID')) { return dict; } trailerDict = dict; } if (trailerDict) { return trailerDict; } throw new _util.InvalidPDFException('Invalid PDF structure'); }, readXRef: function XRef_readXRef(recoveryMode) { var stream = this.stream; var startXRefParsedCache = Object.create(null); try { while (this.startXRefQueue.length) { var startXRef = this.startXRefQueue[0]; if (startXRefParsedCache[startXRef]) { (0, _util.warn)('readXRef - skipping XRef table since it was already parsed.'); this.startXRefQueue.shift(); continue; } startXRefParsedCache[startXRef] = true; stream.pos = startXRef + stream.start; var parser = new _parser.Parser(new _parser.Lexer(stream), true, this); var obj = parser.getObj(); var 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)) { var 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') || !(0, _primitives.isStream)(obj = parser.getObj())) { 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 ((0, _primitives.isRef)(obj)) { this.startXRefQueue.push(obj.num); } this.startXRefQueue.shift(); } return this.topDict; } catch (e) { if (e instanceof _util.MissingDataException) { throw e; } (0, _util.info)('(while reading XRef): ' + e); } if (recoveryMode) { return; } throw new _util.XRefParseException(); }, getEntry: function XRef_getEntry(i) { var xrefEntry = this.entries[i]; if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { return xrefEntry; } return null; }, fetchIfRef: function XRef_fetchIfRef(obj, suppressEncryption) { if (!(0, _primitives.isRef)(obj)) { return obj; } return this.fetch(obj, suppressEncryption); }, fetch: function XRef_fetch(ref, suppressEncryption) { if (!(0, _primitives.isRef)(ref)) { throw new Error('ref object is not a reference'); } var num = ref.num; if (num in this.cache) { var cacheEntry = this.cache[num]; if (cacheEntry instanceof _primitives.Dict && !cacheEntry.objId) { cacheEntry.objId = ref.toString(); } return cacheEntry; } var xrefEntry = this.getEntry(num); if (xrefEntry === null) { return this.cache[num] = null; } if (xrefEntry.uncompressed) { xrefEntry = this.fetchUncompressed(ref, xrefEntry, suppressEncryption); } else { xrefEntry = this.fetchCompressed(ref, xrefEntry, suppressEncryption); } if ((0, _primitives.isDict)(xrefEntry)) { xrefEntry.objId = ref.toString(); } else if ((0, _primitives.isStream)(xrefEntry)) { xrefEntry.dict.objId = ref.toString(); } return xrefEntry; }, fetchUncompressed: function fetchUncompressed(ref, xrefEntry) { var suppressEncryption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var gen = ref.gen; var num = ref.num; if (xrefEntry.gen !== gen) { throw new _util.XRefEntryException("Inconsistent generation in XRef: ".concat(ref)); } var stream = this.stream.makeSubStream(xrefEntry.offset + this.stream.start); var parser = new _parser.Parser(new _parser.Lexer(stream), true, this); var obj1 = parser.getObj(); var obj2 = parser.getObj(); var obj3 = parser.getObj(); if (!Number.isInteger(obj1)) { obj1 = parseInt(obj1, 10); } if (!Number.isInteger(obj2)) { obj2 = parseInt(obj2, 10); } if (obj1 !== num || obj2 !== gen || !(0, _primitives.isCmd)(obj3)) { throw new _util.XRefEntryException("Bad (uncompressed) XRef entry: ".concat(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 _util.XRefEntryException("Bad (uncompressed) XRef entry: ".concat(ref)); } if (this.encrypt && !suppressEncryption) { xrefEntry = parser.getObj(this.encrypt.createCipherTransform(num, gen)); } else { xrefEntry = parser.getObj(); } if (!(0, _primitives.isStream)(xrefEntry)) { this.cache[num] = xrefEntry; } return xrefEntry; }, fetchCompressed: function fetchCompressed(ref, xrefEntry) { var tableOffset = xrefEntry.offset; var stream = this.fetch(new _primitives.Ref(tableOffset, 0)); if (!(0, _primitives.isStream)(stream)) { throw new _util.FormatError('bad ObjStm stream'); } var first = stream.dict.get('First'); var n = stream.dict.get('N'); if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new _util.FormatError('invalid first and n parameters for ObjStm stream'); } var parser = new _parser.Parser(new _parser.Lexer(stream), false, this); parser.allowStreams = true; var i, entries = [], num, nums = []; for (i = 0; i < n; ++i) { num = parser.getObj(); if (!Number.isInteger(num)) { throw new _util.FormatError("invalid object number in the ObjStm stream: ".concat(num)); } nums.push(num); var offset = parser.getObj(); if (!Number.isInteger(offset)) { throw new _util.FormatError("invalid object offset in the ObjStm stream: ".concat(offset)); } } for (i = 0; i < n; ++i) { entries.push(parser.getObj()); if ((0, _primitives.isCmd)(parser.buf1, 'endobj')) { parser.shift(); } num = nums[i]; var entry = this.entries[num]; if (entry && entry.offset === tableOffset && entry.gen === i) { this.cache[num] = entries[i]; } } xrefEntry = entries[xrefEntry.gen]; if (xrefEntry === undefined) { throw new _util.XRefEntryException("Bad (compressed) XRef entry: ".concat(ref)); } return xrefEntry; }, fetchIfRefAsync: function () { var _fetchIfRefAsync = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee(obj, suppressEncryption) { return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if ((0, _primitives.isRef)(obj)) { _context.next = 2; break; } return _context.abrupt("return", obj); case 2: return _context.abrupt("return", this.fetchAsync(obj, suppressEncryption)); case 3: case "end": return _context.stop(); } } }, _callee, this); })); function fetchIfRefAsync(_x, _x2) { return _fetchIfRefAsync.apply(this, arguments); } return fetchIfRefAsync; }(), fetchAsync: function () { var _fetchAsync = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee2(ref, suppressEncryption) { return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.prev = 0; return _context2.abrupt("return", this.fetch(ref, suppressEncryption)); case 4: _context2.prev = 4; _context2.t0 = _context2["catch"](0); if (_context2.t0 instanceof _util.MissingDataException) { _context2.next = 8; break; } throw _context2.t0; case 8: _context2.next = 10; return this.pdfManager.requestRange(_context2.t0.begin, _context2.t0.end); case 10: return _context2.abrupt("return", this.fetchAsync(ref, suppressEncryption)); case 11: case "end": return _context2.stop(); } } }, _callee2, this, [[0, 4]]); })); function fetchAsync(_x3, _x4) { return _fetchAsync.apply(this, arguments); } return fetchAsync; }(), getCatalogObj: function XRef_getCatalogObj() { return this.root; } }; return XRef; }(); exports.XRef = XRef; var NameOrNumberTree = /*#__PURE__*/ function () { function NameOrNumberTree(root, xref, type) { _classCallCheck(this, NameOrNumberTree); if (this.constructor === NameOrNumberTree) { (0, _util.unreachable)('Cannot initialize NameOrNumberTree.'); } this.root = root; this.xref = xref; this._type = type; } _createClass(NameOrNumberTree, [{ key: "getAll", value: function getAll() { var dict = Object.create(null); if (!this.root) { return dict; } var xref = this.xref; var processed = new _primitives.RefSet(); processed.put(this.root); var queue = [this.root]; while (queue.length > 0) { var obj = xref.fetchIfRef(queue.shift()); if (!(0, _primitives.isDict)(obj)) { continue; } if (obj.has('Kids')) { var kids = obj.get('Kids'); for (var i = 0, ii = kids.length; i < ii; i++) { var kid = kids[i]; if (processed.has(kid)) { throw new _util.FormatError("Duplicate entry in \"".concat(this._type, "\" tree.")); } queue.push(kid); processed.put(kid); } continue; } var entries = obj.get(this._type); if (Array.isArray(entries)) { for (var _i2 = 0, _ii = entries.length; _i2 < _ii; _i2 += 2) { dict[xref.fetchIfRef(entries[_i2])] = xref.fetchIfRef(entries[_i2 + 1]); } } } return dict; } }, { key: "get", value: function get(key) { if (!this.root) { return null; } var xref = this.xref; var kidsOrEntries = xref.fetchIfRef(this.root); var loopCount = 0; var MAX_LEVELS = 10; while (kidsOrEntries.has('Kids')) { if (++loopCount > MAX_LEVELS) { (0, _util.warn)("Search depth limit reached for \"".concat(this._type, "\" tree.")); return null; } var kids = kidsOrEntries.get('Kids'); if (!Array.isArray(kids)) { return null; } var l = 0, r = kids.length - 1; while (l <= r) { var m = l + r >> 1; var kid = xref.fetchIfRef(kids[m]); var 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; } } var entries = kidsOrEntries.get(this._type); if (Array.isArray(entries)) { var _l = 0, _r = entries.length - 2; while (_l <= _r) { var tmp = _l + _r >> 1, _m = tmp + (tmp & 1); var 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]); } } (0, _util.info)("Falling back to an exhaustive search, for key \"".concat(key, "\", ") + "in \"".concat(this._type, "\" tree.")); for (var _m2 = 0, mm = entries.length; _m2 < mm; _m2 += 2) { var _currentKey = xref.fetchIfRef(entries[_m2]); if (_currentKey === key) { (0, _util.warn)("The \"".concat(key, "\" key was found at an incorrect, ") + "i.e. out-of-order, position in \"".concat(this._type, "\" tree.")); return xref.fetchIfRef(entries[_m2 + 1]); } } } return null; } }]); return NameOrNumberTree; }(); var NameTree = /*#__PURE__*/ function (_NameOrNumberTree) { _inherits(NameTree, _NameOrNumberTree); function NameTree(root, xref) { _classCallCheck(this, NameTree); return _possibleConstructorReturn(this, _getPrototypeOf(NameTree).call(this, root, xref, 'Names')); } return NameTree; }(NameOrNumberTree); var NumberTree = /*#__PURE__*/ function (_NameOrNumberTree2) { _inherits(NumberTree, _NameOrNumberTree2); function NumberTree(root, xref) { _classCallCheck(this, NumberTree); return _possibleConstructorReturn(this, _getPrototypeOf(NumberTree).call(this, root, xref, 'Nums')); } return NumberTree; }(NameOrNumberTree); var FileSpec = function FileSpecClosure() { function FileSpec(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'); } } 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; } FileSpec.prototype = { get filename() { if (!this._filename && this.root) { var 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')); } var content = null; if (this.contentRef) { var xref = this.xref; var fileObj = 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 }; } }; return FileSpec; }(); exports.FileSpec = FileSpec; var ObjectLoader = function () { function mayHaveChildren(value) { return (0, _primitives.isRef)(value) || (0, _primitives.isDict)(value) || Array.isArray(value) || (0, _primitives.isStream)(value); } function addChildren(node, nodesToVisit) { if ((0, _primitives.isDict)(node) || (0, _primitives.isStream)(node)) { var dict = (0, _primitives.isDict)(node) ? node : node.dict; var dictKeys = dict.getKeys(); for (var i = 0, ii = dictKeys.length; i < ii; i++) { var rawValue = dict.getRaw(dictKeys[i]); if (mayHaveChildren(rawValue)) { nodesToVisit.push(rawValue); } } } else if (Array.isArray(node)) { for (var _i3 = 0, _ii2 = node.length; _i3 < _ii2; _i3++) { var value = node[_i3]; if (mayHaveChildren(value)) { nodesToVisit.push(value); } } } } function ObjectLoader(dict, keys, xref) { this.dict = dict; this.keys = keys; this.xref = xref; this.refSet = null; this.capability = null; } ObjectLoader.prototype = { load: function load() { this.capability = (0, _util.createPromiseCapability)(); if (!(this.xref.stream instanceof _chunked_stream.ChunkedStream) || this.xref.stream.getMissingChunks().length === 0) { this.capability.resolve(); return this.capability.promise; } var keys = this.keys, dict = this.dict; this.refSet = new _primitives.RefSet(); var nodesToVisit = []; for (var i = 0, ii = keys.length; i < ii; i++) { var rawValue = dict.getRaw(keys[i]); if (rawValue !== undefined) { nodesToVisit.push(rawValue); } } this._walk(nodesToVisit); return this.capability.promise; }, _walk: function _walk(nodesToVisit) { var _this2 = this; var nodesToRevisit = []; var pendingRequests = []; while (nodesToVisit.length) { var currentNode = nodesToVisit.pop(); if ((0, _primitives.isRef)(currentNode)) { if (this.refSet.has(currentNode)) { continue; } try { this.refSet.put(currentNode); currentNode = this.xref.fetch(currentNode); } catch (ex) { if (!(ex instanceof _util.MissingDataException)) { throw ex; } nodesToRevisit.push(currentNode); pendingRequests.push({ begin: ex.begin, end: ex.end }); } } if (currentNode && currentNode.getBaseStreams) { var baseStreams = currentNode.getBaseStreams(); var foundMissingData = false; for (var i = 0, ii = baseStreams.length; i < ii; i++) { var stream = baseStreams[i]; if (stream.getMissingChunks && stream.getMissingChunks().length) { foundMissingData = true; pendingRequests.push({ begin: stream.start, end: stream.end }); } } if (foundMissingData) { nodesToRevisit.push(currentNode); } } addChildren(currentNode, nodesToVisit); } if (pendingRequests.length) { this.xref.stream.manager.requestRanges(pendingRequests).then(function () { for (var _i4 = 0, _ii3 = nodesToRevisit.length; _i4 < _ii3; _i4++) { var node = nodesToRevisit[_i4]; if ((0, _primitives.isRef)(node)) { _this2.refSet.remove(node); } } _this2._walk(nodesToRevisit); }, this.capability.reject); return; } this.refSet = null; this.capability.resolve(); } }; return ObjectLoader; }(); exports.ObjectLoader = ObjectLoader; /***/ }), /* 155 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.isEOF = isEOF; exports.isCmd = isCmd; exports.isDict = isDict; exports.isName = isName; exports.isRef = isRef; exports.isRefsEqual = isRefsEqual; exports.isStream = isStream; exports.RefSetCache = exports.RefSet = exports.Ref = exports.Name = exports.Dict = exports.Cmd = exports.EOF = void 0; function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var EOF = {}; exports.EOF = EOF; var Name = function NameClosure() { function Name(name) { this.name = name; } Name.prototype = {}; var nameCache = Object.create(null); Name.get = function Name_get(name) { var nameValue = nameCache[name]; return nameValue ? nameValue : nameCache[name] = new Name(name); }; return Name; }(); exports.Name = Name; var Cmd = function CmdClosure() { function Cmd(cmd) { this.cmd = cmd; } Cmd.prototype = {}; var cmdCache = Object.create(null); Cmd.get = function Cmd_get(cmd) { var cmdValue = cmdCache[cmd]; return cmdValue ? cmdValue : cmdCache[cmd] = new Cmd(cmd); }; return Cmd; }(); exports.Cmd = Cmd; var Dict = function DictClosure() { var nonSerializable = function nonSerializableClosure() { return nonSerializable; }; function Dict(xref) { this._map = Object.create(null); this.xref = xref; this.objId = null; this.suppressEncryption = false; this.__nonSerializable__ = nonSerializable; } Dict.prototype = { assignXref: function Dict_assignXref(newXref) { this.xref = newXref; }, get: function Dict_get(key1, key2, key3) { var value; var xref = this.xref, suppressEncryption = this.suppressEncryption; if (typeof (value = this._map[key1]) !== 'undefined' || key1 in this._map || typeof key2 === 'undefined') { return xref ? xref.fetchIfRef(value, suppressEncryption) : value; } if (typeof (value = this._map[key2]) !== 'undefined' || key2 in this._map || typeof key3 === 'undefined') { return xref ? xref.fetchIfRef(value, suppressEncryption) : value; } value = this._map[key3] || null; return xref ? xref.fetchIfRef(value, suppressEncryption) : value; }, getAsync: function Dict_getAsync(key1, key2, key3) { var value; var xref = this.xref, suppressEncryption = this.suppressEncryption; if (typeof (value = this._map[key1]) !== 'undefined' || key1 in this._map || typeof key2 === 'undefined') { if (xref) { return xref.fetchIfRefAsync(value, suppressEncryption); } return Promise.resolve(value); } if (typeof (value = this._map[key2]) !== 'undefined' || key2 in this._map || typeof key3 === 'undefined') { if (xref) { return xref.fetchIfRefAsync(value, suppressEncryption); } return Promise.resolve(value); } value = this._map[key3] || null; if (xref) { return xref.fetchIfRefAsync(value, suppressEncryption); } return Promise.resolve(value); }, getArray: function Dict_getArray(key1, key2, key3) { var value = this.get(key1, key2, key3); var xref = this.xref, suppressEncryption = this.suppressEncryption; if (!Array.isArray(value) || !xref) { return value; } value = value.slice(); for (var i = 0, ii = value.length; i < ii; i++) { if (!isRef(value[i])) { continue; } value[i] = xref.fetch(value[i], suppressEncryption); } return value; }, getRaw: function Dict_getRaw(key) { return this._map[key]; }, getKeys: function Dict_getKeys() { return Object.keys(this._map); }, set: function Dict_set(key, value) { this._map[key] = value; }, has: function Dict_has(key) { return key in this._map; }, forEach: function Dict_forEach(callback) { for (var key in this._map) { callback(key, this.get(key)); } } }; Dict.empty = new Dict(null); Dict.merge = function (xref, dictArray) { var mergedDict = new Dict(xref); for (var i = 0, ii = dictArray.length; i < ii; i++) { var dict = dictArray[i]; if (!isDict(dict)) { continue; } for (var keyName in dict._map) { if (mergedDict._map[keyName] !== undefined) { continue; } mergedDict._map[keyName] = dict._map[keyName]; } } return mergedDict; }; return Dict; }(); exports.Dict = Dict; var Ref = function RefClosure() { function Ref(num, gen) { this.num = num; this.gen = gen; } Ref.prototype = { toString: function Ref_toString() { if (this.gen !== 0) { return "".concat(this.num, "R").concat(this.gen); } return "".concat(this.num, "R"); } }; return Ref; }(); exports.Ref = Ref; var RefSet = function RefSetClosure() { function RefSet() { this.dict = Object.create(null); } RefSet.prototype = { has: function RefSet_has(ref) { return ref.toString() in this.dict; }, put: function RefSet_put(ref) { this.dict[ref.toString()] = true; }, remove: function RefSet_remove(ref) { delete this.dict[ref.toString()]; } }; return RefSet; }(); exports.RefSet = RefSet; var RefSetCache = function RefSetCacheClosure() { function RefSetCache() { this.dict = Object.create(null); } RefSetCache.prototype = { get: function RefSetCache_get(ref) { return this.dict[ref.toString()]; }, has: function RefSetCache_has(ref) { return ref.toString() in this.dict; }, put: function RefSetCache_put(ref, obj) { this.dict[ref.toString()] = obj; }, putAlias: function RefSetCache_putAlias(ref, aliasRef) { this.dict[ref.toString()] = this.get(aliasRef); }, forEach: function RefSetCache_forEach(fn, thisArg) { for (var i in this.dict) { fn.call(thisArg, this.dict[i]); } }, clear: function RefSetCache_clear() { this.dict = Object.create(null); } }; return RefSetCache; }(); exports.RefSetCache = RefSetCache; function isEOF(v) { return v === EOF; } 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 _typeof(v) === 'object' && v !== null && v.getBytes !== undefined; } /***/ }), /* 156 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Parser = exports.Linearization = exports.Lexer = void 0; var _stream = __w_extracthighlights_require__(157); var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); var _ccitt_stream = __w_extracthighlights_require__(158); var _jbig2_stream = __w_extracthighlights_require__(160); var _jpeg_stream = __w_extracthighlights_require__(163); var _jpx_stream = __w_extracthighlights_require__(165); var MAX_LENGTH_TO_CACHE = 1000; var MAX_ADLER32_LENGTH = 5552; function computeAdler32(bytes) { var bytesLength = bytes.length; var a = 1, b = 0; for (var i = 0; i < bytesLength; ++i) { a += bytes[i] & 0xFF; b += a; } return b % 65521 << 16 | a % 65521; } var Parser = function ParserClosure() { function Parser(lexer, allowStreams, xref, recoveryMode) { this.lexer = lexer; this.allowStreams = allowStreams; this.xref = xref; this.recoveryMode = recoveryMode || false; this.imageCache = Object.create(null); this.refill(); } Parser.prototype = { refill: function Parser_refill() { this.buf1 = this.lexer.getObj(); this.buf2 = this.lexer.getObj(); }, shift: function Parser_shift() { if ((0, _primitives.isCmd)(this.buf2, 'ID')) { this.buf1 = this.buf2; this.buf2 = null; } else { this.buf1 = this.buf2; this.buf2 = this.lexer.getObj(); } }, tryShift: function Parser_tryShift() { try { this.shift(); return true; } catch (e) { if (e instanceof _util.MissingDataException) { throw e; } return false; } }, getObj: function Parser_getObj(cipherTransform) { var buf1 = this.buf1; this.shift(); if (buf1 instanceof _primitives.Cmd) { switch (buf1.cmd) { case 'BI': return this.makeInlineImage(cipherTransform); case '[': var array = []; while (!(0, _primitives.isCmd)(this.buf1, ']') && !(0, _primitives.isEOF)(this.buf1)) { array.push(this.getObj(cipherTransform)); } if ((0, _primitives.isEOF)(this.buf1)) { if (!this.recoveryMode) { throw new _util.FormatError('End of file inside array'); } return array; } this.shift(); return array; case '<<': var dict = new _primitives.Dict(this.xref); while (!(0, _primitives.isCmd)(this.buf1, '>>') && !(0, _primitives.isEOF)(this.buf1)) { if (!(0, _primitives.isName)(this.buf1)) { (0, _util.info)('Malformed dictionary: key must be a name object'); this.shift(); continue; } var key = this.buf1.name; this.shift(); if ((0, _primitives.isEOF)(this.buf1)) { break; } dict.set(key, this.getObj(cipherTransform)); } if ((0, _primitives.isEOF)(this.buf1)) { if (!this.recoveryMode) { throw new _util.FormatError('End of file inside dictionary'); } return dict; } 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)) { var num = buf1; if (Number.isInteger(this.buf1) && (0, _primitives.isCmd)(this.buf2, 'R')) { var ref = new _primitives.Ref(num, this.buf1); this.shift(); this.shift(); return ref; } return num; } if ((0, _util.isString)(buf1)) { var str = buf1; if (cipherTransform) { str = cipherTransform.decryptString(str); } return str; } return buf1; }, findDefaultInlineStreamEnd: function findDefaultInlineStreamEnd(stream) { var E = 0x45, I = 0x49, SPACE = 0x20, LF = 0xA, CR = 0xD; var n = 10, NUL = 0x0; var startPos = stream.pos, 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); if (ch === SPACE || ch === LF || ch === CR) { maybeEIPos = stream.pos; var followingBytes = stream.peekBytes(n); for (var 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) { 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)); } } var endOffset = 4; stream.skip(-endOffset); ch = stream.peekByte(); stream.skip(endOffset); if (!(0, _util.isSpace)(ch)) { endOffset--; } return stream.pos - endOffset - startPos; }, findDCTDecodeInlineStreamEnd: function Parser_findDCTDecodeInlineStreamEnd(stream) { var startPos = stream.pos, foundEOI = false, b, markerLength, length; 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; } } 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: function Parser_findASCII85DecodeInlineStreamEnd(stream) { var TILDE = 0x7E, GT = 0x3E; var startPos = stream.pos, ch, length; while ((ch = stream.getByte()) !== -1) { if (ch === TILDE && stream.peekByte() === GT) { stream.skip(); break; } } 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: function Parser_findASCIIHexDecodeInlineStreamEnd(stream) { var GT = 0x3E; var startPos = stream.pos, ch, length; while ((ch = stream.getByte()) !== -1) { if (ch === GT) { break; } } 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: function Parser_inlineStreamSkipEI(stream) { var E = 0x45, I = 0x49; var 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: function Parser_makeInlineImage(cipherTransform) { var lexer = this.lexer; var stream = lexer.stream; var dict = new _primitives.Dict(this.xref), dictLength; while (!(0, _primitives.isCmd)(this.buf1, 'ID') && !(0, _primitives.isEOF)(this.buf1)) { if (!(0, _primitives.isName)(this.buf1)) { throw new _util.FormatError('Dictionary key must be a name object'); } var key = this.buf1.name; this.shift(); if ((0, _primitives.isEOF)(this.buf1)) { break; } dict.set(key, this.getObj(cipherTransform)); } if (lexer.beginInlineImagePos !== -1) { dictLength = stream.pos - lexer.beginInlineImagePos; } var filter = dict.get('Filter', 'F'), filterName; if ((0, _primitives.isName)(filter)) { filterName = filter.name; } else if (Array.isArray(filter)) { var filterZero = this.xref.fetchIfRef(filter[0]); if ((0, _primitives.isName)(filterZero)) { filterName = filterZero.name; } } var startPos = stream.pos, length; if (filterName === 'DCTDecode' || filterName === 'DCT') { length = this.findDCTDecodeInlineStreamEnd(stream); } else if (filterName === 'ASCII85Decode' || filterName === 'A85') { length = this.findASCII85DecodeInlineStreamEnd(stream); } else if (filterName === 'ASCIIHexDecode' || filterName === 'AHx') { length = this.findASCIIHexDecodeInlineStreamEnd(stream); } else { length = this.findDefaultInlineStreamEnd(stream); } var imageStream = stream.makeSubStream(startPos, length, dict); var cacheKey; if (length < MAX_LENGTH_TO_CACHE && dictLength < MAX_ADLER32_LENGTH) { var imageBytes = imageStream.getBytes(); imageStream.reset(); var initialStreamPos = stream.pos; stream.pos = lexer.beginInlineImagePos; var dictBytes = stream.getBytes(dictLength); stream.pos = initialStreamPos; cacheKey = computeAdler32(imageBytes) + '_' + computeAdler32(dictBytes); var 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: function _findStreamLength(startPos, signature) { var stream = this.lexer.stream; stream.pos = startPos; var SCAN_BLOCK_LENGTH = 2048; var signatureLength = signature.length; while (stream.pos < stream.end) { var scanBytes = stream.peekBytes(SCAN_BLOCK_LENGTH); var scanLength = scanBytes.length - signatureLength; if (scanLength <= 0) { break; } var pos = 0; while (pos < scanLength) { var 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: function Parser_makeStream(dict, cipherTransform) { var lexer = this.lexer; var stream = lexer.stream; lexer.skipToNextLine(); var startPos = stream.pos - 1; var length = dict.get('Length'); if (!Number.isInteger(length)) { (0, _util.info)('Bad ' + length + ' attribute in stream'); length = 0; } stream.pos = startPos + length; lexer.nextChar(); if (this.tryShift() && (0, _primitives.isCmd)(this.buf2, 'endstream')) { this.shift(); } else { var ENDSTREAM_SIGNATURE = new Uint8Array([0x65, 0x6E, 0x64, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6D]); var actualLength = this._findStreamLength(startPos, ENDSTREAM_SIGNATURE); if (actualLength < 0) { var MAX_TRUNCATION = 1; for (var i = 1; i <= MAX_TRUNCATION; i++) { var end = ENDSTREAM_SIGNATURE.length - i; var TRUNCATED_SIGNATURE = ENDSTREAM_SIGNATURE.slice(0, end); var maybeLength = this._findStreamLength(startPos, TRUNCATED_SIGNATURE); if (maybeLength >= 0) { var lastByte = stream.peekBytes(end + 1)[end]; if (!(0, _util.isSpace)(lastByte)) { break; } (0, _util.info)("Found \"".concat((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: function Parser_filter(stream, dict, length) { var filter = dict.get('Filter', 'F'); var params = dict.get('DecodeParms', 'DP'); if ((0, _primitives.isName)(filter)) { if (Array.isArray(params)) { (0, _util.warn)('/DecodeParms should not contain an Array, ' + 'when /Filter contains a Name.'); } return this.makeFilter(stream, filter.name, length, params); } var maybeLength = length; if (Array.isArray(filter)) { var filterArray = filter; var paramsArray = params; for (var 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: function Parser_makeFilter(stream, name, maybeLength, params) { if (maybeLength === 0) { (0, _util.warn)('Empty "' + name + '" stream.'); return new _stream.NullStream(); } try { var xrefStreamStats = this.xref.stats.streamTypes; if (name === 'FlateDecode' || name === 'Fl') { xrefStreamStats[_util.StreamType.FLATE] = true; if (params) { return new _stream.PredictorStream(new _stream.FlateStream(stream, maybeLength), maybeLength, params); } return new _stream.FlateStream(stream, maybeLength); } if (name === 'LZWDecode' || name === 'LZW') { xrefStreamStats[_util.StreamType.LZW] = true; var earlyChange = 1; if (params) { if (params.has('EarlyChange')) { earlyChange = params.get('EarlyChange'); } return new _stream.PredictorStream(new _stream.LZWStream(stream, maybeLength, earlyChange), maybeLength, params); } return new _stream.LZWStream(stream, maybeLength, earlyChange); } if (name === 'DCTDecode' || name === 'DCT') { xrefStreamStats[_util.StreamType.DCT] = true; return new _jpeg_stream.JpegStream(stream, maybeLength, stream.dict, params); } if (name === 'JPXDecode' || name === 'JPX') { xrefStreamStats[_util.StreamType.JPX] = true; return new _jpx_stream.JpxStream(stream, maybeLength, stream.dict, params); } if (name === 'ASCII85Decode' || name === 'A85') { xrefStreamStats[_util.StreamType.A85] = true; return new _stream.Ascii85Stream(stream, maybeLength); } if (name === 'ASCIIHexDecode' || name === 'AHx') { xrefStreamStats[_util.StreamType.AHX] = true; return new _stream.AsciiHexStream(stream, maybeLength); } if (name === 'CCITTFaxDecode' || name === 'CCF') { xrefStreamStats[_util.StreamType.CCF] = true; return new _ccitt_stream.CCITTFaxStream(stream, maybeLength, params); } if (name === 'RunLengthDecode' || name === 'RL') { xrefStreamStats[_util.StreamType.RL] = true; return new _stream.RunLengthStream(stream, maybeLength); } if (name === 'JBIG2Decode') { xrefStreamStats[_util.StreamType.JBIG] = true; return new _jbig2_stream.Jbig2Stream(stream, maybeLength, stream.dict, params); } (0, _util.warn)('filter "' + name + '" not supported yet'); return stream; } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } (0, _util.warn)('Invalid stream: \"' + ex + '\"'); return new _stream.NullStream(); } } }; return Parser; }(); exports.Parser = Parser; var Lexer = function LexerClosure() { function Lexer(stream, knownCommands) { this.stream = stream; this.nextChar(); this.strBuf = []; this.knownCommands = knownCommands; this.beginInlineImagePos = -1; } var 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; } Lexer.prototype = { nextChar: function Lexer_nextChar() { return this.currentChar = this.stream.getByte(); }, peekChar: function Lexer_peekChar() { return this.stream.peekByte(); }, getNumber: function Lexer_getNumber() { var ch = this.currentChar; var eNotation = false; var divideBy = 0; var 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, _util.isSpace)(ch) || ch === -1)) { (0, _util.warn)('Lexer.getNumber - treating a single decimal point as zero.'); return 0; } throw new _util.FormatError("Invalid number: ".concat(String.fromCharCode(ch), " (charCode ").concat(ch, ")")); } sign = sign || 1; var baseValue = ch - 0x30; var powerValue = 0; var powerValueSign = 1; while ((ch = this.nextChar()) >= 0) { if (0x30 <= ch && ch <= 0x39) { var 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'); } 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 *= Math.pow(10, powerValueSign * powerValue); } return sign * baseValue; }, getString: function Lexer_getString() { var numParen = 1; var done = false; var strBuf = this.strBuf; strBuf.length = 0; var ch = this.nextChar(); while (true) { var 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: var 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: function Lexer_getName() { var ch, previousCh; var 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; } var x = toHexDigit(ch); if (x !== -1) { previousCh = ch; ch = this.nextChar(); var 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('')); }, getHexString: function Lexer_getHexString() { var strBuf = this.strBuf; strBuf.length = 0; var ch = this.currentChar; var isFirstHex = true; var firstDigit; var secondDigit; 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) { (0, _util.warn)('Ignoring invalid character "' + ch + '" in hex string'); ch = this.nextChar(); continue; } } else { secondDigit = toHexDigit(ch); if (secondDigit === -1) { (0, _util.warn)('Ignoring invalid character "' + ch + '" in hex string'); ch = this.nextChar(); continue; } strBuf.push(String.fromCharCode(firstDigit << 4 | secondDigit)); } isFirstHex = !isFirstHex; ch = this.nextChar(); } } return strBuf.join(''); }, getObj: function Lexer_getObj() { var comment = false; var 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: ".concat(ch)); } var str = String.fromCharCode(ch); var knownCommands = this.knownCommands; var knownCommandFound = knownCommands && knownCommands[str] !== undefined; while ((ch = this.nextChar()) >= 0 && !specialChars[ch]) { var possibleCommand = str + String.fromCharCode(ch); if (knownCommandFound && knownCommands[possibleCommand] === undefined) { break; } if (str.length === 128) { throw new _util.FormatError("Command token too long: ".concat(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); }, skipToNextLine: function Lexer_skipToNextLine() { var 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(); } } }; return Lexer; }(); exports.Lexer = Lexer; var Linearization = { create: function LinearizationCreate(stream) { function getInt(name, allowZeroValue) { var 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() { var hints = linDict.get('H'), hintsLength, item; if (Array.isArray(hints) && ((hintsLength = hints.length) === 2 || hintsLength === 4)) { for (var index = 0; index < hintsLength; index++) { if (!(Number.isInteger(item = hints[index]) && item > 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.'); } var parser = new Parser(new Lexer(stream), false, null); var obj1 = parser.getObj(); var obj2 = parser.getObj(); var obj3 = parser.getObj(); var linDict = parser.getObj(); var 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('L')) !== stream.length) { throw new Error('The "L" parameter in the linearization dictionary ' + 'does not equal the stream length.'); } return { length: length, hints: getHints(), objectNumberFirst: getInt('O'), endFirst: getInt('E'), numPages: getInt('N'), mainXRefEntriesOffset: getInt('T'), pageFirst: linDict.has('P') ? getInt('P', true) : 0 }; } }; exports.Linearization = Linearization; /***/ }), /* 157 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.LZWStream = exports.StringStream = exports.StreamsSequenceStream = exports.Stream = exports.RunLengthStream = exports.PredictorStream = exports.NullStream = exports.FlateStream = exports.DecodeStream = exports.DecryptStream = exports.AsciiHexStream = exports.Ascii85Stream = void 0; var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } var Stream = function StreamClosure() { function Stream(arrayBuffer, start, length, dict) { 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; } Stream.prototype = { get length() { return this.end - this.start; }, get isEmpty() { return this.length === 0; }, getByte: function Stream_getByte() { if (this.pos >= this.end) { return -1; } return this.bytes[this.pos++]; }, getUint16: function Stream_getUint16() { var b0 = this.getByte(); var b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; }, getInt32: function Stream_getInt32() { var b0 = this.getByte(); var b1 = this.getByte(); var b2 = this.getByte(); var b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; }, getBytes: function getBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.bytes; var pos = this.pos; var strEnd = this.end; if (!length) { var _subarray = bytes.subarray(pos, strEnd); return forceClamped ? new Uint8ClampedArray(_subarray) : _subarray; } var end = pos + length; if (end > strEnd) { end = strEnd; } this.pos = end; var subarray = bytes.subarray(pos, end); return forceClamped ? new Uint8ClampedArray(subarray) : subarray; }, peekByte: function Stream_peekByte() { var peekedByte = this.getByte(); this.pos--; return peekedByte; }, peekBytes: function peekBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; }, skip: function Stream_skip(n) { if (!n) { n = 1; } this.pos += n; }, reset: function Stream_reset() { this.pos = this.start; }, moveStart: function Stream_moveStart() { this.start = this.pos; }, makeSubStream: function Stream_makeSubStream(start, length, dict) { return new Stream(this.bytes.buffer, start, length, dict); } }; return Stream; }(); exports.Stream = Stream; var StringStream = function StringStreamClosure() { function StringStream(str) { var bytes = (0, _util.stringToBytes)(str); Stream.call(this, bytes); } StringStream.prototype = Stream.prototype; return StringStream; }(); exports.StringStream = StringStream; var DecodeStream = function DecodeStreamClosure() { var emptyBuffer = new Uint8Array(0); function DecodeStream(maybeMinBufferLength) { 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; } } } DecodeStream.prototype = { get isEmpty() { while (!this.eof && this.bufferLength === 0) { this.readBlock(); } return this.bufferLength === 0; }, ensureBuffer: function DecodeStream_ensureBuffer(requested) { var buffer = this.buffer; if (requested <= buffer.byteLength) { return buffer; } var size = this.minBufferLength; while (size < requested) { size *= 2; } var buffer2 = new Uint8Array(size); buffer2.set(buffer); return this.buffer = buffer2; }, getByte: function DecodeStream_getByte() { var pos = this.pos; while (this.bufferLength <= pos) { if (this.eof) { return -1; } this.readBlock(); } return this.buffer[this.pos++]; }, getUint16: function DecodeStream_getUint16() { var b0 = this.getByte(); var b1 = this.getByte(); if (b0 === -1 || b1 === -1) { return -1; } return (b0 << 8) + b1; }, getInt32: function DecodeStream_getInt32() { var b0 = this.getByte(); var b1 = this.getByte(); var b2 = this.getByte(); var b3 = this.getByte(); return (b0 << 24) + (b1 << 16) + (b2 << 8) + b3; }, getBytes: function getBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var end, pos = this.pos; if (length) { this.ensureBuffer(pos + length); end = pos + length; while (!this.eof && this.bufferLength < end) { this.readBlock(); } var bufEnd = this.bufferLength; if (end > bufEnd) { end = bufEnd; } } else { while (!this.eof) { this.readBlock(); } end = this.bufferLength; } this.pos = end; var subarray = this.buffer.subarray(pos, end); return forceClamped && !(subarray instanceof Uint8ClampedArray) ? new Uint8ClampedArray(subarray) : subarray; }, peekByte: function DecodeStream_peekByte() { var peekedByte = this.getByte(); this.pos--; return peekedByte; }, peekBytes: function peekBytes(length) { var forceClamped = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var bytes = this.getBytes(length, forceClamped); this.pos -= bytes.length; return bytes; }, makeSubStream: function DecodeStream_makeSubStream(start, length, dict) { var end = start + length; while (this.bufferLength <= end && !this.eof) { this.readBlock(); } return new Stream(this.buffer, start, length, dict); }, skip: function DecodeStream_skip(n) { if (!n) { n = 1; } this.pos += n; }, reset: function DecodeStream_reset() { this.pos = 0; }, getBaseStreams: function DecodeStream_getBaseStreams() { if (this.str && this.str.getBaseStreams) { return this.str.getBaseStreams(); } return []; } }; return DecodeStream; }(); exports.DecodeStream = DecodeStream; var StreamsSequenceStream = function StreamsSequenceStreamClosure() { function StreamsSequenceStream(streams) { this.streams = streams; var maybeLength = 0; for (var i = 0, ii = streams.length; i < ii; i++) { var stream = streams[i]; if (stream instanceof DecodeStream) { maybeLength += stream._rawMinBufferLength; } else { maybeLength += stream.length; } } DecodeStream.call(this, maybeLength); } StreamsSequenceStream.prototype = Object.create(DecodeStream.prototype); StreamsSequenceStream.prototype.readBlock = function streamSequenceStreamReadBlock() { var streams = this.streams; if (streams.length === 0) { this.eof = true; return; } var stream = streams.shift(); var chunk = stream.getBytes(); var bufferLength = this.bufferLength; var newLength = bufferLength + chunk.length; var buffer = this.ensureBuffer(newLength); buffer.set(chunk, bufferLength); this.bufferLength = newLength; }; StreamsSequenceStream.prototype.getBaseStreams = function StreamsSequenceStream_getBaseStreams() { var baseStreams = []; for (var i = 0, ii = this.streams.length; i < ii; i++) { var stream = this.streams[i]; if (stream.getBaseStreams) { baseStreams.push.apply(baseStreams, _toConsumableArray(stream.getBaseStreams())); } } return baseStreams; }; return StreamsSequenceStream; }(); exports.StreamsSequenceStream = StreamsSequenceStream; var FlateStream = function FlateStreamClosure() { var codeLenCodeMap = new Int32Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); var 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]); var 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]); var 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]; var 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]; function FlateStream(str, maybeLength) { this.str = str; this.dict = str.dict; var cmf = str.getByte(); var flg = str.getByte(); if (cmf === -1 || flg === -1) { throw new _util.FormatError("Invalid header in flate stream: ".concat(cmf, ", ").concat(flg)); } if ((cmf & 0x0f) !== 0x08) { throw new _util.FormatError("Unknown compression method in flate stream: ".concat(cmf, ", ").concat(flg)); } if (((cmf << 8) + flg) % 31 !== 0) { throw new _util.FormatError("Bad FCHECK in flate stream: ".concat(cmf, ", ").concat(flg)); } if (flg & 0x20) { throw new _util.FormatError("FDICT bit set in flate stream: ".concat(cmf, ", ").concat(flg)); } this.codeSize = 0; this.codeBuf = 0; DecodeStream.call(this, maybeLength); } FlateStream.prototype = Object.create(DecodeStream.prototype); FlateStream.prototype.getBits = function FlateStream_getBits(bits) { var str = this.str; var codeSize = this.codeSize; var codeBuf = this.codeBuf; var 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; }; FlateStream.prototype.getCode = function FlateStream_getCode(table) { var str = this.str; var codes = table[0]; var maxLen = table[1]; var codeSize = this.codeSize; var codeBuf = this.codeBuf; var b; while (codeSize < maxLen) { if ((b = str.getByte()) === -1) { break; } codeBuf |= b << codeSize; codeSize += 8; } var code = codes[codeBuf & (1 << maxLen) - 1]; var codeLen = code >> 16; var 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; }; FlateStream.prototype.generateHuffmanTable = function flateStreamGenerateHuffmanTable(lengths) { var n = lengths.length; var maxLen = 0; var i; for (i = 0; i < n; ++i) { if (lengths[i] > maxLen) { maxLen = lengths[i]; } } var size = 1 << maxLen; var codes = new Int32Array(size); for (var len = 1, code = 0, skip = 2; len <= maxLen; ++len, code <<= 1, skip <<= 1) { for (var val = 0; val < n; ++val) { if (lengths[val] === len) { var code2 = 0; var 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]; }; FlateStream.prototype.readBlock = function FlateStream_readBlock() { var buffer, len; var str = this.str; var hdr = this.getBits(3); if (hdr & 1) { this.eof = true; } hdr >>= 1; if (hdr === 0) { var b; if ((b = str.getByte()) === -1) { throw new _util.FormatError('Bad block header in flate stream'); } var 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'); } var 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; var bufferLength = this.bufferLength; buffer = this.ensureBuffer(bufferLength + blockLen); var end = bufferLength + blockLen; this.bufferLength = end; if (blockLen === 0) { if (str.peekByte() === -1) { this.eof = true; } } else { for (var n = bufferLength; n < end; ++n) { if ((b = str.getByte()) === -1) { this.eof = true; break; } buffer[n] = b; } } return; } var litCodeTable; var distCodeTable; if (hdr === 1) { litCodeTable = fixedLitCodeTab; distCodeTable = fixedDistCodeTab; } else if (hdr === 2) { var numLitCodes = this.getBits(5) + 257; var numDistCodes = this.getBits(5) + 1; var numCodeLenCodes = this.getBits(4) + 4; var codeLenCodeLengths = new Uint8Array(codeLenCodeMap.length); var i; for (i = 0; i < numCodeLenCodes; ++i) { codeLenCodeLengths[codeLenCodeMap[i]] = this.getBits(3); } var codeLenCodeTab = this.generateHuffmanTable(codeLenCodeLengths); len = 0; i = 0; var codes = numLitCodes + numDistCodes; var codeLengths = new Uint8Array(codes); var bitsLength, bitsOffset, what; while (i < codes) { var 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; } var 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; var limit = buffer ? buffer.length : 0; var pos = this.bufferLength; while (true) { var 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]; var 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); } var dist = (code1 & 0xffff) + code2; if (pos + len >= limit) { buffer = this.ensureBuffer(pos + len); limit = buffer.length; } for (var k = 0; k < len; ++k, ++pos) { buffer[pos] = buffer[pos - dist]; } } }; return FlateStream; }(); exports.FlateStream = FlateStream; var PredictorStream = function PredictorStreamClosure() { function PredictorStream(str, maybeLength, params) { if (!(0, _primitives.isDict)(params)) { return str; } var 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: ".concat(predictor)); } if (predictor === 2) { this.readBlock = this.readBlockTiff; } else { this.readBlock = this.readBlockPng; } this.str = str; this.dict = str.dict; var colors = this.colors = params.get('Colors') || 1; var bits = this.bits = params.get('BitsPerComponent') || 8; var columns = this.columns = params.get('Columns') || 1; this.pixBytes = colors * bits + 7 >> 3; this.rowBytes = columns * colors * bits + 7 >> 3; DecodeStream.call(this, maybeLength); return this; } PredictorStream.prototype = Object.create(DecodeStream.prototype); PredictorStream.prototype.readBlockTiff = function predictorStreamReadBlockTiff() { var rowBytes = this.rowBytes; var bufferLength = this.bufferLength; var buffer = this.ensureBuffer(bufferLength + rowBytes); var bits = this.bits; var colors = this.colors; var rawBytes = this.str.getBytes(rowBytes); this.eof = !rawBytes.length; if (this.eof) { return; } var inbuf = 0, outbuf = 0; var inbits = 0, outbits = 0; var pos = bufferLength; var i; if (bits === 1 && colors === 1) { for (i = 0; i < rowBytes; ++i) { var 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) { var bytesPerPixel = colors * 2; for (i = 0; i < bytesPerPixel; ++i) { buffer[pos++] = rawBytes[i]; } for (; i < rowBytes; i += 2) { var 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 { var compArray = new Uint8Array(colors + 1); var bitMask = (1 << bits) - 1; var j = 0, k = bufferLength; var columns = this.columns; for (i = 0; i < columns; ++i) { for (var 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; }; PredictorStream.prototype.readBlockPng = function predictorStreamReadBlockPng() { var rowBytes = this.rowBytes; var pixBytes = this.pixBytes; var predictor = this.str.getByte(); var rawBytes = this.str.getBytes(rowBytes); this.eof = !rawBytes.length; if (this.eof) { return; } var bufferLength = this.bufferLength; var buffer = this.ensureBuffer(bufferLength + rowBytes); var prevRow = buffer.subarray(bufferLength - rowBytes, bufferLength); if (prevRow.length === 0) { prevRow = new Uint8Array(rowBytes); } var 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]; var upLeft = prevRow[i - pixBytes]; var left = buffer[j - pixBytes]; var p = left + up - upLeft; var pa = p - left; if (pa < 0) { pa = -pa; } var pb = p - up; if (pb < 0) { pb = -pb; } var 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: ".concat(predictor)); } this.bufferLength += rowBytes; }; return PredictorStream; }(); exports.PredictorStream = PredictorStream; var DecryptStream = function DecryptStreamClosure() { function DecryptStream(str, maybeLength, decrypt) { this.str = str; this.dict = str.dict; this.decrypt = decrypt; this.nextChunk = null; this.initialized = false; DecodeStream.call(this, maybeLength); } var chunkSize = 512; DecryptStream.prototype = Object.create(DecodeStream.prototype); DecryptStream.prototype.readBlock = function DecryptStream_readBlock() { var 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); var hasMoreData = this.nextChunk && this.nextChunk.length > 0; var decrypt = this.decrypt; chunk = decrypt(chunk, !hasMoreData); var bufferLength = this.bufferLength; var i, n = chunk.length; var buffer = this.ensureBuffer(bufferLength + n); for (i = 0; i < n; i++) { buffer[bufferLength++] = chunk[i]; } this.bufferLength = bufferLength; }; return DecryptStream; }(); exports.DecryptStream = DecryptStream; var Ascii85Stream = function Ascii85StreamClosure() { function Ascii85Stream(str, maybeLength) { this.str = str; this.dict = str.dict; this.input = new Uint8Array(5); if (maybeLength) { maybeLength = 0.8 * maybeLength; } DecodeStream.call(this, maybeLength); } Ascii85Stream.prototype = Object.create(DecodeStream.prototype); Ascii85Stream.prototype.readBlock = function Ascii85Stream_readBlock() { var TILDA_CHAR = 0x7E; var Z_LOWER_CHAR = 0x7A; var EOF = -1; var str = this.str; var c = str.getByte(); while ((0, _util.isSpace)(c)) { c = str.getByte(); } if (c === EOF || c === TILDA_CHAR) { this.eof = true; return; } var bufferLength = this.bufferLength, buffer; var 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 { var input = this.input; input[0] = c; for (i = 1; i < 5; ++i) { c = str.getByte(); while ((0, _util.isSpace)(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; } var 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; } } }; return Ascii85Stream; }(); exports.Ascii85Stream = Ascii85Stream; var AsciiHexStream = function AsciiHexStreamClosure() { function AsciiHexStream(str, maybeLength) { this.str = str; this.dict = str.dict; this.firstDigit = -1; if (maybeLength) { maybeLength = 0.5 * maybeLength; } DecodeStream.call(this, maybeLength); } AsciiHexStream.prototype = Object.create(DecodeStream.prototype); AsciiHexStream.prototype.readBlock = function AsciiHexStream_readBlock() { var UPSTREAM_BLOCK_SIZE = 8000; var bytes = this.str.getBytes(UPSTREAM_BLOCK_SIZE); if (!bytes.length) { this.eof = true; return; } var maxDecodeLength = bytes.length + 1 >> 1; var buffer = this.ensureBuffer(this.bufferLength + maxDecodeLength); var bufferLength = this.bufferLength; var firstDigit = this.firstDigit; for (var i = 0, ii = bytes.length; i < ii; i++) { var ch = bytes[i], 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; }; return AsciiHexStream; }(); exports.AsciiHexStream = AsciiHexStream; var RunLengthStream = function RunLengthStreamClosure() { function RunLengthStream(str, maybeLength) { this.str = str; this.dict = str.dict; DecodeStream.call(this, maybeLength); } RunLengthStream.prototype = Object.create(DecodeStream.prototype); RunLengthStream.prototype.readBlock = function RunLengthStream_readBlock() { var repeatHeader = this.str.getBytes(2); if (!repeatHeader || repeatHeader.length < 2 || repeatHeader[0] === 128) { this.eof = true; return; } var buffer; var bufferLength = this.bufferLength; var n = repeatHeader[0]; if (n < 128) { buffer = this.ensureBuffer(bufferLength + n + 1); buffer[bufferLength++] = repeatHeader[1]; if (n > 0) { var source = this.str.getBytes(n); buffer.set(source, bufferLength); bufferLength += n; } } else { n = 257 - n; var b = repeatHeader[1]; buffer = this.ensureBuffer(bufferLength + n + 1); for (var i = 0; i < n; i++) { buffer[bufferLength++] = b; } } this.bufferLength = bufferLength; }; return RunLengthStream; }(); exports.RunLengthStream = RunLengthStream; var LZWStream = function LZWStreamClosure() { function LZWStream(str, maybeLength, earlyChange) { this.str = str; this.dict = str.dict; this.cachedData = 0; this.bitsCached = 0; var maxLzwDictionarySize = 4096; var lzwState = { earlyChange: earlyChange, codeLength: 9, nextCode: 258, dictionaryValues: new Uint8Array(maxLzwDictionarySize), dictionaryLengths: new Uint16Array(maxLzwDictionarySize), dictionaryPrevCodes: new Uint16Array(maxLzwDictionarySize), currentSequence: new Uint8Array(maxLzwDictionarySize), currentSequenceLength: 0 }; for (var i = 0; i < 256; ++i) { lzwState.dictionaryValues[i] = i; lzwState.dictionaryLengths[i] = 1; } this.lzwState = lzwState; DecodeStream.call(this, maybeLength); } LZWStream.prototype = Object.create(DecodeStream.prototype); LZWStream.prototype.readBits = function LZWStream_readBits(n) { var bitsCached = this.bitsCached; var cachedData = this.cachedData; while (bitsCached < n) { var 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; }; LZWStream.prototype.readBlock = function LZWStream_readBlock() { var blockSize = 512; var estimatedDecodedSize = blockSize * 2, decodedSizeDelta = blockSize; var i, j, q; var lzwState = this.lzwState; if (!lzwState) { return; } var earlyChange = lzwState.earlyChange; var nextCode = lzwState.nextCode; var dictionaryValues = lzwState.dictionaryValues; var dictionaryLengths = lzwState.dictionaryLengths; var dictionaryPrevCodes = lzwState.dictionaryPrevCodes; var codeLength = lzwState.codeLength; var prevCode = lzwState.prevCode; var currentSequence = lzwState.currentSequence; var currentSequenceLength = lzwState.currentSequenceLength; var decodedLength = 0; var currentBufferLength = this.bufferLength; var buffer = this.ensureBuffer(this.bufferLength + estimatedDecodedSize); for (i = 0; i < blockSize; i++) { var code = this.readBits(codeLength); var 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; }; return LZWStream; }(); exports.LZWStream = LZWStream; var NullStream = function NullStreamClosure() { function NullStream() { Stream.call(this, new Uint8Array(0)); } NullStream.prototype = Stream.prototype; return NullStream; }(); exports.NullStream = NullStream; /***/ }), /* 158 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CCITTFaxStream = void 0; var _primitives = __w_extracthighlights_require__(155); var _ccitt = __w_extracthighlights_require__(159); var _stream = __w_extracthighlights_require__(157); var CCITTFaxStream = function CCITTFaxStreamClosure() { function CCITTFaxStream(str, maybeLength, params) { this.str = str; this.dict = str.dict; if (!(0, _primitives.isDict)(params)) { params = _primitives.Dict.empty; } var source = { next: function 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') }); _stream.DecodeStream.call(this, maybeLength); } CCITTFaxStream.prototype = Object.create(_stream.DecodeStream.prototype); CCITTFaxStream.prototype.readBlock = function () { while (!this.eof) { var c = this.ccittFaxDecoder.readNextChar(); if (c === -1) { this.eof = true; return; } this.ensureBuffer(this.bufferLength + 1); this.buffer[this.bufferLength++] = c; } }; return CCITTFaxStream; }(); exports.CCITTFaxStream = CCITTFaxStream; /***/ }), /* 159 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CCITTFaxDecoder = void 0; var _util = __w_extracthighlights_require__(6); var CCITTFaxDecoder = function CCITTFaxDecoder() { var ccittEOL = -2; var ccittEOF = -1; var twoDimPass = 0; var twoDimHoriz = 1; var twoDimVert0 = 2; var twoDimVertR1 = 3; var twoDimVertL1 = 4; var twoDimVertR2 = 5; var twoDimVertL2 = 6; var twoDimVertR3 = 7; var twoDimVertL3 = 8; var 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]]; var 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]]; var 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]]; var 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]]; var 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]]; var 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]]; function CCITTFaxDecoder(source) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 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; var 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; var 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); } } CCITTFaxDecoder.prototype = { readNextChar: function readNextChar() { if (this.eof) { return -1; } var refLine = this.refLine; var codingLine = this.codingLine; var columns = this.columns; var refPos, blackPixels, bits, i; if (this.outputBits === 0) { if (this.rowsDone) { this.eof = true; } if (this.eof) { return -1; } this.err = false; var 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; } } var 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++; } var 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 (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: function _addPixels(a1, blackPixels) { var codingLine = this.codingLine; var 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: function _addPixelsNeg(a1, blackPixels) { var codingLine = this.codingLine; var 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: function _findTableCode(start, end, table, limit) { var limitValue = limit || 0; for (var i = start; i <= end; ++i) { var code = this._lookBits(i); if (code === ccittEOF) { return [true, 1, false]; } if (i < end) { code <<= end - i; } if (!limitValue || code >= limitValue) { var p = table[code - limitValue]; if (p[0] === i) { this._eatBits(i); return [true, p[1], true]; } } } return [false, 0, false]; }, _getTwoDimCode: function _getTwoDimCode() { var code = 0; var p; if (this.eoblock) { code = this._lookBits(7); p = twoDimTable[code]; if (p && p[0] > 0) { this._eatBits(p[0]); return p[1]; } } else { var result = this._findTableCode(1, 7, twoDimTable); if (result[0] && result[2]) { return result[1]; } } (0, _util.info)('Bad two dim code'); return ccittEOF; }, _getWhiteCode: function _getWhiteCode() { var code = 0; var 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 { var 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: function _getBlackCode() { var 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 { var 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: function _lookBits(n) { var 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: function _eatBits(n) { if ((this.inputBits -= n) < 0) { this.inputBits = 0; } } }; return CCITTFaxDecoder; }(); exports.CCITTFaxDecoder = CCITTFaxDecoder; /***/ }), /* 160 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Jbig2Stream = void 0; var _primitives = __w_extracthighlights_require__(155); var _stream = __w_extracthighlights_require__(157); var _jbig = __w_extracthighlights_require__(161); var _util = __w_extracthighlights_require__(6); var Jbig2Stream = function Jbig2StreamClosure() { function Jbig2Stream(stream, maybeLength, dict, params) { this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } Jbig2Stream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(Jbig2Stream.prototype, 'bytes', { get: function get() { return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength)); }, configurable: true }); Jbig2Stream.prototype.ensureBuffer = function (requested) {}; Jbig2Stream.prototype.readBlock = function () { if (this.eof) { return; } var jbig2Image = new _jbig.Jbig2Image(); var chunks = []; if ((0, _primitives.isDict)(this.params)) { var globalsStream = this.params.get('JBIG2Globals'); if ((0, _primitives.isStream)(globalsStream)) { var globals = globalsStream.getBytes(); chunks.push({ data: globals, start: 0, end: globals.length }); } } chunks.push({ data: this.bytes, start: 0, end: this.bytes.length }); var data = jbig2Image.parseChunks(chunks); var dataLength = data.length; for (var i = 0; i < dataLength; i++) { data[i] ^= 0xFF; } this.buffer = data; this.bufferLength = dataLength; this.eof = true; }; return Jbig2Stream; }(); exports.Jbig2Stream = Jbig2Stream; /***/ }), /* 161 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Jbig2Image = void 0; var _util = __w_extracthighlights_require__(6); var _arithmetic_decoder = __w_extracthighlights_require__(162); var _ccitt = __w_extracthighlights_require__(159); var Jbig2Error = function Jbig2ErrorClosure() { function Jbig2Error(msg) { this.message = 'JBIG2 error: ' + msg; } Jbig2Error.prototype = new Error(); Jbig2Error.prototype.name = 'Jbig2Error'; Jbig2Error.constructor = Jbig2Error; return Jbig2Error; }(); var Jbig2Image = function Jbig2ImageClosure() { function ContextCache() {} ContextCache.prototype = { getContexts: function getContexts(id) { if (id in this) { return this[id]; } return this[id] = new Int8Array(1 << 16); } }; function DecodingContext(data, start, end) { this.data = data; this.start = start; this.end = end; } DecodingContext.prototype = { get decoder() { var decoder = new _arithmetic_decoder.ArithmeticDecoder(this.data, this.start, this.end); return (0, _util.shadow)(this, 'decoder', decoder); }, get contextCache() { var cache = new ContextCache(); return (0, _util.shadow)(this, 'contextCache', cache); } }; function decodeInteger(contextCache, procedure, decoder) { var contexts = contextCache.getContexts(procedure); var prev = 1; function readBits(length) { var v = 0; for (var i = 0; i < length; i++) { var bit = decoder.readBit(contexts, prev); prev = prev < 256 ? prev << 1 | bit : (prev << 1 | bit) & 511 | 256; v = v << 1 | bit; } return v >>> 0; } var sign = readBits(1); var 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); return sign === 0 ? value : value > 0 ? -value : null; } function decodeIAID(contextCache, decoder, codeLength) { var contexts = contextCache.getContexts('IAID'); var prev = 1; for (var i = 0; i < codeLength; i++) { var bit = decoder.readBit(contexts, prev); prev = prev << 1 | bit; } if (codeLength < 31) { return prev & (1 << codeLength) - 1; } return prev & 0x7FFFFFFF; } var 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']; var 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 }]]; var 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 }] }]; var ReusedContexts = [0x9B25, 0x0795, 0x00E5, 0x0195]; var RefinementReusedContexts = [0x0020, 0x0008]; function decodeBitmapTemplate0(width, height, decodingContext) { var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts('GB'); var contextLabel, i, j, pixel, row, row1, row2, bitmap = []; var 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) { var 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); } var useskip = !!skip; var template = CodingTemplates[templateIndex].concat(at); template.sort(function (a, b) { return a.y - b.y || a.x - b.x; }); var templateLength = template.length; var templateX = new Int8Array(templateLength); var templateY = new Int8Array(templateLength); var changingTemplateEntries = []; var reuseMask = 0, minX = 0, maxX = 0, minY = 0; var 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); } } var changingEntriesLength = changingTemplateEntries.length; var changingTemplateX = new Int8Array(changingEntriesLength); var changingTemplateY = new Int8Array(changingEntriesLength); var 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; } var sbb_left = -minX; var sbb_top = -minY; var sbb_right = width - maxX; var pseudoPixelContext = ReusedContexts[templateIndex]; var row = new Uint8Array(width); var bitmap = []; var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts('GB'); var ltp = 0, j, i0, j0, contextLabel = 0, bit, shift; for (var i = 0; i < height; i++) { if (prediction) { var 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; } } } } } var pixel = decoder.readBit(contexts, contextLabel); row[j] = pixel; } } return bitmap; } function decodeRefinement(width, height, templateIndex, referenceBitmap, offsetX, offsetY, prediction, at, decodingContext) { var codingTemplate = RefinementTemplates[templateIndex].coding; if (templateIndex === 0) { codingTemplate = codingTemplate.concat([at[0]]); } var codingTemplateLength = codingTemplate.length; var codingTemplateX = new Int32Array(codingTemplateLength); var codingTemplateY = new Int32Array(codingTemplateLength); var k; for (k = 0; k < codingTemplateLength; k++) { codingTemplateX[k] = codingTemplate[k].x; codingTemplateY[k] = codingTemplate[k].y; } var referenceTemplate = RefinementTemplates[templateIndex].reference; if (templateIndex === 0) { referenceTemplate = referenceTemplate.concat([at[1]]); } var referenceTemplateLength = referenceTemplate.length; var referenceTemplateX = new Int32Array(referenceTemplateLength); var referenceTemplateY = new Int32Array(referenceTemplateLength); for (k = 0; k < referenceTemplateLength; k++) { referenceTemplateX[k] = referenceTemplate[k].x; referenceTemplateY[k] = referenceTemplate[k].y; } var referenceWidth = referenceBitmap[0].length; var referenceHeight = referenceBitmap.length; var pseudoPixelContext = RefinementReusedContexts[templateIndex]; var bitmap = []; var decoder = decodingContext.decoder; var contexts = decodingContext.contextCache.getContexts('GR'); var ltp = 0; for (var i = 0; i < height; i++) { if (prediction) { var sltp = decoder.readBit(contexts, pseudoPixelContext); ltp ^= sltp; if (ltp) { throw new Jbig2Error('prediction is not supported'); } } var row = new Uint8Array(width); bitmap.push(row); for (var j = 0; j < width; j++) { var i0, j0; var 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]; } } var 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'); } var newSymbols = []; var currentHeight = 0; var symbolCodeLength = (0, _util.log2)(symbols.length + numberOfNewSymbols); var decoder = decodingContext.decoder; var contextCache = decodingContext.contextCache; var tableB1, symbolWidths; if (huffman) { tableB1 = getStandardTable(1); symbolWidths = []; symbolCodeLength = Math.max(symbolCodeLength, 1); } while (newSymbols.length < numberOfNewSymbols) { var deltaHeight = huffman ? huffmanTables.tableDeltaHeight.decode(huffmanInput) : decodeInteger(contextCache, 'IADH', decoder); currentHeight += deltaHeight; var currentWidth = 0, totalWidth = 0; var firstSymbol = huffman ? symbolWidths.length : 0; while (true) { var deltaWidth = huffman ? huffmanTables.tableDeltaWidth.decode(huffmanInput) : decodeInteger(contextCache, 'IADW', decoder); if (deltaWidth === null) { break; } currentWidth += deltaWidth; totalWidth += currentWidth; var bitmap; if (refinement) { var 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 { var symbolId = decodeIAID(contextCache, decoder, symbolCodeLength); var rdx = decodeInteger(contextCache, 'IARDX', decoder); var rdy = decodeInteger(contextCache, 'IARDY', decoder); var 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) { var bitmapSize = huffmanTables.tableBitmapSize.decode(huffmanInput); huffmanInput.byteAlign(); var collectiveBitmap = void 0; if (bitmapSize === 0) { collectiveBitmap = readUncompressedBitmap(huffmanInput, totalWidth, currentHeight); } else { var originalEnd = huffmanInput.end; var bitmapEnd = huffmanInput.position + bitmapSize; huffmanInput.end = bitmapEnd; collectiveBitmap = decodeMMRBitmap(huffmanInput, totalWidth, currentHeight, false); huffmanInput.end = originalEnd; huffmanInput.position = bitmapEnd; } var numberOfSymbolsDecoded = symbolWidths.length; if (firstSymbol === numberOfSymbolsDecoded - 1) { newSymbols.push(collectiveBitmap); } else { var _i = void 0, y = void 0, xMin = 0, xMax = void 0, bitmapWidth = void 0, symbolBitmap = void 0; 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; } } } } var exportedSymbols = []; var flags = [], currentFlag = false; var totalSymbolsLength = symbols.length + numberOfNewSymbols; while (flags.length < totalSymbolsLength) { var runLength = huffman ? tableB1.decode(huffmanInput) : decodeInteger(contextCache, 'IAEX', decoder); while (runLength--) { flags.push(currentFlag); } currentFlag = !currentFlag; } for (var i = 0, ii = symbols.length; i < ii; i++) { if (flags[i]) { exportedSymbols.push(symbols[i]); } } for (var 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'); } var bitmap = []; var i, row; for (i = 0; i < height; i++) { row = new Uint8Array(width); if (defaultPixelValue) { for (var j = 0; j < width; j++) { row[j] = defaultPixelValue; } } bitmap.push(row); } var decoder = decodingContext.decoder; var contextCache = decodingContext.contextCache; var stripT = huffman ? -huffmanTables.tableDeltaT.decode(huffmanInput) : -decodeInteger(contextCache, 'IADT', decoder); var firstS = 0; i = 0; while (i < numberOfSymbolInstances) { var deltaT = huffman ? huffmanTables.tableDeltaT.decode(huffmanInput) : decodeInteger(contextCache, 'IADT', decoder); stripT += deltaT; var deltaFirstS = huffman ? huffmanTables.tableFirstS.decode(huffmanInput) : decodeInteger(contextCache, 'IAFS', decoder); firstS += deltaFirstS; var currentS = firstS; do { var currentT = 0; if (stripSize > 1) { currentT = huffman ? huffmanInput.readBits(logStripSize) : decodeInteger(contextCache, 'IAIT', decoder); } var t = stripSize * stripT + currentT; var symbolId = huffman ? huffmanTables.symbolIDTable.decode(huffmanInput) : decodeIAID(contextCache, decoder, symbolCodeLength); var applyRefinement = refinement && (huffman ? huffmanInput.readBit() : decodeInteger(contextCache, 'IARI', decoder)); var symbolBitmap = inputSymbols[symbolId]; var symbolWidth = symbolBitmap[0].length; var symbolHeight = symbolBitmap.length; if (applyRefinement) { var rdw = decodeInteger(contextCache, 'IARDW', decoder); var rdh = decodeInteger(contextCache, 'IARDH', decoder); var rdx = decodeInteger(contextCache, 'IARDX', decoder); var rdy = decodeInteger(contextCache, 'IARDY', decoder); symbolWidth += rdw; symbolHeight += rdh; symbolBitmap = decodeRefinement(symbolWidth, symbolHeight, refinementTemplateIndex, symbolBitmap, (rdw >> 1) + rdx, (rdh >> 1) + rdy, false, refinementAt, decodingContext); } var offsetT = t - (referenceCorner & 1 ? 0 : symbolHeight - 1); var offsetS = currentS - (referenceCorner & 2 ? symbolWidth - 1 : 0); var s2, t2, symbolRow; if (transposed) { for (s2 = 0; s2 < symbolHeight; s2++) { row = bitmap[offsetS + s2]; if (!row) { continue; } symbolRow = symbolBitmap[s2]; var 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 ".concat(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 ".concat(combinationOperator, " is not supported")); } } currentS += symbolWidth - 1; } i++; var 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) { var at = []; if (!mmr) { at.push({ x: -patternWidth, y: 0 }); if (template === 0) { at.push({ x: -3, y: -1 }); at.push({ x: 2, y: -2 }); at.push({ x: -2, y: -2 }); } } var collectiveWidth = (maxPatternIndex + 1) * patternWidth; var collectiveBitmap = decodeBitmap(mmr, collectiveWidth, patternHeight, template, false, null, at, decodingContext); var patterns = [], i = 0, patternBitmap, xMin, xMax, y; while (i <= maxPatternIndex) { patternBitmap = []; xMin = patternWidth * i; xMax = xMin + patternWidth; for (y = 0; y < patternHeight; y++) { patternBitmap.push(collectiveBitmap[y].subarray(xMin, xMax)); } patterns.push(patternBitmap); i++; } return patterns; } function decodeHalftoneRegion(mmr, patterns, template, regionWidth, regionHeight, defaultPixelValue, enableSkip, combinationOperator, gridWidth, gridHeight, gridOffsetX, gridOffsetY, gridVectorX, gridVectorY, decodingContext) { var 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'); } var regionBitmap = []; var 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); } var numberOfPatterns = patterns.length; var pattern0 = patterns[0]; var patternWidth = pattern0[0].length, patternHeight = pattern0.length; var bitsPerValue = (0, _util.log2)(numberOfPatterns); var at = []; if (!mmr) { at.push({ x: template <= 1 ? 3 : 2, y: -1 }); if (template === 0) { at.push({ x: -3, y: -1 }); at.push({ x: 2, y: -2 }); at.push({ x: -2, y: -2 }); } } var grayScaleBitPlanes = [], 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; } var 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] ^ bit; 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 { var regionX = void 0, regionY = void 0; 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) { var segmentHeader = {}; segmentHeader.number = (0, _util.readUint32)(data, start); var flags = data[start + 4]; var segmentType = flags & 0x3F; if (!SegmentTypes[segmentType]) { throw new Jbig2Error('invalid segment type: ' + segmentType); } segmentHeader.type = segmentType; segmentHeader.typeName = SegmentTypes[segmentType]; segmentHeader.deferredNonRetain = !!(flags & 0x80); var pageAssociationFieldSize = !!(flags & 0x40); var referredFlags = data[start + 5]; var referredToCount = referredFlags >> 5 & 7; var retainBits = [referredFlags & 31]; var position = start + 6; if (referredFlags === 7) { referredToCount = (0, _util.readUint32)(data, position - 1) & 0x1FFFFFFF; position += 3; var 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; var referredToSegmentNumberSize = segmentHeader.number <= 256 ? 1 : segmentHeader.number <= 65536 ? 2 : 4; var referredTo = []; var i, ii; for (i = 0; i < referredToCount; i++) { var number = referredToSegmentNumberSize === 1 ? data[position] : referredToSegmentNumberSize === 2 ? (0, _util.readUint16)(data, position) : (0, _util.readUint32)(data, position); referredTo.push(number); position += referredToSegmentNumberSize; } segmentHeader.referredTo = referredTo; if (!pageAssociationFieldSize) { segmentHeader.pageAssociation = data[position++]; } else { segmentHeader.pageAssociation = (0, _util.readUint32)(data, position); position += 4; } segmentHeader.length = (0, _util.readUint32)(data, position); position += 4; if (segmentHeader.length === 0xFFFFFFFF) { if (segmentType === 38) { var genericRegionInfo = readRegionSegmentInformation(data, position); var genericRegionSegmentFlags = data[position + RegionSegmentInformationFieldLength]; var genericRegionMmr = !!(genericRegionSegmentFlags & 1); var searchPatternLength = 6; var 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++) { var 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) { var segments = []; var position = start; while (position < end) { var segmentHeader = readSegmentHeader(data, position); position = segmentHeader.headerEnd; var segment = { header: segmentHeader, data: 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 (var 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, _util.readUint32)(data, start), height: (0, _util.readUint32)(data, start + 4), x: (0, _util.readUint32)(data, start + 8), y: (0, _util.readUint32)(data, start + 12), combinationOperator: data[start + 16] & 7 }; } var RegionSegmentInformationFieldLength = 17; function processSegment(segment, visitor) { var header = segment.header; var data = segment.data, position = segment.start, end = segment.end; var args, at, i, atLength; switch (header.type) { case 0: var dictionary = {}; var dictionaryFlags = (0, _util.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, _util.readInt8)(data, position), y: (0, _util.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, _util.readInt8)(data, position), y: (0, _util.readInt8)(data, position + 1) }); position += 2; } dictionary.refinementAt = at; } dictionary.numberOfExportedSymbols = (0, _util.readUint32)(data, position); position += 4; dictionary.numberOfNewSymbols = (0, _util.readUint32)(data, position); position += 4; args = [dictionary, header.number, header.referredTo, data, position, end]; break; case 6: case 7: var textRegion = {}; textRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; var textRegionSegmentFlags = (0, _util.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) { var textRegionHuffmanFlags = (0, _util.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, _util.readInt8)(data, position), y: (0, _util.readInt8)(data, position + 1) }); position += 2; } textRegion.refinementAt = at; } textRegion.numberOfSymbolInstances = (0, _util.readUint32)(data, position); position += 4; args = [textRegion, header.referredTo, data, position, end]; break; case 16: var patternDictionary = {}; var patternDictionaryFlags = data[position++]; patternDictionary.mmr = !!(patternDictionaryFlags & 1); patternDictionary.template = patternDictionaryFlags >> 1 & 3; patternDictionary.patternWidth = data[position++]; patternDictionary.patternHeight = data[position++]; patternDictionary.maxPatternIndex = (0, _util.readUint32)(data, position); position += 4; args = [patternDictionary, header.number, data, position, end]; break; case 22: case 23: var halftoneRegion = {}; halftoneRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; var 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, _util.readUint32)(data, position); position += 4; halftoneRegion.gridHeight = (0, _util.readUint32)(data, position); position += 4; halftoneRegion.gridOffsetX = (0, _util.readUint32)(data, position) & 0xFFFFFFFF; position += 4; halftoneRegion.gridOffsetY = (0, _util.readUint32)(data, position) & 0xFFFFFFFF; position += 4; halftoneRegion.gridVectorX = (0, _util.readUint16)(data, position); position += 2; halftoneRegion.gridVectorY = (0, _util.readUint16)(data, position); position += 2; args = [halftoneRegion, header.referredTo, data, position, end]; break; case 38: case 39: var genericRegion = {}; genericRegion.info = readRegionSegmentInformation(data, position); position += RegionSegmentInformationFieldLength; var 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, _util.readInt8)(data, position), y: (0, _util.readInt8)(data, position + 1) }); position += 2; } genericRegion.at = at; } args = [genericRegion, data, position, end]; break; case 48: var pageInfo = { width: (0, _util.readUint32)(data, position), height: (0, _util.readUint32)(data, position + 4), resolutionX: (0, _util.readUint32)(data, position + 8), resolutionY: (0, _util.readUint32)(data, position + 12) }; if (pageInfo.height === 0xFFFFFFFF) { delete pageInfo.height; } var pageSegmentFlags = data[position + 16]; (0, _util.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 ".concat(header.typeName, "(").concat(header.type, ")") + ' is not implemented'); } var callbackName = 'on' + header.typeName; if (callbackName in visitor) { visitor[callbackName].apply(visitor, args); } } function processSegments(segments, visitor) { for (var i = 0, ii = segments.length; i < ii; i++) { processSegment(segments[i], visitor); } } function parseJbig2Chunks(chunks) { var visitor = new SimpleSegmentVisitor(); for (var i = 0, ii = chunks.length; i < ii; i++) { var chunk = chunks[i]; var segments = readSegments({}, chunk.data, chunk.start, chunk.end); processSegments(segments, visitor); } return visitor.buffer; } function parseJbig2(data) { var position = 0, end = data.length; 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.'); } var header = Object.create(null); position += 8; var flags = data[position++]; header.randomAccess = !(flags & 1); if (!(flags & 2)) { header.numberOfPages = (0, _util.readUint32)(data, position); position += 4; } var segments = readSegments(header, data, position, end); var visitor = new SimpleSegmentVisitor(); processSegments(segments, visitor); var _visitor$currentPageI = visitor.currentPageInfo, width = _visitor$currentPageI.width, height = _visitor$currentPageI.height; var bitPacked = visitor.buffer; var imgData = new Uint8ClampedArray(width * height); var q = 0, k = 0; for (var i = 0; i < height; i++) { var mask = 0, buffer = void 0; for (var j = 0; j < width; j++) { if (!mask) { mask = 128; buffer = bitPacked[k++]; } imgData[q++] = buffer & mask ? 0 : 255; mask >>= 1; } } return { imgData: imgData, width: width, height: height }; } function SimpleSegmentVisitor() {} SimpleSegmentVisitor.prototype = { onPageInformation: function SimpleSegmentVisitor_onPageInformation(info) { this.currentPageInfo = info; var rowSize = info.width + 7 >> 3; var buffer = new Uint8ClampedArray(rowSize * info.height); if (info.defaultPixelValue) { for (var i = 0, ii = buffer.length; i < ii; i++) { buffer[i] = 0xFF; } } this.buffer = buffer; }, drawBitmap: function SimpleSegmentVisitor_drawBitmap(regionInfo, bitmap) { var pageInfo = this.currentPageInfo; var width = regionInfo.width, height = regionInfo.height; var rowSize = pageInfo.width + 7 >> 3; var combinationOperator = pageInfo.combinationOperatorOverride ? regionInfo.combinationOperator : pageInfo.combinationOperator; var buffer = this.buffer; var mask0 = 128 >> (regionInfo.x & 7); var offset0 = regionInfo.y * rowSize + (regionInfo.x >> 3); var 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 ".concat(combinationOperator, " is not supported")); } }, onImmediateGenericRegion: function SimpleSegmentVisitor_onImmediateGenericRegion(region, data, start, end) { var regionInfo = region.info; var decodingContext = new DecodingContext(data, start, end); var bitmap = decodeBitmap(region.mmr, regionInfo.width, regionInfo.height, region.template, region.prediction, null, region.at, decodingContext); this.drawBitmap(regionInfo, bitmap); }, onImmediateLosslessGenericRegion: function SimpleSegmentVisitor_onImmediateLosslessGenericRegion() { this.onImmediateGenericRegion.apply(this, arguments); }, onSymbolDictionary: function SimpleSegmentVisitor_onSymbolDictionary(dictionary, currentSegment, referredSegments, data, start, end) { var huffmanTables, huffmanInput; if (dictionary.huffman) { huffmanTables = getSymbolDictionaryHuffmanTables(dictionary, referredSegments, this.customTables); huffmanInput = new Reader(data, start, end); } var symbols = this.symbols; if (!symbols) { this.symbols = symbols = {}; } var inputSymbols = []; for (var i = 0, ii = referredSegments.length; i < ii; i++) { var referredSymbols = symbols[referredSegments[i]]; if (referredSymbols) { inputSymbols = inputSymbols.concat(referredSymbols); } } var 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: function SimpleSegmentVisitor_onImmediateTextRegion(region, referredSegments, data, start, end) { var regionInfo = region.info; var huffmanTables, huffmanInput; var symbols = this.symbols; var inputSymbols = []; for (var i = 0, ii = referredSegments.length; i < ii; i++) { var referredSymbols = symbols[referredSegments[i]]; if (referredSymbols) { inputSymbols = inputSymbols.concat(referredSymbols); } } var symbolCodeLength = (0, _util.log2)(inputSymbols.length); if (region.huffman) { huffmanInput = new Reader(data, start, end); huffmanTables = getTextRegionHuffmanTables(region, referredSegments, this.customTables, inputSymbols.length, huffmanInput); } var decodingContext = new DecodingContext(data, start, end); var 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: function SimpleSegmentVisitor_onImmediateLosslessTextRegion() { this.onImmediateTextRegion.apply(this, arguments); }, onPatternDictionary: function onPatternDictionary(dictionary, currentSegment, data, start, end) { var patterns = this.patterns; if (!patterns) { this.patterns = patterns = {}; } var decodingContext = new DecodingContext(data, start, end); patterns[currentSegment] = decodePatternDictionary(dictionary.mmr, dictionary.patternWidth, dictionary.patternHeight, dictionary.maxPatternIndex, dictionary.template, decodingContext); }, onImmediateHalftoneRegion: function onImmediateHalftoneRegion(region, referredSegments, data, start, end) { var patterns = this.patterns[referredSegments[0]]; var regionInfo = region.info; var decodingContext = new DecodingContext(data, start, end); var 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: function onImmediateLosslessHalftoneRegion() { this.onImmediateHalftoneRegion.apply(this, arguments); }, onTables: function onTables(currentSegment, data, start, end) { var customTables = this.customTables; if (!customTables) { this.customTables = customTables = {}; } customTables[currentSegment] = decodeTablesSegment(data, start, end); } }; function HuffmanLine(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'; } } function HuffmanTreeNode(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; } } HuffmanTreeNode.prototype = { buildTree: function buildTree(line, shift) { var bit = line.prefixCode >> shift & 1; if (shift <= 0) { this.children[bit] = new HuffmanTreeNode(line); } else { var node = this.children[bit]; if (!node) { this.children[bit] = node = new HuffmanTreeNode(null); } node.buildTree(line, shift - 1); } }, decodeNode: function decodeNode(reader) { if (this.isLeaf) { if (this.isOOB) { return null; } var htOffset = reader.readBits(this.rangeLength); return this.rangeLow + (this.isLowerRange ? -htOffset : htOffset); } var node = this.children[reader.readBit()]; if (!node) { throw new Jbig2Error('invalid Huffman data'); } return node.decodeNode(reader); } }; function HuffmanTable(lines, prefixCodesDone) { if (!prefixCodesDone) { this.assignPrefixCodes(lines); } this.rootNode = new HuffmanTreeNode(null); var i, ii = lines.length, line; for (i = 0; i < ii; i++) { line = lines[i]; if (line.prefixLength > 0) { this.rootNode.buildTree(line, line.prefixLength - 1); } } } HuffmanTable.prototype = { decode: function decode(reader) { return this.rootNode.decodeNode(reader); }, assignPrefixCodes: function assignPrefixCodes(lines) { var linesLength = lines.length, prefixLengthMax = 0, i; for (i = 0; i < linesLength; i++) { prefixLengthMax = Math.max(prefixLengthMax, lines[i].prefixLength); } var histogram = new Uint32Array(prefixLengthMax + 1); for (i = 0; i < linesLength; i++) { histogram[lines[i].prefixLength]++; } var 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) { var flags = data[start]; var lowestValue = (0, _util.readUint32)(data, start + 1) & 0xFFFFFFFF; var highestValue = (0, _util.readUint32)(data, start + 5) & 0xFFFFFFFF; var reader = new Reader(data, start + 9, end); var prefixSizeBits = (flags >> 1 & 7) + 1; var rangeSizeBits = (flags >> 4 & 7) + 1; var lines = []; var 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); } var standardTablesCache = {}; function getStandardTable(number) { var table = standardTablesCache[number]; if (table) { return table; } var 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.".concat(number, " does not exist")); } var length = lines.length, i; for (i = 0; i < length; i++) { lines[i] = new HuffmanLine(lines[i]); } table = new HuffmanTable(lines, true); standardTablesCache[number] = table; return table; } function Reader(data, start, end) { this.data = data; this.start = start; this.end = end; this.position = start; this.shift = -1; this.currentByte = 0; } Reader.prototype = { readBit: function 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; } var bit = this.currentByte >> this.shift & 1; this.shift--; return bit; }, readBits: function readBits(numBits) { var result = 0, i; for (i = numBits - 1; i >= 0; i--) { result |= this.readBit() << i; } return result; }, byteAlign: function byteAlign() { this.shift = -1; }, next: function next() { if (this.position >= this.end) { return -1; } return this.data[this.position++]; } }; function getCustomHuffmanTable(index, referredTo, customTables) { var currentIndex = 0, i, ii = referredTo.length, table; for (i = 0; i < ii; i++) { 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) { var codes = [], i, codeLength; for (i = 0; i <= 34; i++) { codeLength = reader.readBits(4); codes.push(new HuffmanLine([i, codeLength, 0, 0])); } var runCodesTable = new HuffmanTable(codes, false); codes.length = 0; for (i = 0; i < numberOfSymbols;) { codeLength = runCodesTable.decode(reader); if (codeLength >= 32) { var repeatedLength = void 0, numberOfRepeats = void 0, j = void 0; 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(); var symbolIDTable = new HuffmanTable(codes, false); var 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: symbolIDTable, tableFirstS: tableFirstS, tableDeltaS: tableDeltaS, tableDeltaT: tableDeltaT }; } function getSymbolDictionaryHuffmanTables(dictionary, referredTo, customTables) { var 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'); } var 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: tableDeltaHeight, tableDeltaWidth: tableDeltaWidth, tableBitmapSize: tableBitmapSize, tableAggregateInstances: tableAggregateInstances }; } function readUncompressedBitmap(reader, width, height) { var bitmap = [], x, y, row; for (y = 0; y < height; y++) { row = new Uint8Array(width); bitmap.push(row); for (x = 0; x < width; x++) { row[x] = reader.readBit(); } reader.byteAlign(); } return bitmap; } function decodeMMRBitmap(input, width, height, endOfBlock) { var params = { K: -1, Columns: width, Rows: height, BlackIs1: true, EndOfBlock: endOfBlock }; var decoder = new _ccitt.CCITTFaxDecoder(input, params); var bitmap = [], x, y, row, currentByte, shift, eof = false; for (y = 0; y < height; y++) { row = new Uint8Array(width); bitmap.push(row); shift = -1; for (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) { var lookForEOFLimit = 5; for (var i = 0; i < lookForEOFLimit; i++) { if (decoder.readNextChar() === -1) { break; } } } return bitmap; } function Jbig2Image() {} Jbig2Image.prototype = { parseChunks: function parseChunks(chunks) { return parseJbig2Chunks(chunks); }, parse: function parse(data) { var _parseJbig = parseJbig2(data), imgData = _parseJbig.imgData, width = _parseJbig.width, height = _parseJbig.height; this.width = width; this.height = height; return imgData; } }; return Jbig2Image; }(); exports.Jbig2Image = Jbig2Image; /***/ }), /* 162 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ArithmeticDecoder = void 0; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var 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 }]; var ArithmeticDecoder = /*#__PURE__*/ function () { function ArithmeticDecoder(data, start, end) { _classCallCheck(this, ArithmeticDecoder); 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; } _createClass(ArithmeticDecoder, [{ key: "byteIn", value: function byteIn() { var data = this.data; var 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; } } }, { key: "readBit", value: function readBit(contexts, pos) { var cx_index = contexts[pos] >> 1, cx_mps = contexts[pos] & 1; var qeTableIcx = QeTable[cx_index]; var qeIcx = qeTableIcx.qe; var d; var 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; } }]); return ArithmeticDecoder; }(); exports.ArithmeticDecoder = ArithmeticDecoder; /***/ }), /* 163 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.JpegStream = void 0; var _util = __w_extracthighlights_require__(6); var _stream = __w_extracthighlights_require__(157); var _primitives = __w_extracthighlights_require__(155); var _jpg = __w_extracthighlights_require__(164); var JpegStream = function JpegStreamClosure() { function JpegStream(stream, maybeLength, dict, params) { var ch; while ((ch = stream.getByte()) !== -1) { if (ch === 0xFF) { stream.skip(-1); break; } } this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } JpegStream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(JpegStream.prototype, 'bytes', { get: function JpegStream_bytes() { return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength)); }, configurable: true }); JpegStream.prototype.ensureBuffer = function (requested) {}; JpegStream.prototype.readBlock = function () { if (this.eof) { return; } var jpegOptions = { decodeTransform: undefined, colorTransform: undefined }; var decodeArr = this.dict.getArray('Decode', 'D'); if (this.forceRGB && Array.isArray(decodeArr)) { var bitsPerComponent = this.dict.get('BitsPerComponent') || 8; var decodeArrLength = decodeArr.length; var transform = new Int32Array(decodeArrLength); var transformNeeded = false; var maxValue = (1 << bitsPerComponent) - 1; for (var 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)) { var colorTransform = this.params.get('ColorTransform'); if (Number.isInteger(colorTransform)) { jpegOptions.colorTransform = colorTransform; } } var jpegImage = new _jpg.JpegImage(jpegOptions); jpegImage.parse(this.bytes); var data = jpegImage.getData({ width: this.drawWidth, height: this.drawHeight, forceRGB: this.forceRGB, isSourcePDF: true }); this.buffer = data; this.bufferLength = data.length; this.eof = true; }; JpegStream.prototype.getIR = function () { var forceDataSchema = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; return (0, _util.createObjectURL)(this.bytes, 'image/jpeg', forceDataSchema); }; return JpegStream; }(); exports.JpegStream = JpegStream; /***/ }), /* 164 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.JpegImage = void 0; var _util = __w_extracthighlights_require__(6); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var JpegError = function JpegErrorClosure() { function JpegError(msg) { this.message = 'JPEG error: ' + msg; } JpegError.prototype = new Error(); JpegError.prototype.name = 'JpegError'; JpegError.constructor = JpegError; return JpegError; }(); var DNLMarkerError = function DNLMarkerErrorClosure() { function DNLMarkerError(message, scanLines) { this.message = message; this.scanLines = scanLines; } DNLMarkerError.prototype = new Error(); DNLMarkerError.prototype.name = 'DNLMarkerError'; DNLMarkerError.constructor = DNLMarkerError; return DNLMarkerError; }(); var EOIMarkerError = function EOIMarkerErrorClosure() { function EOIMarkerError(message) { this.message = message; } EOIMarkerError.prototype = new Error(); EOIMarkerError.prototype.name = 'EOIMarkerError'; EOIMarkerError.constructor = EOIMarkerError; return EOIMarkerError; }(); var JpegImage = function JpegImageClosure() { var 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]); var dctCos1 = 4017; var dctSin1 = 799; var dctCos3 = 3406; var dctSin3 = 2276; var dctCos6 = 1567; var dctSin6 = 3784; var dctSqrt2 = 5793; var dctSqrt1d2 = 2896; function JpegImage() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$decodeTransform = _ref.decodeTransform, decodeTransform = _ref$decodeTransform === void 0 ? null : _ref$decodeTransform, _ref$colorTransform = _ref.colorTransform, colorTransform = _ref$colorTransform === void 0 ? -1 : _ref$colorTransform; this._decodeTransform = decodeTransform; this._colorTransform = colorTransform; } function buildHuffmanTable(codeLengths, values) { var k = 0, code = [], i, j, length = 16; while (length > 0 && !codeLengths[length - 1]) { length--; } code.push({ children: [], index: 0 }); var 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) { var parseDNLMarker = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : false; var mcusPerLine = frame.mcusPerLine; var progressive = frame.progressive; var startOffset = offset, bitsData = 0, bitsCount = 0; function readBit() { if (bitsCount > 0) { bitsCount--; return bitsData >> bitsCount & 1; } bitsData = data[offset++]; if (bitsData === 0xFF) { var nextByte = data[offset++]; if (nextByte) { if (nextByte === 0xDC && parseDNLMarker) { offset += 2; var scanLines = data[offset++] << 8 | data[offset++]; if (scanLines > 0 && scanLines !== frame.scanLines) { throw new DNLMarkerError('Found DNL marker (0xFFDC) while parsing scan data', scanLines); } } else if (nextByte === 0xD9) { throw new EOIMarkerError('Found EOI marker (0xFFD9) while parsing scan data'); } throw new JpegError("unexpected marker ".concat((bitsData << 8 | nextByte).toString(16))); } } bitsCount = 7; return bitsData >>> 7; } function decodeHuffman(tree) { var node = tree; while (true) { node = node[readBit()]; if (typeof node === 'number') { return node; } if (_typeof(node) !== 'object') { throw new JpegError('invalid huffman sequence'); } } } function receive(length) { var n = 0; while (length > 0) { n = n << 1 | readBit(); length--; } return n; } function receiveAndExtend(length) { if (length === 1) { return readBit() === 1 ? 1 : -1; } var n = receive(length); if (n >= 1 << length - 1) { return n; } return n + (-1 << length) + 1; } function decodeBaseline(component, offset) { var t = decodeHuffman(component.huffmanTableDC); var diff = t === 0 ? 0 : receiveAndExtend(t); component.blockData[offset] = component.pred += diff; var k = 1; while (k < 64) { var rs = decodeHuffman(component.huffmanTableAC); var s = rs & 15, r = rs >> 4; if (s === 0) { if (r < 15) { break; } k += 16; continue; } k += r; var z = dctZigZag[k]; component.blockData[offset + z] = receiveAndExtend(s); k++; } } function decodeDCFirst(component, offset) { var t = decodeHuffman(component.huffmanTableDC); var diff = t === 0 ? 0 : receiveAndExtend(t) << successive; component.blockData[offset] = component.pred += diff; } function decodeDCSuccessive(component, offset) { component.blockData[offset] |= readBit() << successive; } var eobrun = 0; function decodeACFirst(component, offset) { if (eobrun > 0) { eobrun--; return; } var k = spectralStart, e = spectralEnd; while (k <= e) { var rs = decodeHuffman(component.huffmanTableAC); var s = rs & 15, r = rs >> 4; if (s === 0) { if (r < 15) { eobrun = receive(r) + (1 << r) - 1; break; } k += 16; continue; } k += r; var z = dctZigZag[k]; component.blockData[offset + z] = receiveAndExtend(s) * (1 << successive); k++; } } var successiveACState = 0, successiveACNextValue; function decodeACSuccessive(component, offset) { var k = spectralStart; var e = spectralEnd; var r = 0; var s; var rs; while (k <= e) { var offsetZ = offset + dctZigZag[k]; var 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; } } } function decodeMcu(component, decode, mcu, row, col) { var mcuRow = mcu / mcusPerLine | 0; var mcuCol = mcu % mcusPerLine; var blockRow = mcuRow * component.v + row; var blockCol = mcuCol * component.h + col; var offset = getBlockBufferOffset(component, blockRow, blockCol); decode(component, offset); } function decodeBlock(component, decode, mcu) { var blockRow = mcu / component.blocksPerLine | 0; var blockCol = mcu % component.blocksPerLine; var offset = getBlockBufferOffset(component, blockRow, blockCol); decode(component, offset); } var componentsLength = components.length; var component, i, j, k, n; var decodeFn; if (progressive) { if (spectralStart === 0) { decodeFn = successivePrev === 0 ? decodeDCFirst : decodeDCSuccessive; } else { decodeFn = successivePrev === 0 ? decodeACFirst : decodeACSuccessive; } } else { decodeFn = decodeBaseline; } var mcu = 0, fileMarker; var mcuExpected; if (componentsLength === 1) { mcuExpected = components[0].blocksPerLine * components[0].blocksPerColumn; } else { mcuExpected = mcusPerLine * frame.mcusPerColumn; } var h, v; while (mcu < mcuExpected) { var mcuToRead = resetInterval ? Math.min(mcuExpected - mcu, resetInterval) : mcuExpected; 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 && fileMarker.invalid) { (0, _util.warn)('decodeScan - unexpected MCU data, current marker is: ' + fileMarker.invalid); offset = fileMarker.offset; } var marker = fileMarker && fileMarker.marker; if (!marker || marker <= 0xFF00) { throw new JpegError('marker was not found'); } if (marker >= 0xFFD0 && marker <= 0xFFD7) { offset += 2; } else { break; } } fileMarker = findNextFileMarker(data, offset); if (fileMarker && fileMarker.invalid) { (0, _util.warn)('decodeScan - unexpected Scan data, current marker is: ' + fileMarker.invalid); offset = fileMarker.offset; } return offset - startOffset; } function quantizeAndInverse(component, blockBufferOffset, p) { var qt = component.quantizationTable, blockData = component.blockData; var v0, v1, v2, v3, v4, v5, v6, v7; var p0, p1, p2, p3, p4, p5, p6, p7; var t; if (!qt) { throw new JpegError('missing required Quantization Table.'); } for (var 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 (var 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; t = t < -2040 ? 0 : t >= 2024 ? 255 : 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; p0 = p0 < 16 ? 0 : p0 >= 4080 ? 255 : p0 >> 4; p1 = p1 < 16 ? 0 : p1 >= 4080 ? 255 : p1 >> 4; p2 = p2 < 16 ? 0 : p2 >= 4080 ? 255 : p2 >> 4; p3 = p3 < 16 ? 0 : p3 >= 4080 ? 255 : p3 >> 4; p4 = p4 < 16 ? 0 : p4 >= 4080 ? 255 : p4 >> 4; p5 = p5 < 16 ? 0 : p5 >= 4080 ? 255 : p5 >> 4; p6 = p6 < 16 ? 0 : p6 >= 4080 ? 255 : p6 >> 4; p7 = p7 < 16 ? 0 : p7 >= 4080 ? 255 : 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) { var blocksPerLine = component.blocksPerLine; var blocksPerColumn = component.blocksPerColumn; var computationBuffer = new Int16Array(64); for (var blockRow = 0; blockRow < blocksPerColumn; blockRow++) { for (var blockCol = 0; blockCol < blocksPerLine; blockCol++) { var offset = getBlockBufferOffset(component, blockRow, blockCol); quantizeAndInverse(component, offset, computationBuffer); } } return component.blockData; } function findNextFileMarker(data, currentPos) { var startPos = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : currentPos; function peekUint16(pos) { return data[pos] << 8 | data[pos + 1]; } var maxPos = data.length - 1; var newPos = startPos < currentPos ? startPos : currentPos; if (currentPos >= maxPos) { return null; } var currentMarker = peekUint16(currentPos); if (currentMarker >= 0xFFC0 && currentMarker <= 0xFFFE) { return { invalid: null, marker: currentMarker, offset: currentPos }; } var newMarker = peekUint16(newPos); while (!(newMarker >= 0xFFC0 && newMarker <= 0xFFFE)) { if (++newPos >= maxPos) { return null; } newMarker = peekUint16(newPos); } return { invalid: currentMarker.toString(16), marker: newMarker, offset: newPos }; } JpegImage.prototype = { parse: function parse(data) { var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, _ref2$dnlScanLines = _ref2.dnlScanLines, dnlScanLines = _ref2$dnlScanLines === void 0 ? null : _ref2$dnlScanLines; function readUint16() { var value = data[offset] << 8 | data[offset + 1]; offset += 2; return value; } function readDataBlock() { var length = readUint16(); var endOffset = offset + length - 2; var fileMarker = findNextFileMarker(data, endOffset, offset); if (fileMarker && fileMarker.invalid) { (0, _util.warn)('readDataBlock - incorrect length, current marker is: ' + fileMarker.invalid); endOffset = fileMarker.offset; } var array = data.subarray(offset, endOffset); offset += array.length; return array; } function prepareComponents(frame) { var mcusPerLine = Math.ceil(frame.samplesPerLine / 8 / frame.maxH); var mcusPerColumn = Math.ceil(frame.scanLines / 8 / frame.maxV); for (var i = 0; i < frame.components.length; i++) { component = frame.components[i]; var blocksPerLine = Math.ceil(Math.ceil(frame.samplesPerLine / 8) * component.h / frame.maxH); var blocksPerColumn = Math.ceil(Math.ceil(frame.scanLines / 8) * component.v / frame.maxV); var blocksPerLineForMcu = mcusPerLine * component.h; var blocksPerColumnForMcu = mcusPerColumn * component.v; var blocksBufferSize = 64 * blocksPerColumnForMcu * (blocksPerLineForMcu + 1); component.blockData = new Int16Array(blocksBufferSize); component.blocksPerLine = blocksPerLine; component.blocksPerColumn = blocksPerColumn; } frame.mcusPerLine = mcusPerLine; frame.mcusPerColumn = mcusPerColumn; } var offset = 0; var jfif = null; var adobe = null; var frame, resetInterval; var numSOSMarkers = 0; var quantizationTables = []; var huffmanTablesAC = [], huffmanTablesDC = []; var fileMarker = readUint16(); if (fileMarker !== 0xFFD8) { throw new JpegError('SOI not found'); } fileMarker = readUint16(); markerLoop: while (fileMarker !== 0xFFD9) { var 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: var 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: var quantizationTablesLength = readUint16(); var quantizationTablesEnd = quantizationTablesLength + offset - 2; var z; while (offset < quantizationTablesEnd) { var quantizationTableSpec = data[offset++]; var 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] = readUint16(); } } 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'); } readUint16(); frame = {}; frame.extended = fileMarker === 0xFFC1; frame.progressive = fileMarker === 0xFFC2; frame.precision = data[offset++]; var sofScanLines = readUint16(); frame.scanLines = dnlScanLines || sofScanLines; frame.samplesPerLine = readUint16(); frame.components = []; frame.componentIds = {}; var componentsCount = data[offset++], componentId; var maxH = 0, maxV = 0; for (i = 0; i < componentsCount; i++) { componentId = data[offset]; var h = data[offset + 1] >> 4; var v = data[offset + 1] & 15; if (maxH < h) { maxH = h; } if (maxV < v) { maxV = v; } var qId = data[offset + 2]; l = frame.components.push({ h: h, v: v, quantizationId: qId, quantizationTable: null }); frame.componentIds[componentId] = l - 1; offset += 3; } frame.maxH = maxH; frame.maxV = maxV; prepareComponents(frame); break; case 0xFFC4: var huffmanLength = readUint16(); for (i = 2; i < huffmanLength;) { var huffmanTableSpec = data[offset++]; var codeLengths = new Uint8Array(16); var codeLengthSum = 0; for (j = 0; j < 16; j++, offset++) { codeLengthSum += codeLengths[j] = data[offset]; } var 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: readUint16(); resetInterval = readUint16(); break; case 0xFFDA: var parseDNLMarker = ++numSOSMarkers === 1 && !dnlScanLines; readUint16(); var selectorsCount = data[offset++]; var components = [], component; for (i = 0; i < selectorsCount; i++) { var componentIndex = frame.componentIds[data[offset++]]; component = frame.components[componentIndex]; var tableSpec = data[offset++]; component.huffmanTableDC = huffmanTablesDC[tableSpec >> 4]; component.huffmanTableAC = huffmanTablesAC[tableSpec & 15]; components.push(component); } var spectralStart = data[offset++]; var spectralEnd = data[offset++]; var successiveApproximation = data[offset++]; try { var 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)("".concat(ex.message, " -- attempting to re-parse the JPEG image.")); return this.parse(data, { dnlScanLines: ex.scanLines }); } else if (ex instanceof EOIMarkerError) { (0, _util.warn)("".concat(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: if (data[offset - 3] === 0xFF && data[offset - 2] >= 0xC0 && data[offset - 2] <= 0xFE) { offset -= 3; break; } var nextFileMarker = findNextFileMarker(data, offset - 2); if (nextFileMarker && nextFileMarker.invalid) { (0, _util.warn)('JpegImage.parse - unexpected data, current marker is: ' + nextFileMarker.invalid); offset = nextFileMarker.offset; break; } throw new JpegError('unknown marker ' + fileMarker.toString(16)); } fileMarker = readUint16(); } this.width = frame.samplesPerLine; this.height = frame.scanLines; this.jfif = jfif; this.adobe = adobe; this.components = []; for (i = 0; i < frame.components.length; i++) { component = frame.components[i]; var quantizationTable = quantizationTables[component.quantizationId]; if (quantizationTable) { component.quantizationTable = quantizationTable; } this.components.push({ 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; }, _getLinearizedBlockData: function _getLinearizedBlockData(width, height) { var isSourcePDF = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var scaleX = this.width / width, scaleY = this.height / height; var component, componentScaleX, componentScaleY, blocksPerScanline; var x, y, i, j, k; var index; var offset = 0; var output; var numComponents = this.components.length; var dataLength = width * height * numComponents; var data = new Uint8ClampedArray(dataLength); var xScaleBlockOffset = new Uint32Array(width); var mask3LSB = 0xfffffff8; 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; for (x = 0; x < width; x++) { j = 0 | x * componentScaleX; xScaleBlockOffset[x] = (j & mask3LSB) << 3 | j & 7; } 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; } } } var 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; } return true; } if (this._colorTransform === 1) { return true; } return false; }, _convertYccToRgb: function convertYccToRgb(data) { var Y, Cb, Cr; for (var 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: function convertYcckToRgb(data) { var Y, Cb, Cr, k; var offset = 0; for (var 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: function convertYcckToCmyk(data) { var Y, Cb, Cr; for (var 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: function convertCmykToRgb(data) { var c, m, y, k; var offset = 0; var scale = 1 / 255; for (var i = 0, length = data.length; i < length; i += 4) { c = data[i] * scale; m = data[i + 1] * scale; y = data[i + 2] * scale; k = data[i + 3] * scale; data[offset++] = 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); data[offset++] = 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); data[offset++] = 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); } return data.subarray(0, offset); }, getData: function getData(_ref3) { var width = _ref3.width, height = _ref3.height, _ref3$forceRGB = _ref3.forceRGB, forceRGB = _ref3$forceRGB === void 0 ? false : _ref3$forceRGB, _ref3$isSourcePDF = _ref3.isSourcePDF, isSourcePDF = _ref3$isSourcePDF === void 0 ? false : _ref3$isSourcePDF; if (this.numComponents > 4) { throw new JpegError('Unsupported color mode'); } var data = this._getLinearizedBlockData(width, height, isSourcePDF); if (this.numComponents === 1 && forceRGB) { var dataLength = data.length; var rgbData = new Uint8ClampedArray(dataLength * 3); var offset = 0; for (var i = 0; i < dataLength; i++) { var 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; } }; return JpegImage; }(); exports.JpegImage = JpegImage; /***/ }), /* 165 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.JpxStream = void 0; var _stream = __w_extracthighlights_require__(157); var _jpx = __w_extracthighlights_require__(166); var _util = __w_extracthighlights_require__(6); var JpxStream = function JpxStreamClosure() { function JpxStream(stream, maybeLength, dict, params) { this.stream = stream; this.maybeLength = maybeLength; this.dict = dict; this.params = params; _stream.DecodeStream.call(this, maybeLength); } JpxStream.prototype = Object.create(_stream.DecodeStream.prototype); Object.defineProperty(JpxStream.prototype, 'bytes', { get: function JpxStream_bytes() { return (0, _util.shadow)(this, 'bytes', this.stream.getBytes(this.maybeLength)); }, configurable: true }); JpxStream.prototype.ensureBuffer = function (requested) {}; JpxStream.prototype.readBlock = function () { if (this.eof) { return; } var jpxImage = new _jpx.JpxImage(); jpxImage.parse(this.bytes); var width = jpxImage.width; var height = jpxImage.height; var componentsCount = jpxImage.componentsCount; var tileCount = jpxImage.tiles.length; if (tileCount === 1) { this.buffer = jpxImage.tiles[0].items; } else { var data = new Uint8ClampedArray(width * height * componentsCount); for (var k = 0; k < tileCount; k++) { var tileComponents = jpxImage.tiles[k]; var tileWidth = tileComponents.width; var tileHeight = tileComponents.height; var tileLeft = tileComponents.left; var tileTop = tileComponents.top; var src = tileComponents.items; var srcPosition = 0; var dataPosition = (width * tileTop + tileLeft) * componentsCount; var imgRowSize = width * componentsCount; var tileRowSize = tileWidth * componentsCount; for (var j = 0; j < tileHeight; j++) { var 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; }; return JpxStream; }(); exports.JpxStream = JpxStream; /***/ }), /* 166 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.JpxImage = void 0; var _util = __w_extracthighlights_require__(6); var _arithmetic_decoder = __w_extracthighlights_require__(162); var JpxError = function JpxErrorClosure() { function JpxError(msg) { this.message = 'JPX error: ' + msg; } JpxError.prototype = new Error(); JpxError.prototype.name = 'JpxError'; JpxError.constructor = JpxError; return JpxError; }(); var JpxImage = function JpxImageClosure() { var SubbandsGainLog2 = { 'LL': 0, 'LH': 1, 'HL': 1, 'HH': 2 }; function JpxImage() { this.failOnCorruptedImage = false; } JpxImage.prototype = { parse: function JpxImage_parse(data) { var head = (0, _util.readUint16)(data, 0); if (head === 0xFF4F) { this.parseCodestream(data, 0, data.length); return; } var position = 0, length = data.length; while (position < length) { var headerSize = 8; var lbox = (0, _util.readUint32)(data, position); var tbox = (0, _util.readUint32)(data, position + 4); position += headerSize; if (lbox === 1) { lbox = (0, _util.readUint32)(data, position) * 4294967296 + (0, _util.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'); } var dataLength = lbox - headerSize; var jumpDataLength = true; switch (tbox) { case 0x6A703268: jumpDataLength = false; break; case 0x636F6C72: var method = data[position]; if (method === 1) { var colorspace = (0, _util.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, _util.readUint32)(data, position) !== 0x0d0a870a) { (0, _util.warn)('Invalid JP2 signature'); } break; case 0x6A501A1A: case 0x66747970: case 0x72726571: case 0x72657320: case 0x69686472: break; default: var 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: function JpxImage_parseImageProperties(stream) { var newByte = stream.getByte(); while (newByte >= 0) { var oldByte = newByte; newByte = stream.getByte(); var code = oldByte << 8 | newByte; if (code === 0xFF51) { stream.skip(4); var Xsiz = stream.getInt32() >>> 0; var Ysiz = stream.getInt32() >>> 0; var XOsiz = stream.getInt32() >>> 0; var YOsiz = stream.getInt32() >>> 0; stream.skip(16); var 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: function JpxImage_parseCodestream(data, start, end) { var context = {}; var doNotRecover = false; try { var position = start; while (position + 1 < end) { var code = (0, _util.readUint16)(data, position); position += 2; var length = 0, j, sqcd, spqcds, spqcdSize, scalarExpounded, tile; switch (code) { case 0xFF4F: context.mainHeader = true; break; case 0xFFD9: break; case 0xFF51: length = (0, _util.readUint16)(data, position); var siz = {}; siz.Xsiz = (0, _util.readUint32)(data, position + 4); siz.Ysiz = (0, _util.readUint32)(data, position + 8); siz.XOsiz = (0, _util.readUint32)(data, position + 12); siz.YOsiz = (0, _util.readUint32)(data, position + 16); siz.XTsiz = (0, _util.readUint32)(data, position + 20); siz.YTsiz = (0, _util.readUint32)(data, position + 24); siz.XTOsiz = (0, _util.readUint32)(data, position + 28); siz.YTOsiz = (0, _util.readUint32)(data, position + 32); var componentsCount = (0, _util.readUint16)(data, position + 36); siz.Csiz = componentsCount; var components = []; j = position + 38; for (var i = 0; i < componentsCount; i++) { var 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, _util.readUint16)(data, position); var 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) { var 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, _util.readUint16)(data, position); var qcc = {}; j = position + 2; var cqcc; if (context.SIZ.Csiz < 257) { cqcc = data[j++]; } else { cqcc = (0, _util.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) { 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, _util.readUint16)(data, position); var cod = {}; j = position + 2; var scod = data[j++]; cod.entropyCoderWithCustomPrecincts = !!(scod & 1); cod.sopMarkerUsed = !!(scod & 2); cod.ephMarkerUsed = !!(scod & 4); cod.progressionOrder = data[j++]; cod.layersCount = (0, _util.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; var 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) { var precinctsSizes = []; while (j < length + position) { var precinctsSize = data[j++]; precinctsSizes.push({ PPx: precinctsSize & 0xF, PPy: precinctsSize >> 4 }); } cod.precinctsSizes = precinctsSizes; } var 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; throw new Error('Unsupported COD options (' + unsupported.join(', ') + ')'); } if (context.mainHeader) { context.COD = cod; } else { context.currentTile.COD = cod; context.currentTile.COC = []; } break; case 0xFF90: length = (0, _util.readUint16)(data, position); tile = {}; tile.index = (0, _util.readUint16)(data, position + 2); tile.length = (0, _util.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 0xFF55: case 0xFF57: case 0xFF58: case 0xFF64: length = (0, _util.readUint16)(data, position); break; case 0xFF53: throw new Error('Codestream code 0xFF53 (COC) is ' + 'not implemented'); 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; } }; 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) { var siz = context.SIZ; var tile, tiles = []; var numXtiles = Math.ceil((siz.Xsiz - siz.XTOsiz) / siz.XTsiz); var numYtiles = Math.ceil((siz.Ysiz - siz.YTOsiz) / siz.YTsiz); for (var q = 0; q < numYtiles; q++) { for (var 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; var componentsCount = siz.Csiz; for (var i = 0, ii = componentsCount; i < ii; i++) { var component = components[i]; for (var j = 0, jj = tiles.length; j < jj; j++) { var 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) { var codOrCoc = component.codingStyleParameters; var 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) { var precinctWidth = 1 << dimensions.PPx; var precinctHeight = 1 << dimensions.PPy; var isZeroRes = resolution.resLevel === 0; var precinctWidthInSubband = 1 << dimensions.PPx + (isZeroRes ? 0 : -1); var precinctHeightInSubband = 1 << dimensions.PPy + (isZeroRes ? 0 : -1); var numprecinctswide = resolution.trx1 > resolution.trx0 ? Math.ceil(resolution.trx1 / precinctWidth) - Math.floor(resolution.trx0 / precinctWidth) : 0; var numprecinctshigh = resolution.try1 > resolution.try0 ? Math.ceil(resolution.try1 / precinctHeight) - Math.floor(resolution.try0 / precinctHeight) : 0; var numprecincts = numprecinctswide * numprecinctshigh; resolution.precinctParameters = { precinctWidth: precinctWidth, precinctHeight: precinctHeight, numprecinctswide: numprecinctswide, numprecinctshigh: numprecinctshigh, numprecincts: numprecincts, precinctWidthInSubband: precinctWidthInSubband, precinctHeightInSubband: precinctHeightInSubband }; } function buildCodeblocks(context, subband, dimensions) { var xcb_ = dimensions.xcb_; var ycb_ = dimensions.ycb_; var codeblockWidth = 1 << xcb_; var codeblockHeight = 1 << ycb_; var cbx0 = subband.tbx0 >> xcb_; var cby0 = subband.tby0 >> ycb_; var cbx1 = subband.tbx1 + codeblockWidth - 1 >> xcb_; var cby1 = subband.tby1 + codeblockHeight - 1 >> ycb_; var precinctParameters = subband.resolution.precinctParameters; var codeblocks = []; var precincts = []; var 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); var pi = Math.floor((codeblock.tbx0_ - subband.tbx0) / precinctParameters.precinctWidthInSubband); var 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); var 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) { var precinctCodeblocks = []; var subbands = resolution.subbands; for (var i = 0, ii = subbands.length; i < ii; i++) { var subband = subbands[i]; var codeblocks = subband.codeblocks; for (var j = 0, jj = codeblocks.length; j < jj; j++) { var codeblock = codeblocks[j]; if (codeblock.precinctNumber !== precinctNumber) { continue; } precinctCodeblocks.push(codeblock); } } return { layerNumber: layerNumber, codeblocks: precinctCodeblocks }; } function LayerResolutionComponentPositionIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var maxDecompositionLevelsCount = 0; for (var q = 0; q < componentsCount; q++) { maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); } var 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++) { var component = tile.components[i]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; for (; k < numprecincts;) { var packet = createPacket(resolution, k, l); k++; return packet; } k = 0; } i = 0; } r = 0; } throw new JpxError('Out of packets'); }; } function ResolutionLayerComponentPositionIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var maxDecompositionLevelsCount = 0; for (var q = 0; q < componentsCount; q++) { maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, tile.components[q].codingStyleParameters.decompositionLevelsCount); } var 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++) { var component = tile.components[i]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; for (; k < numprecincts;) { var packet = createPacket(resolution, k, l); k++; return packet; } k = 0; } i = 0; } l = 0; } throw new JpxError('Out of packets'); }; } function ResolutionPositionComponentLayerIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var l, r, c, p; var maxDecompositionLevelsCount = 0; for (c = 0; c < componentsCount; c++) { var component = tile.components[c]; maxDecompositionLevelsCount = Math.max(maxDecompositionLevelsCount, component.codingStyleParameters.decompositionLevelsCount); } var maxNumPrecinctsInLevel = new Int32Array(maxDecompositionLevelsCount + 1); for (r = 0; r <= maxDecompositionLevelsCount; ++r) { var maxNumPrecincts = 0; for (c = 0; c < componentsCount; ++c) { var 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++) { var component = tile.components[c]; if (r > component.codingStyleParameters.decompositionLevelsCount) { continue; } var resolution = component.resolutions[r]; var numprecincts = resolution.precinctParameters.numprecincts; if (p >= numprecincts) { continue; } for (; l < layersCount;) { var packet = createPacket(resolution, p, l); l++; return packet; } l = 0; } c = 0; } p = 0; } throw new JpxError('Out of packets'); }; } function PositionComponentResolutionLayerIterator(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var precinctsSizes = getPrecinctSizesInImageScale(tile); var precinctsIterationSizes = precinctsSizes; var 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++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; for (; r <= decompositionLevelsCount; r++) { var resolution = component.resolutions[r]; var sizeInImageScale = precinctsSizes.components[c].resolutions[r]; var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); if (k === null) { continue; } for (; l < layersCount;) { var 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) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var layersCount = tile.codingStyleDefaultParameters.layersCount; var componentsCount = siz.Csiz; var precinctsSizes = getPrecinctSizesInImageScale(tile); var l = 0, r = 0, c = 0, px = 0, py = 0; this.nextPacket = function JpxImage_nextPacket() { for (; c < componentsCount; ++c) { var component = tile.components[c]; var precinctsIterationSizes = precinctsSizes.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; for (; py < precinctsIterationSizes.maxNumHigh; py++) { for (; px < precinctsIterationSizes.maxNumWide; px++) { for (; r <= decompositionLevelsCount; r++) { var resolution = component.resolutions[r]; var sizeInImageScale = precinctsIterationSizes.resolutions[r]; var k = getPrecinctIndexIfExist(px, py, sizeInImageScale, precinctsIterationSizes, resolution); if (k === null) { continue; } for (; l < layersCount;) { var 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) { var posX = pxIndex * precinctIterationSizes.minWidth; var posY = pyIndex * precinctIterationSizes.minHeight; if (posX % sizeInImageScale.width !== 0 || posY % sizeInImageScale.height !== 0) { return null; } var startPrecinctRowIndex = posY / sizeInImageScale.width * resolution.precinctParameters.numprecinctswide; return posX / sizeInImageScale.height + startPrecinctRowIndex; } function getPrecinctSizesInImageScale(tile) { var componentsCount = tile.components.length; var minWidth = Number.MAX_VALUE; var minHeight = Number.MAX_VALUE; var maxNumWide = 0; var maxNumHigh = 0; var sizePerComponent = new Array(componentsCount); for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; var sizePerResolution = new Array(decompositionLevelsCount + 1); var minWidthCurrentComponent = Number.MAX_VALUE; var minHeightCurrentComponent = Number.MAX_VALUE; var maxNumWideCurrentComponent = 0; var maxNumHighCurrentComponent = 0; var scale = 1; for (var r = decompositionLevelsCount; r >= 0; --r) { var resolution = component.resolutions[r]; var widthCurrentResolution = scale * resolution.precinctParameters.precinctWidth; var 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: minWidth, minHeight: minHeight, maxNumWide: maxNumWide, maxNumHigh: maxNumHigh }; } function buildPackets(context) { var siz = context.SIZ; var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var componentsCount = siz.Csiz; for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var decompositionLevelsCount = component.codingStyleParameters.decompositionLevelsCount; var resolutions = []; var subbands = []; for (var r = 0; r <= decompositionLevelsCount; r++) { var blocksDimensions = getBlocksDimensions(context, component, r); var resolution = {}; var 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); var 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 { var bscale = 1 << decompositionLevelsCount - r + 1; var 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; } var 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 ".concat(progressionOrder)); } } function parseTilePackets(context, data, offset, dataLength) { var position = 0; var buffer, bufferSize = 0, skipNextBit = false; function readBits(count) { while (bufferSize < count) { var 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; } var value = readBits(2); if (value < 3) { return value + 3; } value = readBits(5); if (value < 31) { return value + 6; } value = readBits(7); return value + 37; } var tileIndex = context.currentTile.index; var tile = context.tiles[tileIndex]; var sopMarkerUsed = context.COD.sopMarkerUsed; var ephMarkerUsed = context.COD.ephMarkerUsed; var packetsIterator = tile.packetsIterator; while (position < dataLength) { alignToByte(); if (sopMarkerUsed && skipMarkerIfEqual(0x91)) { skipBytes(4); } var packet = packetsIterator.nextPacket(); if (!readBits(1)) { continue; } var layerNumber = packet.layerNumber; var queue = [], codeblock; for (var i = 0, ii = packet.codeblocks.length; i < ii; i++) { codeblock = packet.codeblocks[i]; var precinct = codeblock.precinct; var codeblockColumn = codeblock.cbx - precinct.cbxMin; var codeblockRow = codeblock.cby - precinct.cbyMin; var codeblockIncluded = false; var firstTimeInclusion = false; var valueReady; if (codeblock['included'] !== undefined) { codeblockIncluded = !!readBits(1); } else { precinct = codeblock.precinct; var inclusionTree, zeroBitPlanesTree; if (precinct['inclusionTree'] !== undefined) { inclusionTree = precinct.inclusionTree; } else { var width = precinct.cbxMax - precinct.cbxMin + 1; var height = precinct.cbyMax - precinct.cbyMin + 1; inclusionTree = new InclusionTree(width, height, layerNumber); zeroBitPlanesTree = new TagTree(width, height); precinct.inclusionTree = inclusionTree; precinct.zeroBitPlanesTree = zeroBitPlanesTree; } 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; } var codingpasses = readCodingpasses(); while (readBits(1)) { codeblock.Lblock++; } var codingpassesLog2 = (0, _util.log2)(codingpasses); var bits = (codingpasses < 1 << codingpassesLog2 ? codingpassesLog2 - 1 : codingpassesLog2) + codeblock.Lblock; var codedDataLength = readBits(bits); queue.push({ codeblock: codeblock, codingpasses: codingpasses, dataLength: codedDataLength }); } alignToByte(); if (ephMarkerUsed) { skipMarkerIfEqual(0x92); } while (queue.length > 0) { var packetItem = queue.shift(); codeblock = packetItem.codeblock; if (codeblock['data'] === undefined) { codeblock.data = []; } codeblock.data.push({ data: 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) { var x0 = subband.tbx0; var y0 = subband.tby0; var width = subband.tbx1 - subband.tbx0; var codeblocks = subband.codeblocks; var right = subband.type.charAt(0) === 'H' ? 1 : 0; var bottom = subband.type.charAt(1) === 'H' ? levelWidth : 0; for (var i = 0, ii = codeblocks.length; i < ii; ++i) { var codeblock = codeblocks[i]; var blockWidth = codeblock.tbx1_ - codeblock.tbx0_; var blockHeight = codeblock.tby1_ - codeblock.tby0_; if (blockWidth === 0 || blockHeight === 0) { continue; } if (codeblock['data'] === undefined) { continue; } var bitModel, currentCodingpassType; bitModel = new BitModel(blockWidth, blockHeight, codeblock.subbandType, codeblock.zeroBitPlanes, mb); currentCodingpassType = 2; var data = codeblock.data, totalLength = 0, codingpasses = 0; var j, jj, dataItem; for (j = 0, jj = data.length; j < jj; j++) { dataItem = data[j]; totalLength += dataItem.end - dataItem.start; codingpasses += dataItem.codingpasses; } var encodedData = new Uint8Array(totalLength); var position = 0; for (j = 0, jj = data.length; j < jj; j++) { dataItem = data[j]; var chunk = dataItem.data.subarray(dataItem.start, dataItem.end); encodedData.set(chunk, position); position += chunk.length; } var 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; } var offset = codeblock.tbx0_ - x0 + (codeblock.tby0_ - y0) * width; var sign = bitModel.coefficentsSign; var magnitude = bitModel.coefficentsMagnitude; var bitsDecoded = bitModel.bitsDecoded; var magnitudeCorrection = reversible ? 0 : 0.5; var k, n, nb; position = 0; var interleave = subband.type !== 'LL'; for (j = 0; j < blockHeight; j++) { var row = offset / width | 0; var 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]; var 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) { var component = tile.components[c]; var codingStyleParameters = component.codingStyleParameters; var quantizationParameters = component.quantizationParameters; var decompositionLevelsCount = codingStyleParameters.decompositionLevelsCount; var spqcds = quantizationParameters.SPqcds; var scalarExpounded = quantizationParameters.scalarExpounded; var guardBits = quantizationParameters.guardBits; var segmentationSymbolUsed = codingStyleParameters.segmentationSymbolUsed; var precision = context.components[c].precision; var reversible = codingStyleParameters.reversibleTransformation; var transform = reversible ? new ReversibleTransform() : new IrreversibleTransform(); var subbandCoefficients = []; var b = 0; for (var i = 0; i <= decompositionLevelsCount; i++) { var resolution = component.resolutions[i]; var width = resolution.trx1 - resolution.trx0; var height = resolution.try1 - resolution.try0; var coefficients = new Float32Array(width * height); for (var j = 0, jj = resolution.subbands.length; j < jj; j++) { var 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++; } var subband = resolution.subbands[j]; var gainLog2 = SubbandsGainLog2[subband.type]; var delta = reversible ? 1 : Math.pow(2, precision + gainLog2 - epsilon) * (1 + mu / 2048); var mb = guardBits + epsilon - 1; copyCoefficients(coefficients, width, height, subband, delta, mb, reversible, segmentationSymbolUsed); } subbandCoefficients.push({ width: width, height: height, items: coefficients }); } var 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) { var siz = context.SIZ; var components = context.components; var componentsCount = siz.Csiz; var resultImages = []; for (var i = 0, ii = context.tiles.length; i < ii; i++) { var tile = context.tiles[i]; var transformedTiles = []; var c; for (c = 0; c < componentsCount; c++) { transformedTiles[c] = transformTile(context, tile, c); } var tile0 = transformedTiles[0]; var out = new Uint8ClampedArray(tile0.items.length * componentsCount); var result = { left: tile0.left, top: tile0.top, width: tile0.width, height: tile0.height, items: out }; var shift, offset; var pos = 0, j, jj, y0, y1, y2; if (tile.codingStyleDefaultParameters.multipleComponentTransform) { var fourComponents = componentsCount === 4; var y0items = transformedTiles[0].items; var y1items = transformedTiles[1].items; var y2items = transformedTiles[2].items; var y3items = fourComponents ? transformedTiles[3].items : null; shift = components[0].precision - 8; offset = (128 << shift) + 0.5; var component0 = tile.components[0]; var 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]; var 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 (c = 0; c < componentsCount; c++) { var 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) { var siz = context.SIZ; var componentsCount = siz.Csiz; var tile = context.tiles[tileIndex]; for (var c = 0; c < componentsCount; c++) { var component = tile.components[c]; var qcdOrQcc = context.currentTile.QCC[c] !== undefined ? context.currentTile.QCC[c] : context.currentTile.QCD; component.quantizationParameters = qcdOrQcc; var codOrCoc = context.currentTile.COC[c] !== undefined ? context.currentTile.COC[c] : context.currentTile.COD; component.codingStyleParameters = codOrCoc; } tile.codingStyleDefaultParameters = context.currentTile.COD; } var TagTree = function TagTreeClosure() { function TagTree(width, height) { var levelsLength = (0, _util.log2)(Math.max(width, height)) + 1; this.levels = []; for (var i = 0; i < levelsLength; i++) { var level = { width: width, height: height, items: [] }; this.levels.push(level); width = Math.ceil(width / 2); height = Math.ceil(height / 2); } } TagTree.prototype = { reset: function TagTree_reset(i, j) { var currentLevel = 0, value = 0, level; while (currentLevel < this.levels.length) { level = this.levels[currentLevel]; var 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: function TagTree_incrementValue() { var level = this.levels[this.currentLevel]; level.items[level.index]++; }, nextLevel: function TagTree_nextLevel() { var currentLevel = this.currentLevel; var level = this.levels[currentLevel]; var 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; } }; return TagTree; }(); var InclusionTree = function InclusionTreeClosure() { function InclusionTree(width, height, defaultValue) { var levelsLength = (0, _util.log2)(Math.max(width, height)) + 1; this.levels = []; for (var i = 0; i < levelsLength; i++) { var items = new Uint8Array(width * height); for (var j = 0, jj = items.length; j < jj; j++) { items[j] = defaultValue; } var level = { width: width, height: height, items: items }; this.levels.push(level); width = Math.ceil(width / 2); height = Math.ceil(height / 2); } } InclusionTree.prototype = { reset: function InclusionTree_reset(i, j, stopValue) { var currentLevel = 0; while (currentLevel < this.levels.length) { var level = this.levels[currentLevel]; var index = i + j * level.width; level.index = index; var 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: function InclusionTree_incrementValue(stopValue) { var level = this.levels[this.currentLevel]; level.items[level.index] = stopValue + 1; this.propagateValues(); }, propagateValues: function InclusionTree_propagateValues() { var levelIndex = this.currentLevel; var level = this.levels[levelIndex]; var currentValue = level.items[level.index]; while (--levelIndex >= 0) { level = this.levels[levelIndex]; level.items[level.index] = currentValue; } }, nextLevel: function InclusionTree_nextLevel() { var currentLevel = this.currentLevel; var level = this.levels[currentLevel]; var 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; } }; return InclusionTree; }(); var BitModel = function BitModelClosure() { var UNIFORM_CONTEXT = 17; var RUNLENGTH_CONTEXT = 18; var 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]); var 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]); var 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]); function BitModel(width, height, subband, zeroBitPlanes, mb) { this.width = width; this.height = height; this.contextLabelTable = subband === 'HH' ? HHContextLabel : subband === 'HL' ? HLContextLabel : LLAndLHContextsLabel; var coefficientCount = width * height; this.neighborsSignificance = new Uint8Array(coefficientCount); this.coefficentsSign = new Uint8Array(coefficientCount); this.coefficentsMagnitude = mb > 14 ? new Uint32Array(coefficientCount) : mb > 6 ? new Uint16Array(coefficientCount) : new Uint8Array(coefficientCount); this.processingFlags = new Uint8Array(coefficientCount); var bitsDecoded = new Uint8Array(coefficientCount); if (zeroBitPlanes !== 0) { for (var i = 0; i < coefficientCount; i++) { bitsDecoded[i] = zeroBitPlanes; } } this.bitsDecoded = bitsDecoded; this.reset(); } BitModel.prototype = { setDecoder: function BitModel_setDecoder(decoder) { this.decoder = decoder; }, reset: function BitModel_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: function BitModel_setNeighborsSignificance(row, column, index) { var neighborsSignificance = this.neighborsSignificance; var width = this.width, height = this.height; var left = column > 0; var right = column + 1 < width; var 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: function BitModel_runSignificancePropagationPass() { var decoder = this.decoder; var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var neighborsSignificance = this.neighborsSignificance; var processingFlags = this.processingFlags; var contexts = this.contexts; var labels = this.contextLabelTable; var bitsDecoded = this.bitsDecoded; var processedInverseMask = ~1; var processedMask = 1; var firstMagnitudeBitMask = 2; for (var i0 = 0; i0 < height; i0 += 4) { for (var j = 0; j < width; j++) { var index = i0 * width + j; for (var i1 = 0; i1 < 4; i1++, index += width) { var i = i0 + i1; if (i >= height) { break; } processingFlags[index] &= processedInverseMask; if (coefficentsMagnitude[index] || !neighborsSignificance[index]) { continue; } var contextLabel = labels[neighborsSignificance[index]]; var decision = decoder.readBit(contexts, contextLabel); if (decision) { var 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: function BitModel_decodeSignBit(row, column, index) { var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var contribution, sign0, sign1, significance1; var 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; } var 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: function BitModel_runMagnitudeRefinementPass() { var decoder = this.decoder; var width = this.width, height = this.height; var coefficentsMagnitude = this.coefficentsMagnitude; var neighborsSignificance = this.neighborsSignificance; var contexts = this.contexts; var bitsDecoded = this.bitsDecoded; var processingFlags = this.processingFlags; var processedMask = 1; var firstMagnitudeBitMask = 2; var length = width * height; var width4 = width * 4; for (var index0 = 0, indexNext; index0 < length; index0 = indexNext) { indexNext = Math.min(length, index0 + width4); for (var j = 0; j < width; j++) { for (var index = index0 + j; index < indexNext; index += width) { if (!coefficentsMagnitude[index] || (processingFlags[index] & processedMask) !== 0) { continue; } var contextLabel = 16; if ((processingFlags[index] & firstMagnitudeBitMask) !== 0) { processingFlags[index] ^= firstMagnitudeBitMask; var significance = neighborsSignificance[index] & 127; contextLabel = significance === 0 ? 15 : 14; } var bit = decoder.readBit(contexts, contextLabel); coefficentsMagnitude[index] = coefficentsMagnitude[index] << 1 | bit; bitsDecoded[index]++; processingFlags[index] |= processedMask; } } } }, runCleanupPass: function BitModel_runCleanupPass() { var decoder = this.decoder; var width = this.width, height = this.height; var neighborsSignificance = this.neighborsSignificance; var coefficentsMagnitude = this.coefficentsMagnitude; var coefficentsSign = this.coefficentsSign; var contexts = this.contexts; var labels = this.contextLabelTable; var bitsDecoded = this.bitsDecoded; var processingFlags = this.processingFlags; var processedMask = 1; var firstMagnitudeBitMask = 2; var oneRowDown = width; var twoRowsDown = width * 2; var threeRowsDown = width * 3; var iNext; for (var i0 = 0; i0 < height; i0 = iNext) { iNext = Math.min(i0 + 4, height); var indexBase = i0 * width; var checkAllEmpty = i0 + 3 < height; for (var j = 0; j < width; j++) { var index0 = indexBase + j; var 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; var i1 = 0, index = index0; var i = i0, sign; if (allEmpty) { var 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 (var 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; } var contextLabel = labels[neighborsSignificance[index]]; var 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: function BitModel_checkSegmentationSymbol() { var decoder = this.decoder; var contexts = this.contexts; var 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; }(); var Transform = function TransformClosure() { function Transform() {} Transform.prototype.calculate = function transformCalculate(subbands, u0, v0) { var ll = subbands[0]; for (var i = 1, ii = subbands.length; i < ii; i++) { ll = this.iterate(ll, subbands[i], u0, v0); } return ll; }; Transform.prototype.extend = function extend(buffer, offset, size) { var i1 = offset - 1, j1 = offset + 1; var 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]; }; Transform.prototype.iterate = function Transform_iterate(ll, hl_lh_hh, u0, v0) { var llWidth = ll.width, llHeight = ll.height, llItems = ll.items; var width = hl_lh_hh.width; var height = hl_lh_hh.height; var items = hl_lh_hh.items; var 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; var bufferPadding = 4; var 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); } } var numBuffers = 16; var colBuffers = []; for (i = 0; i < numBuffers; i++) { colBuffers.push(new Float32Array(height + 2 * bufferPadding)); } var 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--; var 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: width, height: height, items: items }; }; return Transform; }(); var IrreversibleTransform = function IrreversibleTransformClosure() { function IrreversibleTransform() { Transform.call(this); } IrreversibleTransform.prototype = Object.create(Transform.prototype); IrreversibleTransform.prototype.filter = function irreversibleTransformFilter(x, offset, length) { var len = length >> 1; offset = offset | 0; var j, n, current, next; var alpha = -1.586134342059924; var beta = -0.052980118572961; var gamma = 0.882911075530934; var delta = 0.443506852043971; var K = 1.230174104914001; var 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; } } } }; return IrreversibleTransform; }(); var ReversibleTransform = function ReversibleTransformClosure() { function ReversibleTransform() { Transform.call(this); } ReversibleTransform.prototype = Object.create(Transform.prototype); ReversibleTransform.prototype.filter = function reversibleTransformFilter(x, offset, length) { var len = length >> 1; offset = offset | 0; var 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; } }; return ReversibleTransform; }(); return JpxImage; }(); exports.JpxImage = JpxImage; /***/ }), /* 167 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.calculateSHA512 = exports.calculateSHA384 = exports.calculateSHA256 = exports.calculateMD5 = exports.PDF20 = exports.PDF17 = exports.CipherTransformFactory = exports.ARCFourCipher = exports.AES256Cipher = exports.AES128Cipher = void 0; var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); var _stream = __w_extracthighlights_require__(157); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var ARCFourCipher = function ARCFourCipherClosure() { function ARCFourCipher(key) { this.a = 0; this.b = 0; var s = new Uint8Array(256); var i, j = 0, tmp, keyLength = key.length; for (i = 0; i < 256; ++i) { s[i] = i; } for (i = 0; i < 256; ++i) { tmp = s[i]; j = j + tmp + key[i % keyLength] & 0xFF; s[i] = s[j]; s[j] = tmp; } this.s = s; } ARCFourCipher.prototype = { encryptBlock: function ARCFourCipher_encryptBlock(data) { var i, n = data.length, tmp, tmp2; var a = this.a, b = this.b, s = this.s; var output = new Uint8Array(n); for (i = 0; i < n; ++i) { a = a + 1 & 0xFF; tmp = s[a]; b = b + tmp & 0xFF; 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; } }; ARCFourCipher.prototype.decryptBlock = ARCFourCipher.prototype.encryptBlock; return ARCFourCipher; }(); exports.ARCFourCipher = ARCFourCipher; var calculateMD5 = function calculateMD5Closure() { var 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]); var 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) { var h0 = 1732584193, h1 = -271733879, h2 = -1732584194, h3 = 271733878; var paddedLength = length + 72 & ~63; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; 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; var 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; } var 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; } var 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; var Word64 = function Word64Closure() { function Word64(highInteger, lowInteger) { this.high = highInteger | 0; this.low = lowInteger | 0; } Word64.prototype = { and: function Word64_and(word) { this.high &= word.high; this.low &= word.low; }, xor: function Word64_xor(word) { this.high ^= word.high; this.low ^= word.low; }, or: function Word64_or(word) { this.high |= word.high; this.low |= word.low; }, shiftRight: function Word64_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: function Word64_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 = this.low << places; } }, rotateRight: function Word64_rotateRight(places) { var 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: function Word64_not() { this.high = ~this.high; this.low = ~this.low; }, add: function Word64_add(word) { var lowAdd = (this.low >>> 0) + (word.low >>> 0); var highAdd = (this.high >>> 0) + (word.high >>> 0); if (lowAdd > 0xFFFFFFFF) { highAdd += 1; } this.low = lowAdd | 0; this.high = highAdd | 0; }, copyTo: function Word64_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: function Word64_assign(word) { this.high = word.high; this.low = word.low; } }; return Word64; }(); var 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; } var 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) { var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a, h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19; var paddedLength = Math.ceil((length + 9) / 64) * 64; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; 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; var 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; } var 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; var 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); } var 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) { mode384 = !!mode384; var 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); } var paddedLength = Math.ceil((length + 17) / 128) * 128; var padded = new Uint8Array(paddedLength); var i, j, n; for (i = 0; i < length; ++i) { padded[i] = data[offset++]; } padded[i++] = 0x80; 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; var w = new Array(80); for (i = 0; i < 80; i++) { w[i] = new Word64(0, 0); } var a = new Word64(0, 0), b = new Word64(0, 0), c = new Word64(0, 0); var d = new Word64(0, 0), e = new Word64(0, 0), f = new Word64(0, 0); var g = new Word64(0, 0), h = new Word64(0, 0); var t1 = new Word64(0, 0), t2 = new Word64(0, 0); var tmp1 = new Word64(0, 0), tmp2 = new Word64(0, 0), 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); } var 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; var calculateSHA384 = function calculateSHA384Closure() { function hash(data, offset, length) { return calculateSHA512(data, offset, length, true); } return hash; }(); exports.calculateSHA384 = calculateSHA384; var NullCipher = function NullCipherClosure() { function NullCipher() {} NullCipher.prototype = { decryptBlock: function NullCipher_decryptBlock(data) { return data; } }; return NullCipher; }(); var AESBaseCipher = /*#__PURE__*/ function () { function AESBaseCipher() { _classCallCheck(this, AESBaseCipher); 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 (var 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; } _createClass(AESBaseCipher, [{ key: "_expandKey", value: function _expandKey(cipherKey) { (0, _util.unreachable)('Cannot call `_expandKey` on the base class'); } }, { key: "_decrypt", value: function _decrypt(input, key) { var t, u, v; var state = new Uint8Array(16); state.set(input); for (var j = 0, k = this._keySize; j < 16; ++j, ++k) { state[j] ^= key[k]; } for (var 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 (var _j = 0; _j < 16; ++_j) { state[_j] = this._inv_s[state[_j]]; } for (var _j2 = 0, _k = i * 16; _j2 < 16; ++_j2, ++_k) { state[_j2] ^= key[_k]; } for (var _j3 = 0; _j3 < 16; _j3 += 4) { var s0 = this._mix[state[_j3]]; var s1 = this._mix[state[_j3 + 1]]; var s2 = this._mix[state[_j3 + 2]]; var s3 = this._mix[state[_j3 + 3]]; t = s0 ^ s1 >>> 8 ^ s1 << 24 ^ s2 >>> 16 ^ s2 << 16 ^ s3 >>> 24 ^ s3 << 8; state[_j3] = t >>> 24 & 0xFF; state[_j3 + 1] = t >> 16 & 0xFF; state[_j3 + 2] = t >> 8 & 0xFF; state[_j3 + 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 (var _j4 = 0; _j4 < 16; ++_j4) { state[_j4] = this._inv_s[state[_j4]]; state[_j4] ^= key[_j4]; } return state; } }, { key: "_encrypt", value: function _encrypt(input, key) { var s = this._s; var t, u, v; var state = new Uint8Array(16); state.set(input); for (var j = 0; j < 16; ++j) { state[j] ^= key[j]; } for (var i = 1; i < this._cyclesOfRepetition; i++) { for (var _j5 = 0; _j5 < 16; ++_j5) { state[_j5] = s[state[_j5]]; } 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 (var _j6 = 0; _j6 < 16; _j6 += 4) { var s0 = state[_j6 + 0]; var s1 = state[_j6 + 1]; var s2 = state[_j6 + 2]; var s3 = state[_j6 + 3]; t = s0 ^ s1 ^ s2 ^ s3; state[_j6 + 0] ^= t ^ this._mixCol[s0 ^ s1]; state[_j6 + 1] ^= t ^ this._mixCol[s1 ^ s2]; state[_j6 + 2] ^= t ^ this._mixCol[s2 ^ s3]; state[_j6 + 3] ^= t ^ this._mixCol[s3 ^ s0]; } for (var _j7 = 0, k = i * 16; _j7 < 16; ++_j7, ++k) { state[_j7] ^= key[k]; } } for (var _j8 = 0; _j8 < 16; ++_j8) { state[_j8] = s[state[_j8]]; } 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 (var _j9 = 0, _k2 = this._keySize; _j9 < 16; ++_j9, ++_k2) { state[_j9] ^= key[_k2]; } return state; } }, { key: "_decryptBlock2", value: function _decryptBlock2(data, finalize) { var sourceLength = data.length; var buffer = this.buffer, bufferLength = this.bufferPosition; var result = [], iv = this.iv; for (var i = 0; i < sourceLength; ++i) { buffer[bufferLength] = data[i]; ++bufferLength; if (bufferLength < 16) { continue; } var plain = this._decrypt(buffer, this._key); for (var 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); } var outputLength = 16 * result.length; if (finalize) { var lastBlock = result[result.length - 1]; var psLen = lastBlock[15]; if (psLen <= 16) { for (var _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); } } var output = new Uint8Array(outputLength); for (var _i2 = 0, _j10 = 0, _ii = result.length; _i2 < _ii; ++_i2, _j10 += 16) { output.set(result[_i2], _j10); } return output; } }, { key: "decryptBlock", value: function decryptBlock(data, finalize) { var iv = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var sourceLength = data.length; var buffer = this.buffer, bufferLength = this.bufferPosition; if (iv) { this.iv = iv; } else { for (var 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); } }, { key: "encrypt", value: function encrypt(data, iv) { var sourceLength = data.length; var buffer = this.buffer, bufferLength = this.bufferPosition; var result = []; if (!iv) { iv = new Uint8Array(16); } for (var i = 0; i < sourceLength; ++i) { buffer[bufferLength] = data[i]; ++bufferLength; if (bufferLength < 16) { continue; } for (var j = 0; j < 16; ++j) { buffer[j] ^= iv[j]; } var 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); } var outputLength = 16 * result.length; var output = new Uint8Array(outputLength); for (var _i3 = 0, _j11 = 0, ii = result.length; _i3 < ii; ++_i3, _j11 += 16) { output.set(result[_i3], _j11); } return output; } }]); return AESBaseCipher; }(); var AES128Cipher = /*#__PURE__*/ function (_AESBaseCipher) { _inherits(AES128Cipher, _AESBaseCipher); function AES128Cipher(key) { var _this; _classCallCheck(this, AES128Cipher); _this = _possibleConstructorReturn(this, _getPrototypeOf(AES128Cipher).call(this)); _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); return _this; } _createClass(AES128Cipher, [{ key: "_expandKey", value: function _expandKey(cipherKey) { var b = 176; var s = this._s; var rcon = this._rcon; var result = new Uint8Array(b); result.set(cipherKey); for (var j = 16, i = 1; j < b; ++i) { var t1 = result[j - 3]; var t2 = result[j - 2]; var t3 = result[j - 1]; var t4 = result[j - 4]; t1 = s[t1]; t2 = s[t2]; t3 = s[t3]; t4 = s[t4]; t1 = t1 ^ rcon[i]; for (var 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; } }]); return AES128Cipher; }(AESBaseCipher); exports.AES128Cipher = AES128Cipher; var AES256Cipher = /*#__PURE__*/ function (_AESBaseCipher2) { _inherits(AES256Cipher, _AESBaseCipher2); function AES256Cipher(key) { var _this2; _classCallCheck(this, AES256Cipher); _this2 = _possibleConstructorReturn(this, _getPrototypeOf(AES256Cipher).call(this)); _this2._cyclesOfRepetition = 14; _this2._keySize = 224; _this2._key = _this2._expandKey(key); return _this2; } _createClass(AES256Cipher, [{ key: "_expandKey", value: function _expandKey(cipherKey) { var b = 240; var s = this._s; var result = new Uint8Array(b); result.set(cipherKey); var r = 1; var t1, t2, t3, t4; for (var 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 = t1 ^ r; if ((r <<= 1) >= 256) { r = (r ^ 0x1b) & 0xFF; } } for (var 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; } }]); return AES256Cipher; }(AESBaseCipher); exports.AES256Cipher = AES256Cipher; var PDF17 = function PDF17Closure() { function compareByteArrays(array1, array2) { if (array1.length !== array2.length) { return false; } for (var i = 0; i < array1.length; i++) { if (array1[i] !== array2[i]) { return false; } } return true; } function PDF17() {} PDF17.prototype = { checkOwnerPassword: function PDF17_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerValidationSalt, password.length); hashData.set(userBytes, password.length + ownerValidationSalt.length); var result = calculateSHA256(hashData, 0, hashData.length); return compareByteArrays(result, ownerPassword); }, checkUserPassword: function PDF17_checkUserPassword(password, userValidationSalt, userPassword) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userValidationSalt, password.length); var result = calculateSHA256(hashData, 0, hashData.length); return compareByteArrays(result, userPassword); }, getOwnerKey: function PDF17_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerKeySalt, password.length); hashData.set(userBytes, password.length + ownerKeySalt.length); var key = calculateSHA256(hashData, 0, hashData.length); var cipher = new AES256Cipher(key); return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); }, getUserKey: function PDF17_getUserKey(password, userKeySalt, userEncryption) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userKeySalt, password.length); var key = calculateSHA256(hashData, 0, hashData.length); var cipher = new AES256Cipher(key); return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); } }; return PDF17; }(); exports.PDF17 = PDF17; var PDF20 = function PDF20Closure() { function concatArrays(array1, array2) { var t = new Uint8Array(array1.length + array2.length); t.set(array1, 0); t.set(array2, array1.length); return t; } function calculatePDF20Hash(password, input, userBytes) { var k = calculateSHA256(input, 0, input.length).subarray(0, 32); var e = [0]; var i = 0; while (i < 64 || e[e.length - 1] > i - 32) { var arrayLength = password.length + k.length + userBytes.length; var k1 = new Uint8Array(arrayLength * 64); var array = concatArrays(password, k); array = concatArrays(array, userBytes); for (var j = 0, pos = 0; j < 64; j++, pos += arrayLength) { k1.set(array, pos); } var cipher = new AES128Cipher(k.subarray(0, 16)); e = cipher.encrypt(k1, k.subarray(16, 32)); var remainder = 0; for (var 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); } function PDF20() {} function compareByteArrays(array1, array2) { if (array1.length !== array2.length) { return false; } for (var i = 0; i < array1.length; i++) { if (array1[i] !== array2[i]) { return false; } } return true; } PDF20.prototype = { hash: function PDF20_hash(password, concatBytes, userBytes) { return calculatePDF20Hash(password, concatBytes, userBytes); }, checkOwnerPassword: function PDF20_checkOwnerPassword(password, ownerValidationSalt, userBytes, ownerPassword) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerValidationSalt, password.length); hashData.set(userBytes, password.length + ownerValidationSalt.length); var result = calculatePDF20Hash(password, hashData, userBytes); return compareByteArrays(result, ownerPassword); }, checkUserPassword: function PDF20_checkUserPassword(password, userValidationSalt, userPassword) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userValidationSalt, password.length); var result = calculatePDF20Hash(password, hashData, []); return compareByteArrays(result, userPassword); }, getOwnerKey: function PDF20_getOwnerKey(password, ownerKeySalt, userBytes, ownerEncryption) { var hashData = new Uint8Array(password.length + 56); hashData.set(password, 0); hashData.set(ownerKeySalt, password.length); hashData.set(userBytes, password.length + ownerKeySalt.length); var key = calculatePDF20Hash(password, hashData, userBytes); var cipher = new AES256Cipher(key); return cipher.decryptBlock(ownerEncryption, false, new Uint8Array(16)); }, getUserKey: function PDF20_getUserKey(password, userKeySalt, userEncryption) { var hashData = new Uint8Array(password.length + 8); hashData.set(password, 0); hashData.set(userKeySalt, password.length); var key = calculatePDF20Hash(password, hashData, []); var cipher = new AES256Cipher(key); return cipher.decryptBlock(userEncryption, false, new Uint8Array(16)); } }; return PDF20; }(); exports.PDF20 = PDF20; var CipherTransform = function CipherTransformClosure() { function CipherTransform(stringCipherConstructor, streamCipherConstructor) { this.StringCipherConstructor = stringCipherConstructor; this.StreamCipherConstructor = streamCipherConstructor; } CipherTransform.prototype = { createStream: function CipherTransform_createStream(stream, length) { var cipher = new this.StreamCipherConstructor(); return new _stream.DecryptStream(stream, length, function cipherTransformDecryptStream(data, finalize) { return cipher.decryptBlock(data, finalize); }); }, decryptString: function CipherTransform_decryptString(s) { var cipher = new this.StringCipherConstructor(); var data = (0, _util.stringToBytes)(s); data = cipher.decryptBlock(data, true); return (0, _util.bytesToString)(data); } }; return CipherTransform; }(); var CipherTransformFactory = function CipherTransformFactoryClosure() { var 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) { var passwordLength = Math.min(127, password.length); password = password.subarray(0, passwordLength); } else { password = []; } var 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) { var hashDataSize = 40 + ownerPassword.length + fileId.length; var hashData = new Uint8Array(hashDataSize), 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; } var hash = calculateMD5(hashData, 0, i); var keyLengthInBytes = keyLength >> 3; if (revision >= 3) { for (j = 0; j < 50; ++j) { hash = calculateMD5(hash, 0, keyLengthInBytes); } } var encryptionKey = hash.subarray(0, keyLengthInBytes); var 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; var derivedKey = new Uint8Array(n), k; for (j = 1; j <= 19; ++j) { for (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) { var hashData = new Uint8Array(32), i = 0, j, n; n = Math.min(32, password.length); for (; i < n; ++i) { hashData[i] = password[i]; } j = 0; while (i < 32) { hashData[i++] = defaultPasswordBytes[j++]; } var hash = calculateMD5(hashData, 0, i); var keyLengthInBytes = keyLength >> 3; if (revision >= 3) { for (j = 0; j < 50; ++j) { hash = calculateMD5(hash, 0, hash.length); } } var cipher, userPassword; if (revision >= 3) { userPassword = ownerPassword; var derivedKey = new Uint8Array(keyLengthInBytes), k; for (j = 19; j >= 0; j--) { for (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; } var identityName = _primitives.Name.get('Identity'); function CipherTransformFactory(dict, fileId, password) { var filter = dict.get('Filter'); if (!(0, _primitives.isName)(filter, 'Standard')) { throw new _util.FormatError('unknown encryption method'); } this.dict = dict; var 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; var keyLength = dict.get('Length'); if (!keyLength) { if (algorithm <= 3) { keyLength = 40; } else { var cfDict = dict.get('CF'); var streamCryptoName = dict.get('StmF'); if ((0, _primitives.isDict)(cfDict) && (0, _primitives.isName)(streamCryptoName)) { cfDict.suppressEncryption = true; var 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'); } var ownerPassword = (0, _util.stringToBytes)(dict.get('O')).subarray(0, 32); var userPassword = (0, _util.stringToBytes)(dict.get('U')).subarray(0, 32); var flags = dict.get('P'); var revision = dict.get('R'); var encryptMetadata = (algorithm === 4 || algorithm === 5) && dict.get('EncryptMetadata') !== false; this.encryptMetadata = encryptMetadata; var fileIdBytes = (0, _util.stringToBytes)(fileId); var 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); } var encryptionKey; if (algorithm !== 5) { encryptionKey = prepareKeyData(fileIdBytes, passwordBytes, ownerPassword, userPassword, flags, revision, keyLength, encryptMetadata); } else { var ownerValidationSalt = (0, _util.stringToBytes)(dict.get('O')).subarray(32, 40); var ownerKeySalt = (0, _util.stringToBytes)(dict.get('O')).subarray(40, 48); var uBytes = (0, _util.stringToBytes)(dict.get('U')).subarray(0, 48); var userValidationSalt = (0, _util.stringToBytes)(dict.get('U')).subarray(32, 40); var userKeySalt = (0, _util.stringToBytes)(dict.get('U')).subarray(40, 48); var ownerEncryption = (0, _util.stringToBytes)(dict.get('OE')); var 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) { var 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) { var 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; } } function buildObjectKey(num, gen, encryptionKey, isAes) { var key = new Uint8Array(encryptionKey.length + 9), i, n; for (i = 0, n = encryptionKey.length; 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; } var 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.'); } var cryptFilter = cf.get(name.name); var 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'); } CipherTransformFactory.prototype = { createCipherTransform: function CipherTransformFactory_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)); } var key = buildObjectKey(num, gen, this.encryptionKey, false); var cipherConstructor = function buildCipherCipherConstructor() { return new ARCFourCipher(key); }; return new CipherTransform(cipherConstructor, cipherConstructor); } }; return CipherTransformFactory; }(); exports.CipherTransformFactory = CipherTransformFactory; /***/ }), /* 168 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ColorSpace = void 0; var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function resizeRgbImage(src, dest, w1, h1, w2, h2, alpha01) { var COMPONENTS = 3; alpha01 = alpha01 !== 1 ? 0 : alpha01; var xRatio = w1 / w2; var yRatio = h1 / h2; var newIndex = 0, oldIndex; var xScaled = new Uint16Array(w2); var w1Scanline = w1 * COMPONENTS; for (var i = 0; i < w2; i++) { xScaled[i] = Math.floor(i * xRatio) * COMPONENTS; } for (var _i = 0; _i < h2; _i++) { var py = Math.floor(_i * yRatio) * w1Scanline; for (var j = 0; j < w2; j++) { oldIndex = py + xScaled[j]; dest[newIndex++] = src[oldIndex++]; dest[newIndex++] = src[oldIndex++]; dest[newIndex++] = src[oldIndex++]; newIndex += alpha01; } } } var ColorSpace = /*#__PURE__*/ function () { function ColorSpace(name, numComps) { _classCallCheck(this, ColorSpace); if (this.constructor === ColorSpace) { (0, _util.unreachable)('Cannot initialize ColorSpace.'); } this.name = name; this.numComps = numComps; } _createClass(ColorSpace, [{ key: "getRgb", value: function getRgb(src, srcOffset) { var rgb = new Uint8ClampedArray(3); this.getRgbItem(src, srcOffset, rgb, 0); return rgb; } }, { key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { (0, _util.unreachable)('Should not call ColorSpace.getRgbItem'); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { (0, _util.unreachable)('Should not call ColorSpace.getRgbBuffer'); } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { (0, _util.unreachable)('Should not call ColorSpace.getOutputLength'); } }, { key: "isPassthrough", value: function isPassthrough(bits) { return false; } }, { key: "isDefaultDecode", value: function isDefaultDecode(decodeMap, bpc) { return ColorSpace.isDefaultDecode(decodeMap, this.numComps); } }, { key: "fillRgb", value: function fillRgb(dest, originalWidth, originalHeight, width, height, actualHeight, bpc, comps, alpha01) { var count = originalWidth * originalHeight; var rgbBuf = null; var numComponentColors = 1 << bpc; var needsResizing = originalHeight !== height || originalWidth !== width; if (this.isPassthrough(bpc)) { rgbBuf = comps; } else if (this.numComps === 1 && count > numComponentColors && this.name !== 'DeviceGray' && this.name !== 'DeviceRGB') { var allColors = bpc <= 8 ? new Uint8Array(numComponentColors) : new Uint16Array(numComponentColors); for (var i = 0; i < numComponentColors; i++) { allColors[i] = i; } var colorMap = new Uint8ClampedArray(numComponentColors * 3); this.getRgbBuffer(allColors, 0, numComponentColors, colorMap, 0, bpc, 0); if (!needsResizing) { var destPos = 0; for (var _i2 = 0; _i2 < count; ++_i2) { var key = comps[_i2] * 3; dest[destPos++] = colorMap[key]; dest[destPos++] = colorMap[key + 1]; dest[destPos++] = colorMap[key + 2]; destPos += alpha01; } } else { rgbBuf = new Uint8Array(count * 3); var rgbPos = 0; for (var _i3 = 0; _i3 < count; ++_i3) { var _key = comps[_i3] * 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 { var _destPos = 0, _rgbPos = 0; for (var _i4 = 0, ii = width * actualHeight; _i4 < ii; _i4++) { dest[_destPos++] = rgbBuf[_rgbPos++]; dest[_destPos++] = rgbBuf[_rgbPos++]; dest[_destPos++] = rgbBuf[_rgbPos++]; _destPos += alpha01; } } } } }, { key: "usesZeroToOneRange", get: function get() { return (0, _util.shadow)(this, 'usesZeroToOneRange', true); } }], [{ key: "parse", value: function parse(cs, xref, res, pdfFunctionFactory) { var IR = this.parseToIR(cs, xref, res, pdfFunctionFactory); return this.fromIR(IR); } }, { key: "fromIR", value: function fromIR(IR) { var name = Array.isArray(IR) ? IR[0] : IR; var whitePoint, blackPoint, gamma; switch (name) { case 'DeviceGrayCS': return this.singletons.gray; case 'DeviceRgbCS': return this.singletons.rgb; case 'DeviceCmykCS': return this.singletons.cmyk; case 'CalGrayCS': whitePoint = IR[1]; blackPoint = IR[2]; gamma = IR[3]; return new CalGrayCS(whitePoint, blackPoint, gamma); case 'CalRGBCS': whitePoint = IR[1]; blackPoint = IR[2]; gamma = IR[3]; var matrix = IR[4]; return new CalRGBCS(whitePoint, blackPoint, gamma, matrix); case 'PatternCS': var basePatternCS = IR[1]; if (basePatternCS) { basePatternCS = this.fromIR(basePatternCS); } return new PatternCS(basePatternCS); case 'IndexedCS': var baseIndexedCS = IR[1]; var hiVal = IR[2]; var lookup = IR[3]; return new IndexedCS(this.fromIR(baseIndexedCS), hiVal, lookup); case 'AlternateCS': var numComps = IR[1]; var alt = IR[2]; var tintFn = IR[3]; return new AlternateCS(numComps, this.fromIR(alt), tintFn); case 'LabCS': whitePoint = IR[1]; blackPoint = IR[2]; var range = IR[3]; return new LabCS(whitePoint, blackPoint, range); default: throw new _util.FormatError("Unknown colorspace name: ".concat(name)); } } }, { key: "parseToIR", value: function parseToIR(cs, xref) { var res = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; var pdfFunctionFactory = arguments.length > 3 ? arguments[3] : undefined; cs = xref.fetchIfRef(cs); if ((0, _primitives.isName)(cs)) { switch (cs.name) { case 'DeviceGray': case 'G': return 'DeviceGrayCS'; case 'DeviceRGB': case 'RGB': return 'DeviceRgbCS'; case 'DeviceCMYK': case 'CMYK': return 'DeviceCmykCS'; case 'Pattern': return ['PatternCS', null]; default: if ((0, _primitives.isDict)(res)) { var colorSpaces = res.get('ColorSpace'); if ((0, _primitives.isDict)(colorSpaces)) { var resCS = colorSpaces.get(cs.name); if (resCS) { if ((0, _primitives.isName)(resCS)) { return this.parseToIR(resCS, xref, res, pdfFunctionFactory); } cs = resCS; break; } } } throw new _util.FormatError("unrecognized colorspace ".concat(cs.name)); } } if (Array.isArray(cs)) { var mode = xref.fetchIfRef(cs[0]).name; var numComps, params, alt, whitePoint, blackPoint, gamma; switch (mode) { case 'DeviceGray': case 'G': return 'DeviceGrayCS'; case 'DeviceRGB': case 'RGB': return 'DeviceRgbCS'; case 'DeviceCMYK': case 'CMYK': return 'DeviceCmykCS'; case 'CalGray': params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray('WhitePoint'); blackPoint = params.getArray('BlackPoint'); gamma = params.get('Gamma'); return ['CalGrayCS', whitePoint, blackPoint, gamma]; case 'CalRGB': params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray('WhitePoint'); blackPoint = params.getArray('BlackPoint'); gamma = params.getArray('Gamma'); var matrix = params.getArray('Matrix'); return ['CalRGBCS', whitePoint, blackPoint, gamma, matrix]; case 'ICCBased': var stream = xref.fetchIfRef(cs[1]); var dict = stream.dict; numComps = dict.get('N'); alt = dict.get('Alternate'); if (alt) { var altIR = this.parseToIR(alt, xref, res, pdfFunctionFactory); var altCS = this.fromIR(altIR, pdfFunctionFactory); if (altCS.numComps === numComps) { return altIR; } (0, _util.warn)('ICCBased color space: Ignoring incorrect /Alternate entry.'); } if (numComps === 1) { return 'DeviceGrayCS'; } else if (numComps === 3) { return 'DeviceRgbCS'; } else if (numComps === 4) { return 'DeviceCmykCS'; } break; case 'Pattern': var basePatternCS = cs[1] || null; if (basePatternCS) { basePatternCS = this.parseToIR(basePatternCS, xref, res, pdfFunctionFactory); } return ['PatternCS', basePatternCS]; case 'Indexed': case 'I': var baseIndexedCS = this.parseToIR(cs[1], xref, res, pdfFunctionFactory); var hiVal = xref.fetchIfRef(cs[2]) + 1; var lookup = xref.fetchIfRef(cs[3]); if ((0, _primitives.isStream)(lookup)) { lookup = lookup.getBytes(); } return ['IndexedCS', baseIndexedCS, hiVal, lookup]; case 'Separation': case 'DeviceN': var name = xref.fetchIfRef(cs[1]); numComps = Array.isArray(name) ? name.length : 1; alt = this.parseToIR(cs[2], xref, res, pdfFunctionFactory); var tintFn = pdfFunctionFactory.create(xref.fetchIfRef(cs[3])); return ['AlternateCS', numComps, alt, tintFn]; case 'Lab': params = xref.fetchIfRef(cs[1]); whitePoint = params.getArray('WhitePoint'); blackPoint = params.getArray('BlackPoint'); var range = params.getArray('Range'); return ['LabCS', whitePoint, blackPoint, range]; default: throw new _util.FormatError("unimplemented color space object \"".concat(mode, "\"")); } } throw new _util.FormatError("unrecognized color space object: \"".concat(cs, "\"")); } }, { key: "isDefaultDecode", value: function 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 (var i = 0, ii = decode.length; i < ii; i += 2) { if (decode[i] !== 0 || decode[i + 1] !== 1) { return false; } } return true; } }, { key: "singletons", get: function get() { 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()); } }); } }]); return ColorSpace; }(); exports.ColorSpace = ColorSpace; var AlternateCS = /*#__PURE__*/ function (_ColorSpace) { _inherits(AlternateCS, _ColorSpace); function AlternateCS(numComps, base, tintFn) { var _this; _classCallCheck(this, AlternateCS); _this = _possibleConstructorReturn(this, _getPrototypeOf(AlternateCS).call(this, 'Alternate', numComps)); _this.base = base; _this.tintFn = tintFn; _this.tmpBuf = new Float32Array(base.numComps); return _this; } _createClass(AlternateCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { var tmpBuf = this.tmpBuf; this.tintFn(src, srcOffset, tmpBuf, 0); this.base.getRgbItem(tmpBuf, 0, dest, destOffset); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var tintFn = this.tintFn; var base = this.base; var scale = 1 / ((1 << bits) - 1); var baseNumComps = base.numComps; var usesZeroToOneRange = base.usesZeroToOneRange; var isPassthrough = (base.isPassthrough(8) || !usesZeroToOneRange) && alpha01 === 0; var pos = isPassthrough ? destOffset : 0; var baseBuf = isPassthrough ? dest : new Uint8ClampedArray(baseNumComps * count); var numComps = this.numComps; var scaled = new Float32Array(numComps); var tinted = new Float32Array(baseNumComps); var 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); } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return this.base.getOutputLength(inputLength * this.base.numComps / this.numComps, alpha01); } }]); return AlternateCS; }(ColorSpace); var PatternCS = /*#__PURE__*/ function (_ColorSpace2) { _inherits(PatternCS, _ColorSpace2); function PatternCS(baseCS) { var _this2; _classCallCheck(this, PatternCS); _this2 = _possibleConstructorReturn(this, _getPrototypeOf(PatternCS).call(this, 'Pattern', null)); _this2.base = baseCS; return _this2; } _createClass(PatternCS, [{ key: "isDefaultDecode", value: function isDefaultDecode(decodeMap, bpc) { (0, _util.unreachable)('Should not call PatternCS.isDefaultDecode'); } }]); return PatternCS; }(ColorSpace); var IndexedCS = /*#__PURE__*/ function (_ColorSpace3) { _inherits(IndexedCS, _ColorSpace3); function IndexedCS(base, highVal, lookup) { var _this3; _classCallCheck(this, IndexedCS); _this3 = _possibleConstructorReturn(this, _getPrototypeOf(IndexedCS).call(this, 'Indexed', 1)); _this3.base = base; _this3.highVal = highVal; var baseNumComps = base.numComps; var length = baseNumComps * highVal; if ((0, _primitives.isStream)(lookup)) { _this3.lookup = new Uint8Array(length); var bytes = lookup.getBytes(length); _this3.lookup.set(bytes); } else if ((0, _util.isString)(lookup)) { _this3.lookup = new Uint8Array(length); for (var i = 0; i < length; ++i) { _this3.lookup[i] = lookup.charCodeAt(i); } } else if (lookup instanceof Uint8Array) { _this3.lookup = lookup; } else { throw new _util.FormatError("Unrecognized lookup table: ".concat(lookup)); } return _this3; } _createClass(IndexedCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { var numComps = this.base.numComps; var start = src[srcOffset] * numComps; this.base.getRgbBuffer(this.lookup, start, 1, dest, destOffset, 8, 0); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var base = this.base; var numComps = base.numComps; var outputDelta = base.getOutputLength(numComps, alpha01); var lookup = this.lookup; for (var i = 0; i < count; ++i) { var lookupPos = src[srcOffset++] * numComps; base.getRgbBuffer(lookup, lookupPos, 1, dest, destOffset, 8, alpha01); destOffset += outputDelta; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return this.base.getOutputLength(inputLength * this.base.numComps, alpha01); } }, { key: "isDefaultDecode", value: function 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; } }]); return IndexedCS; }(ColorSpace); var DeviceGrayCS = /*#__PURE__*/ function (_ColorSpace4) { _inherits(DeviceGrayCS, _ColorSpace4); function DeviceGrayCS() { _classCallCheck(this, DeviceGrayCS); return _possibleConstructorReturn(this, _getPrototypeOf(DeviceGrayCS).call(this, 'DeviceGray', 1)); } _createClass(DeviceGrayCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { var c = src[srcOffset] * 255; dest[destOffset] = dest[destOffset + 1] = dest[destOffset + 2] = c; } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var scale = 255 / ((1 << bits) - 1); var j = srcOffset, q = destOffset; for (var i = 0; i < count; ++i) { var c = scale * src[j++]; dest[q++] = c; dest[q++] = c; dest[q++] = c; q += alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01); } }]); return DeviceGrayCS; }(ColorSpace); var DeviceRgbCS = /*#__PURE__*/ function (_ColorSpace5) { _inherits(DeviceRgbCS, _ColorSpace5); function DeviceRgbCS() { _classCallCheck(this, DeviceRgbCS); return _possibleConstructorReturn(this, _getPrototypeOf(DeviceRgbCS).call(this, 'DeviceRGB', 3)); } _createClass(DeviceRgbCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { dest[destOffset] = src[srcOffset] * 255; dest[destOffset + 1] = src[srcOffset + 1] * 255; dest[destOffset + 2] = src[srcOffset + 2] * 255; } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { if (bits === 8 && alpha01 === 0) { dest.set(src.subarray(srcOffset, srcOffset + count * 3), destOffset); return; } var scale = 255 / ((1 << bits) - 1); var j = srcOffset, q = destOffset; for (var i = 0; i < count; ++i) { dest[q++] = scale * src[j++]; dest[q++] = scale * src[j++]; dest[q++] = scale * src[j++]; q += alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } }, { key: "isPassthrough", value: function isPassthrough(bits) { return bits === 8; } }]); return DeviceRgbCS; }(ColorSpace); var DeviceCmykCS = function DeviceCmykCSClosure() { function convertToRgb(src, srcOffset, srcScale, dest, destOffset) { var c = src[srcOffset] * srcScale; var m = src[srcOffset + 1] * srcScale; var y = src[srcOffset + 2] * srcScale; var 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); } var DeviceCmykCS = /*#__PURE__*/ function (_ColorSpace6) { _inherits(DeviceCmykCS, _ColorSpace6); function DeviceCmykCS() { _classCallCheck(this, DeviceCmykCS); return _possibleConstructorReturn(this, _getPrototypeOf(DeviceCmykCS).call(this, 'DeviceCMYK', 4)); } _createClass(DeviceCmykCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(src, srcOffset, 1, dest, destOffset); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var scale = 1 / ((1 << bits) - 1); for (var i = 0; i < count; i++) { convertToRgb(src, srcOffset, scale, dest, destOffset); srcOffset += 4; destOffset += 3 + alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength / 4 * (3 + alpha01) | 0; } }]); return DeviceCmykCS; }(ColorSpace); return DeviceCmykCS; }(); var CalGrayCS = function CalGrayCSClosure() { function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { var A = src[srcOffset] * scale; var AG = Math.pow(A, cs.G); var L = cs.YW * AG; var val = Math.max(295.8 * Math.pow(L, 0.333333333333333333) - 40.8, 0); dest[destOffset] = val; dest[destOffset + 1] = val; dest[destOffset + 2] = val; } var CalGrayCS = /*#__PURE__*/ function (_ColorSpace7) { _inherits(CalGrayCS, _ColorSpace7); function CalGrayCS(whitePoint, blackPoint, gamma) { var _this4; _classCallCheck(this, CalGrayCS); _this4 = _possibleConstructorReturn(this, _getPrototypeOf(CalGrayCS).call(this, 'CalGray', 1)); if (!whitePoint) { throw new _util.FormatError('WhitePoint missing - required for color space CalGray'); } blackPoint = blackPoint || [0, 0, 0]; gamma = gamma || 1; _this4.XW = whitePoint[0]; _this4.YW = whitePoint[1]; _this4.ZW = whitePoint[2]; _this4.XB = blackPoint[0]; _this4.YB = blackPoint[1]; _this4.ZB = blackPoint[2]; _this4.G = gamma; if (_this4.XW < 0 || _this4.ZW < 0 || _this4.YW !== 1) { throw new _util.FormatError("Invalid WhitePoint components for ".concat(_this4.name) + ', no fallback available'); } if (_this4.XB < 0 || _this4.YB < 0 || _this4.ZB < 0) { (0, _util.info)("Invalid BlackPoint for ".concat(_this4.name, ", falling back to default.")); _this4.XB = _this4.YB = _this4.ZB = 0; } if (_this4.XB !== 0 || _this4.YB !== 0 || _this4.ZB !== 0) { (0, _util.warn)("".concat(_this4.name, ", BlackPoint: XB: ").concat(_this4.XB, ", YB: ").concat(_this4.YB, ", ") + "ZB: ".concat(_this4.ZB, ", only default values are supported.")); } if (_this4.G < 1) { (0, _util.info)("Invalid Gamma: ".concat(_this4.G, " for ").concat(_this4.name, ", ") + 'falling back to default.'); _this4.G = 1; } return _this4; } _createClass(CalGrayCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, dest, destOffset, 1); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var scale = 1 / ((1 << bits) - 1); for (var i = 0; i < count; ++i) { convertToRgb(this, src, srcOffset, dest, destOffset, scale); srcOffset += 1; destOffset += 3 + alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01); } }]); return CalGrayCS; }(ColorSpace); return CalGrayCS; }(); var CalRGBCS = function CalRGBCSClosure() { var BRADFORD_SCALE_MATRIX = new Float32Array([0.8951, 0.2664, -0.1614, -0.7502, 1.7135, 0.0367, 0.0389, -0.0685, 1.0296]); var BRADFORD_SCALE_INVERSE_MATRIX = new Float32Array([0.9869929, -0.1470543, 0.1599627, 0.4323053, 0.5183603, 0.0492912, -0.0085287, 0.0400428, 0.9684867]); var 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]); var FLAT_WHITEPOINT_MATRIX = new Float32Array([1, 1, 1]); var tempNormalizeMatrix = new Float32Array(3); var tempConvertMatrix1 = new Float32Array(3); var tempConvertMatrix2 = new Float32Array(3); var DECODE_L_CONSTANT = Math.pow((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) { var D65X = 0.95047; var D65Y = 1; var 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); } return adjustToRange(0, 1, (1 + 0.055) * Math.pow(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 Math.pow((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; } var zeroDecodeL = decodeL(0); var X_DST = zeroDecodeL; var X_SRC = decodeL(sourceBlackPoint[0]); var Y_DST = zeroDecodeL; var Y_SRC = decodeL(sourceBlackPoint[1]); var Z_DST = zeroDecodeL; var Z_SRC = decodeL(sourceBlackPoint[2]); var X_Scale = (1 - X_DST) / (1 - X_SRC); var X_Offset = 1 - X_Scale; var Y_Scale = (1 - Y_DST) / (1 - Y_SRC); var Y_Offset = 1 - Y_Scale; var Z_Scale = (1 - Z_DST) / (1 - Z_SRC); var 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; } var LMS = result; matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); var LMS_Flat = tempNormalizeMatrix; convertToFlat(sourceWhitePoint, LMS, LMS_Flat); matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_Flat, result); } function normalizeWhitePointToD65(sourceWhitePoint, XYZ_In, result) { var LMS = result; matrixProduct(BRADFORD_SCALE_MATRIX, XYZ_In, LMS); var LMS_D65 = tempNormalizeMatrix; convertToD65(sourceWhitePoint, LMS, LMS_D65); matrixProduct(BRADFORD_SCALE_INVERSE_MATRIX, LMS_D65, result); } function convertToRgb(cs, src, srcOffset, dest, destOffset, scale) { var A = adjustToRange(0, 1, src[srcOffset] * scale); var B = adjustToRange(0, 1, src[srcOffset + 1] * scale); var C = adjustToRange(0, 1, src[srcOffset + 2] * scale); var AGR = Math.pow(A, cs.GR); var BGG = Math.pow(B, cs.GG); var CGB = Math.pow(C, cs.GB); var X = cs.MXA * AGR + cs.MXB * BGG + cs.MXC * CGB; var Y = cs.MYA * AGR + cs.MYB * BGG + cs.MYC * CGB; var Z = cs.MZA * AGR + cs.MZB * BGG + cs.MZC * CGB; var XYZ = tempConvertMatrix1; XYZ[0] = X; XYZ[1] = Y; XYZ[2] = Z; var XYZ_Flat = tempConvertMatrix2; normalizeWhitePointToFlat(cs.whitePoint, XYZ, XYZ_Flat); var XYZ_Black = tempConvertMatrix1; compensateBlackPoint(cs.blackPoint, XYZ_Flat, XYZ_Black); var XYZ_D65 = tempConvertMatrix2; normalizeWhitePointToD65(FLAT_WHITEPOINT_MATRIX, XYZ_Black, XYZ_D65); var 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; } var CalRGBCS = /*#__PURE__*/ function (_ColorSpace8) { _inherits(CalRGBCS, _ColorSpace8); function CalRGBCS(whitePoint, blackPoint, gamma, matrix) { var _this5; _classCallCheck(this, CalRGBCS); _this5 = _possibleConstructorReturn(this, _getPrototypeOf(CalRGBCS).call(this, '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]); var XW = whitePoint[0]; var YW = whitePoint[1]; var ZW = whitePoint[2]; _this5.whitePoint = whitePoint; var XB = blackPoint[0]; var YB = blackPoint[1]; var ZB = blackPoint[2]; _this5.blackPoint = blackPoint; _this5.GR = gamma[0]; _this5.GG = gamma[1]; _this5.GB = gamma[2]; _this5.MXA = matrix[0]; _this5.MYA = matrix[1]; _this5.MZA = matrix[2]; _this5.MXB = matrix[3]; _this5.MYB = matrix[4]; _this5.MZB = matrix[5]; _this5.MXC = matrix[6]; _this5.MYC = matrix[7]; _this5.MZC = matrix[8]; if (XW < 0 || ZW < 0 || YW !== 1) { throw new _util.FormatError("Invalid WhitePoint components for ".concat(_this5.name) + ', no fallback available'); } if (XB < 0 || YB < 0 || ZB < 0) { (0, _util.info)("Invalid BlackPoint for ".concat(_this5.name, " [").concat(XB, ", ").concat(YB, ", ").concat(ZB, "], ") + 'falling back to default.'); _this5.blackPoint = new Float32Array(3); } if (_this5.GR < 0 || _this5.GG < 0 || _this5.GB < 0) { (0, _util.info)("Invalid Gamma [".concat(_this5.GR, ", ").concat(_this5.GG, ", ").concat(_this5.GB, "] for ") + "".concat(_this5.name, ", falling back to default.")); _this5.GR = _this5.GG = _this5.GB = 1; } return _this5; } _createClass(CalRGBCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, dest, destOffset, 1); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var scale = 1 / ((1 << bits) - 1); for (var i = 0; i < count; ++i) { convertToRgb(this, src, srcOffset, dest, destOffset, scale); srcOffset += 3; destOffset += 3 + alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } }]); return CalRGBCS; }(ColorSpace); return CalRGBCS; }(); var LabCS = function LabCSClosure() { function fn_g(x) { var result; if (x >= 6 / 29) { result = x * x * x; } 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) { var Ls = src[srcOffset]; var as = src[srcOffset + 1]; var 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); } as = as > cs.amax ? cs.amax : as < cs.amin ? cs.amin : as; bs = bs > cs.bmax ? cs.bmax : bs < cs.bmin ? cs.bmin : bs; var M = (Ls + 16) / 116; var L = M + as / 500; var N = M - bs / 200; var X = cs.XW * fn_g(L); var Y = cs.YW * fn_g(M); var Z = cs.ZW * fn_g(N); var r, g, b; if (cs.ZW < 1) { r = X * 3.1339 + Y * -1.6170 + Z * -0.4906; g = X * -0.9785 + Y * 1.9160 + Z * 0.0333; b = X * 0.0720 + Y * -0.2290 + 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.2040 + Z * 1.0570; } dest[destOffset] = Math.sqrt(r) * 255; dest[destOffset + 1] = Math.sqrt(g) * 255; dest[destOffset + 2] = Math.sqrt(b) * 255; } var LabCS = /*#__PURE__*/ function (_ColorSpace9) { _inherits(LabCS, _ColorSpace9); function LabCS(whitePoint, blackPoint, range) { var _this6; _classCallCheck(this, LabCS); _this6 = _possibleConstructorReturn(this, _getPrototypeOf(LabCS).call(this, '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]; _this6.XW = whitePoint[0]; _this6.YW = whitePoint[1]; _this6.ZW = whitePoint[2]; _this6.amin = range[0]; _this6.amax = range[1]; _this6.bmin = range[2]; _this6.bmax = range[3]; _this6.XB = blackPoint[0]; _this6.YB = blackPoint[1]; _this6.ZB = blackPoint[2]; if (_this6.XW < 0 || _this6.ZW < 0 || _this6.YW !== 1) { throw new _util.FormatError('Invalid WhitePoint components, no fallback available'); } if (_this6.XB < 0 || _this6.YB < 0 || _this6.ZB < 0) { (0, _util.info)('Invalid BlackPoint, falling back to default'); _this6.XB = _this6.YB = _this6.ZB = 0; } if (_this6.amin > _this6.amax || _this6.bmin > _this6.bmax) { (0, _util.info)('Invalid Range, falling back to defaults'); _this6.amin = -100; _this6.amax = 100; _this6.bmin = -100; _this6.bmax = 100; } return _this6; } _createClass(LabCS, [{ key: "getRgbItem", value: function getRgbItem(src, srcOffset, dest, destOffset) { convertToRgb(this, src, srcOffset, false, dest, destOffset); } }, { key: "getRgbBuffer", value: function getRgbBuffer(src, srcOffset, count, dest, destOffset, bits, alpha01) { var maxVal = (1 << bits) - 1; for (var i = 0; i < count; i++) { convertToRgb(this, src, srcOffset, maxVal, dest, destOffset); srcOffset += 3; destOffset += 3 + alpha01; } } }, { key: "getOutputLength", value: function getOutputLength(inputLength, alpha01) { return inputLength * (3 + alpha01) / 3 | 0; } }, { key: "isDefaultDecode", value: function isDefaultDecode(decodeMap, bpc) { return true; } }, { key: "usesZeroToOneRange", get: function get() { return (0, _util.shadow)(this, 'usesZeroToOneRange', false); } }]); return LabCS; }(ColorSpace); return LabCS; }(); /***/ }), /* 169 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.AnnotationFactory = exports.AnnotationBorderStyle = exports.Annotation = void 0; var _util = __w_extracthighlights_require__(6); var _obj = __w_extracthighlights_require__(154); var _primitives = __w_extracthighlights_require__(155); var _colorspace = __w_extracthighlights_require__(168); var _operator_list = __w_extracthighlights_require__(170); var _stream = __w_extracthighlights_require__(157); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var AnnotationFactory = /*#__PURE__*/ function () { function AnnotationFactory() { _classCallCheck(this, AnnotationFactory); } _createClass(AnnotationFactory, null, [{ key: "create", value: function create(xref, ref, pdfManager, idFactory) { return pdfManager.ensure(this, '_create', [xref, ref, pdfManager, idFactory]); } }, { key: "_create", value: function _create(xref, ref, pdfManager, idFactory) { var dict = xref.fetchIfRef(ref); if (!(0, _primitives.isDict)(dict)) { return; } var id = (0, _primitives.isRef)(ref) ? ref.toString() : 'annot_' + idFactory.createObjId(); var subtype = dict.get('Subtype'); subtype = (0, _primitives.isName)(subtype) ? subtype.name : null; var parameters = { xref: xref, dict: dict, ref: (0, _primitives.isRef)(ref) ? ref : null, subtype: subtype, id: id, pdfManager: pdfManager }; switch (subtype) { case 'Link': return new LinkAnnotation(parameters); case 'Text': return new TextAnnotation(parameters); case 'Widget': var fieldType = (0, _util.getInheritableProperty)({ dict: 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); } (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 '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 '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 (!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); } } }]); return AnnotationFactory; }(); exports.AnnotationFactory = AnnotationFactory; function getTransformMatrix(rect, bbox, matrix) { var bounds = _util.Util.getAxialAlignedBoundingBox(bbox, matrix); var minX = bounds[0]; var minY = bounds[1]; var maxX = bounds[2]; var maxY = bounds[3]; if (minX === maxX || minY === maxY) { return [1, 0, 0, 1, rect[0], rect[1]]; } var xRatio = (rect[2] - rect[0]) / (maxX - minX); var yRatio = (rect[3] - rect[1]) / (maxY - minY); return [xRatio, 0, 0, yRatio, rect[0] - minX * xRatio, rect[1] - minY * yRatio]; } var Annotation = /*#__PURE__*/ function () { function Annotation(params) { _classCallCheck(this, Annotation); var dict = params.dict; this.setFlags(dict.get('F')); this.setRectangle(dict.getArray('Rect')); this.setColor(dict.getArray('C')); this.setBorderStyle(dict); this.setAppearance(dict); if (params.subtype=='Highlight') ; // get quad points for annotation var quadPoints = []; var quadpts = dict.get('QuadPoints') || []; for (var j = 0; j < quadpts.length; j += 8) { // NB: we don't transform the quadpoints here, but later once we know // the user space => device space transformation. var topLeft = {x: quadpts[j + 4], y: quadpts[j + 5]}; var bottomRight = {x: quadpts[j + 2], y: quadpts[j + 3]}; var quad = {}; quad.x = Math.min(topLeft.x, bottomRight.x); quad.y = Math.min(topLeft.y, bottomRight.y); quad.width = Math.abs(topLeft.x - bottomRight.x); quad.height = Math.abs(topLeft.y - bottomRight.y); quadPoints.push(quad); } this.data = { annotationFlags: this.flags, borderStyle: this.borderStyle, color: this.color, hasAppearance: !!this.appearance, id: params.id, rect: this.rectangle, subtype: params.subtype, quadPoints: quadPoints, highlightedText: "" }; } _createClass(Annotation, [{ key: "_hasFlag", value: function _hasFlag(flags, flag) { return !!(flags & flag); } }, { key: "_isViewable", value: function _isViewable(flags) { return !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN) && !this._hasFlag(flags, _util.AnnotationFlag.NOVIEW); } }, { key: "_isPrintable", value: function _isPrintable(flags) { return this._hasFlag(flags, _util.AnnotationFlag.PRINT) && !this._hasFlag(flags, _util.AnnotationFlag.INVISIBLE) && !this._hasFlag(flags, _util.AnnotationFlag.HIDDEN); } }, { key: "setFlags", value: function setFlags(flags) { this.flags = Number.isInteger(flags) && flags > 0 ? flags : 0; } }, { key: "hasFlag", value: function hasFlag(flag) { return this._hasFlag(this.flags, flag); } }, { key: "setRectangle", value: function setRectangle(rectangle) { if (Array.isArray(rectangle) && rectangle.length === 4) { this.rectangle = _util.Util.normalizeRect(rectangle); } else { this.rectangle = [0, 0, 0, 0]; } } }, { key: "setColor", value: function setColor(color) { var rgbColor = new Uint8ClampedArray(3); if (!Array.isArray(color)) { this.color = rgbColor; return; } switch (color.length) { case 0: this.color = null; break; case 1: _colorspace.ColorSpace.singletons.gray.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; case 3: _colorspace.ColorSpace.singletons.rgb.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; case 4: _colorspace.ColorSpace.singletons.cmyk.getRgbItem(color, 0, rgbColor, 0); this.color = rgbColor; break; default: this.color = rgbColor; break; } } }, { key: "setBorderStyle", value: function setBorderStyle(borderStyle) { this.borderStyle = new AnnotationBorderStyle(); if (!(0, _primitives.isDict)(borderStyle)) { return; } if (borderStyle.has('BS')) { var dict = borderStyle.get('BS'); var dictType = dict.get('Type'); if (!dictType || (0, _primitives.isName)(dictType, 'Border')) { this.borderStyle.setWidth(dict.get('W')); this.borderStyle.setStyle(dict.get('S')); this.borderStyle.setDashArray(dict.getArray('D')); } } else if (borderStyle.has('Border')) { var 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]); if (array.length === 4) { this.borderStyle.setDashArray(array[3]); } } } else { this.borderStyle.setWidth(0); } } }, { key: "setAppearance", value: function setAppearance(dict) { this.appearance = null; var appearanceStates = dict.get('AP'); if (!(0, _primitives.isDict)(appearanceStates)) { return; } var normalAppearanceState = appearanceStates.get('N'); if ((0, _primitives.isStream)(normalAppearanceState)) { this.appearance = normalAppearanceState; return; } if (!(0, _primitives.isDict)(normalAppearanceState)) { return; } var as = dict.get('AS'); if (!(0, _primitives.isName)(as) || !normalAppearanceState.has(as.name)) { return; } this.appearance = normalAppearanceState.get(as.name); } }, { key: "_preparePopup", value: function _preparePopup(dict) { if (!dict.has('C')) { this.data.color = null; } this.data.hasPopup = dict.has('Popup'); this.data.title = (0, _util.stringToPDFString)(dict.get('T') || ''); this.data.contents = (0, _util.stringToPDFString)(dict.get('Contents') || ''); } }, { key: "loadResources", value: function loadResources(keys) { return this.appearance.dict.getAsync('Resources').then(function (resources) { if (!resources) { return; } var objectLoader = new _obj.ObjectLoader(resources, keys, resources.xref); return objectLoader.load().then(function () { return resources; }); }); } }, { key: "getOperatorList", value: function getOperatorList(evaluator, task, renderForms) { var _this = this; if (!this.appearance) { return Promise.resolve(new _operator_list.OperatorList()); } var data = this.data; var appearanceDict = this.appearance.dict; var resourcesPromise = this.loadResources(['ExtGState', 'ColorSpace', 'Pattern', 'Shading', 'XObject', 'Font']); var bbox = appearanceDict.getArray('BBox') || [0, 0, 1, 1]; var matrix = appearanceDict.getArray('Matrix') || [1, 0, 0, 1, 0, 0]; var transform = getTransformMatrix(data.rect, bbox, matrix); return resourcesPromise.then(function (resources) { var opList = new _operator_list.OperatorList(); opList.addOp(_util.OPS.beginAnnotation, [data.rect, transform, matrix]); return evaluator.getOperatorList({ stream: _this.appearance, task: task, resources: resources, operatorList: opList }).then(function () { opList.addOp(_util.OPS.endAnnotation, []); _this.appearance.reset(); return opList; }); }); } }, { key: "viewable", get: function get() { if (this.flags === 0) { return true; } return this._isViewable(this.flags); } }, { key: "printable", get: function get() { if (this.flags === 0) { return false; } return this._isPrintable(this.flags); } }]); return Annotation; }(); exports.Annotation = Annotation; var AnnotationBorderStyle = /*#__PURE__*/ function () { function AnnotationBorderStyle() { _classCallCheck(this, AnnotationBorderStyle); this.width = 1; this.style = _util.AnnotationBorderStyleType.SOLID; this.dashArray = [3]; this.horizontalCornerRadius = 0; this.verticalCornerRadius = 0; } _createClass(AnnotationBorderStyle, [{ key: "setWidth", value: function setWidth(width) { if ((0, _primitives.isName)(width)) { this.width = 0; return; } if (Number.isInteger(width)) { this.width = width; } } }, { key: "setStyle", value: function 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; } } }, { key: "setDashArray", value: function setDashArray(dashArray) { if (Array.isArray(dashArray) && dashArray.length > 0) { var isValid = true; var allZeros = true; for (var i = 0, len = dashArray.length; i < len; i++) { var element = dashArray[i]; var validNumber = +element >= 0; if (!validNumber) { isValid = false; break; } else if (element > 0) { allZeros = false; } } if (isValid && !allZeros) { this.dashArray = dashArray; } else { this.width = 0; } } else if (dashArray) { this.width = 0; } } }, { key: "setHorizontalCornerRadius", value: function setHorizontalCornerRadius(radius) { if (Number.isInteger(radius)) { this.horizontalCornerRadius = radius; } } }, { key: "setVerticalCornerRadius", value: function setVerticalCornerRadius(radius) { if (Number.isInteger(radius)) { this.verticalCornerRadius = radius; } } }]); return AnnotationBorderStyle; }(); exports.AnnotationBorderStyle = AnnotationBorderStyle; var WidgetAnnotation = /*#__PURE__*/ function (_Annotation) { _inherits(WidgetAnnotation, _Annotation); function WidgetAnnotation(params) { var _this2; _classCallCheck(this, WidgetAnnotation); _this2 = _possibleConstructorReturn(this, _getPrototypeOf(WidgetAnnotation).call(this, params)); var dict = params.dict; var data = _this2.data; data.annotationType = _util.AnnotationType.WIDGET; data.fieldName = _this2._constructFieldName(dict); data.fieldValue = (0, _util.getInheritableProperty)({ dict: dict, key: 'V', getArray: true }); data.alternativeText = (0, _util.stringToPDFString)(dict.get('TU') || ''); data.defaultAppearance = (0, _util.getInheritableProperty)({ dict: dict, key: 'DA' }) || ''; var fieldType = (0, _util.getInheritableProperty)({ dict: dict, key: 'FT' }); data.fieldType = (0, _primitives.isName)(fieldType) ? fieldType.name : null; _this2.fieldResources = (0, _util.getInheritableProperty)({ dict: dict, key: 'DR' }) || _primitives.Dict.empty; data.fieldFlags = (0, _util.getInheritableProperty)({ dict: dict, key: 'Ff' }); if (!Number.isInteger(data.fieldFlags) || data.fieldFlags < 0) { data.fieldFlags = 0; } data.readOnly = _this2.hasFieldFlag(_util.AnnotationFieldFlag.READONLY); if (data.fieldType === 'Sig') { data.fieldValue = null; _this2.setFlags(_util.AnnotationFlag.HIDDEN); } return _this2; } _createClass(WidgetAnnotation, [{ key: "_constructFieldName", value: function _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')); } var fieldName = []; if (dict.has('T')) { fieldName.unshift((0, _util.stringToPDFString)(dict.get('T'))); } var loopDict = dict; while (loopDict.has('Parent')) { loopDict = loopDict.get('Parent'); if (!(0, _primitives.isDict)(loopDict)) { break; } if (loopDict.has('T')) { fieldName.unshift((0, _util.stringToPDFString)(loopDict.get('T'))); } } return fieldName.join('.'); } }, { key: "hasFieldFlag", value: function hasFieldFlag(flag) { return !!(this.data.fieldFlags & flag); } }, { key: "getOperatorList", value: function getOperatorList(evaluator, task, renderForms) { if (renderForms) { return Promise.resolve(new _operator_list.OperatorList()); } return _get(_getPrototypeOf(WidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, renderForms); } }]); return WidgetAnnotation; }(Annotation); var TextWidgetAnnotation = /*#__PURE__*/ function (_WidgetAnnotation) { _inherits(TextWidgetAnnotation, _WidgetAnnotation); function TextWidgetAnnotation(params) { var _this3; _classCallCheck(this, TextWidgetAnnotation); _this3 = _possibleConstructorReturn(this, _getPrototypeOf(TextWidgetAnnotation).call(this, params)); var dict = params.dict; _this3.data.fieldValue = (0, _util.stringToPDFString)(_this3.data.fieldValue || ''); var alignment = (0, _util.getInheritableProperty)({ dict: dict, key: 'Q' }); if (!Number.isInteger(alignment) || alignment < 0 || alignment > 2) { alignment = null; } _this3.data.textAlignment = alignment; var maximumLength = (0, _util.getInheritableProperty)({ dict: dict, key: 'MaxLen' }); if (!Number.isInteger(maximumLength) || maximumLength < 0) { maximumLength = null; } _this3.data.maxLen = maximumLength; _this3.data.multiLine = _this3.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE); _this3.data.comb = _this3.hasFieldFlag(_util.AnnotationFieldFlag.COMB) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.MULTILINE) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.PASSWORD) && !_this3.hasFieldFlag(_util.AnnotationFieldFlag.FILESELECT) && _this3.data.maxLen !== null; return _this3; } _createClass(TextWidgetAnnotation, [{ key: "getOperatorList", value: function getOperatorList(evaluator, task, renderForms) { if (renderForms || this.appearance) { return _get(_getPrototypeOf(TextWidgetAnnotation.prototype), "getOperatorList", this).call(this, evaluator, task, renderForms); } var operatorList = new _operator_list.OperatorList(); if (!this.data.defaultAppearance) { return Promise.resolve(operatorList); } var stream = new _stream.Stream((0, _util.stringToBytes)(this.data.defaultAppearance)); return evaluator.getOperatorList({ stream: stream, task: task, resources: this.fieldResources, operatorList: operatorList }).then(function () { return operatorList; }); } }]); return TextWidgetAnnotation; }(WidgetAnnotation); var ButtonWidgetAnnotation = /*#__PURE__*/ function (_WidgetAnnotation2) { _inherits(ButtonWidgetAnnotation, _WidgetAnnotation2); function ButtonWidgetAnnotation(params) { var _this4; _classCallCheck(this, ButtonWidgetAnnotation); _this4 = _possibleConstructorReturn(this, _getPrototypeOf(ButtonWidgetAnnotation).call(this, params)); _this4.data.checkBox = !_this4.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); _this4.data.radioButton = _this4.hasFieldFlag(_util.AnnotationFieldFlag.RADIO) && !_this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); _this4.data.pushButton = _this4.hasFieldFlag(_util.AnnotationFieldFlag.PUSHBUTTON); if (_this4.data.checkBox) { _this4._processCheckBox(params); } else if (_this4.data.radioButton) { _this4._processRadioButton(params); } else if (_this4.data.pushButton) { _this4._processPushButton(params); } else { (0, _util.warn)('Invalid field flags for button widget annotation'); } return _this4; } _createClass(ButtonWidgetAnnotation, [{ key: "_processCheckBox", value: function _processCheckBox(params) { if ((0, _primitives.isName)(this.data.fieldValue)) { this.data.fieldValue = this.data.fieldValue.name; } var customAppearance = params.dict.get('AP'); if (!(0, _primitives.isDict)(customAppearance)) { return; } var exportValueOptionsDict = customAppearance.get('D'); if (!(0, _primitives.isDict)(exportValueOptionsDict)) { return; } var exportValues = exportValueOptionsDict.getKeys(); var hasCorrectOptionCount = exportValues.length === 2; if (!hasCorrectOptionCount) { return; } this.data.exportValue = exportValues[0] === 'Off' ? exportValues[1] : exportValues[0]; } }, { key: "_processRadioButton", value: function _processRadioButton(params) { this.data.fieldValue = this.data.buttonValue = null; var fieldParent = params.dict.get('Parent'); if ((0, _primitives.isDict)(fieldParent) && fieldParent.has('V')) { var fieldParentValue = fieldParent.get('V'); if ((0, _primitives.isName)(fieldParentValue)) { this.data.fieldValue = fieldParentValue.name; } } var appearanceStates = params.dict.get('AP'); if (!(0, _primitives.isDict)(appearanceStates)) { return; } var normalAppearanceState = appearanceStates.get('N'); if (!(0, _primitives.isDict)(normalAppearanceState)) { return; } var keys = normalAppearanceState.getKeys(); for (var i = 0, ii = keys.length; i < ii; i++) { if (keys[i] !== 'Off') { this.data.buttonValue = keys[i]; break; } } } }, { key: "_processPushButton", value: function _processPushButton(params) { if (!params.dict.has('A')) { (0, _util.warn)('Push buttons without action dictionaries are not supported'); return; } _obj.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: this.data, docBaseUrl: params.pdfManager.docBaseUrl }); } }]); return ButtonWidgetAnnotation; }(WidgetAnnotation); var ChoiceWidgetAnnotation = /*#__PURE__*/ function (_WidgetAnnotation3) { _inherits(ChoiceWidgetAnnotation, _WidgetAnnotation3); function ChoiceWidgetAnnotation(params) { var _this5; _classCallCheck(this, ChoiceWidgetAnnotation); _this5 = _possibleConstructorReturn(this, _getPrototypeOf(ChoiceWidgetAnnotation).call(this, params)); _this5.data.options = []; var options = (0, _util.getInheritableProperty)({ dict: params.dict, key: 'Opt' }); if (Array.isArray(options)) { var xref = params.xref; for (var i = 0, ii = options.length; i < ii; i++) { var option = xref.fetchIfRef(options[i]); var isOptionArray = Array.isArray(option); _this5.data.options[i] = { exportValue: isOptionArray ? xref.fetchIfRef(option[0]) : option, displayValue: (0, _util.stringToPDFString)(isOptionArray ? xref.fetchIfRef(option[1]) : option) }; } } if (!Array.isArray(_this5.data.fieldValue)) { _this5.data.fieldValue = [_this5.data.fieldValue]; } _this5.data.combo = _this5.hasFieldFlag(_util.AnnotationFieldFlag.COMBO); _this5.data.multiSelect = _this5.hasFieldFlag(_util.AnnotationFieldFlag.MULTISELECT); return _this5; } return ChoiceWidgetAnnotation; }(WidgetAnnotation); var TextAnnotation = /*#__PURE__*/ function (_Annotation2) { _inherits(TextAnnotation, _Annotation2); function TextAnnotation(parameters) { var _this6; _classCallCheck(this, TextAnnotation); var DEFAULT_ICON_SIZE = 22; _this6 = _possibleConstructorReturn(this, _getPrototypeOf(TextAnnotation).call(this, parameters)); _this6.data.annotationType = _util.AnnotationType.TEXT; if (_this6.data.hasAppearance) { _this6.data.name = 'NoIcon'; } else { _this6.data.rect[1] = _this6.data.rect[3] - DEFAULT_ICON_SIZE; _this6.data.rect[2] = _this6.data.rect[0] + DEFAULT_ICON_SIZE; _this6.data.name = parameters.dict.has('Name') ? parameters.dict.get('Name').name : 'Note'; } _this6._preparePopup(parameters.dict); return _this6; } return TextAnnotation; }(Annotation); var LinkAnnotation = /*#__PURE__*/ function (_Annotation3) { _inherits(LinkAnnotation, _Annotation3); function LinkAnnotation(params) { var _this7; _classCallCheck(this, LinkAnnotation); _this7 = _possibleConstructorReturn(this, _getPrototypeOf(LinkAnnotation).call(this, params)); _this7.data.annotationType = _util.AnnotationType.LINK; _obj.Catalog.parseDestDictionary({ destDict: params.dict, resultObj: _this7.data, docBaseUrl: params.pdfManager.docBaseUrl }); return _this7; } return LinkAnnotation; }(Annotation); var PopupAnnotation = /*#__PURE__*/ function (_Annotation4) { _inherits(PopupAnnotation, _Annotation4); function PopupAnnotation(parameters) { var _this8; _classCallCheck(this, PopupAnnotation); _this8 = _possibleConstructorReturn(this, _getPrototypeOf(PopupAnnotation).call(this, parameters)); _this8.data.annotationType = _util.AnnotationType.POPUP; var dict = parameters.dict; var parentItem = dict.get('Parent'); if (!parentItem) { (0, _util.warn)('Popup annotation has a missing or invalid parent annotation.'); return _possibleConstructorReturn(_this8); } var parentSubtype = parentItem.get('Subtype'); _this8.data.parentType = (0, _primitives.isName)(parentSubtype) ? parentSubtype.name : null; _this8.data.parentId = dict.getRaw('Parent').toString(); _this8.data.title = (0, _util.stringToPDFString)(parentItem.get('T') || ''); _this8.data.contents = (0, _util.stringToPDFString)(parentItem.get('Contents') || ''); if (!parentItem.has('C')) { _this8.data.color = null; } else { _this8.setColor(parentItem.getArray('C')); _this8.data.color = _this8.color; } if (!_this8.viewable) { var parentFlags = parentItem.get('F'); if (_this8._isViewable(parentFlags)) { _this8.setFlags(parentFlags); } } return _this8; } return PopupAnnotation; }(Annotation); var LineAnnotation = /*#__PURE__*/ function (_Annotation5) { _inherits(LineAnnotation, _Annotation5); function LineAnnotation(parameters) { var _this9; _classCallCheck(this, LineAnnotation); _this9 = _possibleConstructorReturn(this, _getPrototypeOf(LineAnnotation).call(this, parameters)); _this9.data.annotationType = _util.AnnotationType.LINE; var dict = parameters.dict; _this9.data.lineCoordinates = _util.Util.normalizeRect(dict.getArray('L')); _this9._preparePopup(dict); return _this9; } return LineAnnotation; }(Annotation); var SquareAnnotation = /*#__PURE__*/ function (_Annotation6) { _inherits(SquareAnnotation, _Annotation6); function SquareAnnotation(parameters) { var _this10; _classCallCheck(this, SquareAnnotation); _this10 = _possibleConstructorReturn(this, _getPrototypeOf(SquareAnnotation).call(this, parameters)); _this10.data.annotationType = _util.AnnotationType.SQUARE; _this10._preparePopup(parameters.dict); return _this10; } return SquareAnnotation; }(Annotation); var CircleAnnotation = /*#__PURE__*/ function (_Annotation7) { _inherits(CircleAnnotation, _Annotation7); function CircleAnnotation(parameters) { var _this11; _classCallCheck(this, CircleAnnotation); _this11 = _possibleConstructorReturn(this, _getPrototypeOf(CircleAnnotation).call(this, parameters)); _this11.data.annotationType = _util.AnnotationType.CIRCLE; _this11._preparePopup(parameters.dict); return _this11; } return CircleAnnotation; }(Annotation); var PolylineAnnotation = /*#__PURE__*/ function (_Annotation8) { _inherits(PolylineAnnotation, _Annotation8); function PolylineAnnotation(parameters) { var _this12; _classCallCheck(this, PolylineAnnotation); _this12 = _possibleConstructorReturn(this, _getPrototypeOf(PolylineAnnotation).call(this, parameters)); _this12.data.annotationType = _util.AnnotationType.POLYLINE; var dict = parameters.dict; var rawVertices = dict.getArray('Vertices'); _this12.data.vertices = []; for (var i = 0, ii = rawVertices.length; i < ii; i += 2) { _this12.data.vertices.push({ x: rawVertices[i], y: rawVertices[i + 1] }); } _this12._preparePopup(dict); return _this12; } return PolylineAnnotation; }(Annotation); var PolygonAnnotation = /*#__PURE__*/ function (_PolylineAnnotation) { _inherits(PolygonAnnotation, _PolylineAnnotation); function PolygonAnnotation(parameters) { var _this13; _classCallCheck(this, PolygonAnnotation); _this13 = _possibleConstructorReturn(this, _getPrototypeOf(PolygonAnnotation).call(this, parameters)); _this13.data.annotationType = _util.AnnotationType.POLYGON; return _this13; } return PolygonAnnotation; }(PolylineAnnotation); var InkAnnotation = /*#__PURE__*/ function (_Annotation9) { _inherits(InkAnnotation, _Annotation9); function InkAnnotation(parameters) { var _this14; _classCallCheck(this, InkAnnotation); _this14 = _possibleConstructorReturn(this, _getPrototypeOf(InkAnnotation).call(this, parameters)); _this14.data.annotationType = _util.AnnotationType.INK; var dict = parameters.dict; var xref = parameters.xref; var originalInkLists = dict.getArray('InkList'); _this14.data.inkLists = []; for (var i = 0, ii = originalInkLists.length; i < ii; ++i) { _this14.data.inkLists.push([]); for (var j = 0, jj = originalInkLists[i].length; j < jj; j += 2) { _this14.data.inkLists[i].push({ x: xref.fetchIfRef(originalInkLists[i][j]), y: xref.fetchIfRef(originalInkLists[i][j + 1]) }); } } _this14._preparePopup(dict); return _this14; } return InkAnnotation; }(Annotation); var HighlightAnnotation = /*#__PURE__*/ function (_Annotation10) { _inherits(HighlightAnnotation, _Annotation10); function HighlightAnnotation(parameters) { var _this15; _classCallCheck(this, HighlightAnnotation); _this15 = _possibleConstructorReturn(this, _getPrototypeOf(HighlightAnnotation).call(this, parameters)); _this15.data.annotationType = _util.AnnotationType.HIGHLIGHT; _this15._preparePopup(parameters.dict); return _this15; } return HighlightAnnotation; }(Annotation); var UnderlineAnnotation = /*#__PURE__*/ function (_Annotation11) { _inherits(UnderlineAnnotation, _Annotation11); function UnderlineAnnotation(parameters) { var _this16; _classCallCheck(this, UnderlineAnnotation); _this16 = _possibleConstructorReturn(this, _getPrototypeOf(UnderlineAnnotation).call(this, parameters)); _this16.data.annotationType = _util.AnnotationType.UNDERLINE; _this16._preparePopup(parameters.dict); return _this16; } return UnderlineAnnotation; }(Annotation); var SquigglyAnnotation = /*#__PURE__*/ function (_Annotation12) { _inherits(SquigglyAnnotation, _Annotation12); function SquigglyAnnotation(parameters) { var _this17; _classCallCheck(this, SquigglyAnnotation); _this17 = _possibleConstructorReturn(this, _getPrototypeOf(SquigglyAnnotation).call(this, parameters)); _this17.data.annotationType = _util.AnnotationType.SQUIGGLY; _this17._preparePopup(parameters.dict); return _this17; } return SquigglyAnnotation; }(Annotation); var StrikeOutAnnotation = /*#__PURE__*/ function (_Annotation13) { _inherits(StrikeOutAnnotation, _Annotation13); function StrikeOutAnnotation(parameters) { var _this18; _classCallCheck(this, StrikeOutAnnotation); _this18 = _possibleConstructorReturn(this, _getPrototypeOf(StrikeOutAnnotation).call(this, parameters)); _this18.data.annotationType = _util.AnnotationType.STRIKEOUT; _this18._preparePopup(parameters.dict); return _this18; } return StrikeOutAnnotation; }(Annotation); var StampAnnotation = /*#__PURE__*/ function (_Annotation14) { _inherits(StampAnnotation, _Annotation14); function StampAnnotation(parameters) { var _this19; _classCallCheck(this, StampAnnotation); _this19 = _possibleConstructorReturn(this, _getPrototypeOf(StampAnnotation).call(this, parameters)); _this19.data.annotationType = _util.AnnotationType.STAMP; _this19._preparePopup(parameters.dict); return _this19; } return StampAnnotation; }(Annotation); var FileAttachmentAnnotation = /*#__PURE__*/ function (_Annotation15) { _inherits(FileAttachmentAnnotation, _Annotation15); function FileAttachmentAnnotation(parameters) { var _this20; _classCallCheck(this, FileAttachmentAnnotation); _this20 = _possibleConstructorReturn(this, _getPrototypeOf(FileAttachmentAnnotation).call(this, parameters)); var file = new _obj.FileSpec(parameters.dict.get('FS'), parameters.xref); _this20.data.annotationType = _util.AnnotationType.FILEATTACHMENT; _this20.data.file = file.serializable; _this20._preparePopup(parameters.dict); return _this20; } return FileAttachmentAnnotation; }(Annotation); /***/ }), /* 170 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.OperatorList = void 0; var _util = __w_extracthighlights_require__(6); var QueueOptimizer = function QueueOptimizerClosure() { function addState(parentState, pattern, checkFn, iterateFn, processFn) { var state = parentState; for (var i = 0, ii = pattern.length - 1; i < ii; i++) { var item = pattern[i]; state = state[item] || (state[item] = []); } state[pattern[pattern.length - 1]] = { checkFn: checkFn, iterateFn: iterateFn, processFn: processFn }; } function handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray) { var iFirstPIMXO = iFirstSave + 2; for (var i = 0; i < count; i++) { var arg = argsArray[iFirstPIMXO + 4 * i]; var 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; } var InitialState = []; addState(InitialState, [_util.OPS.save, _util.OPS.transform, _util.OPS.paintInlineImageXObject, _util.OPS.restore], null, function iterateInlineImageGroup(context, i) { var fnArray = context.fnArray; var iFirstSave = context.iCurr - 3; var 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; } }, function foundInlineImageGroup(context, i) { var MIN_IMAGES_IN_INLINE_IMAGES_BLOCK = 10; var MAX_IMAGES_IN_INLINE_IMAGES_BLOCK = 200; var MAX_WIDTH = 1000; var IMAGE_PADDING = 1; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIIXO = curr - 1; var 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; } var maxX = 0; var map = [], maxLineHeight = 0; var currentX = IMAGE_PADDING, currentY = IMAGE_PADDING; var q; for (q = 0; q < count; q++) { var transform = argsArray[iFirstTransform + (q << 2)]; var 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: transform, x: currentX, y: currentY, w: img.width, h: img.height }); currentX += img.width + 2 * IMAGE_PADDING; maxLineHeight = Math.max(maxLineHeight, img.height); } var imgWidth = Math.max(maxX, currentX) + IMAGE_PADDING; var imgHeight = currentY + maxLineHeight + IMAGE_PADDING; var imgData = new Uint8ClampedArray(imgWidth * imgHeight * 4); var imgRowSize = imgWidth << 2; for (q = 0; q < count; q++) { var data = argsArray[iFirstPIIXO + (q << 2)][0].data; var rowSize = map[q].w << 2; var dataOffset = 0; var offset = map[q].x + map[q].y * imgWidth << 2; imgData.set(data.subarray(0, rowSize), offset - imgRowSize); for (var 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) { var fnArray = context.fnArray; var iFirstSave = context.iCurr - 3; var 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; } }, function foundImageMaskGroup(context, i) { var MIN_IMAGES_IN_MASKS_BLOCK = 10; var MAX_IMAGES_IN_MASKS_BLOCK = 100; var MAX_SAME_IMAGES_IN_MASKS_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIMXO = curr - 1; var count = Math.floor((i - iFirstSave) / 4); count = handlePaintSolidColorImageMask(iFirstSave, count, fnArray, argsArray); if (count < MIN_IMAGES_IN_MASKS_BLOCK) { return i - (i - iFirstSave) % 4; } var q; var isSameImage = false; var iTransform, transformArgs; var firstPIMXOArg0 = argsArray[iFirstPIMXO][0]; if (argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0) { isSameImage = true; var firstTransformArg0 = argsArray[iFirstTransform][0]; var firstTransformArg3 = argsArray[iFirstTransform][3]; iTransform = iFirstTransform + 4; var iPIMXO = iFirstPIMXO + 4; for (q = 1; q < count; q++, iTransform += 4, iPIMXO += 4) { transformArgs = argsArray[iTransform]; if (argsArray[iPIMXO][0] !== firstPIMXOArg0 || transformArgs[0] !== firstTransformArg0 || transformArgs[1] !== 0 || transformArgs[2] !== 0 || 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); var positions = new Float32Array(count * 2); iTransform = iFirstTransform; for (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, firstTransformArg3, positions]); } else { count = Math.min(count, MAX_IMAGES_IN_MASKS_BLOCK); var images = []; for (q = 0; q < count; q++) { transformArgs = argsArray[iFirstTransform + (q << 2)]; var 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) { var argsArray = context.argsArray; var iFirstTransform = context.iCurr - 2; return argsArray[iFirstTransform][1] === 0 && argsArray[iFirstTransform][2] === 0; }, function (context, i) { var fnArray = context.fnArray, argsArray = context.argsArray; var iFirstSave = context.iCurr - 3; var pos = (i - iFirstSave) % 4; switch (pos) { case 0: return fnArray[i] === _util.OPS.save; case 1: if (fnArray[i] !== _util.OPS.transform) { return false; } var iFirstTransform = context.iCurr - 2; var firstTransformArg0 = argsArray[iFirstTransform][0]; var 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; } var iFirstPIXO = context.iCurr - 1; var firstPIXOArg0 = argsArray[iFirstPIXO][0]; if (argsArray[i][0] !== firstPIXOArg0) { return false; } return true; case 3: return fnArray[i] === _util.OPS.restore; } }, function (context, i) { var MIN_IMAGES_IN_BLOCK = 3; var MAX_IMAGES_IN_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstSave = curr - 3; var iFirstTransform = curr - 2; var iFirstPIXO = curr - 1; var firstPIXOArg0 = argsArray[iFirstPIXO][0]; var firstTransformArg0 = argsArray[iFirstTransform][0]; var firstTransformArg3 = argsArray[iFirstTransform][3]; var count = Math.min(Math.floor((i - iFirstSave) / 4), MAX_IMAGES_IN_BLOCK); if (count < MIN_IMAGES_IN_BLOCK) { return i - (i - iFirstSave) % 4; } var positions = new Float32Array(count * 2); var iTransform = iFirstTransform; for (var q = 0; q < count; q++, iTransform += 4) { var transformArgs = argsArray[iTransform]; positions[q << 1] = transformArgs[4]; positions[(q << 1) + 1] = transformArgs[5]; } var 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 (context, i) { var fnArray = context.fnArray, argsArray = context.argsArray; var iFirstSave = context.iCurr - 4; var 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; } var iFirstSetFont = context.iCurr - 3; var firstSetFontArg0 = argsArray[iFirstSetFont][0]; var 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; } }, function (context, i) { var MIN_CHARS_IN_BLOCK = 3; var MAX_CHARS_IN_BLOCK = 1000; var fnArray = context.fnArray, argsArray = context.argsArray; var curr = context.iCurr; var iFirstBeginText = curr - 4; var iFirstSetFont = curr - 3; var iFirstSetTextMatrix = curr - 2; var iFirstShowText = curr - 1; var iFirstEndText = curr; var firstSetFontArg0 = argsArray[iFirstSetFont][0]; var firstSetFontArg1 = argsArray[iFirstSetFont][1]; var count = Math.min(Math.floor((i - iFirstBeginText) / 5), MAX_CHARS_IN_BLOCK); if (count < MIN_CHARS_IN_BLOCK) { return i - (i - iFirstBeginText) % 5; } var 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; } var iEndText = iFirst + 4; for (var q = 1; q < count; q++) { fnArray.splice(iEndText, 3); argsArray.splice(iEndText, 3); iEndText += 2; } return iEndText + 1; }); function QueueOptimizer(queue) { this.queue = queue; this.state = null; this.context = { iCurr: 0, fnArray: queue.fnArray, argsArray: queue.argsArray }; this.match = null; this.lastProcessed = 0; } QueueOptimizer.prototype = { _optimize: function _optimize() { var fnArray = this.queue.fnArray; var i = this.lastProcessed, ii = fnArray.length; var state = this.state; var match = this.match; if (!state && !match && i + 1 === ii && !InitialState[fnArray[i]]) { this.lastProcessed = ii; return; } var context = this.context; while (i < ii) { if (match) { var 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; }, push: function push(fn, args) { this.queue.fnArray.push(fn); this.queue.argsArray.push(args); this._optimize(); }, flush: function flush() { while (this.match) { var length = this.queue.fnArray.length; this.lastProcessed = (0, this.match.processFn)(this.context, length); this.match = null; this.state = null; this._optimize(); } }, reset: function reset() { this.state = null; this.match = null; this.lastProcessed = 0; } }; return QueueOptimizer; }(); var NullOptimizer = function NullOptimizerClosure() { function NullOptimizer(queue) { this.queue = queue; } NullOptimizer.prototype = { push: function push(fn, args) { this.queue.fnArray.push(fn); this.queue.argsArray.push(args); }, flush: function flush() {} }; return NullOptimizer; }(); var OperatorList = function OperatorListClosure() { var CHUNK_SIZE = 1000; var CHUNK_SIZE_ABOUT = CHUNK_SIZE - 5; function getTransfers(queue) { var transfers = []; var fnArray = queue.fnArray, argsArray = queue.argsArray; for (var i = 0, ii = queue.length; i < ii; i++) { switch (fnArray[i]) { case _util.OPS.paintInlineImageXObject: case _util.OPS.paintInlineImageXObjectGroup: case _util.OPS.paintImageMaskXObject: var arg = argsArray[i][0]; if (!arg.cached) { transfers.push(arg.data.buffer); } break; } } return transfers; } function OperatorList(intent, messageHandler, pageIndex) { this.messageHandler = messageHandler; this.fnArray = []; this.argsArray = []; if (messageHandler && this.intent !== 'oplist') { this.optimizer = new QueueOptimizer(this); } else { this.optimizer = new NullOptimizer(this); } this.dependencies = Object.create(null); this._totalLength = 0; this.pageIndex = pageIndex; this.intent = intent; this.weight = 0; } OperatorList.prototype = { get length() { return this.argsArray.length; }, get totalLength() { return this._totalLength + this.length; }, addOp: function addOp(fn, args) { this.optimizer.push(fn, args); this.weight++; if (this.messageHandler) { if (this.weight >= CHUNK_SIZE) { this.flush(); } else if (this.weight >= CHUNK_SIZE_ABOUT && (fn === _util.OPS.restore || fn === _util.OPS.endText)) { this.flush(); } } }, addDependency: function addDependency(dependency) { if (dependency in this.dependencies) { return; } this.dependencies[dependency] = true; this.addOp(_util.OPS.dependency, [dependency]); }, addDependencies: function addDependencies(dependencies) { for (var key in dependencies) { this.addDependency(key); } }, addOpList: function addOpList(opList) { Object.assign(this.dependencies, opList.dependencies); for (var i = 0, ii = opList.length; i < ii; i++) { this.addOp(opList.fnArray[i], opList.argsArray[i]); } }, getIR: function getIR() { return { fnArray: this.fnArray, argsArray: this.argsArray, length: this.length }; }, flush: function flush(lastChunk) { this.optimizer.flush(); var transfers = getTransfers(this); var length = this.length; this._totalLength += length; this.messageHandler.send('RenderPageChunk', { operatorList: { fnArray: this.fnArray, argsArray: this.argsArray, lastChunk: lastChunk, length: length }, pageIndex: this.pageIndex, intent: this.intent }, transfers); this.dependencies = Object.create(null); this.fnArray.length = 0; this.argsArray.length = 0; this.weight = 0; this.optimizer.reset(); } }; return OperatorList; }(); exports.OperatorList = OperatorList; /***/ }), /* 171 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PartialEvaluator = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); var _util = __w_extracthighlights_require__(6); var _cmap = __w_extracthighlights_require__(172); var _stream = __w_extracthighlights_require__(157); var _primitives = __w_extracthighlights_require__(155); var _fonts = __w_extracthighlights_require__(173); var _encodings = __w_extracthighlights_require__(176); var _unicode = __w_extracthighlights_require__(179); var _standard_fonts = __w_extracthighlights_require__(178); var _pattern = __w_extracthighlights_require__(182); var _parser = __w_extracthighlights_require__(156); var _bidi = __w_extracthighlights_require__(183); var _colorspace = __w_extracthighlights_require__(168); var _glyphlist = __w_extracthighlights_require__(177); var _metrics = __w_extracthighlights_require__(184); var _function = __w_extracthighlights_require__(185); var _jpeg_stream = __w_extracthighlights_require__(163); var _murmurhash = __w_extracthighlights_require__(187); var _operator_list = __w_extracthighlights_require__(170); var _image = __w_extracthighlights_require__(188); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var PartialEvaluator = function PartialEvaluatorClosure() { var DefaultPartialEvaluatorOptions = { forceDataSchema: false, maxImageSize: -1, disableFontFace: false, nativeImageDecoderSupport: _util.NativeImageDecoding.DECODE, ignoreErrors: false, isEvalSupported: true }; function NativeImageDecoder(_ref) { var xref = _ref.xref, resources = _ref.resources, handler = _ref.handler, _ref$forceDataSchema = _ref.forceDataSchema, forceDataSchema = _ref$forceDataSchema === void 0 ? false : _ref$forceDataSchema, pdfFunctionFactory = _ref.pdfFunctionFactory; this.xref = xref; this.resources = resources; this.handler = handler; this.forceDataSchema = forceDataSchema; this.pdfFunctionFactory = pdfFunctionFactory; } NativeImageDecoder.prototype = { canDecode: function canDecode(image) { return image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isDecodable(image, this.xref, this.resources, this.pdfFunctionFactory); }, decode: function decode(image) { var dict = image.dict; var colorSpace = dict.get('ColorSpace', 'CS'); colorSpace = _colorspace.ColorSpace.parse(colorSpace, this.xref, this.resources, this.pdfFunctionFactory); return this.handler.sendWithPromise('JpegDecode', [image.getIR(this.forceDataSchema), colorSpace.numComps]).then(function (_ref2) { var data = _ref2.data; _ref2.width; _ref2.height; return new _stream.Stream(data, 0, data.length, image.dict); }); } }; NativeImageDecoder.isSupported = function (image, xref, res, pdfFunctionFactory) { var dict = image.dict; if (dict.has('DecodeParms') || dict.has('DP')) { return false; } var cs = _colorspace.ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res, pdfFunctionFactory); return (cs.name === 'DeviceGray' || cs.name === 'DeviceRGB') && cs.isDefaultDecode(dict.getArray('Decode', 'D')); }; NativeImageDecoder.isDecodable = function (image, xref, res, pdfFunctionFactory) { var dict = image.dict; if (dict.has('DecodeParms') || dict.has('DP')) { return false; } var cs = _colorspace.ColorSpace.parse(dict.get('ColorSpace', 'CS'), xref, res, pdfFunctionFactory); var bpc = dict.get('BitsPerComponent', 'BPC') || 1; return (cs.numComps === 1 || cs.numComps === 3) && cs.isDefaultDecode(dict.getArray('Decode', 'D'), bpc); }; function PartialEvaluator(_ref3) { var _this = this; var pdfManager = _ref3.pdfManager, xref = _ref3.xref, handler = _ref3.handler, pageIndex = _ref3.pageIndex, idFactory = _ref3.idFactory, fontCache = _ref3.fontCache, builtInCMapCache = _ref3.builtInCMapCache, _ref3$options = _ref3.options, options = _ref3$options === void 0 ? null : _ref3$options, pdfFunctionFactory = _ref3.pdfFunctionFactory; this.pdfManager = pdfManager; this.xref = xref; this.handler = handler; this.pageIndex = pageIndex; this.idFactory = idFactory; this.fontCache = fontCache; this.builtInCMapCache = builtInCMapCache; this.options = options || DefaultPartialEvaluatorOptions; this.pdfFunctionFactory = pdfFunctionFactory; this.fetchBuiltInCMap = /*#__PURE__*/ function () { var _ref4 = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee(name) { var data; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!_this.builtInCMapCache.has(name)) { _context.next = 2; break; } return _context.abrupt("return", _this.builtInCMapCache.get(name)); case 2: _context.next = 4; return _this.handler.sendWithPromise('FetchBuiltInCMap', { name: name }); case 4: data = _context.sent; if (data.compressionType !== _util.CMapCompressionType.NONE) { _this.builtInCMapCache.set(name, data); } return _context.abrupt("return", data); case 7: case "end": return _context.stop(); } } }, _callee, this); })); return function (_x) { return _ref4.apply(this, arguments); }; }(); } var TIME_SLOT_DURATION_MS = 20; var CHECK_TIME_EVERY = 100; function TimeSlotManager() { this.reset(); } TimeSlotManager.prototype = { check: function TimeSlotManager_check() { if (++this.checked < CHECK_TIME_EVERY) { return false; } this.checked = 0; return this.endTime <= Date.now(); }, reset: function TimeSlotManager_reset() { this.endTime = Date.now() + TIME_SLOT_DURATION_MS; this.checked = 0; } }; function normalizeBlendMode(value) { if (!(0, _primitives.isName)(value)) { 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'; } (0, _util.warn)('Unsupported blend mode: ' + value.name); return 'source-over'; } var deferred = Promise.resolve(); var TILING_PATTERN = 1, SHADING_PATTERN = 2; PartialEvaluator.prototype = { clone: function clone() { var newOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DefaultPartialEvaluatorOptions; var newEvaluator = Object.create(this); newEvaluator.options = newOptions; return newEvaluator; }, hasBlendModes: function PartialEvaluator_hasBlendModes(resources) { if (!(0, _primitives.isDict)(resources)) { return false; } var processed = Object.create(null); if (resources.objId) { processed[resources.objId] = true; } var nodes = [resources], xref = this.xref; while (nodes.length) { var key, i, ii; var node = nodes.shift(); var graphicStates = node.get('ExtGState'); if ((0, _primitives.isDict)(graphicStates)) { var graphicStatesKeys = graphicStates.getKeys(); for (i = 0, ii = graphicStatesKeys.length; i < ii; i++) { key = graphicStatesKeys[i]; var graphicState = graphicStates.get(key); var bm = graphicState.get('BM'); if ((0, _primitives.isName)(bm) && bm.name !== 'Normal') { return true; } } } var xObjects = node.get('XObject'); if (!(0, _primitives.isDict)(xObjects)) { continue; } var xObjectsKeys = xObjects.getKeys(); for (i = 0, ii = xObjectsKeys.length; i < ii; i++) { key = xObjectsKeys[i]; var xObject = xObjects.getRaw(key); if ((0, _primitives.isRef)(xObject)) { if (processed[xObject.toString()]) { continue; } xObject = xref.fetch(xObject); } if (!(0, _primitives.isStream)(xObject)) { continue; } if (xObject.dict.objId) { if (processed[xObject.dict.objId]) { continue; } processed[xObject.dict.objId] = true; } var xResources = xObject.dict.get('Resources'); if ((0, _primitives.isDict)(xResources) && (!xResources.objId || !processed[xResources.objId])) { nodes.push(xResources); if (xResources.objId) { processed[xResources.objId] = true; } } } } return false; }, buildFormXObject: function PartialEvaluator_buildFormXObject(resources, xobj, smask, operatorList, task, initialState) { var dict = xobj.dict; var matrix = dict.getArray('Matrix'); var bbox = dict.getArray('BBox'); if (Array.isArray(bbox) && bbox.length === 4) { bbox = _util.Util.normalizeRect(bbox); } else { bbox = null; } var group = dict.get('Group'); if (group) { var groupOptions = { matrix: matrix, bbox: bbox, smask: smask, isolated: false, knockout: false }; var groupSubtype = group.get('S'); var colorSpace = null; if ((0, _primitives.isName)(groupSubtype, 'Transparency')) { groupOptions.isolated = group.get('I') || false; groupOptions.knockout = group.get('K') || false; if (group.has('CS')) { colorSpace = _colorspace.ColorSpace.parse(group.get('CS'), this.xref, resources, this.pdfFunctionFactory); } } if (smask && smask.backdrop) { colorSpace = colorSpace || _colorspace.ColorSpace.singletons.rgb; smask.backdrop = colorSpace.getRgb(smask.backdrop, 0); } operatorList.addOp(_util.OPS.beginGroup, [groupOptions]); } operatorList.addOp(_util.OPS.paintFormXObjectBegin, [matrix, bbox]); return this.getOperatorList({ stream: xobj, task: task, resources: dict.get('Resources') || resources, operatorList: operatorList, initialState: initialState }).then(function () { operatorList.addOp(_util.OPS.paintFormXObjectEnd, []); if (group) { operatorList.addOp(_util.OPS.endGroup, [groupOptions]); } }); }, buildPaintImageXObject: function buildPaintImageXObject(_ref5) { var _this2 = this; var resources = _ref5.resources, image = _ref5.image, _ref5$isInline = _ref5.isInline, isInline = _ref5$isInline === void 0 ? false : _ref5$isInline, operatorList = _ref5.operatorList, cacheKey = _ref5.cacheKey, imageCache = _ref5.imageCache, _ref5$forceDisableNat = _ref5.forceDisableNativeImageDecoder, forceDisableNativeImageDecoder = _ref5$forceDisableNat === void 0 ? false : _ref5$forceDisableNat; var dict = image.dict; var w = dict.get('Width', 'W'); var h = dict.get('Height', 'H'); if (!(w && (0, _util.isNum)(w)) || !(h && (0, _util.isNum)(h))) { (0, _util.warn)('Image dimensions are missing, or not numbers.'); return Promise.resolve(); } var maxImageSize = this.options.maxImageSize; if (maxImageSize !== -1 && w * h > maxImageSize) { (0, _util.warn)('Image exceeded maximum allowed size and was removed.'); return Promise.resolve(); } var imageMask = dict.get('ImageMask', 'IM') || false; var imgData, args; if (imageMask) { var width = dict.get('Width', 'W'); var height = dict.get('Height', 'H'); var bitStrideLength = width + 7 >> 3; var imgArray = image.getBytes(bitStrideLength * height, true); var decode = dict.getArray('Decode', 'D'); imgData = _image.PDFImage.createMask({ imgArray: imgArray, width: width, height: height, imageIsFromDecodeStream: image instanceof _stream.DecodeStream, inverseDecode: !!decode && decode[0] > 0 }); imgData.cached = true; args = [imgData]; operatorList.addOp(_util.OPS.paintImageMaskXObject, args); if (cacheKey) { imageCache[cacheKey] = { fn: _util.OPS.paintImageMaskXObject, args: args }; } return Promise.resolve(); } var softMask = dict.get('SMask', 'SM') || false; var mask = dict.get('Mask') || false; var SMALL_IMAGE_DIMENSIONS = 200; if (isInline && !softMask && !mask && !(image instanceof _jpeg_stream.JpegStream) && w + h < SMALL_IMAGE_DIMENSIONS) { var imageObj = new _image.PDFImage({ xref: this.xref, res: resources, image: image, isInline: isInline, pdfFunctionFactory: this.pdfFunctionFactory }); imgData = imageObj.createImageData(true); operatorList.addOp(_util.OPS.paintInlineImageXObject, [imgData]); return Promise.resolve(); } var nativeImageDecoderSupport = forceDisableNativeImageDecoder ? _util.NativeImageDecoding.NONE : this.options.nativeImageDecoderSupport; var objId = 'img_' + this.idFactory.createObjId(); if (nativeImageDecoderSupport !== _util.NativeImageDecoding.NONE && !softMask && !mask && image instanceof _jpeg_stream.JpegStream && NativeImageDecoder.isSupported(image, this.xref, resources, this.pdfFunctionFactory)) { return this.handler.sendWithPromise('obj', [objId, this.pageIndex, 'JpegStream', image.getIR(this.options.forceDataSchema)]).then(function () { operatorList.addDependency(objId); args = [objId, w, h]; operatorList.addOp(_util.OPS.paintJpegXObject, args); if (cacheKey) { imageCache[cacheKey] = { fn: _util.OPS.paintJpegXObject, args: args }; } }, function (reason) { (0, _util.warn)('Native JPEG decoding failed -- trying to recover: ' + (reason && reason.message)); return _this2.buildPaintImageXObject({ resources: resources, image: image, isInline: isInline, operatorList: operatorList, cacheKey: cacheKey, imageCache: imageCache, forceDisableNativeImageDecoder: true }); }); } var nativeImageDecoder = null; if (nativeImageDecoderSupport === _util.NativeImageDecoding.DECODE && (image instanceof _jpeg_stream.JpegStream || mask instanceof _jpeg_stream.JpegStream || softMask instanceof _jpeg_stream.JpegStream)) { nativeImageDecoder = new NativeImageDecoder({ xref: this.xref, resources: resources, handler: this.handler, forceDataSchema: this.options.forceDataSchema, pdfFunctionFactory: this.pdfFunctionFactory }); } operatorList.addDependency(objId); args = [objId, w, h]; _image.PDFImage.buildImage({ handler: this.handler, xref: this.xref, res: resources, image: image, isInline: isInline, nativeDecoder: nativeImageDecoder, pdfFunctionFactory: this.pdfFunctionFactory }).then(function (imageObj) { var imgData = imageObj.createImageData(false); _this2.handler.send('obj', [objId, _this2.pageIndex, 'Image', imgData], [imgData.data.buffer]); }).catch(function (reason) { (0, _util.warn)('Unable to decode image: ' + reason); _this2.handler.send('obj', [objId, _this2.pageIndex, 'Image', null]); }); operatorList.addOp(_util.OPS.paintImageXObject, args); if (cacheKey) { imageCache[cacheKey] = { fn: _util.OPS.paintImageXObject, args: args }; } return Promise.resolve(); }, handleSMask: function PartialEvaluator_handleSmask(smask, resources, operatorList, task, stateManager) { var smaskContent = smask.get('G'); var smaskOptions = { subtype: smask.get('S').name, backdrop: smask.get('BC') }; var transferObj = smask.get('TR'); if ((0, _function.isPDFFunction)(transferObj)) { var transferFn = this.pdfFunctionFactory.create(transferObj); var transferMap = new Uint8Array(256); var tmp = new Float32Array(1); for (var 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()); }, handleTilingType: function handleTilingType(fn, args, resources, pattern, patternDict, operatorList, task) { var _this3 = this; var tilingOpList = new _operator_list.OperatorList(); var resourcesArray = [patternDict.get('Resources'), resources]; var patternResources = _primitives.Dict.merge(this.xref, resourcesArray); return this.getOperatorList({ stream: pattern, task: task, resources: patternResources, operatorList: tilingOpList }).then(function () { return (0, _pattern.getTilingPatternIR)({ fnArray: tilingOpList.fnArray, argsArray: tilingOpList.argsArray }, patternDict, args); }).then(function (tilingPatternIR) { operatorList.addDependencies(tilingOpList.dependencies); operatorList.addOp(fn, tilingPatternIR); }, function (reason) { if (_this3.options.ignoreErrors) { _this3.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.unknown }); (0, _util.warn)("handleTilingType - ignoring pattern: \"".concat(reason, "\".")); return; } throw reason; }); }, handleSetFont: function PartialEvaluator_handleSetFont(resources, fontArgs, fontRef, operatorList, task, state) { var _this4 = this; var fontName; if (fontArgs) { fontArgs = fontArgs.slice(); fontName = fontArgs[0].name; } return this.loadFont(fontName, fontRef, resources).then(function (translated) { if (!translated.font.isType3Font) { return translated; } return translated.loadType3Data(_this4, resources, operatorList, task).then(function () { return translated; }).catch(function (reason) { _this4.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.font }); return new TranslatedFont('g_font_error', new _fonts.ErrorFont('Type3 font load error: ' + reason), translated.font); }); }).then(function (translated) { state.font = translated.font; translated.send(_this4.handler); return translated.loadedName; }); }, handleText: function handleText(chars, state) { var font = state.font; var glyphs = font.charsToGlyphs(chars); if (font.data) { var 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); } } return glyphs; }, setGState: function PartialEvaluator_setGState(resources, gState, operatorList, task, stateManager) { var _this5 = this; var gStateObj = []; var gStateKeys = gState.getKeys(); var promise = Promise.resolve(); var _loop = function _loop() { var key = gStateKeys[i]; var 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': promise = promise.then(function () { return _this5.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)) { promise = promise.then(function () { return _this5.handleSMask(value, resources, operatorList, task, stateManager); }); gStateObj.push([key, true]); } else { (0, _util.warn)('Unsupported SMask type'); } break; case 'OP': case 'op': case 'OPM': case 'BG': case 'BG2': case 'UCR': case 'UCR2': case 'TR': 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; } }; for (var i = 0, ii = gStateKeys.length; i < ii; i++) { _loop(); } return promise.then(function () { if (gStateObj.length > 0) { operatorList.addOp(_util.OPS.setGState, [gStateObj]); } }); }, loadFont: function PartialEvaluator_loadFont(fontName, font, resources) { var _this6 = this; function errorFont() { return Promise.resolve(new TranslatedFont('g_font_error', new _fonts.ErrorFont('Font ' + fontName + ' is not available'), font)); } var fontRef, xref = this.xref; if (font) { if (!(0, _primitives.isRef)(font)) { throw new Error('The "font" object should be a reference.'); } fontRef = font; } else { var fontRes = resources.get('Font'); if (fontRes) { fontRef = fontRes.getRaw(fontName); } else { (0, _util.warn)('fontRes not available'); return errorFont(); } } if (!fontRef) { (0, _util.warn)('fontRef not available'); return errorFont(); } if (this.fontCache.has(fontRef)) { return this.fontCache.get(fontRef); } font = xref.fetchIfRef(fontRef); if (!(0, _primitives.isDict)(font)) { return errorFont(); } if (font.translated) { return font.translated; } var fontCapability = (0, _util.createPromiseCapability)(); var preEvaluatedFont = this.preEvaluateFont(font); var descriptor = preEvaluatedFont.descriptor; var fontRefIsRef = (0, _primitives.isRef)(fontRef), fontID; if (fontRefIsRef) { fontID = fontRef.toString(); } if ((0, _primitives.isDict)(descriptor)) { if (!descriptor.fontAliases) { descriptor.fontAliases = Object.create(null); } var fontAliases = descriptor.fontAliases; var hash = preEvaluatedFont.hash; if (fontAliases[hash]) { var 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: _fonts.Font.getFontID() }; } if (fontRefIsRef) { fontAliases[hash].aliasRef = fontRef; } fontID = fontAliases[hash].fontID; } if (fontRefIsRef) { this.fontCache.put(fontRef, fontCapability.promise); } else { if (!fontID) { fontID = this.idFactory.createObjId(); } this.fontCache.put('id_' + fontID, fontCapability.promise); } (0, _util.assert)(fontID, 'The "fontID" must be defined.'); font.loadedName = 'g_' + this.pdfManager.docId + '_f' + fontID; font.translated = fontCapability.promise; var translatedPromise; try { translatedPromise = this.translateFont(preEvaluatedFont); } catch (e) { translatedPromise = Promise.reject(e); } translatedPromise.then(function (translatedFont) { if (translatedFont.fontType !== undefined) { var xrefFontStats = xref.stats.fontTypes; xrefFontStats[translatedFont.fontType] = true; } fontCapability.resolve(new TranslatedFont(font.loadedName, translatedFont, font)); }).catch(function (reason) { _this6.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.font }); try { var descriptor = preEvaluatedFont.descriptor; var fontFile3 = descriptor && descriptor.get('FontFile3'); var subtype = fontFile3 && fontFile3.get('Subtype'); var fontType = (0, _fonts.getFontType)(preEvaluatedFont.type, subtype && subtype.name); var xrefFontStats = xref.stats.fontTypes; xrefFontStats[fontType] = true; } catch (ex) {} fontCapability.resolve(new TranslatedFont(font.loadedName, new _fonts.ErrorFont(reason instanceof Error ? reason.message : reason), font)); }); return fontCapability.promise; }, buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) { var lastIndex = operatorList.length - 1; if (!args) { args = []; } if (lastIndex < 0 || operatorList.fnArray[lastIndex] !== _util.OPS.constructPath) { operatorList.addOp(_util.OPS.constructPath, [[fn], args]); } else { var opArgs = operatorList.argsArray[lastIndex]; opArgs[0].push(fn); Array.prototype.push.apply(opArgs[1], args); } }, handleColorN: function PartialEvaluator_handleColorN(operatorList, fn, args, cs, patterns, resources, task) { var patternName = args[args.length - 1]; var pattern; if ((0, _primitives.isName)(patternName) && (pattern = patterns.get(patternName.name))) { var dict = (0, _primitives.isStream)(pattern) ? pattern.dict : pattern; var typeNum = dict.get('PatternType'); if (typeNum === TILING_PATTERN) { var color = cs.base ? cs.base.getRgb(args, 0) : null; return this.handleTilingType(fn, color, resources, pattern, dict, operatorList, task); } else if (typeNum === SHADING_PATTERN) { var shading = dict.get('Shading'); var matrix = dict.getArray('Matrix'); pattern = _pattern.Pattern.parseShading(shading, matrix, this.xref, resources, this.handler, this.pdfFunctionFactory); operatorList.addOp(fn, pattern.getIR()); return Promise.resolve(); } return Promise.reject(new Error('Unknown PatternType: ' + typeNum)); } operatorList.addOp(fn, args); return Promise.resolve(); }, getOperatorList: function getOperatorList(_ref6) { var _this7 = this; var stream = _ref6.stream, task = _ref6.task, resources = _ref6.resources, operatorList = _ref6.operatorList, _ref6$initialState = _ref6.initialState, initialState = _ref6$initialState === void 0 ? null : _ref6$initialState; resources = resources || _primitives.Dict.empty; initialState = initialState || new EvalState(); if (!operatorList) { throw new Error('getOperatorList: missing "operatorList" parameter'); } var self = this; var xref = this.xref; var imageCache = Object.create(null); var xobjs = resources.get('XObject') || _primitives.Dict.empty; var patterns = resources.get('Pattern') || _primitives.Dict.empty; var stateManager = new StateManager(initialState); var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); var timeSlotManager = new TimeSlotManager(); function closePendingRestoreOPS(argument) { for (var i = 0, ii = preprocessor.savedStatesDepth; i < ii; i++) { operatorList.addOp(_util.OPS.restore, []); } } return new Promise(function promiseBody(resolve, reject) { var next = function next(promise) { promise.then(function () { try { promiseBody(resolve, reject); } catch (ex) { reject(ex); } }, reject); }; task.ensureNotTerminated(); timeSlotManager.reset(); var stop, operation = {}, i, ii, cs; while (!(stop = timeSlotManager.check())) { operation.args = null; if (!preprocessor.read(operation)) { break; } var args = operation.args; var fn = operation.fn; switch (fn | 0) { case _util.OPS.paintXObject: var name = args[0].name; if (name && imageCache[name] !== undefined) { operatorList.addOp(imageCache[name].fn, imageCache[name].args); args = null; continue; } next(new Promise(function (resolveXObject, rejectXObject) { if (!name) { throw new _util.FormatError('XObject must be referred to by name.'); } var xobj = xobjs.get(name); if (!xobj) { operatorList.addOp(fn, args); resolveXObject(); return; } if (!(0, _primitives.isStream)(xobj)) { throw new _util.FormatError('XObject should be a stream'); } var 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()).then(function () { stateManager.restore(); resolveXObject(); }, rejectXObject); return; } else if (type.name === 'Image') { self.buildPaintImageXObject({ resources: resources, image: xobj, operatorList: operatorList, cacheKey: name, imageCache: imageCache }).then(resolveXObject, rejectXObject); return; } else if (type.name === 'PS') { (0, _util.info)('Ignored XObject subtype PS'); } else { throw new _util.FormatError("Unhandled XObject subtype ".concat(type.name)); } resolveXObject(); }).catch(function (reason) { if (self.options.ignoreErrors) { self.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.unknown }); (0, _util.warn)("getOperatorList - ignoring XObject: \"".concat(reason, "\".")); return; } throw reason; })); return; case _util.OPS.setFont: var fontSize = args[1]; next(self.handleSetFont(resources, args, null, operatorList, task, stateManager.state).then(function (loadedName) { operatorList.addDependency(loadedName); operatorList.addOp(_util.OPS.setFont, [loadedName, fontSize]); })); return; case _util.OPS.endInlineImage: var cacheKey = args[0].cacheKey; if (cacheKey) { var cacheEntry = imageCache[cacheKey]; if (cacheEntry !== undefined) { operatorList.addOp(cacheEntry.fn, cacheEntry.args); args = null; continue; } } next(self.buildPaintImageXObject({ resources: resources, image: args[0], isInline: true, operatorList: operatorList, cacheKey: cacheKey, imageCache: imageCache })); return; case _util.OPS.showText: args[0] = self.handleText(args[0], stateManager.state); break; case _util.OPS.showSpacedText: var arr = args[0]; var combinedGlyphs = []; var arrLength = arr.length; var state = stateManager.state; for (i = 0; i < arrLength; ++i) { var 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: operatorList.addOp(_util.OPS.nextLine); args[0] = self.handleText(args[0], stateManager.state); fn = _util.OPS.showText; break; case _util.OPS.nextLineSetSpacingShowText: 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: stateManager.state.fillColorSpace = _colorspace.ColorSpace.parse(args[0], xref, resources, self.pdfFunctionFactory); continue; case _util.OPS.setStrokeColorSpace: stateManager.state.strokeColorSpace = _colorspace.ColorSpace.parse(args[0], xref, resources, self.pdfFunctionFactory); continue; 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)); 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)); 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'); } var shadingFill = _pattern.Pattern.parseShading(shading, null, xref, resources, self.handler, self.pdfFunctionFactory); var patternIR = shadingFill.getIR(); args = [patternIR]; fn = _util.OPS.shadingFill; break; case _util.OPS.setGState: var dictName = args[0]; var extGState = resources.get('ExtGState'); if (!(0, _primitives.isDict)(extGState) || !extGState.has(dictName.name)) { break; } var gState = extGState.get(dictName.name); next(self.setGState(resources, gState, operatorList, task, stateManager)); 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: self.buildPath(operatorList, fn, args); continue; case _util.OPS.rectangle: self.buildPath(operatorList, fn, args); continue; case _util.OPS.markPoint: case _util.OPS.markPointProps: case _util.OPS.beginMarkedContent: case _util.OPS.beginMarkedContentProps: case _util.OPS.endMarkedContent: case _util.OPS.beginCompat: case _util.OPS.endCompat: continue; 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(function (reason) { if (_this7.options.ignoreErrors) { _this7.handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.unknown }); (0, _util.warn)("getOperatorList - ignoring errors during \"".concat(task.name, "\" ") + "task: \"".concat(reason, "\".")); closePendingRestoreOPS(); return; } throw reason; }); }, getTextContent: function getTextContent(_ref7) { var _this8 = this; var stream = _ref7.stream, task = _ref7.task, resources = _ref7.resources, _ref7$stateManager = _ref7.stateManager, stateManager = _ref7$stateManager === void 0 ? null : _ref7$stateManager, _ref7$normalizeWhites = _ref7.normalizeWhitespace, normalizeWhitespace = _ref7$normalizeWhites === void 0 ? false : _ref7$normalizeWhites, _ref7$combineTextItem = _ref7.combineTextItems, combineTextItems = _ref7$combineTextItem === void 0 ? false : _ref7$combineTextItem, sink = _ref7.sink, _ref7$seenStyles = _ref7.seenStyles, seenStyles = _ref7$seenStyles === void 0 ? Object.create(null) : _ref7$seenStyles; resources = resources || _primitives.Dict.empty; stateManager = stateManager || new StateManager(new TextState()); var WhitespaceRegexp = /\s/g; var textContent = { items: [], styles: Object.create(null) }; var textContentItem = { initialized: false, str: [], width: 0, height: 0, vertical: false, lastAdvanceWidth: 0, lastAdvanceHeight: 0, textAdvanceScale: 0, spaceWidth: 0, fakeSpaceMin: Infinity, fakeMultiSpaceMin: Infinity, fakeMultiSpaceMax: -0, textRunBreakAllowed: false, transform: null, fontName: null }; var SPACE_FACTOR = 0.3; var MULTI_SPACE_FACTOR = 1.5; var MULTI_SPACE_FACTOR_MAX = 4; var self = this; var xref = this.xref; var xobjs = null; var skipEmptyXObjs = Object.create(null); var preprocessor = new EvaluatorPreprocessor(stream, xref, stateManager); var textState; function ensureTextContentItem() { if (textContentItem.initialized) { return textContentItem; } var font = textState.font; if (!(font.loadedName in seenStyles)) { seenStyles[font.loadedName] = true; textContent.styles[font.loadedName] = { fontFamily: font.fallbackName, ascent: font.ascent, descent: font.descent, vertical: !!font.vertical }; } textContentItem.fontName = font.loadedName; var tsm = [textState.fontSize * textState.textHScale, 0, 0, textState.fontSize, 0, textState.textRise]; if (font.isType3Font && textState.fontMatrix !== _util.FONT_IDENTITY_MATRIX && textState.fontSize === 1) { var glyphHeight = font.bbox[3] - font.bbox[1]; if (glyphHeight > 0) { glyphHeight = glyphHeight * textState.fontMatrix[3]; tsm[3] *= glyphHeight; } } var trm = _util.Util.transform(textState.ctm, _util.Util.transform(textState.textMatrix, tsm)); textContentItem.transform = trm; if (!font.vertical) { textContentItem.width = 0; textContentItem.height = Math.sqrt(trm[2] * trm[2] + trm[3] * trm[3]); textContentItem.vertical = false; } else { textContentItem.width = Math.sqrt(trm[0] * trm[0] + trm[1] * trm[1]); textContentItem.height = 0; textContentItem.vertical = true; } var a = textState.textLineMatrix[0]; var b = textState.textLineMatrix[1]; var scaleLineX = Math.sqrt(a * a + b * b); a = textState.ctm[0]; b = textState.ctm[1]; var scaleCtmX = Math.sqrt(a * a + b * b); textContentItem.textAdvanceScale = scaleCtmX * scaleLineX; textContentItem.lastAdvanceWidth = 0; textContentItem.lastAdvanceHeight = 0; var spaceWidth = font.spaceWidth / 1000 * textState.fontSize; if (spaceWidth) { textContentItem.spaceWidth = spaceWidth; textContentItem.fakeSpaceMin = spaceWidth * SPACE_FACTOR; textContentItem.fakeMultiSpaceMin = spaceWidth * MULTI_SPACE_FACTOR; textContentItem.fakeMultiSpaceMax = spaceWidth * MULTI_SPACE_FACTOR_MAX; textContentItem.textRunBreakAllowed = !font.isMonospace; } else { textContentItem.spaceWidth = 0; textContentItem.fakeSpaceMin = Infinity; textContentItem.fakeMultiSpaceMin = Infinity; textContentItem.fakeMultiSpaceMax = 0; textContentItem.textRunBreakAllowed = false; } textContentItem.initialized = true; return textContentItem; } function replaceWhitespace(str) { var i = 0, ii = str.length, code; while (i < ii && (code = str.charCodeAt(i)) >= 0x20 && code <= 0x7F) { i++; } return i < ii ? str.replace(WhitespaceRegexp, ' ') : str; } function runBidiTransform(textChunk) { var str = textChunk.str.join(''); var bidiResult = (0, _bidi.bidi)(str, -1, textChunk.vertical); return { str: normalizeWhitespace ? replaceWhitespace(bidiResult.str) : bidiResult.str, dir: bidiResult.dir, width: textChunk.width, height: textChunk.height, transform: textChunk.transform, fontName: textChunk.fontName }; } function handleSetFont(fontName, fontRef) { return self.loadFont(fontName, fontRef, resources).then(function (translated) { textState.font = translated.font; textState.fontMatrix = translated.font.fontMatrix || _util.FONT_IDENTITY_MATRIX; }); } function buildTextContentItem(chars) { var font = textState.font; var textChunk = ensureTextContentItem(); var width = 0; var height = 0; var glyphs = font.charsToGlyphs(chars); for (var i = 0; i < glyphs.length; i++) { var glyph = glyphs[i]; var glyphWidth = null; if (font.vertical && glyph.vmetric) { glyphWidth = glyph.vmetric[0]; } else { glyphWidth = glyph.width; } var glyphUnicode = glyph.unicode; var NormalizedUnicodes = (0, _unicode.getNormalizedUnicodes)(); if (NormalizedUnicodes[glyphUnicode] !== undefined) { glyphUnicode = NormalizedUnicodes[glyphUnicode]; } glyphUnicode = (0, _unicode.reverseIfRtl)(glyphUnicode); var charSpacing = textState.charSpacing; if (glyph.isSpace) { var wordSpacing = textState.wordSpacing; charSpacing += wordSpacing; if (wordSpacing > 0) { addFakeSpaces(wordSpacing, textChunk.str); } } var tx = 0; var ty = 0; if (!font.vertical) { var w0 = glyphWidth * textState.fontMatrix[0]; tx = (w0 * textState.fontSize + charSpacing) * textState.textHScale; width += tx; } else { var w1 = glyphWidth * textState.fontMatrix[0]; ty = w1 * textState.fontSize + charSpacing; height += ty; } textState.translateTextMatrix(tx, ty); textChunk.str.push(glyphUnicode); } if (!font.vertical) { textChunk.lastAdvanceWidth = width; textChunk.width += width; } else { textChunk.lastAdvanceHeight = height; textChunk.height += Math.abs(height); } return textChunk; } function addFakeSpaces(width, strBuf) { if (width < textContentItem.fakeSpaceMin) { return; } if (width < textContentItem.fakeMultiSpaceMin) { strBuf.push(' '); return; } var fakeSpaces = Math.round(width / textContentItem.spaceWidth); while (fakeSpaces-- > 0) { strBuf.push(' '); } } function flushTextContentItem() { if (!textContentItem.initialized) { return; } if (!textContentItem.vertical) { textContentItem.width *= textContentItem.textAdvanceScale; } else { textContentItem.height *= textContentItem.textAdvanceScale; } textContent.items.push(runBidiTransform(textContentItem)); textContentItem.initialized = false; textContentItem.str.length = 0; } function enqueueChunk() { var length = textContent.items.length; if (length > 0) { sink.enqueue(textContent, length); textContent.items = []; textContent.styles = Object.create(null); } } var timeSlotManager = new TimeSlotManager(); return new Promise(function promiseBody(resolve, reject) { var next = function next(promise) { enqueueChunk(); Promise.all([promise, sink.ready]).then(function () { try { promiseBody(resolve, reject); } catch (ex) { reject(ex); } }, reject); }; task.ensureNotTerminated(); timeSlotManager.reset(); var stop, operation = {}, args = []; while (!(stop = timeSlotManager.check())) { args.length = 0; operation.args = args; if (!preprocessor.read(operation)) { break; } textState = stateManager.state; var fn = operation.fn; args = operation.args; var advance, diff; 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: flushTextContentItem(); textState.textRise = args[0]; break; case _util.OPS.setHScale: flushTextContentItem(); textState.textHScale = args[0] / 100; break; case _util.OPS.setLeading: flushTextContentItem(); textState.leading = args[0]; break; case _util.OPS.moveText: var isSameTextLine = !textState.font ? false : (textState.font.vertical ? args[0] : args[1]) === 0; advance = args[0] - args[1]; if (combineTextItems && isSameTextLine && textContentItem.initialized && advance > 0 && advance <= textContentItem.fakeMultiSpaceMax) { textState.translateTextLineMatrix(args[0], args[1]); textContentItem.width += args[0] - textContentItem.lastAdvanceWidth; textContentItem.height += args[1] - textContentItem.lastAdvanceHeight; diff = args[0] - textContentItem.lastAdvanceWidth - (args[1] - textContentItem.lastAdvanceHeight); addFakeSpaces(diff, textContentItem.str); break; } flushTextContentItem(); textState.translateTextLineMatrix(args[0], args[1]); textState.textMatrix = textState.textLineMatrix.slice(); break; case _util.OPS.setLeadingMoveText: flushTextContentItem(); textState.leading = -args[1]; textState.translateTextLineMatrix(args[0], args[1]); textState.textMatrix = textState.textLineMatrix.slice(); break; case _util.OPS.nextLine: flushTextContentItem(); textState.carriageReturn(); break; case _util.OPS.setTextMatrix: advance = textState.calcTextLineMatrixAdvance(args[0], args[1], args[2], args[3], args[4], args[5]); if (combineTextItems && advance !== null && textContentItem.initialized && advance.value > 0 && advance.value <= textContentItem.fakeMultiSpaceMax) { textState.translateTextLineMatrix(advance.width, advance.height); textContentItem.width += advance.width - textContentItem.lastAdvanceWidth; textContentItem.height += advance.height - textContentItem.lastAdvanceHeight; diff = advance.width - textContentItem.lastAdvanceWidth - (advance.height - textContentItem.lastAdvanceHeight); addFakeSpaces(diff, textContentItem.str); break; } flushTextContentItem(); 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]); break; case _util.OPS.setCharSpacing: textState.charSpacing = args[0]; break; case _util.OPS.setWordSpacing: textState.wordSpacing = args[0]; break; case _util.OPS.beginText: flushTextContentItem(); textState.textMatrix = _util.IDENTITY_MATRIX.slice(); textState.textLineMatrix = _util.IDENTITY_MATRIX.slice(); break; case _util.OPS.showSpacedText: var items = args[0]; var offset; for (var j = 0, jj = items.length; j < jj; j++) { if (typeof items[j] === 'string') { buildTextContentItem(items[j]); } else if ((0, _util.isNum)(items[j])) { ensureTextContentItem(); advance = items[j] * textState.fontSize / 1000; var breakTextRun = false; if (textState.font.vertical) { offset = advance; textState.translateTextMatrix(0, offset); breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; if (!breakTextRun) { textContentItem.height += offset; } } else { advance = -advance; offset = advance * textState.textHScale; textState.translateTextMatrix(offset, 0); breakTextRun = textContentItem.textRunBreakAllowed && advance > textContentItem.fakeMultiSpaceMax; if (!breakTextRun) { textContentItem.width += offset; } } if (breakTextRun) { flushTextContentItem(); } else if (advance > 0) { addFakeSpaces(advance, textContentItem.str); } } } break; case _util.OPS.showText: buildTextContentItem(args[0]); break; case _util.OPS.nextLineShowText: flushTextContentItem(); textState.carriageReturn(); buildTextContentItem(args[0]); break; case _util.OPS.nextLineSetSpacingShowText: flushTextContentItem(); textState.wordSpacing = args[0]; textState.charSpacing = args[1]; textState.carriageReturn(); buildTextContentItem(args[2]); break; case _util.OPS.paintXObject: flushTextContentItem(); if (!xobjs) { xobjs = resources.get('XObject') || _primitives.Dict.empty; } var name = args[0].name; if (name && skipEmptyXObjs[name] !== undefined) { break; } next(new Promise(function (resolveXObject, rejectXObject) { if (!name) { throw new _util.FormatError('XObject must be referred to by name.'); } var xobj = xobjs.get(name); if (!xobj) { resolveXObject(); return; } if (!(0, _primitives.isStream)(xobj)) { throw new _util.FormatError('XObject should be a stream'); } var type = xobj.dict.get('Subtype'); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError('XObject should have a Name subtype'); } if (type.name !== 'Form') { skipEmptyXObjs[name] = true; resolveXObject(); return; } var currentState = stateManager.state.clone(); var xObjStateManager = new StateManager(currentState); var matrix = xobj.dict.getArray('Matrix'); if (Array.isArray(matrix) && matrix.length === 6) { xObjStateManager.transform(matrix); } enqueueChunk(); var sinkWrapper = { enqueueInvoked: false, enqueue: function 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: task, resources: xobj.dict.get('Resources') || resources, stateManager: xObjStateManager, normalizeWhitespace: normalizeWhitespace, combineTextItems: combineTextItems, sink: sinkWrapper, seenStyles: seenStyles }).then(function () { if (!sinkWrapper.enqueueInvoked) { skipEmptyXObjs[name] = true; } resolveXObject(); }, rejectXObject); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (self.options.ignoreErrors) { (0, _util.warn)("getTextContent - ignoring XObject: \"".concat(reason, "\".")); return; } throw reason; })); return; case _util.OPS.setGState: flushTextContentItem(); var dictName = args[0]; var extGState = resources.get('ExtGState'); if (!(0, _primitives.isDict)(extGState) || !(0, _primitives.isName)(dictName)) { break; } var gState = extGState.get(dictName.name); if (!(0, _primitives.isDict)(gState)) { break; } var gStateFont = gState.get('Font'); if (gStateFont) { textState.fontName = null; textState.fontSize = gStateFont[1]; next(handleSetFont(null, gStateFont[0])); return; } break; } if (textContent.items.length >= sink.desiredSize) { stop = true; break; } } if (stop) { next(deferred); return; } flushTextContentItem(); enqueueChunk(); resolve(); }).catch(function (reason) { if (reason instanceof _util.AbortException) { return; } if (_this8.options.ignoreErrors) { (0, _util.warn)("getTextContent - ignoring errors during \"".concat(task.name, "\" ") + "task: \"".concat(reason, "\".")); flushTextContentItem(); enqueueChunk(); return; } throw reason; }); }, extractDataStructures: function PartialEvaluator_extractDataStructures(dict, baseDict, properties) { var _this9 = this; var xref = this.xref; var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode'); var toUnicodePromise = toUnicode ? this.readToUnicode(toUnicode) : Promise.resolve(undefined); if (properties.composite) { var 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') }; } var cidToGidMap = dict.get('CIDToGIDMap'); if ((0, _primitives.isStream)(cidToGidMap)) { properties.cidToGidMap = this.readCidToGidMap(cidToGidMap); } } var differences = []; var baseEncodingName = null; var 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')) { var diffEncoding = encoding.get('Differences'); var index = 0; for (var j = 0, jj = diffEncoding.length; j < jj; j++) { var 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: ".concat(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).slice(); } else { var isSymbolicFont = !!(properties.flags & _fonts.FontFlags.Symbolic); var isNonsymbolicFont = !!(properties.flags & _fonts.FontFlags.Nonsymbolic); encoding = _encodings.StandardEncoding; if (properties.type === 'TrueType' && !isNonsymbolicFont) { encoding = _encodings.WinAnsiEncoding; } if (isSymbolicFont) { encoding = _encodings.MacRomanEncoding; if (!properties.file) { if (/Symbol/i.test(properties.name)) { encoding = _encodings.SymbolSetEncoding; } else if (/Dingbats/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(function (toUnicode) { properties.toUnicode = toUnicode; return _this9.buildToUnicode(properties); }).then(function (toUnicode) { properties.toUnicode = toUnicode; return properties; }); }, _buildSimpleFontToUnicode: function _buildSimpleFontToUnicode(properties) { (0, _util.assert)(!properties.composite, 'Must be a simple font.'); var toUnicode = [], charcode, glyphName; var encoding = properties.defaultEncoding.slice(); var baseEncodingName = properties.baseEncodingName; var differences = properties.differences; for (charcode in differences) { glyphName = differences[charcode]; if (glyphName === '.notdef') { continue; } encoding[charcode] = glyphName; } var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (charcode in encoding) { glyphName = encoding[charcode]; if (glyphName === '') { continue; } else if (glyphsUnicodeMap[glyphName] === undefined) { var 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) { code = +glyphName.substring(1); } break; default: var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { code = unicode; } } if (code) { if (baseEncodingName && code === +charcode) { var 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 new _fonts.ToUnicodeMap(toUnicode); }, buildToUnicode: function buildToUnicode(properties) { properties.hasIncludedToUnicodeMap = !!properties.toUnicode && properties.toUnicode.length > 0; if (properties.hasIncludedToUnicodeMap) { if (!properties.composite && properties.hasEncoding) { properties.fallbackToUnicode = this._buildSimpleFontToUnicode(properties); } return Promise.resolve(properties.toUnicode); } if (!properties.composite) { return Promise.resolve(this._buildSimpleFontToUnicode(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'))) { var registry = properties.cidSystemInfo.registry; var ordering = properties.cidSystemInfo.ordering; var ucs2CMapName = _primitives.Name.get(registry + '-' + ordering + '-UCS2'); return _cmap.CMapFactory.create({ encoding: ucs2CMapName, fetchBuiltInCMap: this.fetchBuiltInCMap, useCMap: null }).then(function (ucs2CMap) { var cMap = properties.cMap; var toUnicode = []; cMap.forEach(function (charcode, cid) { if (cid > 0xffff) { throw new _util.FormatError('Max size of CID is 65,535'); } var ucs2 = ucs2CMap.lookup(cid); if (ucs2) { toUnicode[charcode] = String.fromCharCode((ucs2.charCodeAt(0) << 8) + ucs2.charCodeAt(1)); } }); return new _fonts.ToUnicodeMap(toUnicode); }); } return Promise.resolve(new _fonts.IdentityToUnicodeMap(properties.firstChar, properties.lastChar)); }, readToUnicode: function PartialEvaluator_readToUnicode(toUnicode) { var cmapObj = toUnicode; if ((0, _primitives.isName)(cmapObj)) { return _cmap.CMapFactory.create({ encoding: cmapObj, fetchBuiltInCMap: this.fetchBuiltInCMap, useCMap: null }).then(function (cmap) { if (cmap instanceof _cmap.IdentityCMap) { return new _fonts.IdentityToUnicodeMap(0, 0xFFFF); } return new _fonts.ToUnicodeMap(cmap.getMap()); }); } else if ((0, _primitives.isStream)(cmapObj)) { return _cmap.CMapFactory.create({ encoding: cmapObj, fetchBuiltInCMap: this.fetchBuiltInCMap, useCMap: null }).then(function (cmap) { if (cmap instanceof _cmap.IdentityCMap) { return new _fonts.IdentityToUnicodeMap(0, 0xFFFF); } var map = new Array(cmap.length); cmap.forEach(function (charCode, token) { var str = []; for (var k = 0; k < token.length; k += 2) { var w1 = token.charCodeAt(k) << 8 | token.charCodeAt(k + 1); if ((w1 & 0xF800) !== 0xD800) { str.push(w1); continue; } k += 2; var 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 _fonts.ToUnicodeMap(map); }); } return Promise.resolve(null); }, readCidToGidMap: function PartialEvaluator_readCidToGidMap(cidToGidStream) { var glyphsData = cidToGidStream.getBytes(); var result = []; for (var j = 0, jj = glyphsData.length; j < jj; j++) { var glyphID = glyphsData[j++] << 8 | glyphsData[j]; if (glyphID === 0) { continue; } var code = j >> 1; result[code] = glyphID; } return result; }, extractWidths: function PartialEvaluator_extractWidths(dict, descriptor, properties) { var xref = this.xref; var glyphsWidths = []; var defaultWidth = 0; var glyphsVMetrics = []; var defaultVMetrics; var 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 { var width = xref.fetchIfRef(widths[++i]); for (j = start; j <= code; j++) { glyphsWidths[j] = width; } } } } if (properties.vertical) { var 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 { var vmetric = [xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i]), xref.fetchIfRef(vmetrics[++i])]; for (j = start; j <= code; j++) { glyphsVMetrics[j] = vmetric; } } } } } } else { var 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 { var baseFontName = dict.get('BaseFont'); if ((0, _primitives.isName)(baseFontName)) { var metrics = this.getBaseFontMetrics(baseFontName.name); glyphsWidths = this.buildCharCodeToWidth(metrics.widths, properties); defaultWidth = metrics.defaultWidth; } } } var isMonospace = true; var firstWidth = defaultWidth; for (var glyph in glyphsWidths) { var glyphWidth = glyphsWidths[glyph]; if (!glyphWidth) { continue; } if (!firstWidth) { firstWidth = glyphWidth; continue; } if (firstWidth !== glyphWidth) { isMonospace = false; break; } } if (isMonospace) { properties.flags |= _fonts.FontFlags.FixedPitch; } properties.defaultWidth = defaultWidth; properties.widths = glyphsWidths; properties.defaultVMetrics = defaultVMetrics; properties.vmetrics = glyphsVMetrics; }, isSerifFont: function PartialEvaluator_isSerifFont(baseFontName) { var fontNameWoStyle = baseFontName.split('-')[0]; return fontNameWoStyle in (0, _standard_fonts.getSerifFonts)() || fontNameWoStyle.search(/serif/gi) !== -1; }, getBaseFontMetrics: function PartialEvaluator_getBaseFontMetrics(name) { var defaultWidth = 0; var widths = []; var monospace = false; var stdFontMap = (0, _standard_fonts.getStdFontMap)(); var lookupName = stdFontMap[name] || name; var Metrics = (0, _metrics.getMetrics)(); if (!(lookupName in Metrics)) { if (this.isSerifFont(name)) { lookupName = 'Times-Roman'; } else { lookupName = 'Helvetica'; } } var glyphWidths = Metrics[lookupName]; if ((0, _util.isNum)(glyphWidths)) { defaultWidth = glyphWidths; monospace = true; } else { widths = glyphWidths(); } return { defaultWidth: defaultWidth, monospace: monospace, widths: widths }; }, buildCharCodeToWidth: function PartialEvaluator_bulildCharCodeToWidth(widthsByGlyphName, properties) { var widths = Object.create(null); var differences = properties.differences; var encoding = properties.defaultEncoding; for (var 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: function PartialEvaluator_preEvaluateFont(dict) { var baseDict = dict; var type = dict.get('Subtype'); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError('invalid font Subtype'); } var composite = false; var uint8array; if (type.name === 'Type0') { var 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; type = dict.get('Subtype'); if (!(0, _primitives.isName)(type)) { throw new _util.FormatError('invalid font Subtype'); } composite = true; } var descriptor = dict.get('FontDescriptor'); if (descriptor) { var hash = new _murmurhash.MurmurHash3_64(); var 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)) { var keys = encoding.getKeys(); for (var i = 0, ii = keys.length; i < ii; i++) { var entry = encoding.getRaw(keys[i]); if ((0, _primitives.isName)(entry)) { hash.update(entry.name); } else if ((0, _primitives.isRef)(entry)) { hash.update(entry.toString()); } else if (Array.isArray(entry)) { var diffLength = entry.length, diffBuf = new Array(diffLength); for (var j = 0; j < diffLength; j++) { var 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()); } } } var toUnicode = dict.get('ToUnicode') || baseDict.get('ToUnicode'); if ((0, _primitives.isStream)(toUnicode)) { var stream = toUnicode.str || toUnicode; 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); } var widths = dict.get('Widths') || baseDict.get('Widths'); if (widths) { uint8array = new Uint8Array(new Uint32Array(widths).buffer); hash.update(uint8array); } } return { descriptor: descriptor, dict: dict, baseDict: baseDict, composite: composite, type: type.name, hash: hash ? hash.hexdigest() : '' }; }, translateFont: function PartialEvaluator_translateFont(preEvaluatedFont) { var _this10 = this; var baseDict = preEvaluatedFont.baseDict; var dict = preEvaluatedFont.dict; var composite = preEvaluatedFont.composite; var descriptor = preEvaluatedFont.descriptor; var type = preEvaluatedFont.type; var maxCharIndex = composite ? 0xFFFF : 0xFF; var properties; if (!descriptor) { if (type === 'Type3') { descriptor = new _primitives.Dict(null); descriptor.set('FontName', _primitives.Name.get(type)); descriptor.set('FontBBox', dict.getArray('FontBBox')); } else { var baseFontName = dict.get('BaseFont'); if (!(0, _primitives.isName)(baseFontName)) { throw new _util.FormatError('Base font is not specified'); } baseFontName = baseFontName.name.replace(/[,_]/g, '-'); var metrics = this.getBaseFontMetrics(baseFontName); var fontNameWoStyle = baseFontName.split('-')[0]; var flags = (this.isSerifFont(fontNameWoStyle) ? _fonts.FontFlags.Serif : 0) | (metrics.monospace ? _fonts.FontFlags.FixedPitch : 0) | ((0, _standard_fonts.getSymbolsFonts)()[fontNameWoStyle] ? _fonts.FontFlags.Symbolic : _fonts.FontFlags.Nonsymbolic); properties = { type: type, name: baseFontName, widths: metrics.widths, defaultWidth: metrics.defaultWidth, flags: flags, firstChar: 0, lastChar: maxCharIndex }; return this.extractDataStructures(dict, dict, properties).then(function (properties) { properties.widths = _this10.buildCharCodeToWidth(metrics.widths, properties); return new _fonts.Font(baseFontName, null, properties); }); } } var firstChar = dict.get('FirstChar') || 0; var lastChar = dict.get('LastChar') || maxCharIndex; var fontName = descriptor.get('FontName'); var 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 (type !== 'Type3') { var fontNameStr = fontName && fontName.name; var baseFontStr = baseFont && baseFont.name; if (fontNameStr !== baseFontStr) { (0, _util.info)("The FontDescriptor's FontName is \"".concat(fontNameStr, "\" but ") + "should be the same as the Font's BaseFont \"".concat(baseFontStr, "\".")); if (fontNameStr && baseFontStr && baseFontStr.startsWith(fontNameStr)) { fontName = baseFont; } } } fontName = fontName || baseFont; if (!(0, _primitives.isName)(fontName)) { throw new _util.FormatError('invalid font name'); } var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3'); if (fontFile) { if (fontFile.dict) { var subtype = fontFile.dict.get('Subtype'); if (subtype) { subtype = subtype.name; } var length1 = fontFile.dict.get('Length1'); var length2 = fontFile.dict.get('Length2'); var length3 = fontFile.dict.get('Length3'); } } properties = { type: type, name: fontName.name, subtype: subtype, file: fontFile, length1: length1, length2: length2, length3: length3, loadedName: baseDict.loadedName, composite: composite, wideChars: composite, fixedPitch: false, fontMatrix: dict.getArray('FontMatrix') || _util.FONT_IDENTITY_MATRIX, firstChar: firstChar || 0, lastChar: lastChar || maxCharIndex, bbox: descriptor.getArray('FontBBox'), ascent: descriptor.get('Ascent'), descent: descriptor.get('Descent'), xHeight: descriptor.get('XHeight'), capHeight: descriptor.get('CapHeight'), flags: descriptor.get('Flags'), italicAngle: descriptor.get('ItalicAngle'), isType3Font: false }; var cMapPromise; if (composite) { var cidEncoding = baseDict.get('Encoding'); if ((0, _primitives.isName)(cidEncoding)) { properties.cidEncoding = cidEncoding.name; } cMapPromise = _cmap.CMapFactory.create({ encoding: cidEncoding, fetchBuiltInCMap: this.fetchBuiltInCMap, useCMap: null }).then(function (cMap) { properties.cMap = cMap; properties.vertical = properties.cMap.vertical; }); } else { cMapPromise = Promise.resolve(undefined); } return cMapPromise.then(function () { return _this10.extractDataStructures(dict, baseDict, properties); }).then(function (properties) { _this10.extractWidths(dict, descriptor, properties); if (type === 'Type3') { properties.isType3Font = true; } return new _fonts.Font(fontName.name, fontFile, properties); }); } }; PartialEvaluator.buildFontPaths = function (font, glyphs, handler) { function buildPath(fontChar) { if (font.renderer.hasBuiltPath(fontChar)) { return; } handler.send('commonobj', ["".concat(font.loadedName, "_path_").concat(fontChar), 'FontPath', font.renderer.getPathJs(fontChar)]); } var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = glyphs[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var glyph = _step.value; buildPath(glyph.fontChar); var accent = glyph.accent; if (accent && accent.fontChar) { buildPath(accent.fontChar); } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } }; return PartialEvaluator; }(); exports.PartialEvaluator = PartialEvaluator; var TranslatedFont = function TranslatedFontClosure() { function TranslatedFont(loadedName, font, dict) { this.loadedName = loadedName; this.font = font; this.dict = dict; this.type3Loaded = null; this.sent = false; } TranslatedFont.prototype = { send: function send(handler) { if (this.sent) { return; } this.sent = true; handler.send('commonobj', [this.loadedName, 'Font', this.font.exportData()]); }, fallback: function fallback(handler) { if (!this.font.data) { return; } this.font.disableFontFace = true; var glyphs = this.font.glyphCacheValues; PartialEvaluator.buildFontPaths(this.font, glyphs, handler); }, loadType3Data: function loadType3Data(evaluator, resources, parentOperatorList, task) { if (!this.font.isType3Font) { throw new Error('Must be a Type3 font.'); } if (this.type3Loaded) { return this.type3Loaded; } var type3Options = Object.create(evaluator.options); type3Options.ignoreErrors = false; var type3Evaluator = evaluator.clone(type3Options); var translatedFont = this.font; var loadCharProcsPromise = Promise.resolve(); var charProcs = this.dict.get('CharProcs'); var fontResources = this.dict.get('Resources') || resources; var charProcKeys = charProcs.getKeys(); var charProcOperatorList = Object.create(null); var _loop2 = function _loop2() { var key = charProcKeys[i]; loadCharProcsPromise = loadCharProcsPromise.then(function () { var glyphStream = charProcs.get(key); var operatorList = new _operator_list.OperatorList(); return type3Evaluator.getOperatorList({ stream: glyphStream, task: task, resources: fontResources, operatorList: operatorList }).then(function () { charProcOperatorList[key] = operatorList.getIR(); parentOperatorList.addDependencies(operatorList.dependencies); }).catch(function (reason) { (0, _util.warn)("Type3 font resource \"".concat(key, "\" is not available.")); var operatorList = new _operator_list.OperatorList(); charProcOperatorList[key] = operatorList.getIR(); }); }); }; for (var i = 0, n = charProcKeys.length; i < n; ++i) { _loop2(); } this.type3Loaded = loadCharProcsPromise.then(function () { translatedFont.charProcOperatorList = charProcOperatorList; }); return this.type3Loaded; } }; return TranslatedFont; }(); var StateManager = function StateManagerClosure() { function StateManager(initialState) { this.state = initialState; this.stateStack = []; } StateManager.prototype = { save: function save() { var old = this.state; this.stateStack.push(this.state); this.state = old.clone(); }, restore: function restore() { var prev = this.stateStack.pop(); if (prev) { this.state = prev; } }, transform: function transform(args) { this.state.ctm = _util.Util.transform(this.state.ctm, args); } }; return StateManager; }(); var TextState = function TextStateClosure() { function TextState() { 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; } TextState.prototype = { setTextMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) { var m = this.textMatrix; m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; }, setTextLineMatrix: function TextState_setTextMatrix(a, b, c, d, e, f) { var m = this.textLineMatrix; m[0] = a; m[1] = b; m[2] = c; m[3] = d; m[4] = e; m[5] = f; }, translateTextMatrix: function TextState_translateTextMatrix(x, y) { var m = this.textMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; }, translateTextLineMatrix: function TextState_translateTextMatrix(x, y) { var m = this.textLineMatrix; m[4] = m[0] * x + m[2] * y + m[4]; m[5] = m[1] * x + m[3] * y + m[5]; }, calcTextLineMatrixAdvance: function TextState_calcTextLineMatrixAdvance(a, b, c, d, e, f) { var font = this.font; if (!font) { return null; } var m = this.textLineMatrix; if (!(a === m[0] && b === m[1] && c === m[2] && d === m[3])) { return null; } var txDiff = e - m[4], tyDiff = f - m[5]; if (font.vertical && txDiff !== 0 || !font.vertical && tyDiff !== 0) { return null; } var tx, ty, denominator = a * d - b * c; if (font.vertical) { tx = -tyDiff * c / denominator; ty = tyDiff * a / denominator; } else { tx = txDiff * d / denominator; ty = -txDiff * b / denominator; } return { width: tx, height: ty, value: font.vertical ? ty : tx }; }, calcRenderMatrix: function TextState_calcRendeMatrix(ctm) { var tsm = [this.fontSize * this.textHScale, 0, 0, this.fontSize, 0, this.textRise]; return _util.Util.transform(ctm, _util.Util.transform(this.textMatrix, tsm)); }, carriageReturn: function TextState_carriageReturn() { this.translateTextLineMatrix(0, -this.leading); this.textMatrix = this.textLineMatrix.slice(); }, clone: function TextState_clone() { var clone = Object.create(this); clone.textMatrix = this.textMatrix.slice(); clone.textLineMatrix = this.textLineMatrix.slice(); clone.fontMatrix = this.fontMatrix.slice(); return clone; } }; return TextState; }(); var EvalState = function EvalStateClosure() { function EvalState() { 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; } EvalState.prototype = { clone: function CanvasExtraState_clone() { return Object.create(this); } }; return EvalState; }(); var EvaluatorPreprocessor = function EvaluatorPreprocessorClosure() { var getOPMap = (0, _util.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; }); var MAX_INVALID_PATH_OPS = 20; function EvaluatorPreprocessor(stream, xref, stateManager) { this.opMap = getOPMap(); this.parser = new _parser.Parser(new _parser.Lexer(stream, this.opMap), false, xref); this.stateManager = stateManager; this.nonProcessedArgs = []; this._numInvalidPathOPS = 0; } EvaluatorPreprocessor.prototype = { get savedStatesDepth() { return this.stateManager.stateStack.length; }, read: function EvaluatorPreprocessor_read(operation) { var args = operation.args; while (true) { var obj = this.parser.getObj(); if ((0, _primitives.isCmd)(obj)) { var cmd = obj.cmd; var opSpec = this.opMap[cmd]; if (!opSpec) { (0, _util.warn)("Unknown command \"".concat(cmd, "\".")); continue; } var fn = opSpec.id; var numArgs = opSpec.numArgs; var argsLength = args !== null ? args.length : 0; if (!opSpec.variableArgs) { if (argsLength !== numArgs) { var 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) { var partialMsg = "command ".concat(cmd, ": expected ").concat(numArgs, " args, ") + "but received ".concat(argsLength, " args."); if (fn >= _util.OPS.moveTo && fn <= _util.OPS.endPath && ++this._numInvalidPathOPS > MAX_INVALID_PATH_OPS) { throw new _util.FormatError("Invalid ".concat(partialMsg)); } (0, _util.warn)("Skipping ".concat(partialMsg)); if (args !== null) { args.length = 0; } continue; } } else if (argsLength > numArgs) { (0, _util.info)("Command ".concat(cmd, ": expected [0, ").concat(numArgs, "] args, ") + "but received ".concat(argsLength, " args.")); } this.preprocessCommand(fn, args); operation.fn = fn; operation.args = args; return true; } if ((0, _primitives.isEOF)(obj)) { return false; } if (obj !== null) { if (args === null) { args = []; } args.push(obj); if (args.length > 33) { throw new _util.FormatError('Too many arguments'); } } } }, preprocessCommand: function EvaluatorPreprocessor_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; } } }; return EvaluatorPreprocessor; }(); /***/ }), /* 172 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CMapFactory = exports.IdentityCMap = exports.CMap = void 0; var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); var _parser = __w_extracthighlights_require__(156); var _stream = __w_extracthighlights_require__(157); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var 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']; var CMap = /*#__PURE__*/ function () { function CMap() { var builtInCMap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; _classCallCheck(this, CMap); this.codespaceRanges = [[], [], [], []]; this.numCodespaceRanges = 0; this._map = []; this.name = ''; this.vertical = false; this.useCMap = null; this.builtInCMap = builtInCMap; } _createClass(CMap, [{ key: "addCodespaceRange", value: function addCodespaceRange(n, low, high) { this.codespaceRanges[n - 1].push(low, high); this.numCodespaceRanges++; } }, { key: "mapCidRange", value: function mapCidRange(low, high, dstLow) { while (low <= high) { this._map[low++] = dstLow++; } } }, { key: "mapBfRange", value: function mapBfRange(low, high, dstLow) { var lastByte = dstLow.length - 1; while (low <= high) { this._map[low++] = dstLow; dstLow = dstLow.substring(0, lastByte) + String.fromCharCode(dstLow.charCodeAt(lastByte) + 1); } } }, { key: "mapBfRangeToArray", value: function mapBfRangeToArray(low, high, array) { var i = 0, ii = array.length; while (low <= high && i < ii) { this._map[low] = array[i++]; ++low; } } }, { key: "mapOne", value: function mapOne(src, dst) { this._map[src] = dst; } }, { key: "lookup", value: function lookup(code) { return this._map[code]; } }, { key: "contains", value: function contains(code) { return this._map[code] !== undefined; } }, { key: "forEach", value: function forEach(callback) { var map = this._map; var length = map.length; if (length <= 0x10000) { for (var i = 0; i < length; i++) { if (map[i] !== undefined) { callback(i, map[i]); } } } else { for (var _i in map) { callback(_i, map[_i]); } } } }, { key: "charCodeOf", value: function charCodeOf(value) { var map = this._map; if (map.length <= 0x10000) { return map.indexOf(value); } for (var charCode in map) { if (map[charCode] === value) { return charCode | 0; } } return -1; } }, { key: "getMap", value: function getMap() { return this._map; } }, { key: "readCharCode", value: function readCharCode(str, offset, out) { var c = 0; var codespaceRanges = this.codespaceRanges; for (var n = 0, nn = codespaceRanges.length; n < nn; n++) { c = (c << 8 | str.charCodeAt(offset + n)) >>> 0; var codespaceRange = codespaceRanges[n]; for (var k = 0, kk = codespaceRange.length; k < kk;) { var low = codespaceRange[k++]; var high = codespaceRange[k++]; if (c >= low && c <= high) { out.charcode = c; out.length = n + 1; return; } } } out.charcode = 0; out.length = 1; } }, { key: "length", get: function get() { return this._map.length; } }, { key: "isIdentityCMap", get: function get() { if (!(this.name === 'Identity-H' || this.name === 'Identity-V')) { return false; } if (this._map.length !== 0x10000) { return false; } for (var i = 0; i < 0x10000; i++) { if (this._map[i] !== i) { return false; } } return true; } }]); return CMap; }(); exports.CMap = CMap; var IdentityCMap = /*#__PURE__*/ function (_CMap) { _inherits(IdentityCMap, _CMap); function IdentityCMap(vertical, n) { var _this; _classCallCheck(this, IdentityCMap); _this = _possibleConstructorReturn(this, _getPrototypeOf(IdentityCMap).call(this)); _this.vertical = vertical; _this.addCodespaceRange(n, 0, 0xffff); return _this; } _createClass(IdentityCMap, [{ key: "mapCidRange", value: function mapCidRange(low, high, dstLow) { (0, _util.unreachable)('should not call mapCidRange'); } }, { key: "mapBfRange", value: function mapBfRange(low, high, dstLow) { (0, _util.unreachable)('should not call mapBfRange'); } }, { key: "mapBfRangeToArray", value: function mapBfRangeToArray(low, high, array) { (0, _util.unreachable)('should not call mapBfRangeToArray'); } }, { key: "mapOne", value: function mapOne(src, dst) { (0, _util.unreachable)('should not call mapCidOne'); } }, { key: "lookup", value: function lookup(code) { return Number.isInteger(code) && code <= 0xffff ? code : undefined; } }, { key: "contains", value: function contains(code) { return Number.isInteger(code) && code <= 0xffff; } }, { key: "forEach", value: function forEach(callback) { for (var i = 0; i <= 0xffff; i++) { callback(i, i); } } }, { key: "charCodeOf", value: function charCodeOf(value) { return Number.isInteger(value) && value <= 0xffff ? value : -1; } }, { key: "getMap", value: function getMap() { var map = new Array(0x10000); for (var i = 0; i <= 0xffff; i++) { map[i] = i; } return map; } }, { key: "length", get: function get() { return 0x10000; } }, { key: "isIdentityCMap", get: function get() { (0, _util.unreachable)('should not access .isIdentityCMap'); } }]); return IdentityCMap; }(CMap); exports.IdentityCMap = IdentityCMap; var BinaryCMapReader = function BinaryCMapReaderClosure() { function hexToInt(a, size) { var n = 0; for (var 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) { var c = 0; for (var i = size; i >= 0; i--) { c += a[i] + b[i]; a[i] = c & 255; c >>= 8; } } function incHex(a, size) { var c = 1; for (var i = size; i >= 0 && c > 0; i--) { c += a[i]; a[i] = c & 255; c >>= 8; } } var MAX_NUM_SIZE = 16; var MAX_ENCODED_NUM_SIZE = 19; function BinaryCMapStream(data) { this.buffer = data; this.pos = 0; this.end = data.length; this.tmpBuf = new Uint8Array(MAX_ENCODED_NUM_SIZE); } BinaryCMapStream.prototype = { readByte: function readByte() { if (this.pos >= this.end) { return -1; } return this.buffer[this.pos++]; }, readNumber: function readNumber() { var n = 0; var last; do { var 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: function readSigned() { var n = this.readNumber(); return n & 1 ? ~(n >>> 1) : n >>> 1; }, readHex: function readHex(num, size) { num.set(this.buffer.subarray(this.pos, this.pos + size + 1)); this.pos += size + 1; }, readHexNumber: function readHexNumber(num, size) { var last; var stack = this.tmpBuf, sp = 0; do { var b = this.readByte(); if (b < 0) { throw new _util.FormatError('unexpected EOF in bcmap'); } last = !(b & 0x80); stack[sp++] = b & 0x7F; } while (!last); var i = size, buffer = 0, bufferSize = 0; while (i >= 0) { while (bufferSize < 8 && stack.length > 0) { buffer = stack[--sp] << bufferSize | buffer; bufferSize += 7; } num[i] = buffer & 255; i--; buffer >>= 8; bufferSize -= 8; } }, readHexSigned: function readHexSigned(num, size) { this.readHexNumber(num, size); var sign = num[size] & 1 ? 255 : 0; var c = 0; for (var i = 0; i <= size; i++) { c = (c & 1) << 8 | num[i]; num[i] = c >> 1 ^ sign; } }, readString: function readString() { var len = this.readNumber(); var s = ''; for (var i = 0; i < len; i++) { s += String.fromCharCode(this.readNumber()); } return s; } }; function processBinaryCMap(data, cMap, extend) { return new Promise(function (resolve, reject) { var stream = new BinaryCMapStream(data); var header = stream.readByte(); cMap.vertical = !!(header & 1); var useCMap = null; var start = new Uint8Array(MAX_NUM_SIZE); var end = new Uint8Array(MAX_NUM_SIZE); var char = new Uint8Array(MAX_NUM_SIZE); var charCode = new Uint8Array(MAX_NUM_SIZE); var tmp = new Uint8Array(MAX_NUM_SIZE); var code; var b; while ((b = stream.readByte()) >= 0) { var type = b >> 5; if (type === 7) { switch (b & 0x1F) { case 0: stream.readString(); break; case 1: useCMap = stream.readString(); break; } continue; } var sequence = !!(b & 0x10); var dataSize = b & 15; if (dataSize + 1 > MAX_NUM_SIZE) { throw new Error('processBinaryCMap: Invalid dataSize.'); } var ucs2DataSize = 1; var subitemsCount = stream.readNumber(); var i; 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 (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 (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 (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 (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 (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 (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: reject(new Error('processBinaryCMap: Unknown type: ' + type)); return; } } if (useCMap) { resolve(extend(useCMap)); return; } resolve(cMap); }); } function BinaryCMapReader() {} BinaryCMapReader.prototype = { process: processBinaryCMap }; return BinaryCMapReader; }(); var CMapFactory = function CMapFactoryClosure() { function strToInt(str) { var a = 0; for (var 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) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, 'endbfchar')) { return; } expectString(obj); var src = strToInt(obj); obj = lexer.getObj(); expectString(obj); var dst = obj; cMap.mapOne(src, dst); } } function parseBfRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, 'endbfrange')) { return; } expectString(obj); var low = strToInt(obj); obj = lexer.getObj(); expectString(obj); var high = strToInt(obj); obj = lexer.getObj(); if (Number.isInteger(obj) || (0, _util.isString)(obj)) { var dstLow = Number.isInteger(obj) ? String.fromCharCode(obj) : obj; cMap.mapBfRange(low, high, dstLow); } else if ((0, _primitives.isCmd)(obj, '[')) { obj = lexer.getObj(); var array = []; while (!(0, _primitives.isCmd)(obj, ']') && !(0, _primitives.isEOF)(obj)) { 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) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, 'endcidchar')) { return; } expectString(obj); var src = strToInt(obj); obj = lexer.getObj(); expectInt(obj); var dst = obj; cMap.mapOne(src, dst); } } function parseCidRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, 'endcidrange')) { return; } expectString(obj); var low = strToInt(obj); obj = lexer.getObj(); expectString(obj); var high = strToInt(obj); obj = lexer.getObj(); expectInt(obj); var dstLow = obj; cMap.mapCidRange(low, high, dstLow); } } function parseCodespaceRange(cMap, lexer) { while (true) { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { break; } if ((0, _primitives.isCmd)(obj, 'endcodespacerange')) { return; } if (!(0, _util.isString)(obj)) { break; } var low = strToInt(obj); obj = lexer.getObj(); if (!(0, _util.isString)(obj)) { break; } var high = strToInt(obj); cMap.addCodespaceRange(obj.length, low, high); } throw new _util.FormatError('Invalid codespace range.'); } function parseWMode(cMap, lexer) { var obj = lexer.getObj(); if (Number.isInteger(obj)) { cMap.vertical = !!obj; } } function parseCMapName(cMap, lexer) { var obj = lexer.getObj(); if ((0, _primitives.isName)(obj) && (0, _util.isString)(obj.name)) { cMap.name = obj.name; } } function parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap) { var previous; var embeddedUseCMap; objLoop: while (true) { try { var obj = lexer.getObj(); if ((0, _primitives.isEOF)(obj)) { 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 _util.MissingDataException) { throw ex; } (0, _util.warn)('Invalid cMap data: ' + ex); continue; } } if (!useCMap && embeddedUseCMap) { useCMap = embeddedUseCMap; } if (useCMap) { return extendCMap(cMap, fetchBuiltInCMap, useCMap); } return Promise.resolve(cMap); } function extendCMap(cMap, fetchBuiltInCMap, useCMap) { return createBuiltInCMap(useCMap, fetchBuiltInCMap).then(function (newCMap) { cMap.useCMap = newCMap; if (cMap.numCodespaceRanges === 0) { var useCodespaceRanges = cMap.useCMap.codespaceRanges; for (var 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; }); } function createBuiltInCMap(name, fetchBuiltInCMap) { if (name === 'Identity-H') { return Promise.resolve(new IdentityCMap(false, 2)); } else if (name === 'Identity-V') { return Promise.resolve(new IdentityCMap(true, 2)); } if (!BUILT_IN_CMAPS.includes(name)) { return Promise.reject(new Error('Unknown CMap name: ' + name)); } if (!fetchBuiltInCMap) { return Promise.reject(new Error('Built-in CMap parameters are not provided.')); } return fetchBuiltInCMap(name).then(function (data) { var cMapData = data.cMapData, compressionType = data.compressionType; var cMap = new CMap(true); if (compressionType === _util.CMapCompressionType.BINARY) { return new BinaryCMapReader().process(cMapData, cMap, function (useCMap) { return extendCMap(cMap, fetchBuiltInCMap, useCMap); }); } if (compressionType === _util.CMapCompressionType.NONE) { var lexer = new _parser.Lexer(new _stream.Stream(cMapData)); return parseCMap(cMap, lexer, fetchBuiltInCMap, null); } return Promise.reject(new Error('TODO: Only BINARY/NONE CMap compression is currently supported.')); }); } return { create: function create(params) { var encoding = params.encoding; var fetchBuiltInCMap = params.fetchBuiltInCMap; var useCMap = params.useCMap; if ((0, _primitives.isName)(encoding)) { return createBuiltInCMap(encoding.name, fetchBuiltInCMap); } else if ((0, _primitives.isStream)(encoding)) { var cMap = new CMap(); var lexer = new _parser.Lexer(encoding); return parseCMap(cMap, lexer, fetchBuiltInCMap, useCMap).then(function (parsedCMap) { if (parsedCMap.isIdentityCMap) { return createBuiltInCMap(parsedCMap.name, fetchBuiltInCMap); } return parsedCMap; }); } return Promise.reject(new Error('Encoding required.')); } }; }(); exports.CMapFactory = CMapFactory; /***/ }), /* 173 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getFontType = getFontType; exports.IdentityToUnicodeMap = exports.ToUnicodeMap = exports.FontFlags = exports.Font = exports.ErrorFont = exports.SEAC_ANALYSIS_ENABLED = void 0; var _util = __w_extracthighlights_require__(6); var _cff_parser = __w_extracthighlights_require__(174); var _glyphlist = __w_extracthighlights_require__(177); var _encodings = __w_extracthighlights_require__(176); var _standard_fonts = __w_extracthighlights_require__(178); var _unicode = __w_extracthighlights_require__(179); var _font_renderer = __w_extracthighlights_require__(180); var _cmap = __w_extracthighlights_require__(172); var _stream = __w_extracthighlights_require__(157); var _type1_parser = __w_extracthighlights_require__(181); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var PRIVATE_USE_AREAS = [[0xE000, 0xF8FF], [0x100000, 0x10FFFD]]; var PDF_GLYPH_SPACE_UNITS = 1000; var SEAC_ANALYSIS_ENABLED = true; exports.SEAC_ANALYSIS_ENABLED = SEAC_ANALYSIS_ENABLED; var FontFlags = { FixedPitch: 1, Serif: 2, Symbolic: 4, Script: 8, Nonsymbolic: 32, Italic: 64, AllCap: 65536, SmallCap: 131072, ForceBold: 262144 }; exports.FontFlags = FontFlags; var 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']; function adjustWidths(properties) { if (!properties.fontMatrix) { return; } if (properties.fontMatrix[0] === _util.FONT_IDENTITY_MATRIX[0]) { return; } var scale = 0.001 / properties.fontMatrix[0]; var glyphsWidths = properties.widths; for (var glyph in glyphsWidths) { glyphsWidths[glyph] *= scale; } properties.defaultWidth *= scale; } function adjustToUnicode(properties, builtInEncoding) { if (properties.hasIncludedToUnicodeMap) { return; } if (properties.hasEncoding) { return; } if (builtInEncoding === properties.defaultEncoding) { return; } if (properties.toUnicode instanceof IdentityToUnicodeMap) { return; } var toUnicode = [], glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (var charCode in builtInEncoding) { var glyphName = builtInEncoding[charCode]; var unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { toUnicode[charCode] = String.fromCharCode(unicode); } } properties.toUnicode.amend(toUnicode); } function getFontType(type, subtype) { switch (type) { case 'Type1': 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; } var unicode = (0, _unicode.getUnicodeForGlyph)(name, glyphsUnicodeMap); if (unicode !== -1) { for (var key in glyphsUnicodeMap) { if (glyphsUnicodeMap[key] === unicode) { return key; } } } (0, _util.info)('Unable to recover a standard glyph name for: ' + name); return name; } var Glyph = function GlyphClosure() { function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { this.fontChar = fontChar; this.unicode = unicode; this.accent = accent; this.width = width; this.vmetric = vmetric; this.operatorListId = operatorListId; this.isSpace = isSpace; this.isInFont = isInFont; } Glyph.prototype.matchesForCache = function (fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont) { return this.fontChar === fontChar && this.unicode === unicode && this.accent === accent && this.width === width && this.vmetric === vmetric && this.operatorListId === operatorListId && this.isSpace === isSpace && this.isInFont === isInFont; }; return Glyph; }(); var ToUnicodeMap = function ToUnicodeMapClosure() { function ToUnicodeMap() { var cmap = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; this._map = cmap; } ToUnicodeMap.prototype = { get length() { return this._map.length; }, forEach: function forEach(callback) { for (var charCode in this._map) { callback(charCode, this._map[charCode].charCodeAt(0)); } }, has: function has(i) { return this._map[i] !== undefined; }, get: function get(i) { return this._map[i]; }, charCodeOf: function charCodeOf(value) { var map = this._map; if (map.length <= 0x10000) { return map.indexOf(value); } for (var charCode in map) { if (map[charCode] === value) { return charCode | 0; } } return -1; }, amend: function amend(map) { for (var charCode in map) { this._map[charCode] = map[charCode]; } } }; return ToUnicodeMap; }(); exports.ToUnicodeMap = ToUnicodeMap; var IdentityToUnicodeMap = function IdentityToUnicodeMapClosure() { function IdentityToUnicodeMap(firstChar, lastChar) { this.firstChar = firstChar; this.lastChar = lastChar; } IdentityToUnicodeMap.prototype = { get length() { return this.lastChar + 1 - this.firstChar; }, forEach: function forEach(callback) { for (var i = this.firstChar, ii = this.lastChar; i <= ii; i++) { callback(i, i); } }, has: function has(i) { return this.firstChar <= i && i <= this.lastChar; }, get: function get(i) { if (this.firstChar <= i && i <= this.lastChar) { return String.fromCharCode(i); } return undefined; }, charCodeOf: function charCodeOf(v) { return Number.isInteger(v) && v >= this.firstChar && v <= this.lastChar ? v : -1; }, amend: function amend(map) { (0, _util.unreachable)('Should not call amend()'); } }; return IdentityToUnicodeMap; }(); exports.IdentityToUnicodeMap = IdentityToUnicodeMap; var OpenTypeFileBuilder = function OpenTypeFileBuilderClosure() { 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) { var i, ii; if (data instanceof Uint8Array) { dest.set(data, offset); } else if (typeof data === 'string') { for (i = 0, ii = data.length; i < ii; i++) { dest[offset++] = data.charCodeAt(i) & 0xFF; } } else { for (i = 0, ii = data.length; i < ii; i++) { dest[offset++] = data[i] & 0xFF; } } } function OpenTypeFileBuilder(sfnt) { this.sfnt = sfnt; this.tables = Object.create(null); } OpenTypeFileBuilder.getSearchParams = function OpenTypeFileBuilder_getSearchParams(entriesCount, entrySize) { var maxPower2 = 1, log2 = 0; while ((maxPower2 ^ entriesCount) > maxPower2) { maxPower2 <<= 1; log2++; } var searchRange = maxPower2 * entrySize; return { range: searchRange, entry: log2, rangeShift: entrySize * entriesCount - searchRange }; }; var OTF_HEADER_SIZE = 12; var OTF_TABLE_ENTRY_SIZE = 16; OpenTypeFileBuilder.prototype = { toArray: function OpenTypeFileBuilder_toArray() { var sfnt = this.sfnt; var tables = this.tables; var tablesNames = Object.keys(tables); tablesNames.sort(); var numTables = tablesNames.length; var i, j, jj, table, tableName; var offset = OTF_HEADER_SIZE + numTables * OTF_TABLE_ENTRY_SIZE; var tableOffsets = [offset]; for (i = 0; i < numTables; i++) { table = tables[tablesNames[i]]; var paddedLength = (table.length + 3 & ~3) >>> 0; offset += paddedLength; tableOffsets.push(offset); } var 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); var 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; var checksum = 0; for (j = tableOffsets[i], jj = tableOffsets[i + 1]; j < jj; j += 4) { var quad = (0, _util.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: function OpenTypeFileBuilder_addTable(tag, data) { if (tag in this.tables) { throw new Error('Table ' + tag + ' already exists'); } this.tables[tag] = data; } }; return OpenTypeFileBuilder; }(); var Font = function FontClosure() { function Font(name, file, properties) { var charCode; this.name = name; this.loadedName = properties.loadedName; this.isType3Font = properties.isType3Font; this.sizes = []; this.missingFile = false; this.glyphCache = Object.create(null); this.isSerifFont = !!(properties.flags & FontFlags.Serif); this.isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); this.isMonospace = !!(properties.flags & FontFlags.FixedPitch); var type = properties.type; var subtype = properties.subtype; this.type = type; this.subtype = subtype; this.fallbackName = this.isMonospace ? 'monospace' : this.isSerifFont ? 'serif' : 'sans-serif'; this.differences = properties.differences; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; this.composite = properties.composite; this.wideChars = properties.wideChars; this.cMap = properties.cMap; this.ascent = properties.ascent / PDF_GLYPH_SPACE_UNITS; this.descent = properties.descent / PDF_GLYPH_SPACE_UNITS; this.fontMatrix = properties.fontMatrix; this.bbox = properties.bbox; this.defaultEncoding = properties.defaultEncoding; this.toUnicode = properties.toUnicode; this.fallbackToUnicode = properties.fallbackToUnicode || new ToUnicodeMap(); this.toFontChar = []; if (properties.type === 'Type3') { for (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(); return; } var _getFontFileType = getFontFileType(file, properties); var _getFontFileType2 = _slicedToArray(_getFontFileType, 2); type = _getFontFileType2[0]; subtype = _getFontFileType2[1]; if (type !== this.type || subtype !== this.subtype) { (0, _util.info)('Inconsistent font file Type/SubType, expected: ' + "".concat(this.type, "/").concat(this.subtype, " but found: ").concat(type, "/").concat(subtype, ".")); } try { var data; switch (type) { case 'MMType1': (0, _util.info)('MMType1 font (' + name + '), falling back to Type1.'); case 'Type1': case 'CIDFontType0': this.mimetype = 'font/opentype'; var cff = subtype === 'Type1C' || subtype === 'CIDFontType0C' ? new CFFFont(file, properties) : new 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 ".concat(type, " is not supported")); } } catch (e) { (0, _util.warn)(e); this.fallbackToSystemFont(); return; } this.data = data; this.fontType = getFontType(type, subtype); this.fontMatrix = properties.fontMatrix; this.widths = properties.widths; this.defaultWidth = properties.defaultWidth; this.toUnicode = properties.toUnicode; this.encoding = properties.baseEncoding; this.seacMap = properties.seacMap; } Font.getFontID = function () { var ID = 1; return function Font_getFontID() { return String(ID++); }; }(); 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) { var 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) { value = value > 0x7FFF ? 0x7FFF : value < -0x8000 ? -0x8000 : value; return String.fromCharCode(value >> 8 & 0xff, value & 0xff); } function isTrueTypeFile(file) { var header = file.peekBytes(4); return (0, _util.readUint32)(header, 0) === 0x00010000 || (0, _util.bytesToString)(header) === 'true'; } function isTrueTypeCollectionFile(file) { var header = file.peekBytes(4); return (0, _util.bytesToString)(header) === 'ttcf'; } function isOpenTypeFile(file) { var header = file.peekBytes(4); return (0, _util.bytesToString)(header) === 'OTTO'; } function isType1File(file) { var 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) { var header = file.peekBytes(4); if (header[0] >= 1 && header[3] >= 1 && header[3] <= 4) { return true; } return false; } function getFontFileType(file, _ref) { var type = _ref.type, subtype = _ref.subtype, composite = _ref.composite; var 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 buildToFontChar(encoding, glyphsUnicodeMap, differences) { var toFontChar = [], unicode; for (var i = 0, ii = encoding.length; i < ii; i++) { unicode = (0, _unicode.getUnicodeForGlyph)(encoding[i], glyphsUnicodeMap); if (unicode !== -1) { toFontChar[i] = unicode; } } for (var charCode in differences) { unicode = (0, _unicode.getUnicodeForGlyph)(differences[charCode], glyphsUnicodeMap); if (unicode !== -1) { toFontChar[+charCode] = unicode; } } return toFontChar; } function adjustMapping(charCodeToGlyphId, hasGlyph, newGlyphZeroId) { var newMap = Object.create(null); var toFontChar = []; var privateUseAreaIndex = 0; var nextAvailableFontCharCode = PRIVATE_USE_AREAS[privateUseAreaIndex][0]; var privateUseOffetEnd = PRIVATE_USE_AREAS[privateUseAreaIndex][1]; for (var originalCharCode in charCodeToGlyphId) { originalCharCode |= 0; var 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]; } var fontCharCode = nextAvailableFontCharCode++; if (glyphId === 0) { glyphId = newGlyphZeroId; } newMap[fontCharCode] = glyphId; toFontChar[originalCharCode] = fontCharCode; } return { toFontChar: toFontChar, charCodeToGlyphId: newMap, nextAvailableFontCharCode: nextAvailableFontCharCode }; } function getRanges(glyphs, numGlyphs) { var codes = []; for (var 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; }); var ranges = []; var length = codes.length; for (var n = 0; n < length;) { var start = codes[n].fontCharCode; var codeIndices = [codes[n].glyphId]; ++n; var 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) { var ranges = getRanges(glyphs, numGlyphs); var numTables = ranges[ranges.length - 1][1] > 0xFFFF ? 2 : 1; var cmap = '\x00\x00' + string16(numTables) + '\x00\x03' + '\x00\x01' + (0, _util.string32)(4 + numTables * 8); var i, ii, j, jj; for (i = ranges.length - 1; i >= 0; --i) { if (ranges[i][0] <= 0xFFFF) { break; } } var bmpLength = i + 1; if (ranges[i][0] < 0xFFFF && ranges[i][1] === 0xFFFF) { ranges[i][1] = 0xFFFE; } var trailingRangesCount = ranges[i][1] < 0xFFFF ? 1 : 0; var segCount = bmpLength + trailingRangesCount; var searchParams = OpenTypeFileBuilder.getSearchParams(segCount, 2); var startCount = ''; var endCount = ''; var idDeltas = ''; var idRangeOffsets = ''; var glyphsIds = ''; var bias = 0; var 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]; var contiguous = true; for (j = 1, jj = codes.length; j < jj; ++j) { if (codes[j] !== codes[j - 1] + 1) { contiguous = false; break; } } if (!contiguous) { var 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 { var 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'; } var format314 = '\x00\x00' + string16(2 * segCount) + string16(searchParams.range) + string16(searchParams.entry) + string16(searchParams.rangeShift) + endCount + '\x00\x00' + startCount + idDeltas + idRangeOffsets + glyphsIds; var format31012 = ''; var 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]; var 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) { var stream = new _stream.Stream(os2.data); var version = stream.getUint16(); stream.getBytes(60); var selection = stream.getUint16(); if (version < 4 && selection & 0x0300) { return false; } var firstChar = stream.getUint16(); var lastChar = stream.getUint16(); if (firstChar > lastChar) { return false; } stream.getBytes(6); var usWinAscent = stream.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 }; var ulUnicodeRange1 = 0; var ulUnicodeRange2 = 0; var ulUnicodeRange3 = 0; var ulUnicodeRange4 = 0; var firstCharIndex = null; var lastCharIndex = 0; if (charstrings) { for (var code in charstrings) { code |= 0; if (firstCharIndex > code || !firstCharIndex) { firstCharIndex = code; } if (lastCharIndex < code) { lastCharIndex = code; } var 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; } var bbox = properties.bbox || [0, 0, 0, 0]; var unitsPerEm = override.unitsPerEm || 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; var scale = properties.ascentScaled ? 1.0 : unitsPerEm / PDF_GLYPH_SPACE_UNITS; var typoAscent = override.ascent || Math.round(scale * (properties.ascent || bbox[3])); var typoDescent = override.descent || Math.round(scale * (properties.descent || bbox[1])); if (typoDescent > 0 && properties.descent > 0 && bbox[1] < 0) { typoDescent = -typoDescent; } var winAscent = override.yMax || typoAscent; var 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) { var angle = Math.floor(properties.italicAngle * Math.pow(2, 16)); return '\x00\x03\x00\x00' + (0, _util.string32)(angle) + '\x00\x00' + '\x00\x00' + (0, _util.string32)(properties.fixedPitch) + '\x00\x00\x00\x00' + '\x00\x00\x00\x00' + '\x00\x00\x00\x00' + '\x00\x00\x00\x00'; } function createNameTable(name, proto) { if (!proto) { proto = [[], []]; } var 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] || '', proto[0][7] || 'Unknown', proto[0][8] || 'Unknown', proto[0][9] || 'Unknown']; var stringsUnicode = []; var i, ii, j, jj, str; for (i = 0, ii = strings.length; i < ii; i++) { str = proto[1][i] || strings[i]; var strBufUnicode = []; for (j = 0, jj = str.length; j < jj; j++) { strBufUnicode.push(string16(str.charCodeAt(j))); } stringsUnicode.push(strBufUnicode.join('')); } var names = [strings, stringsUnicode]; var platforms = ['\x00\x01', '\x00\x03']; var encodings = ['\x00\x00', '\x00\x01']; var languages = ['\x00\x00', '\x04\x09']; var namesRecordCount = strings.length * platforms.length; var nameTable = '\x00\x00' + string16(namesRecordCount) + string16(namesRecordCount * 12 + 6); var strOffset = 0; for (i = 0, ii = platforms.length; i < ii; i++) { var strs = names[i]; for (j = 0, jj = strs.length; j < jj; j++) { str = strs[j]; var 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; } Font.prototype = { name: null, font: null, mimetype: null, encoding: null, disableFontFace: false, get renderer() { var renderer = _font_renderer.FontRendererFactory.create(this, SEAC_ANALYSIS_ENABLED); return (0, _util.shadow)(this, 'renderer', renderer); }, exportData: function Font_exportData() { var data = {}; for (var i in this) { if (this.hasOwnProperty(i)) { data[i] = this[i]; } } return data; }, fallbackToSystemFont: function Font_fallbackToSystemFont() { var _this = this; this.missingFile = true; var charCode, unicode; var name = this.name; var type = this.type; var subtype = this.subtype; var fontName = name.replace(/[,_]/g, '-'); var stdFontMap = (0, _standard_fonts.getStdFontMap)(), nonStdFontMap = (0, _standard_fonts.getNonStdFontMap)(); var isStandardFont = !!stdFontMap[fontName] || !!(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; this.remeasure = Object.keys(this.widths).length > 0; if (isStandardFont && type === 'CIDFontType2' && this.cidEncoding.startsWith('Identity-')) { var GlyphMapForStandardFonts = (0, _standard_fonts.getGlyphMapForStandardFonts)(); var map = []; for (charCode in GlyphMapForStandardFonts) { map[+charCode] = GlyphMapForStandardFonts[charCode]; } if (/Arial-?Black/i.test(name)) { var SupplementalGlyphMapForArialBlack = (0, _standard_fonts.getSupplementalGlyphMapForArialBlack)(); for (charCode in SupplementalGlyphMapForArialBlack) { map[+charCode] = SupplementalGlyphMapForArialBlack[charCode]; } } else if (/Calibri/i.test(name)) { var SupplementalGlyphMapForCalibri = (0, _standard_fonts.getSupplementalGlyphMapForCalibri)(); for (charCode in SupplementalGlyphMapForCalibri) { map[+charCode] = SupplementalGlyphMapForCalibri[charCode]; } } var isIdentityUnicode = this.toUnicode instanceof IdentityToUnicodeMap; if (!isIdentityUnicode) { this.toUnicode.forEach(function (charCode, unicodeCharCode) { map[+charCode] = unicodeCharCode; }); } this.toFontChar = map; this.toUnicode = new 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) { this.toFontChar = buildToFontChar(this.defaultEncoding, (0, _glyphlist.getGlyphsUnicode)(), this.differences); } else { var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); this.toUnicode.forEach(function (charCode, unicodeCharCode) { if (!_this.composite) { var glyphName = _this.differences[charCode] || _this.defaultEncoding[charCode]; unicode = (0, _unicode.getUnicodeForGlyph)(glyphName, glyphsUnicodeMap); if (unicode !== -1) { unicodeCharCode = unicode; } } _this.toFontChar[charCode] = unicodeCharCode; }); } this.loadedName = fontName.split('-')[0]; this.fontType = getFontType(type, subtype); }, checkAndRepair: function Font_checkAndRepair(name, font, properties) { var VALID_TABLES = ['OS/2', 'cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'post', 'loca', 'glyf', 'fpgm', 'prep', 'cvt ', 'CFF ']; function readTables(file, numTables) { var 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 (var i = 0; i < numTables; i++) { var table = readTableEntry(font); if (!VALID_TABLES.includes(table.tag)) { continue; } if (table.length === 0) { continue; } tables[table.tag] = table; } return tables; } function readTableEntry(file) { var tag = (0, _util.bytesToString)(file.getBytes(4)); var checksum = file.getInt32() >>> 0; var offset = file.getInt32() >>> 0; var length = file.getInt32() >>> 0; var previousPosition = file.pos; file.pos = file.start ? file.start : 0; file.skip(offset); var data = file.getBytes(length); file.pos = previousPosition; if (tag === 'head') { data[8] = data[9] = data[10] = data[11] = 0; data[17] |= 0x20; } return { tag: tag, checksum: checksum, length: length, offset: offset, data: data }; } function readOpenTypeHeader(ttf) { return { version: (0, _util.bytesToString)(ttf.getBytes(4)), numTables: ttf.getUint16(), searchRange: ttf.getUint16(), entrySelector: ttf.getUint16(), rangeShift: ttf.getUint16() }; } function readTrueTypeCollectionHeader(ttc) { var ttcTag = (0, _util.bytesToString)(ttc.getBytes(4)); (0, _util.assert)(ttcTag === 'ttcf', 'Must be a TrueType Collection font.'); var majorVersion = ttc.getUint16(); var minorVersion = ttc.getUint16(); var numFonts = ttc.getInt32() >>> 0; var offsetTable = []; for (var i = 0; i < numFonts; i++) { offsetTable.push(ttc.getInt32() >>> 0); } var header = { ttcTag: ttcTag, majorVersion: majorVersion, minorVersion: minorVersion, numFonts: numFonts, offsetTable: 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: ".concat(majorVersion, ".")); } function readTrueTypeCollectionData(ttc, fontName) { var _readTrueTypeCollecti = readTrueTypeCollectionHeader(ttc), numFonts = _readTrueTypeCollecti.numFonts, offsetTable = _readTrueTypeCollecti.offsetTable; for (var i = 0; i < numFonts; i++) { ttc.pos = (ttc.start || 0) + offsetTable[i]; var potentialHeader = readOpenTypeHeader(ttc); var potentialTables = readTables(ttc, potentialHeader.numTables); if (!potentialTables['name']) { throw new _util.FormatError('TrueType Collection font must contain a "name" table.'); } var nameTable = readNameTable(potentialTables['name']); for (var j = 0, jj = nameTable.length; j < jj; j++) { for (var k = 0, kk = nameTable[j].length; k < kk; k++) { var nameEntry = nameTable[j][k]; if (nameEntry && nameEntry.replace(/\s/g, '') === fontName) { return { header: potentialHeader, tables: potentialTables }; } } } } throw new _util.FormatError("TrueType Collection does not contain \"".concat(fontName, "\" font.")); } function readCmapTable(cmap, font, isSymbolicFont, hasEncoding) { if (!cmap) { (0, _util.warn)('No cmap table available.'); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } var segment; var start = (font.start ? font.start : 0) + cmap.offset; font.pos = start; font.getUint16(); var numTables = font.getUint16(); var potentialTable; var canBreak = false; for (var i = 0; i < numTables; i++) { var platformId = font.getUint16(); var encodingId = font.getUint16(); var offset = font.getInt32() >>> 0; var useTable = false; if (potentialTable && potentialTable.platformId === platformId && potentialTable.encodingId === encodingId) { continue; } if (platformId === 0 && encodingId === 0) { 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; canBreak = true; } if (useTable) { potentialTable = { platformId: platformId, encodingId: encodingId, offset: offset }; } if (canBreak) { break; } } if (potentialTable) { font.pos = start + potentialTable.offset; } if (!potentialTable || font.peekByte() === -1) { (0, _util.warn)('Could not find a preferred cmap table.'); return { platformId: -1, encodingId: -1, mappings: [], hasShortCmap: false }; } var format = font.getUint16(); font.getUint16(); font.getUint16(); var hasShortCmap = false; var mappings = []; var j, glyphId; if (format === 0) { for (j = 0; j < 256; j++) { var index = font.getByte(); if (!index) { continue; } mappings.push({ charCode: j, glyphId: index }); } hasShortCmap = true; } else if (format === 4) { var segCount = font.getUint16() >> 1; font.getBytes(6); var segIndex, segments = []; for (segIndex = 0; segIndex < segCount; segIndex++) { segments.push({ end: font.getUint16() }); } font.getUint16(); for (segIndex = 0; segIndex < segCount; segIndex++) { segments[segIndex].start = font.getUint16(); } for (segIndex = 0; segIndex < segCount; segIndex++) { segments[segIndex].delta = font.getUint16(); } var offsetsCount = 0; for (segIndex = 0; segIndex < segCount; segIndex++) { segment = segments[segIndex]; var rangeOffset = font.getUint16(); if (!rangeOffset) { segment.offsetIndex = -1; continue; } var offsetIndex = (rangeOffset >> 1) - (segCount - segIndex); segment.offsetIndex = offsetIndex; offsetsCount = Math.max(offsetsCount, offsetIndex + segment.end - segment.start + 1); } var offsets = []; for (j = 0; j < offsetsCount; j++) { offsets.push(font.getUint16()); } for (segIndex = 0; segIndex < segCount; segIndex++) { segment = segments[segIndex]; start = segment.start; var end = segment.end; var 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: glyphId }); } } } else if (format === 6) { var firstCode = font.getUint16(); var entryCount = font.getUint16(); for (j = 0; j < entryCount; j++) { glyphId = font.getUint16(); var charCode = firstCode + j; mappings.push({ charCode: charCode, glyphId: 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 (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: mappings, hasShortCmap: hasShortCmap }; } function sanitizeMetrics(font, header, metrics, numGlyphs) { if (!header) { if (metrics) { metrics.data = null; } return; } font.pos = (font.start ? font.start : 0) + header.offset; font.pos += 4; font.pos += 2; font.pos += 2; font.pos += 2; font.pos += 2; font.pos += 2; font.pos += 2; font.pos += 2; font.pos += 2; font.pos += 2; font.pos += 2; font.pos += 8; font.pos += 2; var numOfMetrics = font.getUint16(); 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; } var numOfSidebearings = numGlyphs - numOfMetrics; var numMissing = numOfSidebearings - (metrics.length - numOfMetrics * 4 >> 1); if (numMissing > 0) { var entries = new Uint8Array(metrics.length + numMissing * 2); entries.set(metrics.data); metrics.data = entries; } } function sanitizeGlyph(source, sourceStart, sourceEnd, dest, destStart, hintsValid) { var glyphProfile = { length: 0, sizeOfInstructions: 0 }; if (sourceEnd - sourceStart <= 12) { return glyphProfile; } var glyf = source.subarray(sourceStart, sourceEnd); var 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; } var i, j = 10, flagsCount = 0; for (i = 0; i < contoursCount; i++) { var endPoint = glyf[j] << 8 | glyf[j + 1]; flagsCount = endPoint + 1; j += 2; } var instructionsStart = j; var instructionsLength = glyf[j] << 8 | glyf[j + 1]; glyphProfile.sizeOfInstructions = instructionsLength; j += 2 + instructionsLength; var instructionsEnd = j; var coordinatesLength = 0; for (i = 0; i < flagsCount; i++) { var flag = glyf[j++]; if (flag & 0xC0) { glyf[j - 1] = flag & 0x3F; } var xyLength = (flag & 2 ? 1 : flag & 16 ? 0 : 2) + (flag & 4 ? 1 : flag & 32 ? 0 : 2); coordinatesLength += xyLength; if (flag & 8) { var repeat = glyf[j++]; i += repeat; coordinatesLength += repeat * xyLength; } } if (coordinatesLength === 0) { return glyphProfile; } var 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) { var data = head.data; var 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; } var indexToLocFormat = int16(data[50], data[51]); if (indexToLocFormat < 0 || indexToLocFormat > 1) { (0, _util.info)('Attempting to fix invalid indexToLocFormat in head table: ' + indexToLocFormat); var 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) { var 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; }; } var numGlyphsOut = dupFirstEntry ? numGlyphs + 1 : numGlyphs; var locaData = loca.data; var locaDataSize = itemSize * (1 + numGlyphsOut); locaData = new Uint8Array(locaDataSize); locaData.set(loca.data.subarray(0, locaDataSize)); loca.data = locaData; var oldGlyfData = glyf.data; var oldGlyfDataLength = oldGlyfData.length; var newGlyfData = new Uint8Array(oldGlyfDataLength); var startOffset = itemDecode(locaData, 0); var writeOffset = 0; var missingGlyphs = Object.create(null); itemEncode(locaData, 0, writeOffset); var i, j; for (i = 0, j = itemSize; i < numGlyphs; i++, j += itemSize) { var endOffset = itemDecode(locaData, j); if (endOffset === 0) { endOffset = startOffset; } if (endOffset > oldGlyfDataLength && (oldGlyfDataLength + 3 & ~3) === endOffset) { endOffset = oldGlyfDataLength; } if (endOffset > oldGlyfDataLength) { startOffset = endOffset; } var glyphProfile = sanitizeGlyph(oldGlyfData, startOffset, endOffset, newGlyfData, writeOffset, hintsValid); var newLength = glyphProfile.length; if (newLength === 0) { missingGlyphs[i] = true; } if (glyphProfile.sizeOfInstructions > maxSizeOfInstructions) { maxSizeOfInstructions = glyphProfile.sizeOfInstructions; } writeOffset += newLength; itemEncode(locaData, j, writeOffset); startOffset = endOffset; } if (writeOffset === 0) { var 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) { var 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: missingGlyphs, maxSizeOfInstructions: maxSizeOfInstructions }; } function readPostScriptTable(post, properties, maxpNumGlyphs) { var start = (font.start ? font.start : 0) + post.offset; font.pos = start; var length = post.length, end = start + length; var version = font.getInt32(); font.getBytes(28); var glyphNames; var valid = true; var i; switch (version) { case 0x00010000: glyphNames = MacStandardGlyphOrdering; break; case 0x00020000: var numGlyphs = font.getUint16(); if (numGlyphs !== maxpNumGlyphs) { valid = false; break; } var glyphNameIndexes = []; for (i = 0; i < numGlyphs; ++i) { var index = font.getUint16(); if (index >= 32768) { valid = false; break; } glyphNameIndexes.push(index); } if (!valid) { break; } var customNames = []; var strBuf = []; while (font.pos < end) { var 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) { var j = glyphNameIndexes[i]; if (j < 258) { glyphNames.push(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 (properties.defaultEncoding) { glyphNames = properties.defaultEncoding; } break; } properties.glyphNames = glyphNames; return valid; } function readNameTable(nameTable) { var start = (font.start ? font.start : 0) + nameTable.offset; font.pos = start; var names = [[], []]; var length = nameTable.length, end = start + length; var format = font.getUint16(); var FORMAT_0_HEADER_LENGTH = 6; if (format !== 0 || length < FORMAT_0_HEADER_LENGTH) { return names; } var numRecords = font.getUint16(); var stringsStart = font.getUint16(); var records = []; var NAME_RECORD_LENGTH = 12; var i, ii; for (i = 0; i < numRecords && font.pos + NAME_RECORD_LENGTH <= end; i++) { var 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++) { var record = records[i]; if (record.length <= 0) { continue; } var pos = start + stringsStart + record.offset; if (pos + record.length > end) { continue; } font.pos = pos; var nameIndex = record.name; if (record.encoding) { var str = ''; for (var j = 0, jj = record.length; j < jj; j += 2) { str += String.fromCharCode(font.getUint16()); } names[1][nameIndex] = str; } else { names[0][nameIndex] = (0, _util.bytesToString)(font.getBytes(record.length)); } } return names; } var 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) { var data = table.data; var i = 0, j, n, b, funcId, pc, lastEndf = 0, lastDeff = 0; var stack = []; var callstack = []; var functionsCalled = []; var tooComplexToFollowFunctions = ttContext.tooComplexToFollowFunctions; var inFDEF = false, ifLevel = 0, inELSE = 0; for (var ii = data.length; i < ii;) { var 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) { var 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: data, i: 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: data, i: 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) { var offset = stack[stack.length - 1]; if (offset > 0) { i += offset - 1; } } } if (!inFDEF && !inELSE) { var stackDelta = op <= 0x8E ? TTOpsStackDeltas[op] : op >= 0xC0 && op <= 0xDF ? -1 : op >= 0xE0 ? -2 : 0; 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; var 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 (var 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) { var newLength = 0; var j, jj; for (j = 0, jj = content.length; j < jj; j++) { newLength += content[j].length; } newLength = newLength + 3 & ~3; var result = new Uint8Array(newLength); var 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) { var 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) { var cvtData = new Uint8Array(cvt.length + 1); cvtData.set(cvt.data); cvt.data = cvtData; } return ttContext.hintsValid; } font = new _stream.Stream(new Uint8Array(font.getBytes())); var header, tables; if (isTrueTypeCollectionFile(font)) { var ttcData = readTrueTypeCollectionData(font, this.name); header = ttcData.header; tables = ttcData.tables; } else { header = readOpenTypeHeader(font); tables = readTables(font, header.numTables); } var cff, cffFile; var isTrueType = !tables['CFF ']; if (!isTrueType) { var 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 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; var version = font.getInt32(); var numGlyphs = font.getUint16(); var numGlyphsOut = numGlyphs + 1; var dupFirstEntry = true; if (numGlyphsOut > 0xFFFF) { dupFirstEntry = false; numGlyphsOut = numGlyphs; (0, _util.warn)('Not enough space in glyfs to duplicate first glyph.'); } var maxFunctionDefs = 0; var maxSizeOfInstructions = 0; if (version >= 0x00010000 && tables['maxp'].length >= 22) { font.pos += 8; var 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; var 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'], numGlyphsOut); if (!tables['head']) { throw new _util.FormatError('Required "head" table is not found'); } sanitizeHead(tables['head'], numGlyphs, isTrueType ? tables['loca'].length : 0); var missingGlyphs = Object.create(null); if (isTrueType) { var isGlyphLocationsLong = int16(tables['head'].data[50], tables['head'].data[51]); var 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; } var 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: int16(tables['hhea'].data[4], tables['hhea'].data[5]), descent: signedInt16(tables['hhea'].data[6], tables['hhea'].data[7]) }; this.ascent = metricsOverride.ascent / metricsOverride.unitsPerEm; this.descent = metricsOverride.descent / metricsOverride.unitsPerEm; if (tables['post']) { readPostScriptTable(tables['post'], properties, numGlyphs); } tables['post'] = { tag: 'post', data: createPostTable(properties) }; var charCodeToGlyphId = [], charCode; function hasGlyph(glyphId) { return !missingGlyphs[glyphId]; } if (properties.composite) { var cidToGidMap = properties.cidToGidMap || []; var isCidToGidMapEmpty = cidToGidMap.length === 0; properties.cMap.forEach(function (charCode, cid) { if (cid > 0xffff) { throw new _util.FormatError('Max size of CID is 65,535'); } var 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 { var cmapTable = readCmapTable(tables['cmap'], font, this.isSymbolicFont, properties.hasEncoding); var cmapPlatformId = cmapTable.platformId; var cmapEncodingId = cmapTable.encodingId; var cmapMappings = cmapTable.mappings; var cmapMappingsLength = cmapMappings.length; if (properties.hasEncoding && (cmapPlatformId === 3 && cmapEncodingId === 1 || cmapPlatformId === 1 && cmapEncodingId === 0) || cmapPlatformId === -1 && cmapEncodingId === -1 && !!(0, _encodings.getEncoding)(properties.baseEncodingName)) { var baseEncoding = []; if (properties.baseEncodingName === 'MacRomanEncoding' || properties.baseEncodingName === 'WinAnsiEncoding') { baseEncoding = (0, _encodings.getEncoding)(properties.baseEncodingName); } var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); for (charCode = 0; charCode < 256; charCode++) { var glyphName, standardGlyphName; if (this.differences && charCode in this.differences) { glyphName = this.differences[charCode]; } else if (charCode in baseEncoding && baseEncoding[charCode] !== '') { glyphName = baseEncoding[charCode]; } else { glyphName = _encodings.StandardEncoding[charCode]; } if (!glyphName) { continue; } standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); var unicodeOrCharCode; if (cmapPlatformId === 3 && cmapEncodingId === 1) { unicodeOrCharCode = glyphsUnicodeMap[standardGlyphName]; } else if (cmapPlatformId === 1 && cmapEncodingId === 0) { unicodeOrCharCode = _encodings.MacRomanEncoding.indexOf(standardGlyphName); } var found = false; for (var i = 0; i < cmapMappingsLength; ++i) { if (cmapMappings[i].charCode !== unicodeOrCharCode) { continue; } charCodeToGlyphId[charCode] = cmapMappings[i].glyphId; found = true; break; } if (!found && properties.glyphNames) { var glyphId = properties.glyphNames.indexOf(glyphName); if (glyphId === -1 && standardGlyphName !== glyphName) { glyphId = properties.glyphNames.indexOf(standardGlyphName); } if (glyphId > 0 && hasGlyph(glyphId)) { charCodeToGlyphId[charCode] = glyphId; } } } } else if (cmapPlatformId === 0 && cmapEncodingId === 0) { for (var _i2 = 0; _i2 < cmapMappingsLength; ++_i2) { charCodeToGlyphId[cmapMappings[_i2].charCode] = cmapMappings[_i2].glyphId; } } else { for (var _i3 = 0; _i3 < cmapMappingsLength; ++_i3) { charCode = cmapMappings[_i3].charCode; if (cmapPlatformId === 3 && charCode >= 0xF000 && charCode <= 0xF0FF) { charCode &= 0xFF; } charCodeToGlyphId[charCode] = cmapMappings[_i3].glyphId; } } } if (charCodeToGlyphId.length === 0) { charCodeToGlyphId[0] = 0; } var glyphZeroId = numGlyphsOut - 1; if (!dupFirstEntry) { glyphZeroId = 0; } var 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'])) { tables['OS/2'] = { tag: 'OS/2', data: createOS2Table(properties, newMapping.charCodeToGlyphId, metricsOverride) }; } if (!isTrueType) { try { cffFile = new _stream.Stream(tables['CFF '].data); var parser = new _cff_parser.CFFParser(cffFile, properties, SEAC_ANALYSIS_ENABLED); cff = parser.parse(); cff.duplicateFirstGlyph(); var 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 { var namePrototype = readNameTable(tables['name']); tables['name'].data = createNameTable(name, namePrototype); } var builder = new OpenTypeFileBuilder(header.version); for (var tableTag in tables) { builder.addTable(tableTag, tables[tableTag].data); } return builder.toArray(); }, convert: function Font_convert(fontName, font, properties) { properties.fixedPitch = false; if (properties.builtInEncoding) { adjustToUnicode(properties, properties.builtInEncoding); } var glyphZeroId = 1; if (font instanceof CFFFont) { glyphZeroId = font.numGlyphs - 1; } var mapping = font.getGlyphMapping(properties); var newMapping = adjustMapping(mapping, font.hasGlyphId.bind(font), glyphZeroId); this.toFontChar = newMapping.toFontChar; var numGlyphs = font.numGlyphs; function getCharCodes(charCodeToGlyphId, glyphId) { var charCodes = null; for (var charCode in charCodeToGlyphId) { if (glyphId === charCodeToGlyphId[charCode]) { if (!charCodes) { charCodes = []; } charCodes.push(charCode | 0); } } return charCodes; } function createCharCode(charCodeToGlyphId, glyphId) { for (var charCode in charCodeToGlyphId) { if (glyphId === charCodeToGlyphId[charCode]) { return charCode | 0; } } newMapping.charCodeToGlyphId[newMapping.nextAvailableFontCharCode] = glyphId; return newMapping.nextAvailableFontCharCode++; } var seacs = font.seacs; if (seacs && seacs.length) { var matrix = properties.fontMatrix || _util.FONT_IDENTITY_MATRIX; var charset = font.getCharset(); var seacMap = Object.create(null); for (var glyphId in seacs) { glyphId |= 0; var seac = seacs[glyphId]; var baseGlyphName = _encodings.StandardEncoding[seac[2]]; var accentGlyphName = _encodings.StandardEncoding[seac[3]]; var baseGlyphId = charset.indexOf(baseGlyphName); var accentGlyphId = charset.indexOf(accentGlyphName); if (baseGlyphId < 0 || accentGlyphId < 0) { continue; } var accentOffset = { x: seac[0] * matrix[0] + seac[1] * matrix[2] + matrix[4], y: seac[0] * matrix[1] + seac[1] * matrix[3] + matrix[5] }; var charCodes = getCharCodes(mapping, glyphId); if (!charCodes) { continue; } for (var i = 0, ii = charCodes.length; i < ii; i++) { var charCode = charCodes[i]; var charCodeToGlyphId = newMapping.charCodeToGlyphId; var baseFontCharCode = createCharCode(charCodeToGlyphId, baseGlyphId); var accentFontCharCode = createCharCode(charCodeToGlyphId, accentGlyphId); seacMap[charCode] = { baseFontCharCode: baseFontCharCode, accentFontCharCode: accentFontCharCode, accentOffset: accentOffset }; } } properties.seacMap = seacMap; } var unitsPerEm = 1 / (properties.fontMatrix || _util.FONT_IDENTITY_MATRIX)[0]; var builder = new OpenTypeFileBuilder('\x4F\x54\x54\x4F'); builder.addTable('CFF ', font.data); builder.addTable('OS/2', createOS2Table(properties, newMapping.charCodeToGlyphId)); builder.addTable('cmap', createCmapTable(newMapping.charCodeToGlyphId, 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() { var charstrings = font.charstrings; var cffWidths = font.cff ? font.cff.widths : null; var hmtx = '\x00\x00\x00\x00'; for (var i = 1, ii = numGlyphs; i < ii; i++) { var width = 0; if (charstrings) { var 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() { if ('_shadowWidth' in this) { return this._shadowWidth; } var possibleSpaceReplacements = ['space', 'minus', 'one', 'i', 'I']; var width; for (var i = 0, ii = possibleSpaceReplacements.length; i < ii; i++) { var glyphName = possibleSpaceReplacements[i]; if (glyphName in this.widths) { width = this.widths[glyphName]; break; } var glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); var glyphUnicode = glyphsUnicodeMap[glyphName]; var charcode = 0; if (this.composite) { if (this.cMap.contains(glyphUnicode)) { charcode = this.cMap.lookup(glyphUnicode); } } 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; this._shadowWidth = width; return width; }, charToGlyph: function Font_charToGlyph(charcode, isSpace) { var fontCharCode, width, operatorListId; var widthCode = charcode; if (this.cMap && this.cMap.contains(charcode)) { widthCode = this.cMap.lookup(charcode); } width = this.widths[widthCode]; width = (0, _util.isNum)(width) ? width : this.defaultWidth; var vmetric = this.vmetrics && this.vmetrics[widthCode]; var unicode = this.toUnicode.get(charcode) || this.fallbackToUnicode.get(charcode) || charcode; if (typeof unicode === 'number') { unicode = String.fromCharCode(unicode); } var isInFont = charcode in this.toFontChar; fontCharCode = this.toFontChar[charcode] || charcode; if (this.missingFile) { fontCharCode = (0, _unicode.mapSpecialUnicodeValues)(fontCharCode); } if (this.isType3Font) { operatorListId = fontCharCode; } var accent = null; if (this.seacMap && this.seacMap[charcode]) { isInFont = true; var seac = this.seacMap[charcode]; fontCharCode = seac.baseFontCharCode; accent = { fontChar: String.fromCodePoint(seac.accentFontCharCode), offset: seac.accentOffset }; } var fontChar = typeof fontCharCode === 'number' ? String.fromCodePoint(fontCharCode) : ''; var glyph = this.glyphCache[charcode]; if (!glyph || !glyph.matchesForCache(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont)) { glyph = new Glyph(fontChar, unicode, accent, width, vmetric, operatorListId, isSpace, isInFont); this.glyphCache[charcode] = glyph; } return glyph; }, charsToGlyphs: function Font_charsToGlyphs(chars) { var charsCache = this.charsCache; var glyphs, glyph, charcode; if (charsCache) { glyphs = charsCache[chars]; if (glyphs) { return glyphs; } } if (!charsCache) { charsCache = this.charsCache = Object.create(null); } glyphs = []; var charsCacheKey = chars; var i = 0, ii; if (this.cMap) { var c = Object.create(null); while (i < chars.length) { this.cMap.readCharCode(chars, i, c); charcode = c.charcode; var length = c.length; i += length; var isSpace = length === 1 && chars.charCodeAt(i - 1) === 0x20; glyph = this.charToGlyph(charcode, isSpace); glyphs.push(glyph); } } else { for (i = 0, ii = chars.length; i < ii; ++i) { charcode = chars.charCodeAt(i); glyph = this.charToGlyph(charcode, charcode === 0x20); glyphs.push(glyph); } } return charsCache[charsCacheKey] = glyphs; }, get glyphCacheValues() { return Object.values(this.glyphCache); } }; return Font; }(); exports.Font = Font; var ErrorFont = function ErrorFontClosure() { function ErrorFont(error) { this.error = error; this.loadedName = 'g_font_error'; this.missingFile = true; } ErrorFont.prototype = { charsToGlyphs: function ErrorFont_charsToGlyphs() { return []; }, exportData: function ErrorFont_exportData() { return { error: this.error }; } }; return ErrorFont; }(); exports.ErrorFont = ErrorFont; function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) { var charCodeToGlyphId = Object.create(null); var glyphId, charCode, baseEncoding; var isSymbolicFont = !!(properties.flags & FontFlags.Symbolic); 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; } } } var differences = properties.differences, glyphsUnicodeMap; if (differences) { for (charCode in differences) { var glyphName = differences[charCode]; glyphId = glyphNames.indexOf(glyphName); if (glyphId === -1) { if (!glyphsUnicodeMap) { glyphsUnicodeMap = (0, _glyphlist.getGlyphsUnicode)(); } var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap); if (standardGlyphName !== glyphName) { glyphId = glyphNames.indexOf(standardGlyphName); } } if (glyphId >= 0) { charCodeToGlyphId[charCode] = glyphId; } else { charCodeToGlyphId[charCode] = 0; } } } return charCodeToGlyphId; } var Type1Font = function Type1FontClosure() { function findBlock(streamBytes, signature, startIndex) { var streamBytesLength = streamBytes.length; var signatureLength = signature.length; var scanLength = streamBytesLength - signatureLength; var i = startIndex, j, found = false; while (i < scanLength) { j = 0; while (j < signatureLength && streamBytes[i + j] === signature[j]) { j++; } if (j >= signatureLength) { i += j; while (i < streamBytesLength && (0, _util.isSpace)(streamBytes[i])) { i++; } found = true; break; } i++; } return { found: found, length: i }; } function getHeaderBlock(stream, suggestedLength) { var EEXEC_SIGNATURE = [0x65, 0x65, 0x78, 0x65, 0x63]; var streamStartPos = stream.pos; var headerBytes, headerBytesLength, block; try { headerBytes = stream.getBytes(suggestedLength); headerBytesLength = headerBytes.length; } catch (ex) { if (ex instanceof _util.MissingDataException) { throw 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; var SCAN_BLOCK_LENGTH = 2048; var actualLength; while (true) { var 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) { var eexecBytes = stream.getBytes(); return { stream: new _stream.Stream(eexecBytes), length: eexecBytes.length }; } function Type1Font(name, file, properties) { var PFB_HEADER_SIZE = 6; var headerBlockLength = properties.length1; properties.length2; var pfbHeader = file.peekBytes(PFB_HEADER_SIZE); var 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]; } var headerBlock = getHeaderBlock(file, headerBlockLength); var headerBlockParser = new _type1_parser.Type1Parser(headerBlock.stream, false, 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]; } var eexecBlock = getEexecBlock(file); var eexecBlockParser = new _type1_parser.Type1Parser(eexecBlock.stream, true, SEAC_ANALYSIS_ENABLED); var data = eexecBlockParser.extractFontProgram(); for (var info in data.properties) { properties[info] = data.properties[info]; } var charstrings = data.charstrings; var type2Charstrings = this.getType2Charstrings(charstrings); var subrs = this.getType2Subrs(data.subrs); this.charstrings = charstrings; this.data = this.wrap(name, type2Charstrings, this.charstrings, subrs, properties); this.seacs = this.getSeacs(data.charstrings); } Type1Font.prototype = { get numGlyphs() { return this.charstrings.length + 1; }, getCharset: function Type1Font_getCharset() { var charset = ['.notdef']; var charstrings = this.charstrings; for (var glyphId = 0; glyphId < charstrings.length; glyphId++) { charset.push(charstrings[glyphId].glyphName); } return charset; }, getGlyphMapping: function Type1Font_getGlyphMapping(properties) { var charstrings = this.charstrings; var glyphNames = ['.notdef'], glyphId; for (glyphId = 0; glyphId < charstrings.length; glyphId++) { glyphNames.push(charstrings[glyphId].glyphName); } var encoding = properties.builtInEncoding; if (encoding) { var builtInEncoding = Object.create(null); for (var charCode in encoding) { glyphId = glyphNames.indexOf(encoding[charCode]); if (glyphId >= 0) { builtInEncoding[charCode] = glyphId; } } } return type1FontGlyphMapping(properties, builtInEncoding, glyphNames); }, hasGlyphId: function Type1Font_hasGlyphID(id) { if (id < 0 || id >= this.numGlyphs) { return false; } if (id === 0) { return true; } var glyph = this.charstrings[id - 1]; return glyph.charstring.length > 0; }, getSeacs: function Type1Font_getSeacs(charstrings) { var i, ii; var seacMap = []; for (i = 0, ii = charstrings.length; i < ii; i++) { var charstring = charstrings[i]; if (charstring.seac) { seacMap[i + 1] = charstring.seac; } } return seacMap; }, getType2Charstrings: function Type1Font_getType2Charstrings(type1Charstrings) { var type2Charstrings = []; for (var i = 0, ii = type1Charstrings.length; i < ii; i++) { type2Charstrings.push(type1Charstrings[i].charstring); } return type2Charstrings; }, getType2Subrs: function Type1Font_getType2Subrs(type1Subrs) { var bias = 0; var count = type1Subrs.length; if (count < 1133) { bias = 107; } else if (count < 33769) { bias = 1131; } else { bias = 32768; } var type2Subrs = []; var i; for (i = 0; i < bias; i++) { type2Subrs.push([0x0B]); } for (i = 0; i < count; i++) { type2Subrs.push(type1Subrs[i]); } return type2Subrs; }, wrap: function Type1Font_wrap(name, glyphs, charstrings, subrs, properties) { var cff = new _cff_parser.CFF(); cff.header = new _cff_parser.CFFHeader(1, 0, 4, 4); cff.names = [name]; var 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; var 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(); var count = glyphs.length; var charsetArray = [0]; var i, ii; for (i = 0; i < count; i++) { var index = _cff_parser.CFFStandardStrings.indexOf(charstrings[i].glyphName); if (index === -1) { index = 0; } charsetArray.push(index >> 8 & 0xff, index & 0xff); } cff.charset = new _cff_parser.CFFCharset(false, 0, [], charsetArray); var charStringsIndex = new _cff_parser.CFFIndex(); charStringsIndex.add([0x8B, 0x0E]); for (i = 0; i < count; i++) { charStringsIndex.add(glyphs[i]); } cff.charStrings = charStringsIndex; var privateDict = new _cff_parser.CFFPrivateDict(); privateDict.setByName('Subrs', null); var fields = ['BlueValues', 'OtherBlues', 'FamilyBlues', 'FamilyOtherBlues', 'StemSnapH', 'StemSnapV', 'BlueShift', 'BlueFuzz', 'BlueScale', 'LanguageGroup', 'ExpansionFactor', 'ForceBold', 'StdHW', 'StdVW']; for (i = 0, ii = fields.length; i < ii; i++) { var field = fields[i]; if (!(field in properties.privateData)) { continue; } var value = properties.privateData[field]; if (Array.isArray(value)) { for (var j = value.length - 1; j > 0; j--) { value[j] -= value[j - 1]; } } privateDict.setByName(field, value); } cff.topDict.privateDict = privateDict; var subrIndex = new _cff_parser.CFFIndex(); for (i = 0, ii = subrs.length; i < ii; i++) { subrIndex.add(subrs[i]); } privateDict.subrsIndex = subrIndex; var compiler = new _cff_parser.CFFCompiler(cff); return compiler.compile(); } }; return Type1Font; }(); var CFFFont = function CFFFontClosure() { function CFFFont(file, properties) { this.properties = properties; var parser = new _cff_parser.CFFParser(file, properties, SEAC_ANALYSIS_ENABLED); this.cff = parser.parse(); this.cff.duplicateFirstGlyph(); var 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; } } CFFFont.prototype = { get numGlyphs() { return this.cff.charStrings.count; }, getCharset: function CFFFont_getCharset() { return this.cff.charset.charset; }, getGlyphMapping: function CFFFont_getGlyphMapping() { var cff = this.cff; var properties = this.properties; var charsets = cff.charset.charset; var charCodeToGlyphId; var glyphId; if (properties.composite) { charCodeToGlyphId = Object.create(null); if (cff.isCIDFont) { for (glyphId = 0; glyphId < charsets.length; glyphId++) { var cid = charsets[glyphId]; var charCode = properties.cMap.charCodeOf(cid); charCodeToGlyphId[charCode] = glyphId; } } else { for (glyphId = 0; glyphId < cff.charStrings.count; glyphId++) { charCodeToGlyphId[glyphId] = glyphId; } } return charCodeToGlyphId; } var encoding = cff.encoding ? cff.encoding.encoding : null; charCodeToGlyphId = type1FontGlyphMapping(properties, encoding, charsets); return charCodeToGlyphId; }, hasGlyphId: function CFFFont_hasGlyphID(id) { return this.cff.hasGlyphId(id); } }; return CFFFont; }(); /***/ }), /* 174 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CFFFDSelect = exports.CFFCompiler = exports.CFFPrivateDict = exports.CFFTopDict = exports.CFFCharset = exports.CFFIndex = exports.CFFStrings = exports.CFFHeader = exports.CFF = exports.CFFParser = exports.CFFStandardStrings = void 0; var _util = __w_extracthighlights_require__(6); var _charsets = __w_extracthighlights_require__(175); var _encodings = __w_extracthighlights_require__(176); var MAX_SUBR_NESTING = 10; var 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; var CFFParser = function CFFParserClosure() { var 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 }]; var 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 }]; function CFFParser(file, properties, seacAnalysisEnabled) { this.bytes = file.getBytes(); this.properties = properties; this.seacAnalysisEnabled = !!seacAnalysisEnabled; } CFFParser.prototype = { parse: function CFFParser_parse() { var properties = this.properties; var cff = new CFF(); this.cff = cff; var header = this.parseHeader(); var nameIndex = this.parseIndex(header.endPos); var topDictIndex = this.parseIndex(nameIndex.endPos); var stringIndex = this.parseIndex(topDictIndex.endPos); var globalSubrIndex = this.parseIndex(stringIndex.endPos); var topDictParsed = this.parseDict(topDictIndex.obj.get(0)); var 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'); var charStringOffset = topDict.getByName('CharStrings'); var charStringIndex = this.parseIndex(charStringOffset).obj; var fontMatrix = topDict.getByName('FontMatrix'); if (fontMatrix) { properties.fontMatrix = fontMatrix; } var 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; } var charset, encoding; if (cff.isCIDFont) { var fdArrayIndex = this.parseIndex(topDict.getByName('FDArray')).obj; for (var i = 0, ii = fdArrayIndex.count; i < ii; ++i) { var dictRaw = fdArrayIndex.get(i); var 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; var 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: function CFFParser_parseHeader() { var bytes = this.bytes; var bytesLength = bytes.length; var 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; } var major = bytes[0]; var minor = bytes[1]; var hdrSize = bytes[2]; var offSize = bytes[3]; var header = new CFFHeader(major, minor, hdrSize, offSize); return { obj: header, endPos: hdrSize }; }, parseDict: function CFFParser_parseDict(dict) { var pos = 0; function parseOperand() { var 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() { var str = ''; var eof = 15; var lookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-']; var length = dict.length; while (pos < length) { var b = dict[pos++]; var b1 = b >> 4; var b2 = b & 15; if (b1 === eof) { break; } str += lookup[b1]; if (b2 === eof) { break; } str += lookup[b2]; } return parseFloat(str); } var operands = []; var entries = []; pos = 0; var end = dict.length; while (pos < end) { var 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: function CFFParser_parseIndex(pos) { var cffIndex = new CFFIndex(); var bytes = this.bytes; var count = bytes[pos++] << 8 | bytes[pos++]; var offsets = []; var end = pos; var i, ii; if (count !== 0) { var offsetSize = bytes[pos++]; var startPos = pos + (count + 1) * offsetSize - 1; for (i = 0, ii = count + 1; i < ii; ++i) { var offset = 0; for (var 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) { var offsetStart = offsets[i]; var offsetEnd = offsets[i + 1]; cffIndex.add(bytes.subarray(offsetStart, offsetEnd)); } return { obj: cffIndex, endPos: end }; }, parseNameIndex: function CFFParser_parseNameIndex(index) { var names = []; for (var i = 0, ii = index.count; i < ii; ++i) { var name = index.get(i); names.push((0, _util.bytesToString)(name)); } return names; }, parseStringIndex: function CFFParser_parseStringIndex(index) { var strings = new CFFStrings(); for (var i = 0, ii = index.count; i < ii; ++i) { var data = index.get(i); strings.add((0, _util.bytesToString)(data)); } return strings; }, createDict: function CFFParser_createDict(Type, dict, strings) { var cffDict = new Type(strings); for (var i = 0, ii = dict.length; i < ii; ++i) { var pair = dict[i]; var key = pair[0]; var value = pair[1]; cffDict.setByKey(key, value); } return cffDict; }, parseCharString: function CFFParser_parseCharString(state, data, localSubrIndex, globalSubrIndex) { if (!data || state.callDepth > MAX_SUBR_NESTING) { return false; } var stackSize = state.stackSize; var stack = state.stack; var length = data.length; for (var j = 0; j < length;) { var value = data[j++]; var validationCommand = null; if (value === 12) { var 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) { var subrsIndex; if (value === 10) { subrsIndex = localSubrIndex; } else { subrsIndex = globalSubrIndex; } if (!subrsIndex) { validationCommand = CharstringValidationData[value]; (0, _util.warn)('Missing subrsIndex for ' + validationCommand.id); return false; } var bias = 32768; if (subrsIndex.count < 1240) { bias = 107; } else if (subrsIndex.count < 33900) { bias = 1131; } var 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++; var 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 { 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); 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 && stack[stackSize - 1] >= 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: function parseCharStrings(_ref) { var charStrings = _ref.charStrings, localSubrIndex = _ref.localSubrIndex, globalSubrIndex = _ref.globalSubrIndex, fdSelect = _ref.fdSelect, fdArray = _ref.fdArray, privateDict = _ref.privateDict; var seacs = []; var widths = []; var count = charStrings.count; for (var i = 0; i < count; i++) { var charstring = charStrings.get(i); var state = { callDepth: 0, stackSize: 0, stack: [], undefStack: true, hints: 0, firstStackClearing: true, seac: null, width: null, hasVStems: false }; var valid = true; var localSubrToUse = null; var privateDictToUse = privateDict; if (fdSelect && fdArray.length) { var 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) { var nominalWidth = privateDictToUse.getByName('nominalWidthX'); widths[i] = nominalWidth + state.width; } else { var 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: charStrings, seacs: seacs, widths: widths }; }, emptyPrivateDictionary: function CFFParser_emptyPrivateDictionary(parentDict) { var privateDict = this.createDict(CFFPrivateDict, [], parentDict.strings); parentDict.setByKey(18, [0, 0]); parentDict.privateDict = privateDict; }, parsePrivateDict: function CFFParser_parsePrivateDict(parentDict) { if (!parentDict.hasName('Private')) { this.emptyPrivateDictionary(parentDict); return; } var privateOffset = parentDict.getByName('Private'); if (!Array.isArray(privateOffset) || privateOffset.length !== 2) { parentDict.removeByName('Private'); return; } var size = privateOffset[0]; var offset = privateOffset[1]; if (size === 0 || offset >= this.bytes.length) { this.emptyPrivateDictionary(parentDict); return; } var privateDictEnd = offset + size; var dictData = this.bytes.subarray(offset, privateDictEnd); var dict = this.parseDict(dictData); var privateDict = this.createDict(CFFPrivateDict, dict, parentDict.strings); parentDict.privateDict = privateDict; if (!privateDict.getByName('Subrs')) { return; } var subrsOffset = privateDict.getByName('Subrs'); var relativeOffset = offset + subrsOffset; if (subrsOffset === 0 || relativeOffset >= this.bytes.length) { this.emptyPrivateDictionary(parentDict); return; } var subrsIndex = this.parseIndex(relativeOffset); privateDict.subrsIndex = subrsIndex.obj; }, parseCharsets: function CFFParser_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); } var bytes = this.bytes; var start = pos; var format = bytes[pos++]; var charset = ['.notdef']; var 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'); } var end = pos; var raw = bytes.subarray(start, end); return new CFFCharset(false, format, charset, raw); }, parseEncoding: function CFFParser_parseEncoding(pos, properties, strings, charset) { var encoding = Object.create(null); var bytes = this.bytes; var predefined = false; var format, i, ii; var raw = null; function readSupplement() { var supplementsCount = bytes[pos++]; for (i = 0; i < supplementsCount; i++) { var code = bytes[pos++]; var sid = (bytes[pos++] << 8) + (bytes[pos++] & 0xff); encoding[code] = charset.indexOf(strings.get(sid)); } } if (pos === 0 || pos === 1) { predefined = true; format = pos; var baseEncoding = pos ? _encodings.ExpertEncoding : _encodings.StandardEncoding; for (i = 0, ii = charset.length; i < ii; i++) { var index = baseEncoding.indexOf(charset[i]); if (index !== -1) { encoding[index] = i; } } } else { var dataStart = pos; format = bytes[pos++]; switch (format & 0x7f) { case 0: var glyphsCount = bytes[pos++]; for (i = 1; i <= glyphsCount; i++) { encoding[bytes[pos++]] = i; } break; case 1: var rangesCount = bytes[pos++]; var gid = 1; for (i = 0; i < rangesCount; i++) { var start = bytes[pos++]; var left = bytes[pos++]; for (var j = start; j <= start + left; j++) { encoding[j] = gid++; } } break; default: throw new _util.FormatError("Unknown encoding format: ".concat(format, " in CFF")); } var dataEnd = pos; if (format & 0x80) { bytes[dataStart] &= 0x7f; readSupplement(); } raw = bytes.subarray(dataStart, dataEnd); } format = format & 0x7f; return new CFFEncoding(predefined, format, encoding, raw); }, parseFDSelect: function CFFParser_parseFDSelect(pos, length) { var bytes = this.bytes; var format = bytes[pos++]; var fdSelect = []; var i; switch (format) { case 0: for (i = 0; i < length; ++i) { var id = bytes[pos++]; fdSelect.push(id); } break; case 3: var rangesCount = bytes[pos++] << 8 | bytes[pos++]; for (i = 0; i < rangesCount; ++i) { var 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; } var fdIndex = bytes[pos++]; var next = bytes[pos] << 8 | bytes[pos + 1]; for (var j = first; j < next; ++j) { fdSelect.push(fdIndex); } } pos += 2; break; default: throw new _util.FormatError("parseFDSelect: Unknown format \"".concat(format, "\".")); } if (fdSelect.length !== length) { throw new _util.FormatError('parseFDSelect: Invalid font data.'); } return new CFFFDSelect(format, fdSelect); } }; return CFFParser; }(); exports.CFFParser = CFFParser; var CFF = function CFFClosure() { function CFF() { 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; } CFF.prototype = { duplicateFirstGlyph: function CFF_duplicateFirstGlyph() { if (this.charStrings.count >= 65535) { (0, _util.warn)('Not enough space in charstrings to duplicate first glyph.'); return; } var glyphZero = this.charStrings.get(0); this.charStrings.add(glyphZero); if (this.isCIDFont) { this.fdSelect.fdSelect.push(this.fdSelect.fdSelect[0]); } }, hasGlyphId: function CFF_hasGlyphID(id) { if (id < 0 || id >= this.charStrings.count) { return false; } var glyph = this.charStrings.get(id); return glyph.length > 0; } }; return CFF; }(); exports.CFF = CFF; var CFFHeader = function CFFHeaderClosure() { function CFFHeader(major, minor, hdrSize, offSize) { this.major = major; this.minor = minor; this.hdrSize = hdrSize; this.offSize = offSize; } return CFFHeader; }(); exports.CFFHeader = CFFHeader; var CFFStrings = function CFFStringsClosure() { function CFFStrings() { this.strings = []; } CFFStrings.prototype = { get: function CFFStrings_get(index) { if (index >= 0 && index <= 390) { return CFFStandardStrings[index]; } if (index - 391 <= this.strings.length) { return this.strings[index - 391]; } return CFFStandardStrings[0]; }, add: function CFFStrings_add(value) { this.strings.push(value); }, get count() { return this.strings.length; } }; return CFFStrings; }(); exports.CFFStrings = CFFStrings; var CFFIndex = function CFFIndexClosure() { function CFFIndex() { this.objects = []; this.length = 0; } CFFIndex.prototype = { add: function CFFIndex_add(data) { this.length += data.length; this.objects.push(data); }, set: function CFFIndex_set(index, data) { this.length += data.length - this.objects[index].length; this.objects[index] = data; }, get: function CFFIndex_get(index) { return this.objects[index]; }, get count() { return this.objects.length; } }; return CFFIndex; }(); exports.CFFIndex = CFFIndex; var CFFDict = function CFFDictClosure() { function CFFDict(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); } CFFDict.prototype = { setByKey: function CFFDict_setByKey(key, value) { if (!(key in this.keyToNameMap)) { return false; } var valueLength = value.length; if (valueLength === 0) { return true; } for (var i = 0; i < valueLength; i++) { if (isNaN(value[i])) { (0, _util.warn)('Invalid CFFDict value: "' + value + '" for key "' + key + '".'); return true; } } var type = this.types[key]; if (type === 'num' || type === 'sid' || type === 'offset') { value = value[0]; } this.values[key] = value; return true; }, setByName: function CFFDict_setByName(name, value) { if (!(name in this.nameToKeyMap)) { throw new _util.FormatError("Invalid dictionary name \"".concat(name, "\"")); } this.values[this.nameToKeyMap[name]] = value; }, hasName: function CFFDict_hasName(name) { return this.nameToKeyMap[name] in this.values; }, getByName: function CFFDict_getByName(name) { if (!(name in this.nameToKeyMap)) { throw new _util.FormatError("Invalid dictionary name ".concat(name, "\"")); } var key = this.nameToKeyMap[name]; if (!(key in this.values)) { return this.defaults[key]; } return this.values[key]; }, removeByName: function CFFDict_removeByName(name) { delete this.values[this.nameToKeyMap[name]]; } }; CFFDict.createTables = function CFFDict_createTables(layout) { var tables = { keyToNameMap: {}, nameToKeyMap: {}, defaults: {}, types: {}, opcodes: {}, order: [] }; for (var i = 0, ii = layout.length; i < ii; ++i) { var entry = layout[i]; var 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; }; return CFFDict; }(); var CFFTopDict = function CFFTopDictClosure() { var 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]]; var tables = null; function CFFTopDict(strings) { if (tables === null) { tables = CFFDict.createTables(layout); } CFFDict.call(this, tables, strings); this.privateDict = null; } CFFTopDict.prototype = Object.create(CFFDict.prototype); return CFFTopDict; }(); exports.CFFTopDict = CFFTopDict; var CFFPrivateDict = function CFFPrivateDictClosure() { var 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]]; var tables = null; function CFFPrivateDict(strings) { if (tables === null) { tables = CFFDict.createTables(layout); } CFFDict.call(this, tables, strings); this.subrsIndex = null; } CFFPrivateDict.prototype = Object.create(CFFDict.prototype); return CFFPrivateDict; }(); exports.CFFPrivateDict = CFFPrivateDict; var CFFCharsetPredefinedTypes = { ISO_ADOBE: 0, EXPERT: 1, EXPERT_SUBSET: 2 }; var CFFCharset = function CFFCharsetClosure() { function CFFCharset(predefined, format, charset, raw) { this.predefined = predefined; this.format = format; this.charset = charset; this.raw = raw; } return CFFCharset; }(); exports.CFFCharset = CFFCharset; var CFFEncoding = function CFFEncodingClosure() { function CFFEncoding(predefined, format, encoding, raw) { this.predefined = predefined; this.format = format; this.encoding = encoding; this.raw = raw; } return CFFEncoding; }(); var CFFFDSelect = function CFFFDSelectClosure() { function CFFFDSelect(format, fdSelect) { this.format = format; this.fdSelect = fdSelect; } CFFFDSelect.prototype = { getFDIndex: function CFFFDSelect_get(glyphIndex) { if (glyphIndex < 0 || glyphIndex >= this.fdSelect.length) { return -1; } return this.fdSelect[glyphIndex]; } }; return CFFFDSelect; }(); exports.CFFFDSelect = CFFFDSelect; var CFFOffsetTracker = function CFFOffsetTrackerClosure() { function CFFOffsetTracker() { this.offsets = Object.create(null); } CFFOffsetTracker.prototype = { isTracking: function CFFOffsetTracker_isTracking(key) { return key in this.offsets; }, track: function CFFOffsetTracker_track(key, location) { if (key in this.offsets) { throw new _util.FormatError("Already tracking location of ".concat(key)); } this.offsets[key] = location; }, offset: function CFFOffsetTracker_offset(value) { for (var key in this.offsets) { this.offsets[key] += value; } }, setEntryLocation: function CFFOffsetTracker_setEntryLocation(key, values, output) { if (!(key in this.offsets)) { throw new _util.FormatError("Not tracking location of ".concat(key)); } var data = output.data; var dataOffset = this.offsets[key]; var size = 5; for (var i = 0, ii = values.length; i < ii; ++i) { var offset0 = i * size + dataOffset; var offset1 = offset0 + 1; var offset2 = offset0 + 2; var offset3 = offset0 + 3; var 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'); } var 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; } } }; return CFFOffsetTracker; }(); var CFFCompiler = function CFFCompilerClosure() { function CFFCompiler(cff) { this.cff = cff; } CFFCompiler.prototype = { compile: function CFFCompiler_compile() { var cff = this.cff; var output = { data: [], length: 0, add: function CFFCompiler_add(data) { this.data = this.data.concat(data); this.length = this.data.length; } }; var header = this.compileHeader(cff.header); output.add(header); var nameIndex = this.compileNameIndex(cff.names); output.add(nameIndex); if (cff.isCIDFont) { if (cff.topDict.hasName('FontMatrix')) { var base = cff.topDict.getByName('FontMatrix'); cff.topDict.removeByName('FontMatrix'); for (var i = 0, ii = cff.fdArray.length; i < ii; i++) { var subDict = cff.fdArray[i]; var matrix = base.slice(0); if (subDict.hasName('FontMatrix')) { matrix = _util.Util.transform(matrix, subDict.getByName('FontMatrix')); } subDict.setByName('FontMatrix', matrix); } } } cff.topDict.setByName('charset', 0); var compiled = this.compileTopDicts([cff.topDict], output.length, cff.isCIDFont); output.add(compiled.output); var topDictTracker = compiled.trackers[0]; var stringIndex = this.compileStringIndex(cff.strings.strings); output.add(stringIndex); var 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 { var encoding = this.compileEncoding(cff.encoding); topDictTracker.setEntryLocation('Encoding', [output.length], output); output.add(encoding); } } var charset = this.compileCharset(cff.charset); topDictTracker.setEntryLocation('charset', [output.length], output); output.add(charset); var charStrings = this.compileCharStrings(cff.charStrings); topDictTracker.setEntryLocation('CharStrings', [output.length], output); output.add(charStrings); if (cff.isCIDFont) { topDictTracker.setEntryLocation('FDSelect', [output.length], output); var 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); var fontDictTrackers = compiled.trackers; this.compilePrivateDicts(cff.fdArray, fontDictTrackers, output); } this.compilePrivateDicts([cff.topDict], [topDictTracker], output); output.add([0]); return output.data; }, encodeNumber: function CFFCompiler_encodeNumber(value) { if (parseFloat(value) === parseInt(value, 10) && !isNaN(value)) { return this.encodeInteger(value); } return this.encodeFloat(value); }, encodeFloat: function CFFCompiler_encodeFloat(num) { var value = num.toString(); var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value); if (m) { var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length)); value = (Math.round(num * epsilon) / epsilon).toString(); } var nibbles = ''; var i, ii; for (i = 0, ii = value.length; i < ii; ++i) { var 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'; var out = [30]; for (i = 0, ii = nibbles.length; i < ii; i += 2) { out.push(parseInt(nibbles.substring(i, i + 2), 16)); } return out; }, encodeInteger: function CFFCompiler_encodeInteger(value) { var code; if (value >= -107 && value <= 107) { code = [value + 139]; } else if (value >= 108 && value <= 1131) { value = 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: function CFFCompiler_compileHeader(header) { return [header.major, header.minor, header.hdrSize, header.offSize]; }, compileNameIndex: function CFFCompiler_compileNameIndex(names) { var nameIndex = new CFFIndex(); for (var i = 0, ii = names.length; i < ii; ++i) { var name = names[i]; var length = Math.min(name.length, 127); var sanitizedName = new Array(length); for (var j = 0; j < length; j++) { var 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: function CFFCompiler_compileTopDicts(dicts, length, removeCidKeys) { var fontDictTrackers = []; var fdArrayIndex = new CFFIndex(); for (var i = 0, ii = dicts.length; i < ii; ++i) { var fontDict = dicts[i]; if (removeCidKeys) { fontDict.removeByName('CIDFontVersion'); fontDict.removeByName('CIDFontRevision'); fontDict.removeByName('CIDFontType'); fontDict.removeByName('CIDCount'); fontDict.removeByName('UIDBase'); } var fontDictTracker = new CFFOffsetTracker(); var 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: function CFFCompiler_compilePrivateDicts(dicts, trackers, output) { for (var i = 0, ii = dicts.length; i < ii; ++i) { var fontDict = dicts[i]; var privateDict = fontDict.privateDict; if (!privateDict || !fontDict.hasName('Private')) { throw new _util.FormatError('There must be a private dictionary.'); } var privateDictTracker = new CFFOffsetTracker(); var privateDictData = this.compileDict(privateDict, privateDictTracker); var 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')) { var subrs = this.compileIndex(privateDict.subrsIndex); privateDictTracker.setEntryLocation('Subrs', [privateDictData.length], output); output.add(subrs); } } }, compileDict: function CFFCompiler_compileDict(dict, offsetTracker) { var out = []; var order = dict.order; for (var i = 0; i < order.length; ++i) { var key = order[i]; if (!(key in dict.values)) { continue; } var values = dict.values[key]; var types = dict.types[key]; if (!Array.isArray(types)) { types = [types]; } if (!Array.isArray(values)) { values = [values]; } if (values.length === 0) { continue; } for (var j = 0, jj = types.length; j < jj; ++j) { var type = types[j]; var value = values[j]; switch (type) { case 'num': case 'sid': out = out.concat(this.encodeNumber(value)); break; case 'offset': var 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 (var 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 ".concat(type)); } } out = out.concat(dict.opcodes[key]); } return out; }, compileStringIndex: function CFFCompiler_compileStringIndex(strings) { var stringIndex = new CFFIndex(); for (var i = 0, ii = strings.length; i < ii; ++i) { stringIndex.add((0, _util.stringToBytes)(strings[i])); } return this.compileIndex(stringIndex); }, compileGlobalSubrIndex: function CFFCompiler_compileGlobalSubrIndex() { var globalSubrIndex = this.cff.globalSubrIndex; this.out.writeByteArray(this.compileIndex(globalSubrIndex)); }, compileCharStrings: function CFFCompiler_compileCharStrings(charStrings) { var charStringsIndex = new CFFIndex(); for (var i = 0; i < charStrings.count; i++) { var glyph = charStrings.get(i); if (glyph.length === 0) { charStringsIndex.add(new Uint8Array([0x8B, 0x0E])); continue; } charStringsIndex.add(glyph); } return this.compileIndex(charStringsIndex); }, compileCharset: function CFFCompiler_compileCharset(charset) { var length = 1 + (this.cff.charStrings.count - 1) * 2; var out = new Uint8Array(length); return this.compileTypedArray(out); }, compileEncoding: function CFFCompiler_compileEncoding(encoding) { return this.compileTypedArray(encoding.raw); }, compileFDSelect: function CFFCompiler_compileFDSelect(fdSelect) { var format = fdSelect.format; var 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: var start = 0; var lastFD = fdSelect.fdSelect[0]; var ranges = [format, 0, 0, start >> 8 & 0xFF, start & 0xFF, lastFD]; for (i = 1; i < fdSelect.fdSelect.length; i++) { var currentFD = fdSelect.fdSelect[i]; if (currentFD !== lastFD) { ranges.push(i >> 8 & 0xFF, i & 0xFF, currentFD); lastFD = currentFD; } } var 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: function CFFCompiler_compileTypedArray(data) { var out = []; for (var i = 0, ii = data.length; i < ii; ++i) { out[i] = data[i]; } return out; }, compileIndex: function CFFCompiler_compileIndex(index, trackers) { trackers = trackers || []; var objects = index.objects; var count = objects.length; if (count === 0) { return [0, 0, 0]; } var data = [count >> 8 & 0xFF, count & 0xff]; var lastOffset = 1, i; for (i = 0; i < count; ++i) { lastOffset += objects[i].length; } var offsetSize; if (lastOffset < 0x100) { offsetSize = 1; } else if (lastOffset < 0x10000) { offsetSize = 2; } else if (lastOffset < 0x1000000) { offsetSize = 3; } else { offsetSize = 4; } data.push(offsetSize); var 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 (var j = 0, jj = objects[i].length; j < jj; j++) { data.push(objects[i][j]); } } return data; } }; return CFFCompiler; }(); exports.CFFCompiler = CFFCompiler; /***/ }), /* 175 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.ExpertSubsetCharset = exports.ExpertCharset = exports.ISOAdobeCharset = void 0; var 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; var 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; var 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; /***/ }), /* 176 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getEncoding = getEncoding; exports.ExpertEncoding = exports.ZapfDingbatsEncoding = exports.SymbolSetEncoding = exports.MacRomanEncoding = exports.StandardEncoding = exports.WinAnsiEncoding = void 0; var 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; var 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', '', '', '', '']; var 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; var 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; var 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; var 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; var 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; } } /***/ }), /* 177 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var getLookupTableFactory = __w_extracthighlights_require__(6).getLookupTableFactory; var getGlyphsUnicode = getLookupTableFactory(function (t) { t['A'] = 0x0041; t['AE'] = 0x00C6; t['AEacute'] = 0x01FC; t['AEmacron'] = 0x01E2; t['AEsmall'] = 0xF7E6; t['Aacute'] = 0x00C1; t['Aacutesmall'] = 0xF7E1; t['Abreve'] = 0x0102; t['Abreveacute'] = 0x1EAE; t['Abrevecyrillic'] = 0x04D0; t['Abrevedotbelow'] = 0x1EB6; t['Abrevegrave'] = 0x1EB0; t['Abrevehookabove'] = 0x1EB2; t['Abrevetilde'] = 0x1EB4; t['Acaron'] = 0x01CD; t['Acircle'] = 0x24B6; t['Acircumflex'] = 0x00C2; t['Acircumflexacute'] = 0x1EA4; t['Acircumflexdotbelow'] = 0x1EAC; t['Acircumflexgrave'] = 0x1EA6; t['Acircumflexhookabove'] = 0x1EA8; t['Acircumflexsmall'] = 0xF7E2; t['Acircumflextilde'] = 0x1EAA; t['Acute'] = 0xF6C9; t['Acutesmall'] = 0xF7B4; t['Acyrillic'] = 0x0410; t['Adblgrave'] = 0x0200; t['Adieresis'] = 0x00C4; t['Adieresiscyrillic'] = 0x04D2; t['Adieresismacron'] = 0x01DE; t['Adieresissmall'] = 0xF7E4; t['Adotbelow'] = 0x1EA0; t['Adotmacron'] = 0x01E0; t['Agrave'] = 0x00C0; t['Agravesmall'] = 0xF7E0; t['Ahookabove'] = 0x1EA2; t['Aiecyrillic'] = 0x04D4; t['Ainvertedbreve'] = 0x0202; t['Alpha'] = 0x0391; t['Alphatonos'] = 0x0386; t['Amacron'] = 0x0100; t['Amonospace'] = 0xFF21; t['Aogonek'] = 0x0104; t['Aring'] = 0x00C5; t['Aringacute'] = 0x01FA; t['Aringbelow'] = 0x1E00; t['Aringsmall'] = 0xF7E5; t['Asmall'] = 0xF761; t['Atilde'] = 0x00C3; t['Atildesmall'] = 0xF7E3; t['Aybarmenian'] = 0x0531; t['B'] = 0x0042; t['Bcircle'] = 0x24B7; t['Bdotaccent'] = 0x1E02; t['Bdotbelow'] = 0x1E04; t['Becyrillic'] = 0x0411; t['Benarmenian'] = 0x0532; t['Beta'] = 0x0392; t['Bhook'] = 0x0181; t['Blinebelow'] = 0x1E06; t['Bmonospace'] = 0xFF22; t['Brevesmall'] = 0xF6F4; t['Bsmall'] = 0xF762; t['Btopbar'] = 0x0182; t['C'] = 0x0043; t['Caarmenian'] = 0x053E; t['Cacute'] = 0x0106; t['Caron'] = 0xF6CA; t['Caronsmall'] = 0xF6F5; t['Ccaron'] = 0x010C; t['Ccedilla'] = 0x00C7; t['Ccedillaacute'] = 0x1E08; t['Ccedillasmall'] = 0xF7E7; t['Ccircle'] = 0x24B8; t['Ccircumflex'] = 0x0108; t['Cdot'] = 0x010A; t['Cdotaccent'] = 0x010A; t['Cedillasmall'] = 0xF7B8; t['Chaarmenian'] = 0x0549; t['Cheabkhasiancyrillic'] = 0x04BC; t['Checyrillic'] = 0x0427; t['Chedescenderabkhasiancyrillic'] = 0x04BE; t['Chedescendercyrillic'] = 0x04B6; t['Chedieresiscyrillic'] = 0x04F4; t['Cheharmenian'] = 0x0543; t['Chekhakassiancyrillic'] = 0x04CB; t['Cheverticalstrokecyrillic'] = 0x04B8; t['Chi'] = 0x03A7; t['Chook'] = 0x0187; t['Circumflexsmall'] = 0xF6F6; t['Cmonospace'] = 0xFF23; t['Coarmenian'] = 0x0551; t['Csmall'] = 0xF763; t['D'] = 0x0044; t['DZ'] = 0x01F1; t['DZcaron'] = 0x01C4; t['Daarmenian'] = 0x0534; t['Dafrican'] = 0x0189; t['Dcaron'] = 0x010E; t['Dcedilla'] = 0x1E10; t['Dcircle'] = 0x24B9; t['Dcircumflexbelow'] = 0x1E12; t['Dcroat'] = 0x0110; t['Ddotaccent'] = 0x1E0A; t['Ddotbelow'] = 0x1E0C; t['Decyrillic'] = 0x0414; t['Deicoptic'] = 0x03EE; t['Delta'] = 0x2206; t['Deltagreek'] = 0x0394; t['Dhook'] = 0x018A; t['Dieresis'] = 0xF6CB; t['DieresisAcute'] = 0xF6CC; t['DieresisGrave'] = 0xF6CD; t['Dieresissmall'] = 0xF7A8; t['Digammagreek'] = 0x03DC; t['Djecyrillic'] = 0x0402; t['Dlinebelow'] = 0x1E0E; t['Dmonospace'] = 0xFF24; t['Dotaccentsmall'] = 0xF6F7; t['Dslash'] = 0x0110; t['Dsmall'] = 0xF764; t['Dtopbar'] = 0x018B; t['Dz'] = 0x01F2; t['Dzcaron'] = 0x01C5; t['Dzeabkhasiancyrillic'] = 0x04E0; t['Dzecyrillic'] = 0x0405; t['Dzhecyrillic'] = 0x040F; t['E'] = 0x0045; t['Eacute'] = 0x00C9; t['Eacutesmall'] = 0xF7E9; t['Ebreve'] = 0x0114; t['Ecaron'] = 0x011A; t['Ecedillabreve'] = 0x1E1C; t['Echarmenian'] = 0x0535; t['Ecircle'] = 0x24BA; t['Ecircumflex'] = 0x00CA; t['Ecircumflexacute'] = 0x1EBE; t['Ecircumflexbelow'] = 0x1E18; t['Ecircumflexdotbelow'] = 0x1EC6; t['Ecircumflexgrave'] = 0x1EC0; t['Ecircumflexhookabove'] = 0x1EC2; t['Ecircumflexsmall'] = 0xF7EA; t['Ecircumflextilde'] = 0x1EC4; t['Ecyrillic'] = 0x0404; t['Edblgrave'] = 0x0204; t['Edieresis'] = 0x00CB; t['Edieresissmall'] = 0xF7EB; t['Edot'] = 0x0116; t['Edotaccent'] = 0x0116; t['Edotbelow'] = 0x1EB8; t['Efcyrillic'] = 0x0424; t['Egrave'] = 0x00C8; t['Egravesmall'] = 0xF7E8; t['Eharmenian'] = 0x0537; t['Ehookabove'] = 0x1EBA; t['Eightroman'] = 0x2167; t['Einvertedbreve'] = 0x0206; t['Eiotifiedcyrillic'] = 0x0464; t['Elcyrillic'] = 0x041B; t['Elevenroman'] = 0x216A; t['Emacron'] = 0x0112; t['Emacronacute'] = 0x1E16; t['Emacrongrave'] = 0x1E14; t['Emcyrillic'] = 0x041C; t['Emonospace'] = 0xFF25; t['Encyrillic'] = 0x041D; t['Endescendercyrillic'] = 0x04A2; t['Eng'] = 0x014A; t['Enghecyrillic'] = 0x04A4; t['Enhookcyrillic'] = 0x04C7; t['Eogonek'] = 0x0118; t['Eopen'] = 0x0190; t['Epsilon'] = 0x0395; t['Epsilontonos'] = 0x0388; t['Ercyrillic'] = 0x0420; t['Ereversed'] = 0x018E; t['Ereversedcyrillic'] = 0x042D; t['Escyrillic'] = 0x0421; t['Esdescendercyrillic'] = 0x04AA; t['Esh'] = 0x01A9; t['Esmall'] = 0xF765; t['Eta'] = 0x0397; t['Etarmenian'] = 0x0538; t['Etatonos'] = 0x0389; t['Eth'] = 0x00D0; t['Ethsmall'] = 0xF7F0; t['Etilde'] = 0x1EBC; t['Etildebelow'] = 0x1E1A; t['Euro'] = 0x20AC; t['Ezh'] = 0x01B7; t['Ezhcaron'] = 0x01EE; t['Ezhreversed'] = 0x01B8; t['F'] = 0x0046; t['Fcircle'] = 0x24BB; t['Fdotaccent'] = 0x1E1E; t['Feharmenian'] = 0x0556; t['Feicoptic'] = 0x03E4; t['Fhook'] = 0x0191; t['Fitacyrillic'] = 0x0472; t['Fiveroman'] = 0x2164; t['Fmonospace'] = 0xFF26; t['Fourroman'] = 0x2163; t['Fsmall'] = 0xF766; t['G'] = 0x0047; t['GBsquare'] = 0x3387; t['Gacute'] = 0x01F4; t['Gamma'] = 0x0393; t['Gammaafrican'] = 0x0194; t['Gangiacoptic'] = 0x03EA; t['Gbreve'] = 0x011E; t['Gcaron'] = 0x01E6; t['Gcedilla'] = 0x0122; t['Gcircle'] = 0x24BC; t['Gcircumflex'] = 0x011C; t['Gcommaaccent'] = 0x0122; t['Gdot'] = 0x0120; t['Gdotaccent'] = 0x0120; t['Gecyrillic'] = 0x0413; t['Ghadarmenian'] = 0x0542; t['Ghemiddlehookcyrillic'] = 0x0494; t['Ghestrokecyrillic'] = 0x0492; t['Gheupturncyrillic'] = 0x0490; t['Ghook'] = 0x0193; t['Gimarmenian'] = 0x0533; t['Gjecyrillic'] = 0x0403; t['Gmacron'] = 0x1E20; t['Gmonospace'] = 0xFF27; t['Grave'] = 0xF6CE; t['Gravesmall'] = 0xF760; t['Gsmall'] = 0xF767; t['Gsmallhook'] = 0x029B; t['Gstroke'] = 0x01E4; t['H'] = 0x0048; t['H18533'] = 0x25CF; t['H18543'] = 0x25AA; t['H18551'] = 0x25AB; t['H22073'] = 0x25A1; t['HPsquare'] = 0x33CB; t['Haabkhasiancyrillic'] = 0x04A8; t['Hadescendercyrillic'] = 0x04B2; t['Hardsigncyrillic'] = 0x042A; t['Hbar'] = 0x0126; t['Hbrevebelow'] = 0x1E2A; t['Hcedilla'] = 0x1E28; t['Hcircle'] = 0x24BD; t['Hcircumflex'] = 0x0124; t['Hdieresis'] = 0x1E26; t['Hdotaccent'] = 0x1E22; t['Hdotbelow'] = 0x1E24; t['Hmonospace'] = 0xFF28; t['Hoarmenian'] = 0x0540; t['Horicoptic'] = 0x03E8; t['Hsmall'] = 0xF768; t['Hungarumlaut'] = 0xF6CF; t['Hungarumlautsmall'] = 0xF6F8; t['Hzsquare'] = 0x3390; t['I'] = 0x0049; t['IAcyrillic'] = 0x042F; t['IJ'] = 0x0132; t['IUcyrillic'] = 0x042E; t['Iacute'] = 0x00CD; t['Iacutesmall'] = 0xF7ED; t['Ibreve'] = 0x012C; t['Icaron'] = 0x01CF; t['Icircle'] = 0x24BE; t['Icircumflex'] = 0x00CE; t['Icircumflexsmall'] = 0xF7EE; t['Icyrillic'] = 0x0406; t['Idblgrave'] = 0x0208; t['Idieresis'] = 0x00CF; t['Idieresisacute'] = 0x1E2E; t['Idieresiscyrillic'] = 0x04E4; t['Idieresissmall'] = 0xF7EF; t['Idot'] = 0x0130; t['Idotaccent'] = 0x0130; t['Idotbelow'] = 0x1ECA; t['Iebrevecyrillic'] = 0x04D6; t['Iecyrillic'] = 0x0415; t['Ifraktur'] = 0x2111; t['Igrave'] = 0x00CC; t['Igravesmall'] = 0xF7EC; t['Ihookabove'] = 0x1EC8; t['Iicyrillic'] = 0x0418; t['Iinvertedbreve'] = 0x020A; t['Iishortcyrillic'] = 0x0419; t['Imacron'] = 0x012A; t['Imacroncyrillic'] = 0x04E2; t['Imonospace'] = 0xFF29; t['Iniarmenian'] = 0x053B; t['Iocyrillic'] = 0x0401; t['Iogonek'] = 0x012E; t['Iota'] = 0x0399; t['Iotaafrican'] = 0x0196; t['Iotadieresis'] = 0x03AA; t['Iotatonos'] = 0x038A; t['Ismall'] = 0xF769; t['Istroke'] = 0x0197; t['Itilde'] = 0x0128; t['Itildebelow'] = 0x1E2C; t['Izhitsacyrillic'] = 0x0474; t['Izhitsadblgravecyrillic'] = 0x0476; t['J'] = 0x004A; t['Jaarmenian'] = 0x0541; t['Jcircle'] = 0x24BF; t['Jcircumflex'] = 0x0134; t['Jecyrillic'] = 0x0408; t['Jheharmenian'] = 0x054B; t['Jmonospace'] = 0xFF2A; t['Jsmall'] = 0xF76A; t['K'] = 0x004B; t['KBsquare'] = 0x3385; t['KKsquare'] = 0x33CD; t['Kabashkircyrillic'] = 0x04A0; t['Kacute'] = 0x1E30; t['Kacyrillic'] = 0x041A; t['Kadescendercyrillic'] = 0x049A; t['Kahookcyrillic'] = 0x04C3; t['Kappa'] = 0x039A; t['Kastrokecyrillic'] = 0x049E; t['Kaverticalstrokecyrillic'] = 0x049C; t['Kcaron'] = 0x01E8; t['Kcedilla'] = 0x0136; t['Kcircle'] = 0x24C0; t['Kcommaaccent'] = 0x0136; t['Kdotbelow'] = 0x1E32; t['Keharmenian'] = 0x0554; t['Kenarmenian'] = 0x053F; t['Khacyrillic'] = 0x0425; t['Kheicoptic'] = 0x03E6; t['Khook'] = 0x0198; t['Kjecyrillic'] = 0x040C; t['Klinebelow'] = 0x1E34; t['Kmonospace'] = 0xFF2B; t['Koppacyrillic'] = 0x0480; t['Koppagreek'] = 0x03DE; t['Ksicyrillic'] = 0x046E; t['Ksmall'] = 0xF76B; t['L'] = 0x004C; t['LJ'] = 0x01C7; t['LL'] = 0xF6BF; t['Lacute'] = 0x0139; t['Lambda'] = 0x039B; t['Lcaron'] = 0x013D; t['Lcedilla'] = 0x013B; t['Lcircle'] = 0x24C1; t['Lcircumflexbelow'] = 0x1E3C; t['Lcommaaccent'] = 0x013B; t['Ldot'] = 0x013F; t['Ldotaccent'] = 0x013F; t['Ldotbelow'] = 0x1E36; t['Ldotbelowmacron'] = 0x1E38; t['Liwnarmenian'] = 0x053C; t['Lj'] = 0x01C8; t['Ljecyrillic'] = 0x0409; t['Llinebelow'] = 0x1E3A; t['Lmonospace'] = 0xFF2C; t['Lslash'] = 0x0141; t['Lslashsmall'] = 0xF6F9; t['Lsmall'] = 0xF76C; t['M'] = 0x004D; t['MBsquare'] = 0x3386; t['Macron'] = 0xF6D0; t['Macronsmall'] = 0xF7AF; t['Macute'] = 0x1E3E; t['Mcircle'] = 0x24C2; t['Mdotaccent'] = 0x1E40; t['Mdotbelow'] = 0x1E42; t['Menarmenian'] = 0x0544; t['Mmonospace'] = 0xFF2D; t['Msmall'] = 0xF76D; t['Mturned'] = 0x019C; t['Mu'] = 0x039C; t['N'] = 0x004E; t['NJ'] = 0x01CA; t['Nacute'] = 0x0143; t['Ncaron'] = 0x0147; t['Ncedilla'] = 0x0145; t['Ncircle'] = 0x24C3; t['Ncircumflexbelow'] = 0x1E4A; t['Ncommaaccent'] = 0x0145; t['Ndotaccent'] = 0x1E44; t['Ndotbelow'] = 0x1E46; t['Nhookleft'] = 0x019D; t['Nineroman'] = 0x2168; t['Nj'] = 0x01CB; t['Njecyrillic'] = 0x040A; t['Nlinebelow'] = 0x1E48; t['Nmonospace'] = 0xFF2E; t['Nowarmenian'] = 0x0546; t['Nsmall'] = 0xF76E; t['Ntilde'] = 0x00D1; t['Ntildesmall'] = 0xF7F1; t['Nu'] = 0x039D; t['O'] = 0x004F; t['OE'] = 0x0152; t['OEsmall'] = 0xF6FA; t['Oacute'] = 0x00D3; t['Oacutesmall'] = 0xF7F3; t['Obarredcyrillic'] = 0x04E8; t['Obarreddieresiscyrillic'] = 0x04EA; t['Obreve'] = 0x014E; t['Ocaron'] = 0x01D1; t['Ocenteredtilde'] = 0x019F; t['Ocircle'] = 0x24C4; t['Ocircumflex'] = 0x00D4; t['Ocircumflexacute'] = 0x1ED0; t['Ocircumflexdotbelow'] = 0x1ED8; t['Ocircumflexgrave'] = 0x1ED2; t['Ocircumflexhookabove'] = 0x1ED4; t['Ocircumflexsmall'] = 0xF7F4; t['Ocircumflextilde'] = 0x1ED6; t['Ocyrillic'] = 0x041E; t['Odblacute'] = 0x0150; t['Odblgrave'] = 0x020C; t['Odieresis'] = 0x00D6; t['Odieresiscyrillic'] = 0x04E6; t['Odieresissmall'] = 0xF7F6; t['Odotbelow'] = 0x1ECC; t['Ogoneksmall'] = 0xF6FB; t['Ograve'] = 0x00D2; t['Ogravesmall'] = 0xF7F2; t['Oharmenian'] = 0x0555; t['Ohm'] = 0x2126; t['Ohookabove'] = 0x1ECE; t['Ohorn'] = 0x01A0; t['Ohornacute'] = 0x1EDA; t['Ohorndotbelow'] = 0x1EE2; t['Ohorngrave'] = 0x1EDC; t['Ohornhookabove'] = 0x1EDE; t['Ohorntilde'] = 0x1EE0; t['Ohungarumlaut'] = 0x0150; t['Oi'] = 0x01A2; t['Oinvertedbreve'] = 0x020E; t['Omacron'] = 0x014C; t['Omacronacute'] = 0x1E52; t['Omacrongrave'] = 0x1E50; t['Omega'] = 0x2126; t['Omegacyrillic'] = 0x0460; t['Omegagreek'] = 0x03A9; t['Omegaroundcyrillic'] = 0x047A; t['Omegatitlocyrillic'] = 0x047C; t['Omegatonos'] = 0x038F; t['Omicron'] = 0x039F; t['Omicrontonos'] = 0x038C; t['Omonospace'] = 0xFF2F; t['Oneroman'] = 0x2160; t['Oogonek'] = 0x01EA; t['Oogonekmacron'] = 0x01EC; t['Oopen'] = 0x0186; t['Oslash'] = 0x00D8; t['Oslashacute'] = 0x01FE; t['Oslashsmall'] = 0xF7F8; t['Osmall'] = 0xF76F; t['Ostrokeacute'] = 0x01FE; t['Otcyrillic'] = 0x047E; t['Otilde'] = 0x00D5; t['Otildeacute'] = 0x1E4C; t['Otildedieresis'] = 0x1E4E; t['Otildesmall'] = 0xF7F5; t['P'] = 0x0050; t['Pacute'] = 0x1E54; t['Pcircle'] = 0x24C5; t['Pdotaccent'] = 0x1E56; t['Pecyrillic'] = 0x041F; t['Peharmenian'] = 0x054A; t['Pemiddlehookcyrillic'] = 0x04A6; t['Phi'] = 0x03A6; t['Phook'] = 0x01A4; t['Pi'] = 0x03A0; t['Piwrarmenian'] = 0x0553; t['Pmonospace'] = 0xFF30; t['Psi'] = 0x03A8; t['Psicyrillic'] = 0x0470; t['Psmall'] = 0xF770; t['Q'] = 0x0051; t['Qcircle'] = 0x24C6; t['Qmonospace'] = 0xFF31; t['Qsmall'] = 0xF771; t['R'] = 0x0052; t['Raarmenian'] = 0x054C; t['Racute'] = 0x0154; t['Rcaron'] = 0x0158; t['Rcedilla'] = 0x0156; t['Rcircle'] = 0x24C7; t['Rcommaaccent'] = 0x0156; t['Rdblgrave'] = 0x0210; t['Rdotaccent'] = 0x1E58; t['Rdotbelow'] = 0x1E5A; t['Rdotbelowmacron'] = 0x1E5C; t['Reharmenian'] = 0x0550; t['Rfraktur'] = 0x211C; t['Rho'] = 0x03A1; t['Ringsmall'] = 0xF6FC; t['Rinvertedbreve'] = 0x0212; t['Rlinebelow'] = 0x1E5E; t['Rmonospace'] = 0xFF32; t['Rsmall'] = 0xF772; t['Rsmallinverted'] = 0x0281; t['Rsmallinvertedsuperior'] = 0x02B6; t['S'] = 0x0053; t['SF010000'] = 0x250C; t['SF020000'] = 0x2514; t['SF030000'] = 0x2510; t['SF040000'] = 0x2518; t['SF050000'] = 0x253C; t['SF060000'] = 0x252C; t['SF070000'] = 0x2534; t['SF080000'] = 0x251C; t['SF090000'] = 0x2524; t['SF100000'] = 0x2500; t['SF110000'] = 0x2502; t['SF190000'] = 0x2561; t['SF200000'] = 0x2562; t['SF210000'] = 0x2556; t['SF220000'] = 0x2555; t['SF230000'] = 0x2563; t['SF240000'] = 0x2551; t['SF250000'] = 0x2557; t['SF260000'] = 0x255D; t['SF270000'] = 0x255C; t['SF280000'] = 0x255B; t['SF360000'] = 0x255E; t['SF370000'] = 0x255F; t['SF380000'] = 0x255A; t['SF390000'] = 0x2554; t['SF400000'] = 0x2569; t['SF410000'] = 0x2566; t['SF420000'] = 0x2560; t['SF430000'] = 0x2550; t['SF440000'] = 0x256C; t['SF450000'] = 0x2567; t['SF460000'] = 0x2568; t['SF470000'] = 0x2564; t['SF480000'] = 0x2565; t['SF490000'] = 0x2559; t['SF500000'] = 0x2558; t['SF510000'] = 0x2552; t['SF520000'] = 0x2553; t['SF530000'] = 0x256B; t['SF540000'] = 0x256A; t['Sacute'] = 0x015A; t['Sacutedotaccent'] = 0x1E64; t['Sampigreek'] = 0x03E0; t['Scaron'] = 0x0160; t['Scarondotaccent'] = 0x1E66; t['Scaronsmall'] = 0xF6FD; t['Scedilla'] = 0x015E; t['Schwa'] = 0x018F; t['Schwacyrillic'] = 0x04D8; t['Schwadieresiscyrillic'] = 0x04DA; t['Scircle'] = 0x24C8; t['Scircumflex'] = 0x015C; t['Scommaaccent'] = 0x0218; t['Sdotaccent'] = 0x1E60; t['Sdotbelow'] = 0x1E62; t['Sdotbelowdotaccent'] = 0x1E68; t['Seharmenian'] = 0x054D; t['Sevenroman'] = 0x2166; t['Shaarmenian'] = 0x0547; t['Shacyrillic'] = 0x0428; t['Shchacyrillic'] = 0x0429; t['Sheicoptic'] = 0x03E2; t['Shhacyrillic'] = 0x04BA; t['Shimacoptic'] = 0x03EC; t['Sigma'] = 0x03A3; t['Sixroman'] = 0x2165; t['Smonospace'] = 0xFF33; t['Softsigncyrillic'] = 0x042C; t['Ssmall'] = 0xF773; t['Stigmagreek'] = 0x03DA; t['T'] = 0x0054; t['Tau'] = 0x03A4; t['Tbar'] = 0x0166; t['Tcaron'] = 0x0164; t['Tcedilla'] = 0x0162; t['Tcircle'] = 0x24C9; t['Tcircumflexbelow'] = 0x1E70; t['Tcommaaccent'] = 0x0162; t['Tdotaccent'] = 0x1E6A; t['Tdotbelow'] = 0x1E6C; t['Tecyrillic'] = 0x0422; t['Tedescendercyrillic'] = 0x04AC; t['Tenroman'] = 0x2169; t['Tetsecyrillic'] = 0x04B4; t['Theta'] = 0x0398; t['Thook'] = 0x01AC; t['Thorn'] = 0x00DE; t['Thornsmall'] = 0xF7FE; t['Threeroman'] = 0x2162; t['Tildesmall'] = 0xF6FE; t['Tiwnarmenian'] = 0x054F; t['Tlinebelow'] = 0x1E6E; t['Tmonospace'] = 0xFF34; t['Toarmenian'] = 0x0539; t['Tonefive'] = 0x01BC; t['Tonesix'] = 0x0184; t['Tonetwo'] = 0x01A7; t['Tretroflexhook'] = 0x01AE; t['Tsecyrillic'] = 0x0426; t['Tshecyrillic'] = 0x040B; t['Tsmall'] = 0xF774; t['Twelveroman'] = 0x216B; t['Tworoman'] = 0x2161; t['U'] = 0x0055; t['Uacute'] = 0x00DA; t['Uacutesmall'] = 0xF7FA; t['Ubreve'] = 0x016C; t['Ucaron'] = 0x01D3; t['Ucircle'] = 0x24CA; t['Ucircumflex'] = 0x00DB; t['Ucircumflexbelow'] = 0x1E76; t['Ucircumflexsmall'] = 0xF7FB; t['Ucyrillic'] = 0x0423; t['Udblacute'] = 0x0170; t['Udblgrave'] = 0x0214; t['Udieresis'] = 0x00DC; t['Udieresisacute'] = 0x01D7; t['Udieresisbelow'] = 0x1E72; t['Udieresiscaron'] = 0x01D9; t['Udieresiscyrillic'] = 0x04F0; t['Udieresisgrave'] = 0x01DB; t['Udieresismacron'] = 0x01D5; t['Udieresissmall'] = 0xF7FC; t['Udotbelow'] = 0x1EE4; t['Ugrave'] = 0x00D9; t['Ugravesmall'] = 0xF7F9; t['Uhookabove'] = 0x1EE6; t['Uhorn'] = 0x01AF; t['Uhornacute'] = 0x1EE8; t['Uhorndotbelow'] = 0x1EF0; t['Uhorngrave'] = 0x1EEA; t['Uhornhookabove'] = 0x1EEC; t['Uhorntilde'] = 0x1EEE; t['Uhungarumlaut'] = 0x0170; t['Uhungarumlautcyrillic'] = 0x04F2; t['Uinvertedbreve'] = 0x0216; t['Ukcyrillic'] = 0x0478; t['Umacron'] = 0x016A; t['Umacroncyrillic'] = 0x04EE; t['Umacrondieresis'] = 0x1E7A; t['Umonospace'] = 0xFF35; t['Uogonek'] = 0x0172; t['Upsilon'] = 0x03A5; t['Upsilon1'] = 0x03D2; t['Upsilonacutehooksymbolgreek'] = 0x03D3; t['Upsilonafrican'] = 0x01B1; t['Upsilondieresis'] = 0x03AB; t['Upsilondieresishooksymbolgreek'] = 0x03D4; t['Upsilonhooksymbol'] = 0x03D2; t['Upsilontonos'] = 0x038E; t['Uring'] = 0x016E; t['Ushortcyrillic'] = 0x040E; t['Usmall'] = 0xF775; t['Ustraightcyrillic'] = 0x04AE; t['Ustraightstrokecyrillic'] = 0x04B0; t['Utilde'] = 0x0168; t['Utildeacute'] = 0x1E78; t['Utildebelow'] = 0x1E74; t['V'] = 0x0056; t['Vcircle'] = 0x24CB; t['Vdotbelow'] = 0x1E7E; t['Vecyrillic'] = 0x0412; t['Vewarmenian'] = 0x054E; t['Vhook'] = 0x01B2; t['Vmonospace'] = 0xFF36; t['Voarmenian'] = 0x0548; t['Vsmall'] = 0xF776; t['Vtilde'] = 0x1E7C; t['W'] = 0x0057; t['Wacute'] = 0x1E82; t['Wcircle'] = 0x24CC; t['Wcircumflex'] = 0x0174; t['Wdieresis'] = 0x1E84; t['Wdotaccent'] = 0x1E86; t['Wdotbelow'] = 0x1E88; t['Wgrave'] = 0x1E80; t['Wmonospace'] = 0xFF37; t['Wsmall'] = 0xF777; t['X'] = 0x0058; t['Xcircle'] = 0x24CD; t['Xdieresis'] = 0x1E8C; t['Xdotaccent'] = 0x1E8A; t['Xeharmenian'] = 0x053D; t['Xi'] = 0x039E; t['Xmonospace'] = 0xFF38; t['Xsmall'] = 0xF778; t['Y'] = 0x0059; t['Yacute'] = 0x00DD; t['Yacutesmall'] = 0xF7FD; t['Yatcyrillic'] = 0x0462; t['Ycircle'] = 0x24CE; t['Ycircumflex'] = 0x0176; t['Ydieresis'] = 0x0178; t['Ydieresissmall'] = 0xF7FF; t['Ydotaccent'] = 0x1E8E; t['Ydotbelow'] = 0x1EF4; t['Yericyrillic'] = 0x042B; t['Yerudieresiscyrillic'] = 0x04F8; t['Ygrave'] = 0x1EF2; t['Yhook'] = 0x01B3; t['Yhookabove'] = 0x1EF6; t['Yiarmenian'] = 0x0545; t['Yicyrillic'] = 0x0407; t['Yiwnarmenian'] = 0x0552; t['Ymonospace'] = 0xFF39; t['Ysmall'] = 0xF779; t['Ytilde'] = 0x1EF8; t['Yusbigcyrillic'] = 0x046A; t['Yusbigiotifiedcyrillic'] = 0x046C; t['Yuslittlecyrillic'] = 0x0466; t['Yuslittleiotifiedcyrillic'] = 0x0468; t['Z'] = 0x005A; t['Zaarmenian'] = 0x0536; t['Zacute'] = 0x0179; t['Zcaron'] = 0x017D; t['Zcaronsmall'] = 0xF6FF; t['Zcircle'] = 0x24CF; t['Zcircumflex'] = 0x1E90; t['Zdot'] = 0x017B; t['Zdotaccent'] = 0x017B; t['Zdotbelow'] = 0x1E92; t['Zecyrillic'] = 0x0417; t['Zedescendercyrillic'] = 0x0498; t['Zedieresiscyrillic'] = 0x04DE; t['Zeta'] = 0x0396; t['Zhearmenian'] = 0x053A; t['Zhebrevecyrillic'] = 0x04C1; t['Zhecyrillic'] = 0x0416; t['Zhedescendercyrillic'] = 0x0496; t['Zhedieresiscyrillic'] = 0x04DC; t['Zlinebelow'] = 0x1E94; t['Zmonospace'] = 0xFF3A; t['Zsmall'] = 0xF77A; t['Zstroke'] = 0x01B5; t['a'] = 0x0061; t['aabengali'] = 0x0986; t['aacute'] = 0x00E1; t['aadeva'] = 0x0906; t['aagujarati'] = 0x0A86; t['aagurmukhi'] = 0x0A06; t['aamatragurmukhi'] = 0x0A3E; t['aarusquare'] = 0x3303; t['aavowelsignbengali'] = 0x09BE; t['aavowelsigndeva'] = 0x093E; t['aavowelsigngujarati'] = 0x0ABE; t['abbreviationmarkarmenian'] = 0x055F; t['abbreviationsigndeva'] = 0x0970; t['abengali'] = 0x0985; t['abopomofo'] = 0x311A; t['abreve'] = 0x0103; t['abreveacute'] = 0x1EAF; t['abrevecyrillic'] = 0x04D1; t['abrevedotbelow'] = 0x1EB7; t['abrevegrave'] = 0x1EB1; t['abrevehookabove'] = 0x1EB3; t['abrevetilde'] = 0x1EB5; t['acaron'] = 0x01CE; t['acircle'] = 0x24D0; t['acircumflex'] = 0x00E2; t['acircumflexacute'] = 0x1EA5; t['acircumflexdotbelow'] = 0x1EAD; t['acircumflexgrave'] = 0x1EA7; t['acircumflexhookabove'] = 0x1EA9; t['acircumflextilde'] = 0x1EAB; t['acute'] = 0x00B4; t['acutebelowcmb'] = 0x0317; t['acutecmb'] = 0x0301; t['acutecomb'] = 0x0301; t['acutedeva'] = 0x0954; t['acutelowmod'] = 0x02CF; t['acutetonecmb'] = 0x0341; t['acyrillic'] = 0x0430; t['adblgrave'] = 0x0201; t['addakgurmukhi'] = 0x0A71; t['adeva'] = 0x0905; t['adieresis'] = 0x00E4; t['adieresiscyrillic'] = 0x04D3; t['adieresismacron'] = 0x01DF; t['adotbelow'] = 0x1EA1; t['adotmacron'] = 0x01E1; t['ae'] = 0x00E6; t['aeacute'] = 0x01FD; t['aekorean'] = 0x3150; t['aemacron'] = 0x01E3; t['afii00208'] = 0x2015; t['afii08941'] = 0x20A4; t['afii10017'] = 0x0410; t['afii10018'] = 0x0411; t['afii10019'] = 0x0412; t['afii10020'] = 0x0413; t['afii10021'] = 0x0414; t['afii10022'] = 0x0415; t['afii10023'] = 0x0401; t['afii10024'] = 0x0416; t['afii10025'] = 0x0417; t['afii10026'] = 0x0418; t['afii10027'] = 0x0419; t['afii10028'] = 0x041A; t['afii10029'] = 0x041B; t['afii10030'] = 0x041C; t['afii10031'] = 0x041D; t['afii10032'] = 0x041E; t['afii10033'] = 0x041F; t['afii10034'] = 0x0420; t['afii10035'] = 0x0421; t['afii10036'] = 0x0422; t['afii10037'] = 0x0423; t['afii10038'] = 0x0424; t['afii10039'] = 0x0425; t['afii10040'] = 0x0426; t['afii10041'] = 0x0427; t['afii10042'] = 0x0428; t['afii10043'] = 0x0429; t['afii10044'] = 0x042A; t['afii10045'] = 0x042B; t['afii10046'] = 0x042C; t['afii10047'] = 0x042D; t['afii10048'] = 0x042E; t['afii10049'] = 0x042F; t['afii10050'] = 0x0490; t['afii10051'] = 0x0402; t['afii10052'] = 0x0403; t['afii10053'] = 0x0404; t['afii10054'] = 0x0405; t['afii10055'] = 0x0406; t['afii10056'] = 0x0407; t['afii10057'] = 0x0408; t['afii10058'] = 0x0409; t['afii10059'] = 0x040A; t['afii10060'] = 0x040B; t['afii10061'] = 0x040C; t['afii10062'] = 0x040E; t['afii10063'] = 0xF6C4; t['afii10064'] = 0xF6C5; t['afii10065'] = 0x0430; t['afii10066'] = 0x0431; t['afii10067'] = 0x0432; t['afii10068'] = 0x0433; t['afii10069'] = 0x0434; t['afii10070'] = 0x0435; t['afii10071'] = 0x0451; t['afii10072'] = 0x0436; t['afii10073'] = 0x0437; t['afii10074'] = 0x0438; t['afii10075'] = 0x0439; t['afii10076'] = 0x043A; t['afii10077'] = 0x043B; t['afii10078'] = 0x043C; t['afii10079'] = 0x043D; t['afii10080'] = 0x043E; t['afii10081'] = 0x043F; t['afii10082'] = 0x0440; t['afii10083'] = 0x0441; t['afii10084'] = 0x0442; t['afii10085'] = 0x0443; t['afii10086'] = 0x0444; t['afii10087'] = 0x0445; t['afii10088'] = 0x0446; t['afii10089'] = 0x0447; t['afii10090'] = 0x0448; t['afii10091'] = 0x0449; t['afii10092'] = 0x044A; t['afii10093'] = 0x044B; t['afii10094'] = 0x044C; t['afii10095'] = 0x044D; t['afii10096'] = 0x044E; t['afii10097'] = 0x044F; t['afii10098'] = 0x0491; t['afii10099'] = 0x0452; t['afii10100'] = 0x0453; t['afii10101'] = 0x0454; t['afii10102'] = 0x0455; t['afii10103'] = 0x0456; t['afii10104'] = 0x0457; t['afii10105'] = 0x0458; t['afii10106'] = 0x0459; t['afii10107'] = 0x045A; t['afii10108'] = 0x045B; t['afii10109'] = 0x045C; t['afii10110'] = 0x045E; t['afii10145'] = 0x040F; t['afii10146'] = 0x0462; t['afii10147'] = 0x0472; t['afii10148'] = 0x0474; t['afii10192'] = 0xF6C6; t['afii10193'] = 0x045F; t['afii10194'] = 0x0463; t['afii10195'] = 0x0473; t['afii10196'] = 0x0475; t['afii10831'] = 0xF6C7; t['afii10832'] = 0xF6C8; t['afii10846'] = 0x04D9; t['afii299'] = 0x200E; t['afii300'] = 0x200F; t['afii301'] = 0x200D; t['afii57381'] = 0x066A; t['afii57388'] = 0x060C; t['afii57392'] = 0x0660; t['afii57393'] = 0x0661; t['afii57394'] = 0x0662; t['afii57395'] = 0x0663; t['afii57396'] = 0x0664; t['afii57397'] = 0x0665; t['afii57398'] = 0x0666; t['afii57399'] = 0x0667; t['afii57400'] = 0x0668; t['afii57401'] = 0x0669; t['afii57403'] = 0x061B; t['afii57407'] = 0x061F; t['afii57409'] = 0x0621; t['afii57410'] = 0x0622; t['afii57411'] = 0x0623; t['afii57412'] = 0x0624; t['afii57413'] = 0x0625; t['afii57414'] = 0x0626; t['afii57415'] = 0x0627; t['afii57416'] = 0x0628; t['afii57417'] = 0x0629; t['afii57418'] = 0x062A; t['afii57419'] = 0x062B; t['afii57420'] = 0x062C; t['afii57421'] = 0x062D; t['afii57422'] = 0x062E; t['afii57423'] = 0x062F; t['afii57424'] = 0x0630; t['afii57425'] = 0x0631; t['afii57426'] = 0x0632; t['afii57427'] = 0x0633; t['afii57428'] = 0x0634; t['afii57429'] = 0x0635; t['afii57430'] = 0x0636; t['afii57431'] = 0x0637; t['afii57432'] = 0x0638; t['afii57433'] = 0x0639; t['afii57434'] = 0x063A; t['afii57440'] = 0x0640; t['afii57441'] = 0x0641; t['afii57442'] = 0x0642; t['afii57443'] = 0x0643; t['afii57444'] = 0x0644; t['afii57445'] = 0x0645; t['afii57446'] = 0x0646; t['afii57448'] = 0x0648; t['afii57449'] = 0x0649; t['afii57450'] = 0x064A; t['afii57451'] = 0x064B; t['afii57452'] = 0x064C; t['afii57453'] = 0x064D; t['afii57454'] = 0x064E; t['afii57455'] = 0x064F; t['afii57456'] = 0x0650; t['afii57457'] = 0x0651; t['afii57458'] = 0x0652; t['afii57470'] = 0x0647; t['afii57505'] = 0x06A4; t['afii57506'] = 0x067E; t['afii57507'] = 0x0686; t['afii57508'] = 0x0698; t['afii57509'] = 0x06AF; t['afii57511'] = 0x0679; t['afii57512'] = 0x0688; t['afii57513'] = 0x0691; t['afii57514'] = 0x06BA; t['afii57519'] = 0x06D2; t['afii57534'] = 0x06D5; t['afii57636'] = 0x20AA; t['afii57645'] = 0x05BE; t['afii57658'] = 0x05C3; t['afii57664'] = 0x05D0; t['afii57665'] = 0x05D1; t['afii57666'] = 0x05D2; t['afii57667'] = 0x05D3; t['afii57668'] = 0x05D4; t['afii57669'] = 0x05D5; t['afii57670'] = 0x05D6; t['afii57671'] = 0x05D7; t['afii57672'] = 0x05D8; t['afii57673'] = 0x05D9; t['afii57674'] = 0x05DA; t['afii57675'] = 0x05DB; t['afii57676'] = 0x05DC; t['afii57677'] = 0x05DD; t['afii57678'] = 0x05DE; t['afii57679'] = 0x05DF; t['afii57680'] = 0x05E0; t['afii57681'] = 0x05E1; t['afii57682'] = 0x05E2; t['afii57683'] = 0x05E3; t['afii57684'] = 0x05E4; t['afii57685'] = 0x05E5; t['afii57686'] = 0x05E6; t['afii57687'] = 0x05E7; t['afii57688'] = 0x05E8; t['afii57689'] = 0x05E9; t['afii57690'] = 0x05EA; t['afii57694'] = 0xFB2A; t['afii57695'] = 0xFB2B; t['afii57700'] = 0xFB4B; t['afii57705'] = 0xFB1F; t['afii57716'] = 0x05F0; t['afii57717'] = 0x05F1; t['afii57718'] = 0x05F2; t['afii57723'] = 0xFB35; t['afii57793'] = 0x05B4; t['afii57794'] = 0x05B5; t['afii57795'] = 0x05B6; t['afii57796'] = 0x05BB; t['afii57797'] = 0x05B8; t['afii57798'] = 0x05B7; t['afii57799'] = 0x05B0; t['afii57800'] = 0x05B2; t['afii57801'] = 0x05B1; t['afii57802'] = 0x05B3; t['afii57803'] = 0x05C2; t['afii57804'] = 0x05C1; t['afii57806'] = 0x05B9; t['afii57807'] = 0x05BC; t['afii57839'] = 0x05BD; t['afii57841'] = 0x05BF; t['afii57842'] = 0x05C0; t['afii57929'] = 0x02BC; t['afii61248'] = 0x2105; t['afii61289'] = 0x2113; t['afii61352'] = 0x2116; t['afii61573'] = 0x202C; t['afii61574'] = 0x202D; t['afii61575'] = 0x202E; t['afii61664'] = 0x200C; t['afii63167'] = 0x066D; t['afii64937'] = 0x02BD; t['agrave'] = 0x00E0; t['agujarati'] = 0x0A85; t['agurmukhi'] = 0x0A05; t['ahiragana'] = 0x3042; t['ahookabove'] = 0x1EA3; t['aibengali'] = 0x0990; t['aibopomofo'] = 0x311E; t['aideva'] = 0x0910; t['aiecyrillic'] = 0x04D5; t['aigujarati'] = 0x0A90; t['aigurmukhi'] = 0x0A10; t['aimatragurmukhi'] = 0x0A48; t['ainarabic'] = 0x0639; t['ainfinalarabic'] = 0xFECA; t['aininitialarabic'] = 0xFECB; t['ainmedialarabic'] = 0xFECC; t['ainvertedbreve'] = 0x0203; t['aivowelsignbengali'] = 0x09C8; t['aivowelsigndeva'] = 0x0948; t['aivowelsigngujarati'] = 0x0AC8; t['akatakana'] = 0x30A2; t['akatakanahalfwidth'] = 0xFF71; t['akorean'] = 0x314F; t['alef'] = 0x05D0; t['alefarabic'] = 0x0627; t['alefdageshhebrew'] = 0xFB30; t['aleffinalarabic'] = 0xFE8E; t['alefhamzaabovearabic'] = 0x0623; t['alefhamzaabovefinalarabic'] = 0xFE84; t['alefhamzabelowarabic'] = 0x0625; t['alefhamzabelowfinalarabic'] = 0xFE88; t['alefhebrew'] = 0x05D0; t['aleflamedhebrew'] = 0xFB4F; t['alefmaddaabovearabic'] = 0x0622; t['alefmaddaabovefinalarabic'] = 0xFE82; t['alefmaksuraarabic'] = 0x0649; t['alefmaksurafinalarabic'] = 0xFEF0; t['alefmaksurainitialarabic'] = 0xFEF3; t['alefmaksuramedialarabic'] = 0xFEF4; t['alefpatahhebrew'] = 0xFB2E; t['alefqamatshebrew'] = 0xFB2F; t['aleph'] = 0x2135; t['allequal'] = 0x224C; t['alpha'] = 0x03B1; t['alphatonos'] = 0x03AC; t['amacron'] = 0x0101; t['amonospace'] = 0xFF41; t['ampersand'] = 0x0026; t['ampersandmonospace'] = 0xFF06; t['ampersandsmall'] = 0xF726; t['amsquare'] = 0x33C2; t['anbopomofo'] = 0x3122; t['angbopomofo'] = 0x3124; t['angbracketleft'] = 0x3008; t['angbracketright'] = 0x3009; t['angkhankhuthai'] = 0x0E5A; t['angle'] = 0x2220; t['anglebracketleft'] = 0x3008; t['anglebracketleftvertical'] = 0xFE3F; t['anglebracketright'] = 0x3009; t['anglebracketrightvertical'] = 0xFE40; t['angleleft'] = 0x2329; t['angleright'] = 0x232A; t['angstrom'] = 0x212B; t['anoteleia'] = 0x0387; t['anudattadeva'] = 0x0952; t['anusvarabengali'] = 0x0982; t['anusvaradeva'] = 0x0902; t['anusvaragujarati'] = 0x0A82; t['aogonek'] = 0x0105; t['apaatosquare'] = 0x3300; t['aparen'] = 0x249C; t['apostrophearmenian'] = 0x055A; t['apostrophemod'] = 0x02BC; t['apple'] = 0xF8FF; t['approaches'] = 0x2250; t['approxequal'] = 0x2248; t['approxequalorimage'] = 0x2252; t['approximatelyequal'] = 0x2245; t['araeaekorean'] = 0x318E; t['araeakorean'] = 0x318D; t['arc'] = 0x2312; t['arighthalfring'] = 0x1E9A; t['aring'] = 0x00E5; t['aringacute'] = 0x01FB; t['aringbelow'] = 0x1E01; t['arrowboth'] = 0x2194; t['arrowdashdown'] = 0x21E3; t['arrowdashleft'] = 0x21E0; t['arrowdashright'] = 0x21E2; t['arrowdashup'] = 0x21E1; t['arrowdblboth'] = 0x21D4; t['arrowdbldown'] = 0x21D3; t['arrowdblleft'] = 0x21D0; t['arrowdblright'] = 0x21D2; t['arrowdblup'] = 0x21D1; t['arrowdown'] = 0x2193; t['arrowdownleft'] = 0x2199; t['arrowdownright'] = 0x2198; t['arrowdownwhite'] = 0x21E9; t['arrowheaddownmod'] = 0x02C5; t['arrowheadleftmod'] = 0x02C2; t['arrowheadrightmod'] = 0x02C3; t['arrowheadupmod'] = 0x02C4; t['arrowhorizex'] = 0xF8E7; t['arrowleft'] = 0x2190; t['arrowleftdbl'] = 0x21D0; t['arrowleftdblstroke'] = 0x21CD; t['arrowleftoverright'] = 0x21C6; t['arrowleftwhite'] = 0x21E6; t['arrowright'] = 0x2192; t['arrowrightdblstroke'] = 0x21CF; t['arrowrightheavy'] = 0x279E; t['arrowrightoverleft'] = 0x21C4; t['arrowrightwhite'] = 0x21E8; t['arrowtableft'] = 0x21E4; t['arrowtabright'] = 0x21E5; t['arrowup'] = 0x2191; t['arrowupdn'] = 0x2195; t['arrowupdnbse'] = 0x21A8; t['arrowupdownbase'] = 0x21A8; t['arrowupleft'] = 0x2196; t['arrowupleftofdown'] = 0x21C5; t['arrowupright'] = 0x2197; t['arrowupwhite'] = 0x21E7; t['arrowvertex'] = 0xF8E6; t['asciicircum'] = 0x005E; t['asciicircummonospace'] = 0xFF3E; t['asciitilde'] = 0x007E; t['asciitildemonospace'] = 0xFF5E; t['ascript'] = 0x0251; t['ascriptturned'] = 0x0252; t['asmallhiragana'] = 0x3041; t['asmallkatakana'] = 0x30A1; t['asmallkatakanahalfwidth'] = 0xFF67; t['asterisk'] = 0x002A; t['asteriskaltonearabic'] = 0x066D; t['asteriskarabic'] = 0x066D; t['asteriskmath'] = 0x2217; t['asteriskmonospace'] = 0xFF0A; t['asterisksmall'] = 0xFE61; t['asterism'] = 0x2042; t['asuperior'] = 0xF6E9; t['asymptoticallyequal'] = 0x2243; t['at'] = 0x0040; t['atilde'] = 0x00E3; t['atmonospace'] = 0xFF20; t['atsmall'] = 0xFE6B; t['aturned'] = 0x0250; t['aubengali'] = 0x0994; t['aubopomofo'] = 0x3120; t['audeva'] = 0x0914; t['augujarati'] = 0x0A94; t['augurmukhi'] = 0x0A14; t['aulengthmarkbengali'] = 0x09D7; t['aumatragurmukhi'] = 0x0A4C; t['auvowelsignbengali'] = 0x09CC; t['auvowelsigndeva'] = 0x094C; t['auvowelsigngujarati'] = 0x0ACC; t['avagrahadeva'] = 0x093D; t['aybarmenian'] = 0x0561; t['ayin'] = 0x05E2; t['ayinaltonehebrew'] = 0xFB20; t['ayinhebrew'] = 0x05E2; t['b'] = 0x0062; t['babengali'] = 0x09AC; t['backslash'] = 0x005C; t['backslashmonospace'] = 0xFF3C; t['badeva'] = 0x092C; t['bagujarati'] = 0x0AAC; t['bagurmukhi'] = 0x0A2C; t['bahiragana'] = 0x3070; t['bahtthai'] = 0x0E3F; t['bakatakana'] = 0x30D0; t['bar'] = 0x007C; t['barmonospace'] = 0xFF5C; t['bbopomofo'] = 0x3105; t['bcircle'] = 0x24D1; t['bdotaccent'] = 0x1E03; t['bdotbelow'] = 0x1E05; t['beamedsixteenthnotes'] = 0x266C; t['because'] = 0x2235; t['becyrillic'] = 0x0431; t['beharabic'] = 0x0628; t['behfinalarabic'] = 0xFE90; t['behinitialarabic'] = 0xFE91; t['behiragana'] = 0x3079; t['behmedialarabic'] = 0xFE92; t['behmeeminitialarabic'] = 0xFC9F; t['behmeemisolatedarabic'] = 0xFC08; t['behnoonfinalarabic'] = 0xFC6D; t['bekatakana'] = 0x30D9; t['benarmenian'] = 0x0562; t['bet'] = 0x05D1; t['beta'] = 0x03B2; t['betasymbolgreek'] = 0x03D0; t['betdagesh'] = 0xFB31; t['betdageshhebrew'] = 0xFB31; t['bethebrew'] = 0x05D1; t['betrafehebrew'] = 0xFB4C; t['bhabengali'] = 0x09AD; t['bhadeva'] = 0x092D; t['bhagujarati'] = 0x0AAD; t['bhagurmukhi'] = 0x0A2D; t['bhook'] = 0x0253; t['bihiragana'] = 0x3073; t['bikatakana'] = 0x30D3; t['bilabialclick'] = 0x0298; t['bindigurmukhi'] = 0x0A02; t['birusquare'] = 0x3331; t['blackcircle'] = 0x25CF; t['blackdiamond'] = 0x25C6; t['blackdownpointingtriangle'] = 0x25BC; t['blackleftpointingpointer'] = 0x25C4; t['blackleftpointingtriangle'] = 0x25C0; t['blacklenticularbracketleft'] = 0x3010; t['blacklenticularbracketleftvertical'] = 0xFE3B; t['blacklenticularbracketright'] = 0x3011; t['blacklenticularbracketrightvertical'] = 0xFE3C; t['blacklowerlefttriangle'] = 0x25E3; t['blacklowerrighttriangle'] = 0x25E2; t['blackrectangle'] = 0x25AC; t['blackrightpointingpointer'] = 0x25BA; t['blackrightpointingtriangle'] = 0x25B6; t['blacksmallsquare'] = 0x25AA; t['blacksmilingface'] = 0x263B; t['blacksquare'] = 0x25A0; t['blackstar'] = 0x2605; t['blackupperlefttriangle'] = 0x25E4; t['blackupperrighttriangle'] = 0x25E5; t['blackuppointingsmalltriangle'] = 0x25B4; t['blackuppointingtriangle'] = 0x25B2; t['blank'] = 0x2423; t['blinebelow'] = 0x1E07; t['block'] = 0x2588; t['bmonospace'] = 0xFF42; t['bobaimaithai'] = 0x0E1A; t['bohiragana'] = 0x307C; t['bokatakana'] = 0x30DC; t['bparen'] = 0x249D; t['bqsquare'] = 0x33C3; t['braceex'] = 0xF8F4; t['braceleft'] = 0x007B; t['braceleftbt'] = 0xF8F3; t['braceleftmid'] = 0xF8F2; t['braceleftmonospace'] = 0xFF5B; t['braceleftsmall'] = 0xFE5B; t['bracelefttp'] = 0xF8F1; t['braceleftvertical'] = 0xFE37; t['braceright'] = 0x007D; t['bracerightbt'] = 0xF8FE; t['bracerightmid'] = 0xF8FD; t['bracerightmonospace'] = 0xFF5D; t['bracerightsmall'] = 0xFE5C; t['bracerighttp'] = 0xF8FC; t['bracerightvertical'] = 0xFE38; t['bracketleft'] = 0x005B; t['bracketleftbt'] = 0xF8F0; t['bracketleftex'] = 0xF8EF; t['bracketleftmonospace'] = 0xFF3B; t['bracketlefttp'] = 0xF8EE; t['bracketright'] = 0x005D; t['bracketrightbt'] = 0xF8FB; t['bracketrightex'] = 0xF8FA; t['bracketrightmonospace'] = 0xFF3D; t['bracketrighttp'] = 0xF8F9; t['breve'] = 0x02D8; t['brevebelowcmb'] = 0x032E; t['brevecmb'] = 0x0306; t['breveinvertedbelowcmb'] = 0x032F; t['breveinvertedcmb'] = 0x0311; t['breveinverteddoublecmb'] = 0x0361; t['bridgebelowcmb'] = 0x032A; t['bridgeinvertedbelowcmb'] = 0x033A; t['brokenbar'] = 0x00A6; t['bstroke'] = 0x0180; t['bsuperior'] = 0xF6EA; t['btopbar'] = 0x0183; t['buhiragana'] = 0x3076; t['bukatakana'] = 0x30D6; t['bullet'] = 0x2022; t['bulletinverse'] = 0x25D8; t['bulletoperator'] = 0x2219; t['bullseye'] = 0x25CE; t['c'] = 0x0063; t['caarmenian'] = 0x056E; t['cabengali'] = 0x099A; t['cacute'] = 0x0107; t['cadeva'] = 0x091A; t['cagujarati'] = 0x0A9A; t['cagurmukhi'] = 0x0A1A; t['calsquare'] = 0x3388; t['candrabindubengali'] = 0x0981; t['candrabinducmb'] = 0x0310; t['candrabindudeva'] = 0x0901; t['candrabindugujarati'] = 0x0A81; t['capslock'] = 0x21EA; t['careof'] = 0x2105; t['caron'] = 0x02C7; t['caronbelowcmb'] = 0x032C; t['caroncmb'] = 0x030C; t['carriagereturn'] = 0x21B5; t['cbopomofo'] = 0x3118; t['ccaron'] = 0x010D; t['ccedilla'] = 0x00E7; t['ccedillaacute'] = 0x1E09; t['ccircle'] = 0x24D2; t['ccircumflex'] = 0x0109; t['ccurl'] = 0x0255; t['cdot'] = 0x010B; t['cdotaccent'] = 0x010B; t['cdsquare'] = 0x33C5; t['cedilla'] = 0x00B8; t['cedillacmb'] = 0x0327; t['cent'] = 0x00A2; t['centigrade'] = 0x2103; t['centinferior'] = 0xF6DF; t['centmonospace'] = 0xFFE0; t['centoldstyle'] = 0xF7A2; t['centsuperior'] = 0xF6E0; t['chaarmenian'] = 0x0579; t['chabengali'] = 0x099B; t['chadeva'] = 0x091B; t['chagujarati'] = 0x0A9B; t['chagurmukhi'] = 0x0A1B; t['chbopomofo'] = 0x3114; t['cheabkhasiancyrillic'] = 0x04BD; t['checkmark'] = 0x2713; t['checyrillic'] = 0x0447; t['chedescenderabkhasiancyrillic'] = 0x04BF; t['chedescendercyrillic'] = 0x04B7; t['chedieresiscyrillic'] = 0x04F5; t['cheharmenian'] = 0x0573; t['chekhakassiancyrillic'] = 0x04CC; t['cheverticalstrokecyrillic'] = 0x04B9; t['chi'] = 0x03C7; t['chieuchacirclekorean'] = 0x3277; t['chieuchaparenkorean'] = 0x3217; t['chieuchcirclekorean'] = 0x3269; t['chieuchkorean'] = 0x314A; t['chieuchparenkorean'] = 0x3209; t['chochangthai'] = 0x0E0A; t['chochanthai'] = 0x0E08; t['chochingthai'] = 0x0E09; t['chochoethai'] = 0x0E0C; t['chook'] = 0x0188; t['cieucacirclekorean'] = 0x3276; t['cieucaparenkorean'] = 0x3216; t['cieuccirclekorean'] = 0x3268; t['cieuckorean'] = 0x3148; t['cieucparenkorean'] = 0x3208; t['cieucuparenkorean'] = 0x321C; t['circle'] = 0x25CB; t['circlecopyrt'] = 0x00A9; t['circlemultiply'] = 0x2297; t['circleot'] = 0x2299; t['circleplus'] = 0x2295; t['circlepostalmark'] = 0x3036; t['circlewithlefthalfblack'] = 0x25D0; t['circlewithrighthalfblack'] = 0x25D1; t['circumflex'] = 0x02C6; t['circumflexbelowcmb'] = 0x032D; t['circumflexcmb'] = 0x0302; t['clear'] = 0x2327; t['clickalveolar'] = 0x01C2; t['clickdental'] = 0x01C0; t['clicklateral'] = 0x01C1; t['clickretroflex'] = 0x01C3; t['club'] = 0x2663; t['clubsuitblack'] = 0x2663; t['clubsuitwhite'] = 0x2667; t['cmcubedsquare'] = 0x33A4; t['cmonospace'] = 0xFF43; t['cmsquaredsquare'] = 0x33A0; t['coarmenian'] = 0x0581; t['colon'] = 0x003A; t['colonmonetary'] = 0x20A1; t['colonmonospace'] = 0xFF1A; t['colonsign'] = 0x20A1; t['colonsmall'] = 0xFE55; t['colontriangularhalfmod'] = 0x02D1; t['colontriangularmod'] = 0x02D0; t['comma'] = 0x002C; t['commaabovecmb'] = 0x0313; t['commaaboverightcmb'] = 0x0315; t['commaaccent'] = 0xF6C3; t['commaarabic'] = 0x060C; t['commaarmenian'] = 0x055D; t['commainferior'] = 0xF6E1; t['commamonospace'] = 0xFF0C; t['commareversedabovecmb'] = 0x0314; t['commareversedmod'] = 0x02BD; t['commasmall'] = 0xFE50; t['commasuperior'] = 0xF6E2; t['commaturnedabovecmb'] = 0x0312; t['commaturnedmod'] = 0x02BB; t['compass'] = 0x263C; t['congruent'] = 0x2245; t['contourintegral'] = 0x222E; t['control'] = 0x2303; t['controlACK'] = 0x0006; t['controlBEL'] = 0x0007; t['controlBS'] = 0x0008; t['controlCAN'] = 0x0018; t['controlCR'] = 0x000D; t['controlDC1'] = 0x0011; t['controlDC2'] = 0x0012; t['controlDC3'] = 0x0013; t['controlDC4'] = 0x0014; t['controlDEL'] = 0x007F; t['controlDLE'] = 0x0010; t['controlEM'] = 0x0019; t['controlENQ'] = 0x0005; t['controlEOT'] = 0x0004; t['controlESC'] = 0x001B; t['controlETB'] = 0x0017; t['controlETX'] = 0x0003; t['controlFF'] = 0x000C; t['controlFS'] = 0x001C; t['controlGS'] = 0x001D; t['controlHT'] = 0x0009; t['controlLF'] = 0x000A; t['controlNAK'] = 0x0015; t['controlNULL'] = 0x0000; t['controlRS'] = 0x001E; t['controlSI'] = 0x000F; t['controlSO'] = 0x000E; t['controlSOT'] = 0x0002; t['controlSTX'] = 0x0001; t['controlSUB'] = 0x001A; t['controlSYN'] = 0x0016; t['controlUS'] = 0x001F; t['controlVT'] = 0x000B; t['copyright'] = 0x00A9; t['copyrightsans'] = 0xF8E9; t['copyrightserif'] = 0xF6D9; t['cornerbracketleft'] = 0x300C; t['cornerbracketlefthalfwidth'] = 0xFF62; t['cornerbracketleftvertical'] = 0xFE41; t['cornerbracketright'] = 0x300D; t['cornerbracketrighthalfwidth'] = 0xFF63; t['cornerbracketrightvertical'] = 0xFE42; t['corporationsquare'] = 0x337F; t['cosquare'] = 0x33C7; t['coverkgsquare'] = 0x33C6; t['cparen'] = 0x249E; t['cruzeiro'] = 0x20A2; t['cstretched'] = 0x0297; t['curlyand'] = 0x22CF; t['curlyor'] = 0x22CE; t['currency'] = 0x00A4; t['cyrBreve'] = 0xF6D1; t['cyrFlex'] = 0xF6D2; t['cyrbreve'] = 0xF6D4; t['cyrflex'] = 0xF6D5; t['d'] = 0x0064; t['daarmenian'] = 0x0564; t['dabengali'] = 0x09A6; t['dadarabic'] = 0x0636; t['dadeva'] = 0x0926; t['dadfinalarabic'] = 0xFEBE; t['dadinitialarabic'] = 0xFEBF; t['dadmedialarabic'] = 0xFEC0; t['dagesh'] = 0x05BC; t['dageshhebrew'] = 0x05BC; t['dagger'] = 0x2020; t['daggerdbl'] = 0x2021; t['dagujarati'] = 0x0AA6; t['dagurmukhi'] = 0x0A26; t['dahiragana'] = 0x3060; t['dakatakana'] = 0x30C0; t['dalarabic'] = 0x062F; t['dalet'] = 0x05D3; t['daletdagesh'] = 0xFB33; t['daletdageshhebrew'] = 0xFB33; t['dalethebrew'] = 0x05D3; t['dalfinalarabic'] = 0xFEAA; t['dammaarabic'] = 0x064F; t['dammalowarabic'] = 0x064F; t['dammatanaltonearabic'] = 0x064C; t['dammatanarabic'] = 0x064C; t['danda'] = 0x0964; t['dargahebrew'] = 0x05A7; t['dargalefthebrew'] = 0x05A7; t['dasiapneumatacyrilliccmb'] = 0x0485; t['dblGrave'] = 0xF6D3; t['dblanglebracketleft'] = 0x300A; t['dblanglebracketleftvertical'] = 0xFE3D; t['dblanglebracketright'] = 0x300B; t['dblanglebracketrightvertical'] = 0xFE3E; t['dblarchinvertedbelowcmb'] = 0x032B; t['dblarrowleft'] = 0x21D4; t['dblarrowright'] = 0x21D2; t['dbldanda'] = 0x0965; t['dblgrave'] = 0xF6D6; t['dblgravecmb'] = 0x030F; t['dblintegral'] = 0x222C; t['dbllowline'] = 0x2017; t['dbllowlinecmb'] = 0x0333; t['dbloverlinecmb'] = 0x033F; t['dblprimemod'] = 0x02BA; t['dblverticalbar'] = 0x2016; t['dblverticallineabovecmb'] = 0x030E; t['dbopomofo'] = 0x3109; t['dbsquare'] = 0x33C8; t['dcaron'] = 0x010F; t['dcedilla'] = 0x1E11; t['dcircle'] = 0x24D3; t['dcircumflexbelow'] = 0x1E13; t['dcroat'] = 0x0111; t['ddabengali'] = 0x09A1; t['ddadeva'] = 0x0921; t['ddagujarati'] = 0x0AA1; t['ddagurmukhi'] = 0x0A21; t['ddalarabic'] = 0x0688; t['ddalfinalarabic'] = 0xFB89; t['dddhadeva'] = 0x095C; t['ddhabengali'] = 0x09A2; t['ddhadeva'] = 0x0922; t['ddhagujarati'] = 0x0AA2; t['ddhagurmukhi'] = 0x0A22; t['ddotaccent'] = 0x1E0B; t['ddotbelow'] = 0x1E0D; t['decimalseparatorarabic'] = 0x066B; t['decimalseparatorpersian'] = 0x066B; t['decyrillic'] = 0x0434; t['degree'] = 0x00B0; t['dehihebrew'] = 0x05AD; t['dehiragana'] = 0x3067; t['deicoptic'] = 0x03EF; t['dekatakana'] = 0x30C7; t['deleteleft'] = 0x232B; t['deleteright'] = 0x2326; t['delta'] = 0x03B4; t['deltaturned'] = 0x018D; t['denominatorminusonenumeratorbengali'] = 0x09F8; t['dezh'] = 0x02A4; t['dhabengali'] = 0x09A7; t['dhadeva'] = 0x0927; t['dhagujarati'] = 0x0AA7; t['dhagurmukhi'] = 0x0A27; t['dhook'] = 0x0257; t['dialytikatonos'] = 0x0385; t['dialytikatonoscmb'] = 0x0344; t['diamond'] = 0x2666; t['diamondsuitwhite'] = 0x2662; t['dieresis'] = 0x00A8; t['dieresisacute'] = 0xF6D7; t['dieresisbelowcmb'] = 0x0324; t['dieresiscmb'] = 0x0308; t['dieresisgrave'] = 0xF6D8; t['dieresistonos'] = 0x0385; t['dihiragana'] = 0x3062; t['dikatakana'] = 0x30C2; t['dittomark'] = 0x3003; t['divide'] = 0x00F7; t['divides'] = 0x2223; t['divisionslash'] = 0x2215; t['djecyrillic'] = 0x0452; t['dkshade'] = 0x2593; t['dlinebelow'] = 0x1E0F; t['dlsquare'] = 0x3397; t['dmacron'] = 0x0111; t['dmonospace'] = 0xFF44; t['dnblock'] = 0x2584; t['dochadathai'] = 0x0E0E; t['dodekthai'] = 0x0E14; t['dohiragana'] = 0x3069; t['dokatakana'] = 0x30C9; t['dollar'] = 0x0024; t['dollarinferior'] = 0xF6E3; t['dollarmonospace'] = 0xFF04; t['dollaroldstyle'] = 0xF724; t['dollarsmall'] = 0xFE69; t['dollarsuperior'] = 0xF6E4; t['dong'] = 0x20AB; t['dorusquare'] = 0x3326; t['dotaccent'] = 0x02D9; t['dotaccentcmb'] = 0x0307; t['dotbelowcmb'] = 0x0323; t['dotbelowcomb'] = 0x0323; t['dotkatakana'] = 0x30FB; t['dotlessi'] = 0x0131; t['dotlessj'] = 0xF6BE; t['dotlessjstrokehook'] = 0x0284; t['dotmath'] = 0x22C5; t['dottedcircle'] = 0x25CC; t['doubleyodpatah'] = 0xFB1F; t['doubleyodpatahhebrew'] = 0xFB1F; t['downtackbelowcmb'] = 0x031E; t['downtackmod'] = 0x02D5; t['dparen'] = 0x249F; t['dsuperior'] = 0xF6EB; t['dtail'] = 0x0256; t['dtopbar'] = 0x018C; t['duhiragana'] = 0x3065; t['dukatakana'] = 0x30C5; t['dz'] = 0x01F3; t['dzaltone'] = 0x02A3; t['dzcaron'] = 0x01C6; t['dzcurl'] = 0x02A5; t['dzeabkhasiancyrillic'] = 0x04E1; t['dzecyrillic'] = 0x0455; t['dzhecyrillic'] = 0x045F; t['e'] = 0x0065; t['eacute'] = 0x00E9; t['earth'] = 0x2641; t['ebengali'] = 0x098F; t['ebopomofo'] = 0x311C; t['ebreve'] = 0x0115; t['ecandradeva'] = 0x090D; t['ecandragujarati'] = 0x0A8D; t['ecandravowelsigndeva'] = 0x0945; t['ecandravowelsigngujarati'] = 0x0AC5; t['ecaron'] = 0x011B; t['ecedillabreve'] = 0x1E1D; t['echarmenian'] = 0x0565; t['echyiwnarmenian'] = 0x0587; t['ecircle'] = 0x24D4; t['ecircumflex'] = 0x00EA; t['ecircumflexacute'] = 0x1EBF; t['ecircumflexbelow'] = 0x1E19; t['ecircumflexdotbelow'] = 0x1EC7; t['ecircumflexgrave'] = 0x1EC1; t['ecircumflexhookabove'] = 0x1EC3; t['ecircumflextilde'] = 0x1EC5; t['ecyrillic'] = 0x0454; t['edblgrave'] = 0x0205; t['edeva'] = 0x090F; t['edieresis'] = 0x00EB; t['edot'] = 0x0117; t['edotaccent'] = 0x0117; t['edotbelow'] = 0x1EB9; t['eegurmukhi'] = 0x0A0F; t['eematragurmukhi'] = 0x0A47; t['efcyrillic'] = 0x0444; t['egrave'] = 0x00E8; t['egujarati'] = 0x0A8F; t['eharmenian'] = 0x0567; t['ehbopomofo'] = 0x311D; t['ehiragana'] = 0x3048; t['ehookabove'] = 0x1EBB; t['eibopomofo'] = 0x311F; t['eight'] = 0x0038; t['eightarabic'] = 0x0668; t['eightbengali'] = 0x09EE; t['eightcircle'] = 0x2467; t['eightcircleinversesansserif'] = 0x2791; t['eightdeva'] = 0x096E; t['eighteencircle'] = 0x2471; t['eighteenparen'] = 0x2485; t['eighteenperiod'] = 0x2499; t['eightgujarati'] = 0x0AEE; t['eightgurmukhi'] = 0x0A6E; t['eighthackarabic'] = 0x0668; t['eighthangzhou'] = 0x3028; t['eighthnotebeamed'] = 0x266B; t['eightideographicparen'] = 0x3227; t['eightinferior'] = 0x2088; t['eightmonospace'] = 0xFF18; t['eightoldstyle'] = 0xF738; t['eightparen'] = 0x247B; t['eightperiod'] = 0x248F; t['eightpersian'] = 0x06F8; t['eightroman'] = 0x2177; t['eightsuperior'] = 0x2078; t['eightthai'] = 0x0E58; t['einvertedbreve'] = 0x0207; t['eiotifiedcyrillic'] = 0x0465; t['ekatakana'] = 0x30A8; t['ekatakanahalfwidth'] = 0xFF74; t['ekonkargurmukhi'] = 0x0A74; t['ekorean'] = 0x3154; t['elcyrillic'] = 0x043B; t['element'] = 0x2208; t['elevencircle'] = 0x246A; t['elevenparen'] = 0x247E; t['elevenperiod'] = 0x2492; t['elevenroman'] = 0x217A; t['ellipsis'] = 0x2026; t['ellipsisvertical'] = 0x22EE; t['emacron'] = 0x0113; t['emacronacute'] = 0x1E17; t['emacrongrave'] = 0x1E15; t['emcyrillic'] = 0x043C; t['emdash'] = 0x2014; t['emdashvertical'] = 0xFE31; t['emonospace'] = 0xFF45; t['emphasismarkarmenian'] = 0x055B; t['emptyset'] = 0x2205; t['enbopomofo'] = 0x3123; t['encyrillic'] = 0x043D; t['endash'] = 0x2013; t['endashvertical'] = 0xFE32; t['endescendercyrillic'] = 0x04A3; t['eng'] = 0x014B; t['engbopomofo'] = 0x3125; t['enghecyrillic'] = 0x04A5; t['enhookcyrillic'] = 0x04C8; t['enspace'] = 0x2002; t['eogonek'] = 0x0119; t['eokorean'] = 0x3153; t['eopen'] = 0x025B; t['eopenclosed'] = 0x029A; t['eopenreversed'] = 0x025C; t['eopenreversedclosed'] = 0x025E; t['eopenreversedhook'] = 0x025D; t['eparen'] = 0x24A0; t['epsilon'] = 0x03B5; t['epsilontonos'] = 0x03AD; t['equal'] = 0x003D; t['equalmonospace'] = 0xFF1D; t['equalsmall'] = 0xFE66; t['equalsuperior'] = 0x207C; t['equivalence'] = 0x2261; t['erbopomofo'] = 0x3126; t['ercyrillic'] = 0x0440; t['ereversed'] = 0x0258; t['ereversedcyrillic'] = 0x044D; t['escyrillic'] = 0x0441; t['esdescendercyrillic'] = 0x04AB; t['esh'] = 0x0283; t['eshcurl'] = 0x0286; t['eshortdeva'] = 0x090E; t['eshortvowelsigndeva'] = 0x0946; t['eshreversedloop'] = 0x01AA; t['eshsquatreversed'] = 0x0285; t['esmallhiragana'] = 0x3047; t['esmallkatakana'] = 0x30A7; t['esmallkatakanahalfwidth'] = 0xFF6A; t['estimated'] = 0x212E; t['esuperior'] = 0xF6EC; t['eta'] = 0x03B7; t['etarmenian'] = 0x0568; t['etatonos'] = 0x03AE; t['eth'] = 0x00F0; t['etilde'] = 0x1EBD; t['etildebelow'] = 0x1E1B; t['etnahtafoukhhebrew'] = 0x0591; t['etnahtafoukhlefthebrew'] = 0x0591; t['etnahtahebrew'] = 0x0591; t['etnahtalefthebrew'] = 0x0591; t['eturned'] = 0x01DD; t['eukorean'] = 0x3161; t['euro'] = 0x20AC; t['evowelsignbengali'] = 0x09C7; t['evowelsigndeva'] = 0x0947; t['evowelsigngujarati'] = 0x0AC7; t['exclam'] = 0x0021; t['exclamarmenian'] = 0x055C; t['exclamdbl'] = 0x203C; t['exclamdown'] = 0x00A1; t['exclamdownsmall'] = 0xF7A1; t['exclammonospace'] = 0xFF01; t['exclamsmall'] = 0xF721; t['existential'] = 0x2203; t['ezh'] = 0x0292; t['ezhcaron'] = 0x01EF; t['ezhcurl'] = 0x0293; t['ezhreversed'] = 0x01B9; t['ezhtail'] = 0x01BA; t['f'] = 0x0066; t['fadeva'] = 0x095E; t['fagurmukhi'] = 0x0A5E; t['fahrenheit'] = 0x2109; t['fathaarabic'] = 0x064E; t['fathalowarabic'] = 0x064E; t['fathatanarabic'] = 0x064B; t['fbopomofo'] = 0x3108; t['fcircle'] = 0x24D5; t['fdotaccent'] = 0x1E1F; t['feharabic'] = 0x0641; t['feharmenian'] = 0x0586; t['fehfinalarabic'] = 0xFED2; t['fehinitialarabic'] = 0xFED3; t['fehmedialarabic'] = 0xFED4; t['feicoptic'] = 0x03E5; t['female'] = 0x2640; t['ff'] = 0xFB00; t['ffi'] = 0xFB03; t['ffl'] = 0xFB04; t['fi'] = 0xFB01; t['fifteencircle'] = 0x246E; t['fifteenparen'] = 0x2482; t['fifteenperiod'] = 0x2496; t['figuredash'] = 0x2012; t['filledbox'] = 0x25A0; t['filledrect'] = 0x25AC; t['finalkaf'] = 0x05DA; t['finalkafdagesh'] = 0xFB3A; t['finalkafdageshhebrew'] = 0xFB3A; t['finalkafhebrew'] = 0x05DA; t['finalmem'] = 0x05DD; t['finalmemhebrew'] = 0x05DD; t['finalnun'] = 0x05DF; t['finalnunhebrew'] = 0x05DF; t['finalpe'] = 0x05E3; t['finalpehebrew'] = 0x05E3; t['finaltsadi'] = 0x05E5; t['finaltsadihebrew'] = 0x05E5; t['firsttonechinese'] = 0x02C9; t['fisheye'] = 0x25C9; t['fitacyrillic'] = 0x0473; t['five'] = 0x0035; t['fivearabic'] = 0x0665; t['fivebengali'] = 0x09EB; t['fivecircle'] = 0x2464; t['fivecircleinversesansserif'] = 0x278E; t['fivedeva'] = 0x096B; t['fiveeighths'] = 0x215D; t['fivegujarati'] = 0x0AEB; t['fivegurmukhi'] = 0x0A6B; t['fivehackarabic'] = 0x0665; t['fivehangzhou'] = 0x3025; t['fiveideographicparen'] = 0x3224; t['fiveinferior'] = 0x2085; t['fivemonospace'] = 0xFF15; t['fiveoldstyle'] = 0xF735; t['fiveparen'] = 0x2478; t['fiveperiod'] = 0x248C; t['fivepersian'] = 0x06F5; t['fiveroman'] = 0x2174; t['fivesuperior'] = 0x2075; t['fivethai'] = 0x0E55; t['fl'] = 0xFB02; t['florin'] = 0x0192; t['fmonospace'] = 0xFF46; t['fmsquare'] = 0x3399; t['fofanthai'] = 0x0E1F; t['fofathai'] = 0x0E1D; t['fongmanthai'] = 0x0E4F; t['forall'] = 0x2200; t['four'] = 0x0034; t['fourarabic'] = 0x0664; t['fourbengali'] = 0x09EA; t['fourcircle'] = 0x2463; t['fourcircleinversesansserif'] = 0x278D; t['fourdeva'] = 0x096A; t['fourgujarati'] = 0x0AEA; t['fourgurmukhi'] = 0x0A6A; t['fourhackarabic'] = 0x0664; t['fourhangzhou'] = 0x3024; t['fourideographicparen'] = 0x3223; t['fourinferior'] = 0x2084; t['fourmonospace'] = 0xFF14; t['fournumeratorbengali'] = 0x09F7; t['fouroldstyle'] = 0xF734; t['fourparen'] = 0x2477; t['fourperiod'] = 0x248B; t['fourpersian'] = 0x06F4; t['fourroman'] = 0x2173; t['foursuperior'] = 0x2074; t['fourteencircle'] = 0x246D; t['fourteenparen'] = 0x2481; t['fourteenperiod'] = 0x2495; t['fourthai'] = 0x0E54; t['fourthtonechinese'] = 0x02CB; t['fparen'] = 0x24A1; t['fraction'] = 0x2044; t['franc'] = 0x20A3; t['g'] = 0x0067; t['gabengali'] = 0x0997; t['gacute'] = 0x01F5; t['gadeva'] = 0x0917; t['gafarabic'] = 0x06AF; t['gaffinalarabic'] = 0xFB93; t['gafinitialarabic'] = 0xFB94; t['gafmedialarabic'] = 0xFB95; t['gagujarati'] = 0x0A97; t['gagurmukhi'] = 0x0A17; t['gahiragana'] = 0x304C; t['gakatakana'] = 0x30AC; t['gamma'] = 0x03B3; t['gammalatinsmall'] = 0x0263; t['gammasuperior'] = 0x02E0; t['gangiacoptic'] = 0x03EB; t['gbopomofo'] = 0x310D; t['gbreve'] = 0x011F; t['gcaron'] = 0x01E7; t['gcedilla'] = 0x0123; t['gcircle'] = 0x24D6; t['gcircumflex'] = 0x011D; t['gcommaaccent'] = 0x0123; t['gdot'] = 0x0121; t['gdotaccent'] = 0x0121; t['gecyrillic'] = 0x0433; t['gehiragana'] = 0x3052; t['gekatakana'] = 0x30B2; t['geometricallyequal'] = 0x2251; t['gereshaccenthebrew'] = 0x059C; t['gereshhebrew'] = 0x05F3; t['gereshmuqdamhebrew'] = 0x059D; t['germandbls'] = 0x00DF; t['gershayimaccenthebrew'] = 0x059E; t['gershayimhebrew'] = 0x05F4; t['getamark'] = 0x3013; t['ghabengali'] = 0x0998; t['ghadarmenian'] = 0x0572; t['ghadeva'] = 0x0918; t['ghagujarati'] = 0x0A98; t['ghagurmukhi'] = 0x0A18; t['ghainarabic'] = 0x063A; t['ghainfinalarabic'] = 0xFECE; t['ghaininitialarabic'] = 0xFECF; t['ghainmedialarabic'] = 0xFED0; t['ghemiddlehookcyrillic'] = 0x0495; t['ghestrokecyrillic'] = 0x0493; t['gheupturncyrillic'] = 0x0491; t['ghhadeva'] = 0x095A; t['ghhagurmukhi'] = 0x0A5A; t['ghook'] = 0x0260; t['ghzsquare'] = 0x3393; t['gihiragana'] = 0x304E; t['gikatakana'] = 0x30AE; t['gimarmenian'] = 0x0563; t['gimel'] = 0x05D2; t['gimeldagesh'] = 0xFB32; t['gimeldageshhebrew'] = 0xFB32; t['gimelhebrew'] = 0x05D2; t['gjecyrillic'] = 0x0453; t['glottalinvertedstroke'] = 0x01BE; t['glottalstop'] = 0x0294; t['glottalstopinverted'] = 0x0296; t['glottalstopmod'] = 0x02C0; t['glottalstopreversed'] = 0x0295; t['glottalstopreversedmod'] = 0x02C1; t['glottalstopreversedsuperior'] = 0x02E4; t['glottalstopstroke'] = 0x02A1; t['glottalstopstrokereversed'] = 0x02A2; t['gmacron'] = 0x1E21; t['gmonospace'] = 0xFF47; t['gohiragana'] = 0x3054; t['gokatakana'] = 0x30B4; t['gparen'] = 0x24A2; t['gpasquare'] = 0x33AC; t['gradient'] = 0x2207; t['grave'] = 0x0060; t['gravebelowcmb'] = 0x0316; t['gravecmb'] = 0x0300; t['gravecomb'] = 0x0300; t['gravedeva'] = 0x0953; t['gravelowmod'] = 0x02CE; t['gravemonospace'] = 0xFF40; t['gravetonecmb'] = 0x0340; t['greater'] = 0x003E; t['greaterequal'] = 0x2265; t['greaterequalorless'] = 0x22DB; t['greatermonospace'] = 0xFF1E; t['greaterorequivalent'] = 0x2273; t['greaterorless'] = 0x2277; t['greateroverequal'] = 0x2267; t['greatersmall'] = 0xFE65; t['gscript'] = 0x0261; t['gstroke'] = 0x01E5; t['guhiragana'] = 0x3050; t['guillemotleft'] = 0x00AB; t['guillemotright'] = 0x00BB; t['guilsinglleft'] = 0x2039; t['guilsinglright'] = 0x203A; t['gukatakana'] = 0x30B0; t['guramusquare'] = 0x3318; t['gysquare'] = 0x33C9; t['h'] = 0x0068; t['haabkhasiancyrillic'] = 0x04A9; t['haaltonearabic'] = 0x06C1; t['habengali'] = 0x09B9; t['hadescendercyrillic'] = 0x04B3; t['hadeva'] = 0x0939; t['hagujarati'] = 0x0AB9; t['hagurmukhi'] = 0x0A39; t['haharabic'] = 0x062D; t['hahfinalarabic'] = 0xFEA2; t['hahinitialarabic'] = 0xFEA3; t['hahiragana'] = 0x306F; t['hahmedialarabic'] = 0xFEA4; t['haitusquare'] = 0x332A; t['hakatakana'] = 0x30CF; t['hakatakanahalfwidth'] = 0xFF8A; t['halantgurmukhi'] = 0x0A4D; t['hamzaarabic'] = 0x0621; t['hamzalowarabic'] = 0x0621; t['hangulfiller'] = 0x3164; t['hardsigncyrillic'] = 0x044A; t['harpoonleftbarbup'] = 0x21BC; t['harpoonrightbarbup'] = 0x21C0; t['hasquare'] = 0x33CA; t['hatafpatah'] = 0x05B2; t['hatafpatah16'] = 0x05B2; t['hatafpatah23'] = 0x05B2; t['hatafpatah2f'] = 0x05B2; t['hatafpatahhebrew'] = 0x05B2; t['hatafpatahnarrowhebrew'] = 0x05B2; t['hatafpatahquarterhebrew'] = 0x05B2; t['hatafpatahwidehebrew'] = 0x05B2; t['hatafqamats'] = 0x05B3; t['hatafqamats1b'] = 0x05B3; t['hatafqamats28'] = 0x05B3; t['hatafqamats34'] = 0x05B3; t['hatafqamatshebrew'] = 0x05B3; t['hatafqamatsnarrowhebrew'] = 0x05B3; t['hatafqamatsquarterhebrew'] = 0x05B3; t['hatafqamatswidehebrew'] = 0x05B3; t['hatafsegol'] = 0x05B1; t['hatafsegol17'] = 0x05B1; t['hatafsegol24'] = 0x05B1; t['hatafsegol30'] = 0x05B1; t['hatafsegolhebrew'] = 0x05B1; t['hatafsegolnarrowhebrew'] = 0x05B1; t['hatafsegolquarterhebrew'] = 0x05B1; t['hatafsegolwidehebrew'] = 0x05B1; t['hbar'] = 0x0127; t['hbopomofo'] = 0x310F; t['hbrevebelow'] = 0x1E2B; t['hcedilla'] = 0x1E29; t['hcircle'] = 0x24D7; t['hcircumflex'] = 0x0125; t['hdieresis'] = 0x1E27; t['hdotaccent'] = 0x1E23; t['hdotbelow'] = 0x1E25; t['he'] = 0x05D4; t['heart'] = 0x2665; t['heartsuitblack'] = 0x2665; t['heartsuitwhite'] = 0x2661; t['hedagesh'] = 0xFB34; t['hedageshhebrew'] = 0xFB34; t['hehaltonearabic'] = 0x06C1; t['heharabic'] = 0x0647; t['hehebrew'] = 0x05D4; t['hehfinalaltonearabic'] = 0xFBA7; t['hehfinalalttwoarabic'] = 0xFEEA; t['hehfinalarabic'] = 0xFEEA; t['hehhamzaabovefinalarabic'] = 0xFBA5; t['hehhamzaaboveisolatedarabic'] = 0xFBA4; t['hehinitialaltonearabic'] = 0xFBA8; t['hehinitialarabic'] = 0xFEEB; t['hehiragana'] = 0x3078; t['hehmedialaltonearabic'] = 0xFBA9; t['hehmedialarabic'] = 0xFEEC; t['heiseierasquare'] = 0x337B; t['hekatakana'] = 0x30D8; t['hekatakanahalfwidth'] = 0xFF8D; t['hekutaarusquare'] = 0x3336; t['henghook'] = 0x0267; t['herutusquare'] = 0x3339; t['het'] = 0x05D7; t['hethebrew'] = 0x05D7; t['hhook'] = 0x0266; t['hhooksuperior'] = 0x02B1; t['hieuhacirclekorean'] = 0x327B; t['hieuhaparenkorean'] = 0x321B; t['hieuhcirclekorean'] = 0x326D; t['hieuhkorean'] = 0x314E; t['hieuhparenkorean'] = 0x320D; t['hihiragana'] = 0x3072; t['hikatakana'] = 0x30D2; t['hikatakanahalfwidth'] = 0xFF8B; t['hiriq'] = 0x05B4; t['hiriq14'] = 0x05B4; t['hiriq21'] = 0x05B4; t['hiriq2d'] = 0x05B4; t['hiriqhebrew'] = 0x05B4; t['hiriqnarrowhebrew'] = 0x05B4; t['hiriqquarterhebrew'] = 0x05B4; t['hiriqwidehebrew'] = 0x05B4; t['hlinebelow'] = 0x1E96; t['hmonospace'] = 0xFF48; t['hoarmenian'] = 0x0570; t['hohipthai'] = 0x0E2B; t['hohiragana'] = 0x307B; t['hokatakana'] = 0x30DB; t['hokatakanahalfwidth'] = 0xFF8E; t['holam'] = 0x05B9; t['holam19'] = 0x05B9; t['holam26'] = 0x05B9; t['holam32'] = 0x05B9; t['holamhebrew'] = 0x05B9; t['holamnarrowhebrew'] = 0x05B9; t['holamquarterhebrew'] = 0x05B9; t['holamwidehebrew'] = 0x05B9; t['honokhukthai'] = 0x0E2E; t['hookabovecomb'] = 0x0309; t['hookcmb'] = 0x0309; t['hookpalatalizedbelowcmb'] = 0x0321; t['hookretroflexbelowcmb'] = 0x0322; t['hoonsquare'] = 0x3342; t['horicoptic'] = 0x03E9; t['horizontalbar'] = 0x2015; t['horncmb'] = 0x031B; t['hotsprings'] = 0x2668; t['house'] = 0x2302; t['hparen'] = 0x24A3; t['hsuperior'] = 0x02B0; t['hturned'] = 0x0265; t['huhiragana'] = 0x3075; t['huiitosquare'] = 0x3333; t['hukatakana'] = 0x30D5; t['hukatakanahalfwidth'] = 0xFF8C; t['hungarumlaut'] = 0x02DD; t['hungarumlautcmb'] = 0x030B; t['hv'] = 0x0195; t['hyphen'] = 0x002D; t['hypheninferior'] = 0xF6E5; t['hyphenmonospace'] = 0xFF0D; t['hyphensmall'] = 0xFE63; t['hyphensuperior'] = 0xF6E6; t['hyphentwo'] = 0x2010; t['i'] = 0x0069; t['iacute'] = 0x00ED; t['iacyrillic'] = 0x044F; t['ibengali'] = 0x0987; t['ibopomofo'] = 0x3127; t['ibreve'] = 0x012D; t['icaron'] = 0x01D0; t['icircle'] = 0x24D8; t['icircumflex'] = 0x00EE; t['icyrillic'] = 0x0456; t['idblgrave'] = 0x0209; t['ideographearthcircle'] = 0x328F; t['ideographfirecircle'] = 0x328B; t['ideographicallianceparen'] = 0x323F; t['ideographiccallparen'] = 0x323A; t['ideographiccentrecircle'] = 0x32A5; t['ideographicclose'] = 0x3006; t['ideographiccomma'] = 0x3001; t['ideographiccommaleft'] = 0xFF64; t['ideographiccongratulationparen'] = 0x3237; t['ideographiccorrectcircle'] = 0x32A3; t['ideographicearthparen'] = 0x322F; t['ideographicenterpriseparen'] = 0x323D; t['ideographicexcellentcircle'] = 0x329D; t['ideographicfestivalparen'] = 0x3240; t['ideographicfinancialcircle'] = 0x3296; t['ideographicfinancialparen'] = 0x3236; t['ideographicfireparen'] = 0x322B; t['ideographichaveparen'] = 0x3232; t['ideographichighcircle'] = 0x32A4; t['ideographiciterationmark'] = 0x3005; t['ideographiclaborcircle'] = 0x3298; t['ideographiclaborparen'] = 0x3238; t['ideographicleftcircle'] = 0x32A7; t['ideographiclowcircle'] = 0x32A6; t['ideographicmedicinecircle'] = 0x32A9; t['ideographicmetalparen'] = 0x322E; t['ideographicmoonparen'] = 0x322A; t['ideographicnameparen'] = 0x3234; t['ideographicperiod'] = 0x3002; t['ideographicprintcircle'] = 0x329E; t['ideographicreachparen'] = 0x3243; t['ideographicrepresentparen'] = 0x3239; t['ideographicresourceparen'] = 0x323E; t['ideographicrightcircle'] = 0x32A8; t['ideographicsecretcircle'] = 0x3299; t['ideographicselfparen'] = 0x3242; t['ideographicsocietyparen'] = 0x3233; t['ideographicspace'] = 0x3000; t['ideographicspecialparen'] = 0x3235; t['ideographicstockparen'] = 0x3231; t['ideographicstudyparen'] = 0x323B; t['ideographicsunparen'] = 0x3230; t['ideographicsuperviseparen'] = 0x323C; t['ideographicwaterparen'] = 0x322C; t['ideographicwoodparen'] = 0x322D; t['ideographiczero'] = 0x3007; t['ideographmetalcircle'] = 0x328E; t['ideographmooncircle'] = 0x328A; t['ideographnamecircle'] = 0x3294; t['ideographsuncircle'] = 0x3290; t['ideographwatercircle'] = 0x328C; t['ideographwoodcircle'] = 0x328D; t['ideva'] = 0x0907; t['idieresis'] = 0x00EF; t['idieresisacute'] = 0x1E2F; t['idieresiscyrillic'] = 0x04E5; t['idotbelow'] = 0x1ECB; t['iebrevecyrillic'] = 0x04D7; t['iecyrillic'] = 0x0435; t['ieungacirclekorean'] = 0x3275; t['ieungaparenkorean'] = 0x3215; t['ieungcirclekorean'] = 0x3267; t['ieungkorean'] = 0x3147; t['ieungparenkorean'] = 0x3207; t['igrave'] = 0x00EC; t['igujarati'] = 0x0A87; t['igurmukhi'] = 0x0A07; t['ihiragana'] = 0x3044; t['ihookabove'] = 0x1EC9; t['iibengali'] = 0x0988; t['iicyrillic'] = 0x0438; t['iideva'] = 0x0908; t['iigujarati'] = 0x0A88; t['iigurmukhi'] = 0x0A08; t['iimatragurmukhi'] = 0x0A40; t['iinvertedbreve'] = 0x020B; t['iishortcyrillic'] = 0x0439; t['iivowelsignbengali'] = 0x09C0; t['iivowelsigndeva'] = 0x0940; t['iivowelsigngujarati'] = 0x0AC0; t['ij'] = 0x0133; t['ikatakana'] = 0x30A4; t['ikatakanahalfwidth'] = 0xFF72; t['ikorean'] = 0x3163; t['ilde'] = 0x02DC; t['iluyhebrew'] = 0x05AC; t['imacron'] = 0x012B; t['imacroncyrillic'] = 0x04E3; t['imageorapproximatelyequal'] = 0x2253; t['imatragurmukhi'] = 0x0A3F; t['imonospace'] = 0xFF49; t['increment'] = 0x2206; t['infinity'] = 0x221E; t['iniarmenian'] = 0x056B; t['integral'] = 0x222B; t['integralbottom'] = 0x2321; t['integralbt'] = 0x2321; t['integralex'] = 0xF8F5; t['integraltop'] = 0x2320; t['integraltp'] = 0x2320; t['intersection'] = 0x2229; t['intisquare'] = 0x3305; t['invbullet'] = 0x25D8; t['invcircle'] = 0x25D9; t['invsmileface'] = 0x263B; t['iocyrillic'] = 0x0451; t['iogonek'] = 0x012F; t['iota'] = 0x03B9; t['iotadieresis'] = 0x03CA; t['iotadieresistonos'] = 0x0390; t['iotalatin'] = 0x0269; t['iotatonos'] = 0x03AF; t['iparen'] = 0x24A4; t['irigurmukhi'] = 0x0A72; t['ismallhiragana'] = 0x3043; t['ismallkatakana'] = 0x30A3; t['ismallkatakanahalfwidth'] = 0xFF68; t['issharbengali'] = 0x09FA; t['istroke'] = 0x0268; t['isuperior'] = 0xF6ED; t['iterationhiragana'] = 0x309D; t['iterationkatakana'] = 0x30FD; t['itilde'] = 0x0129; t['itildebelow'] = 0x1E2D; t['iubopomofo'] = 0x3129; t['iucyrillic'] = 0x044E; t['ivowelsignbengali'] = 0x09BF; t['ivowelsigndeva'] = 0x093F; t['ivowelsigngujarati'] = 0x0ABF; t['izhitsacyrillic'] = 0x0475; t['izhitsadblgravecyrillic'] = 0x0477; t['j'] = 0x006A; t['jaarmenian'] = 0x0571; t['jabengali'] = 0x099C; t['jadeva'] = 0x091C; t['jagujarati'] = 0x0A9C; t['jagurmukhi'] = 0x0A1C; t['jbopomofo'] = 0x3110; t['jcaron'] = 0x01F0; t['jcircle'] = 0x24D9; t['jcircumflex'] = 0x0135; t['jcrossedtail'] = 0x029D; t['jdotlessstroke'] = 0x025F; t['jecyrillic'] = 0x0458; t['jeemarabic'] = 0x062C; t['jeemfinalarabic'] = 0xFE9E; t['jeeminitialarabic'] = 0xFE9F; t['jeemmedialarabic'] = 0xFEA0; t['jeharabic'] = 0x0698; t['jehfinalarabic'] = 0xFB8B; t['jhabengali'] = 0x099D; t['jhadeva'] = 0x091D; t['jhagujarati'] = 0x0A9D; t['jhagurmukhi'] = 0x0A1D; t['jheharmenian'] = 0x057B; t['jis'] = 0x3004; t['jmonospace'] = 0xFF4A; t['jparen'] = 0x24A5; t['jsuperior'] = 0x02B2; t['k'] = 0x006B; t['kabashkircyrillic'] = 0x04A1; t['kabengali'] = 0x0995; t['kacute'] = 0x1E31; t['kacyrillic'] = 0x043A; t['kadescendercyrillic'] = 0x049B; t['kadeva'] = 0x0915; t['kaf'] = 0x05DB; t['kafarabic'] = 0x0643; t['kafdagesh'] = 0xFB3B; t['kafdageshhebrew'] = 0xFB3B; t['kaffinalarabic'] = 0xFEDA; t['kafhebrew'] = 0x05DB; t['kafinitialarabic'] = 0xFEDB; t['kafmedialarabic'] = 0xFEDC; t['kafrafehebrew'] = 0xFB4D; t['kagujarati'] = 0x0A95; t['kagurmukhi'] = 0x0A15; t['kahiragana'] = 0x304B; t['kahookcyrillic'] = 0x04C4; t['kakatakana'] = 0x30AB; t['kakatakanahalfwidth'] = 0xFF76; t['kappa'] = 0x03BA; t['kappasymbolgreek'] = 0x03F0; t['kapyeounmieumkorean'] = 0x3171; t['kapyeounphieuphkorean'] = 0x3184; t['kapyeounpieupkorean'] = 0x3178; t['kapyeounssangpieupkorean'] = 0x3179; t['karoriisquare'] = 0x330D; t['kashidaautoarabic'] = 0x0640; t['kashidaautonosidebearingarabic'] = 0x0640; t['kasmallkatakana'] = 0x30F5; t['kasquare'] = 0x3384; t['kasraarabic'] = 0x0650; t['kasratanarabic'] = 0x064D; t['kastrokecyrillic'] = 0x049F; t['katahiraprolongmarkhalfwidth'] = 0xFF70; t['kaverticalstrokecyrillic'] = 0x049D; t['kbopomofo'] = 0x310E; t['kcalsquare'] = 0x3389; t['kcaron'] = 0x01E9; t['kcedilla'] = 0x0137; t['kcircle'] = 0x24DA; t['kcommaaccent'] = 0x0137; t['kdotbelow'] = 0x1E33; t['keharmenian'] = 0x0584; t['kehiragana'] = 0x3051; t['kekatakana'] = 0x30B1; t['kekatakanahalfwidth'] = 0xFF79; t['kenarmenian'] = 0x056F; t['kesmallkatakana'] = 0x30F6; t['kgreenlandic'] = 0x0138; t['khabengali'] = 0x0996; t['khacyrillic'] = 0x0445; t['khadeva'] = 0x0916; t['khagujarati'] = 0x0A96; t['khagurmukhi'] = 0x0A16; t['khaharabic'] = 0x062E; t['khahfinalarabic'] = 0xFEA6; t['khahinitialarabic'] = 0xFEA7; t['khahmedialarabic'] = 0xFEA8; t['kheicoptic'] = 0x03E7; t['khhadeva'] = 0x0959; t['khhagurmukhi'] = 0x0A59; t['khieukhacirclekorean'] = 0x3278; t['khieukhaparenkorean'] = 0x3218; t['khieukhcirclekorean'] = 0x326A; t['khieukhkorean'] = 0x314B; t['khieukhparenkorean'] = 0x320A; t['khokhaithai'] = 0x0E02; t['khokhonthai'] = 0x0E05; t['khokhuatthai'] = 0x0E03; t['khokhwaithai'] = 0x0E04; t['khomutthai'] = 0x0E5B; t['khook'] = 0x0199; t['khorakhangthai'] = 0x0E06; t['khzsquare'] = 0x3391; t['kihiragana'] = 0x304D; t['kikatakana'] = 0x30AD; t['kikatakanahalfwidth'] = 0xFF77; t['kiroguramusquare'] = 0x3315; t['kiromeetorusquare'] = 0x3316; t['kirosquare'] = 0x3314; t['kiyeokacirclekorean'] = 0x326E; t['kiyeokaparenkorean'] = 0x320E; t['kiyeokcirclekorean'] = 0x3260; t['kiyeokkorean'] = 0x3131; t['kiyeokparenkorean'] = 0x3200; t['kiyeoksioskorean'] = 0x3133; t['kjecyrillic'] = 0x045C; t['klinebelow'] = 0x1E35; t['klsquare'] = 0x3398; t['kmcubedsquare'] = 0x33A6; t['kmonospace'] = 0xFF4B; t['kmsquaredsquare'] = 0x33A2; t['kohiragana'] = 0x3053; t['kohmsquare'] = 0x33C0; t['kokaithai'] = 0x0E01; t['kokatakana'] = 0x30B3; t['kokatakanahalfwidth'] = 0xFF7A; t['kooposquare'] = 0x331E; t['koppacyrillic'] = 0x0481; t['koreanstandardsymbol'] = 0x327F; t['koroniscmb'] = 0x0343; t['kparen'] = 0x24A6; t['kpasquare'] = 0x33AA; t['ksicyrillic'] = 0x046F; t['ktsquare'] = 0x33CF; t['kturned'] = 0x029E; t['kuhiragana'] = 0x304F; t['kukatakana'] = 0x30AF; t['kukatakanahalfwidth'] = 0xFF78; t['kvsquare'] = 0x33B8; t['kwsquare'] = 0x33BE; t['l'] = 0x006C; t['labengali'] = 0x09B2; t['lacute'] = 0x013A; t['ladeva'] = 0x0932; t['lagujarati'] = 0x0AB2; t['lagurmukhi'] = 0x0A32; t['lakkhangyaothai'] = 0x0E45; t['lamaleffinalarabic'] = 0xFEFC; t['lamalefhamzaabovefinalarabic'] = 0xFEF8; t['lamalefhamzaaboveisolatedarabic'] = 0xFEF7; t['lamalefhamzabelowfinalarabic'] = 0xFEFA; t['lamalefhamzabelowisolatedarabic'] = 0xFEF9; t['lamalefisolatedarabic'] = 0xFEFB; t['lamalefmaddaabovefinalarabic'] = 0xFEF6; t['lamalefmaddaaboveisolatedarabic'] = 0xFEF5; t['lamarabic'] = 0x0644; t['lambda'] = 0x03BB; t['lambdastroke'] = 0x019B; t['lamed'] = 0x05DC; t['lameddagesh'] = 0xFB3C; t['lameddageshhebrew'] = 0xFB3C; t['lamedhebrew'] = 0x05DC; t['lamfinalarabic'] = 0xFEDE; t['lamhahinitialarabic'] = 0xFCCA; t['laminitialarabic'] = 0xFEDF; t['lamjeeminitialarabic'] = 0xFCC9; t['lamkhahinitialarabic'] = 0xFCCB; t['lamlamhehisolatedarabic'] = 0xFDF2; t['lammedialarabic'] = 0xFEE0; t['lammeemhahinitialarabic'] = 0xFD88; t['lammeeminitialarabic'] = 0xFCCC; t['largecircle'] = 0x25EF; t['lbar'] = 0x019A; t['lbelt'] = 0x026C; t['lbopomofo'] = 0x310C; t['lcaron'] = 0x013E; t['lcedilla'] = 0x013C; t['lcircle'] = 0x24DB; t['lcircumflexbelow'] = 0x1E3D; t['lcommaaccent'] = 0x013C; t['ldot'] = 0x0140; t['ldotaccent'] = 0x0140; t['ldotbelow'] = 0x1E37; t['ldotbelowmacron'] = 0x1E39; t['leftangleabovecmb'] = 0x031A; t['lefttackbelowcmb'] = 0x0318; t['less'] = 0x003C; t['lessequal'] = 0x2264; t['lessequalorgreater'] = 0x22DA; t['lessmonospace'] = 0xFF1C; t['lessorequivalent'] = 0x2272; t['lessorgreater'] = 0x2276; t['lessoverequal'] = 0x2266; t['lesssmall'] = 0xFE64; t['lezh'] = 0x026E; t['lfblock'] = 0x258C; t['lhookretroflex'] = 0x026D; t['lira'] = 0x20A4; t['liwnarmenian'] = 0x056C; t['lj'] = 0x01C9; t['ljecyrillic'] = 0x0459; t['ll'] = 0xF6C0; t['lladeva'] = 0x0933; t['llagujarati'] = 0x0AB3; t['llinebelow'] = 0x1E3B; t['llladeva'] = 0x0934; t['llvocalicbengali'] = 0x09E1; t['llvocalicdeva'] = 0x0961; t['llvocalicvowelsignbengali'] = 0x09E3; t['llvocalicvowelsigndeva'] = 0x0963; t['lmiddletilde'] = 0x026B; t['lmonospace'] = 0xFF4C; t['lmsquare'] = 0x33D0; t['lochulathai'] = 0x0E2C; t['logicaland'] = 0x2227; t['logicalnot'] = 0x00AC; t['logicalnotreversed'] = 0x2310; t['logicalor'] = 0x2228; t['lolingthai'] = 0x0E25; t['longs'] = 0x017F; t['lowlinecenterline'] = 0xFE4E; t['lowlinecmb'] = 0x0332; t['lowlinedashed'] = 0xFE4D; t['lozenge'] = 0x25CA; t['lparen'] = 0x24A7; t['lslash'] = 0x0142; t['lsquare'] = 0x2113; t['lsuperior'] = 0xF6EE; t['ltshade'] = 0x2591; t['luthai'] = 0x0E26; t['lvocalicbengali'] = 0x098C; t['lvocalicdeva'] = 0x090C; t['lvocalicvowelsignbengali'] = 0x09E2; t['lvocalicvowelsigndeva'] = 0x0962; t['lxsquare'] = 0x33D3; t['m'] = 0x006D; t['mabengali'] = 0x09AE; t['macron'] = 0x00AF; t['macronbelowcmb'] = 0x0331; t['macroncmb'] = 0x0304; t['macronlowmod'] = 0x02CD; t['macronmonospace'] = 0xFFE3; t['macute'] = 0x1E3F; t['madeva'] = 0x092E; t['magujarati'] = 0x0AAE; t['magurmukhi'] = 0x0A2E; t['mahapakhhebrew'] = 0x05A4; t['mahapakhlefthebrew'] = 0x05A4; t['mahiragana'] = 0x307E; t['maichattawalowleftthai'] = 0xF895; t['maichattawalowrightthai'] = 0xF894; t['maichattawathai'] = 0x0E4B; t['maichattawaupperleftthai'] = 0xF893; t['maieklowleftthai'] = 0xF88C; t['maieklowrightthai'] = 0xF88B; t['maiekthai'] = 0x0E48; t['maiekupperleftthai'] = 0xF88A; t['maihanakatleftthai'] = 0xF884; t['maihanakatthai'] = 0x0E31; t['maitaikhuleftthai'] = 0xF889; t['maitaikhuthai'] = 0x0E47; t['maitholowleftthai'] = 0xF88F; t['maitholowrightthai'] = 0xF88E; t['maithothai'] = 0x0E49; t['maithoupperleftthai'] = 0xF88D; t['maitrilowleftthai'] = 0xF892; t['maitrilowrightthai'] = 0xF891; t['maitrithai'] = 0x0E4A; t['maitriupperleftthai'] = 0xF890; t['maiyamokthai'] = 0x0E46; t['makatakana'] = 0x30DE; t['makatakanahalfwidth'] = 0xFF8F; t['male'] = 0x2642; t['mansyonsquare'] = 0x3347; t['maqafhebrew'] = 0x05BE; t['mars'] = 0x2642; t['masoracirclehebrew'] = 0x05AF; t['masquare'] = 0x3383; t['mbopomofo'] = 0x3107; t['mbsquare'] = 0x33D4; t['mcircle'] = 0x24DC; t['mcubedsquare'] = 0x33A5; t['mdotaccent'] = 0x1E41; t['mdotbelow'] = 0x1E43; t['meemarabic'] = 0x0645; t['meemfinalarabic'] = 0xFEE2; t['meeminitialarabic'] = 0xFEE3; t['meemmedialarabic'] = 0xFEE4; t['meemmeeminitialarabic'] = 0xFCD1; t['meemmeemisolatedarabic'] = 0xFC48; t['meetorusquare'] = 0x334D; t['mehiragana'] = 0x3081; t['meizierasquare'] = 0x337E; t['mekatakana'] = 0x30E1; t['mekatakanahalfwidth'] = 0xFF92; t['mem'] = 0x05DE; t['memdagesh'] = 0xFB3E; t['memdageshhebrew'] = 0xFB3E; t['memhebrew'] = 0x05DE; t['menarmenian'] = 0x0574; t['merkhahebrew'] = 0x05A5; t['merkhakefulahebrew'] = 0x05A6; t['merkhakefulalefthebrew'] = 0x05A6; t['merkhalefthebrew'] = 0x05A5; t['mhook'] = 0x0271; t['mhzsquare'] = 0x3392; t['middledotkatakanahalfwidth'] = 0xFF65; t['middot'] = 0x00B7; t['mieumacirclekorean'] = 0x3272; t['mieumaparenkorean'] = 0x3212; t['mieumcirclekorean'] = 0x3264; t['mieumkorean'] = 0x3141; t['mieumpansioskorean'] = 0x3170; t['mieumparenkorean'] = 0x3204; t['mieumpieupkorean'] = 0x316E; t['mieumsioskorean'] = 0x316F; t['mihiragana'] = 0x307F; t['mikatakana'] = 0x30DF; t['mikatakanahalfwidth'] = 0xFF90; t['minus'] = 0x2212; t['minusbelowcmb'] = 0x0320; t['minuscircle'] = 0x2296; t['minusmod'] = 0x02D7; t['minusplus'] = 0x2213; t['minute'] = 0x2032; t['miribaarusquare'] = 0x334A; t['mirisquare'] = 0x3349; t['mlonglegturned'] = 0x0270; t['mlsquare'] = 0x3396; t['mmcubedsquare'] = 0x33A3; t['mmonospace'] = 0xFF4D; t['mmsquaredsquare'] = 0x339F; t['mohiragana'] = 0x3082; t['mohmsquare'] = 0x33C1; t['mokatakana'] = 0x30E2; t['mokatakanahalfwidth'] = 0xFF93; t['molsquare'] = 0x33D6; t['momathai'] = 0x0E21; t['moverssquare'] = 0x33A7; t['moverssquaredsquare'] = 0x33A8; t['mparen'] = 0x24A8; t['mpasquare'] = 0x33AB; t['mssquare'] = 0x33B3; t['msuperior'] = 0xF6EF; t['mturned'] = 0x026F; t['mu'] = 0x00B5; t['mu1'] = 0x00B5; t['muasquare'] = 0x3382; t['muchgreater'] = 0x226B; t['muchless'] = 0x226A; t['mufsquare'] = 0x338C; t['mugreek'] = 0x03BC; t['mugsquare'] = 0x338D; t['muhiragana'] = 0x3080; t['mukatakana'] = 0x30E0; t['mukatakanahalfwidth'] = 0xFF91; t['mulsquare'] = 0x3395; t['multiply'] = 0x00D7; t['mumsquare'] = 0x339B; t['munahhebrew'] = 0x05A3; t['munahlefthebrew'] = 0x05A3; t['musicalnote'] = 0x266A; t['musicalnotedbl'] = 0x266B; t['musicflatsign'] = 0x266D; t['musicsharpsign'] = 0x266F; t['mussquare'] = 0x33B2; t['muvsquare'] = 0x33B6; t['muwsquare'] = 0x33BC; t['mvmegasquare'] = 0x33B9; t['mvsquare'] = 0x33B7; t['mwmegasquare'] = 0x33BF; t['mwsquare'] = 0x33BD; t['n'] = 0x006E; t['nabengali'] = 0x09A8; t['nabla'] = 0x2207; t['nacute'] = 0x0144; t['nadeva'] = 0x0928; t['nagujarati'] = 0x0AA8; t['nagurmukhi'] = 0x0A28; t['nahiragana'] = 0x306A; t['nakatakana'] = 0x30CA; t['nakatakanahalfwidth'] = 0xFF85; t['napostrophe'] = 0x0149; t['nasquare'] = 0x3381; t['nbopomofo'] = 0x310B; t['nbspace'] = 0x00A0; t['ncaron'] = 0x0148; t['ncedilla'] = 0x0146; t['ncircle'] = 0x24DD; t['ncircumflexbelow'] = 0x1E4B; t['ncommaaccent'] = 0x0146; t['ndotaccent'] = 0x1E45; t['ndotbelow'] = 0x1E47; t['nehiragana'] = 0x306D; t['nekatakana'] = 0x30CD; t['nekatakanahalfwidth'] = 0xFF88; t['newsheqelsign'] = 0x20AA; t['nfsquare'] = 0x338B; t['ngabengali'] = 0x0999; t['ngadeva'] = 0x0919; t['ngagujarati'] = 0x0A99; t['ngagurmukhi'] = 0x0A19; t['ngonguthai'] = 0x0E07; t['nhiragana'] = 0x3093; t['nhookleft'] = 0x0272; t['nhookretroflex'] = 0x0273; t['nieunacirclekorean'] = 0x326F; t['nieunaparenkorean'] = 0x320F; t['nieuncieuckorean'] = 0x3135; t['nieuncirclekorean'] = 0x3261; t['nieunhieuhkorean'] = 0x3136; t['nieunkorean'] = 0x3134; t['nieunpansioskorean'] = 0x3168; t['nieunparenkorean'] = 0x3201; t['nieunsioskorean'] = 0x3167; t['nieuntikeutkorean'] = 0x3166; t['nihiragana'] = 0x306B; t['nikatakana'] = 0x30CB; t['nikatakanahalfwidth'] = 0xFF86; t['nikhahitleftthai'] = 0xF899; t['nikhahitthai'] = 0x0E4D; t['nine'] = 0x0039; t['ninearabic'] = 0x0669; t['ninebengali'] = 0x09EF; t['ninecircle'] = 0x2468; t['ninecircleinversesansserif'] = 0x2792; t['ninedeva'] = 0x096F; t['ninegujarati'] = 0x0AEF; t['ninegurmukhi'] = 0x0A6F; t['ninehackarabic'] = 0x0669; t['ninehangzhou'] = 0x3029; t['nineideographicparen'] = 0x3228; t['nineinferior'] = 0x2089; t['ninemonospace'] = 0xFF19; t['nineoldstyle'] = 0xF739; t['nineparen'] = 0x247C; t['nineperiod'] = 0x2490; t['ninepersian'] = 0x06F9; t['nineroman'] = 0x2178; t['ninesuperior'] = 0x2079; t['nineteencircle'] = 0x2472; t['nineteenparen'] = 0x2486; t['nineteenperiod'] = 0x249A; t['ninethai'] = 0x0E59; t['nj'] = 0x01CC; t['njecyrillic'] = 0x045A; t['nkatakana'] = 0x30F3; t['nkatakanahalfwidth'] = 0xFF9D; t['nlegrightlong'] = 0x019E; t['nlinebelow'] = 0x1E49; t['nmonospace'] = 0xFF4E; t['nmsquare'] = 0x339A; t['nnabengali'] = 0x09A3; t['nnadeva'] = 0x0923; t['nnagujarati'] = 0x0AA3; t['nnagurmukhi'] = 0x0A23; t['nnnadeva'] = 0x0929; t['nohiragana'] = 0x306E; t['nokatakana'] = 0x30CE; t['nokatakanahalfwidth'] = 0xFF89; t['nonbreakingspace'] = 0x00A0; t['nonenthai'] = 0x0E13; t['nonuthai'] = 0x0E19; t['noonarabic'] = 0x0646; t['noonfinalarabic'] = 0xFEE6; t['noonghunnaarabic'] = 0x06BA; t['noonghunnafinalarabic'] = 0xFB9F; t['nooninitialarabic'] = 0xFEE7; t['noonjeeminitialarabic'] = 0xFCD2; t['noonjeemisolatedarabic'] = 0xFC4B; t['noonmedialarabic'] = 0xFEE8; t['noonmeeminitialarabic'] = 0xFCD5; t['noonmeemisolatedarabic'] = 0xFC4E; t['noonnoonfinalarabic'] = 0xFC8D; t['notcontains'] = 0x220C; t['notelement'] = 0x2209; t['notelementof'] = 0x2209; t['notequal'] = 0x2260; t['notgreater'] = 0x226F; t['notgreaternorequal'] = 0x2271; t['notgreaternorless'] = 0x2279; t['notidentical'] = 0x2262; t['notless'] = 0x226E; t['notlessnorequal'] = 0x2270; t['notparallel'] = 0x2226; t['notprecedes'] = 0x2280; t['notsubset'] = 0x2284; t['notsucceeds'] = 0x2281; t['notsuperset'] = 0x2285; t['nowarmenian'] = 0x0576; t['nparen'] = 0x24A9; t['nssquare'] = 0x33B1; t['nsuperior'] = 0x207F; t['ntilde'] = 0x00F1; t['nu'] = 0x03BD; t['nuhiragana'] = 0x306C; t['nukatakana'] = 0x30CC; t['nukatakanahalfwidth'] = 0xFF87; t['nuktabengali'] = 0x09BC; t['nuktadeva'] = 0x093C; t['nuktagujarati'] = 0x0ABC; t['nuktagurmukhi'] = 0x0A3C; t['numbersign'] = 0x0023; t['numbersignmonospace'] = 0xFF03; t['numbersignsmall'] = 0xFE5F; t['numeralsigngreek'] = 0x0374; t['numeralsignlowergreek'] = 0x0375; t['numero'] = 0x2116; t['nun'] = 0x05E0; t['nundagesh'] = 0xFB40; t['nundageshhebrew'] = 0xFB40; t['nunhebrew'] = 0x05E0; t['nvsquare'] = 0x33B5; t['nwsquare'] = 0x33BB; t['nyabengali'] = 0x099E; t['nyadeva'] = 0x091E; t['nyagujarati'] = 0x0A9E; t['nyagurmukhi'] = 0x0A1E; t['o'] = 0x006F; t['oacute'] = 0x00F3; t['oangthai'] = 0x0E2D; t['obarred'] = 0x0275; t['obarredcyrillic'] = 0x04E9; t['obarreddieresiscyrillic'] = 0x04EB; t['obengali'] = 0x0993; t['obopomofo'] = 0x311B; t['obreve'] = 0x014F; t['ocandradeva'] = 0x0911; t['ocandragujarati'] = 0x0A91; t['ocandravowelsigndeva'] = 0x0949; t['ocandravowelsigngujarati'] = 0x0AC9; t['ocaron'] = 0x01D2; t['ocircle'] = 0x24DE; t['ocircumflex'] = 0x00F4; t['ocircumflexacute'] = 0x1ED1; t['ocircumflexdotbelow'] = 0x1ED9; t['ocircumflexgrave'] = 0x1ED3; t['ocircumflexhookabove'] = 0x1ED5; t['ocircumflextilde'] = 0x1ED7; t['ocyrillic'] = 0x043E; t['odblacute'] = 0x0151; t['odblgrave'] = 0x020D; t['odeva'] = 0x0913; t['odieresis'] = 0x00F6; t['odieresiscyrillic'] = 0x04E7; t['odotbelow'] = 0x1ECD; t['oe'] = 0x0153; t['oekorean'] = 0x315A; t['ogonek'] = 0x02DB; t['ogonekcmb'] = 0x0328; t['ograve'] = 0x00F2; t['ogujarati'] = 0x0A93; t['oharmenian'] = 0x0585; t['ohiragana'] = 0x304A; t['ohookabove'] = 0x1ECF; t['ohorn'] = 0x01A1; t['ohornacute'] = 0x1EDB; t['ohorndotbelow'] = 0x1EE3; t['ohorngrave'] = 0x1EDD; t['ohornhookabove'] = 0x1EDF; t['ohorntilde'] = 0x1EE1; t['ohungarumlaut'] = 0x0151; t['oi'] = 0x01A3; t['oinvertedbreve'] = 0x020F; t['okatakana'] = 0x30AA; t['okatakanahalfwidth'] = 0xFF75; t['okorean'] = 0x3157; t['olehebrew'] = 0x05AB; t['omacron'] = 0x014D; t['omacronacute'] = 0x1E53; t['omacrongrave'] = 0x1E51; t['omdeva'] = 0x0950; t['omega'] = 0x03C9; t['omega1'] = 0x03D6; t['omegacyrillic'] = 0x0461; t['omegalatinclosed'] = 0x0277; t['omegaroundcyrillic'] = 0x047B; t['omegatitlocyrillic'] = 0x047D; t['omegatonos'] = 0x03CE; t['omgujarati'] = 0x0AD0; t['omicron'] = 0x03BF; t['omicrontonos'] = 0x03CC; t['omonospace'] = 0xFF4F; t['one'] = 0x0031; t['onearabic'] = 0x0661; t['onebengali'] = 0x09E7; t['onecircle'] = 0x2460; t['onecircleinversesansserif'] = 0x278A; t['onedeva'] = 0x0967; t['onedotenleader'] = 0x2024; t['oneeighth'] = 0x215B; t['onefitted'] = 0xF6DC; t['onegujarati'] = 0x0AE7; t['onegurmukhi'] = 0x0A67; t['onehackarabic'] = 0x0661; t['onehalf'] = 0x00BD; t['onehangzhou'] = 0x3021; t['oneideographicparen'] = 0x3220; t['oneinferior'] = 0x2081; t['onemonospace'] = 0xFF11; t['onenumeratorbengali'] = 0x09F4; t['oneoldstyle'] = 0xF731; t['oneparen'] = 0x2474; t['oneperiod'] = 0x2488; t['onepersian'] = 0x06F1; t['onequarter'] = 0x00BC; t['oneroman'] = 0x2170; t['onesuperior'] = 0x00B9; t['onethai'] = 0x0E51; t['onethird'] = 0x2153; t['oogonek'] = 0x01EB; t['oogonekmacron'] = 0x01ED; t['oogurmukhi'] = 0x0A13; t['oomatragurmukhi'] = 0x0A4B; t['oopen'] = 0x0254; t['oparen'] = 0x24AA; t['openbullet'] = 0x25E6; t['option'] = 0x2325; t['ordfeminine'] = 0x00AA; t['ordmasculine'] = 0x00BA; t['orthogonal'] = 0x221F; t['oshortdeva'] = 0x0912; t['oshortvowelsigndeva'] = 0x094A; t['oslash'] = 0x00F8; t['oslashacute'] = 0x01FF; t['osmallhiragana'] = 0x3049; t['osmallkatakana'] = 0x30A9; t['osmallkatakanahalfwidth'] = 0xFF6B; t['ostrokeacute'] = 0x01FF; t['osuperior'] = 0xF6F0; t['otcyrillic'] = 0x047F; t['otilde'] = 0x00F5; t['otildeacute'] = 0x1E4D; t['otildedieresis'] = 0x1E4F; t['oubopomofo'] = 0x3121; t['overline'] = 0x203E; t['overlinecenterline'] = 0xFE4A; t['overlinecmb'] = 0x0305; t['overlinedashed'] = 0xFE49; t['overlinedblwavy'] = 0xFE4C; t['overlinewavy'] = 0xFE4B; t['overscore'] = 0x00AF; t['ovowelsignbengali'] = 0x09CB; t['ovowelsigndeva'] = 0x094B; t['ovowelsigngujarati'] = 0x0ACB; t['p'] = 0x0070; t['paampssquare'] = 0x3380; t['paasentosquare'] = 0x332B; t['pabengali'] = 0x09AA; t['pacute'] = 0x1E55; t['padeva'] = 0x092A; t['pagedown'] = 0x21DF; t['pageup'] = 0x21DE; t['pagujarati'] = 0x0AAA; t['pagurmukhi'] = 0x0A2A; t['pahiragana'] = 0x3071; t['paiyannoithai'] = 0x0E2F; t['pakatakana'] = 0x30D1; t['palatalizationcyrilliccmb'] = 0x0484; t['palochkacyrillic'] = 0x04C0; t['pansioskorean'] = 0x317F; t['paragraph'] = 0x00B6; t['parallel'] = 0x2225; t['parenleft'] = 0x0028; t['parenleftaltonearabic'] = 0xFD3E; t['parenleftbt'] = 0xF8ED; t['parenleftex'] = 0xF8EC; t['parenleftinferior'] = 0x208D; t['parenleftmonospace'] = 0xFF08; t['parenleftsmall'] = 0xFE59; t['parenleftsuperior'] = 0x207D; t['parenlefttp'] = 0xF8EB; t['parenleftvertical'] = 0xFE35; t['parenright'] = 0x0029; t['parenrightaltonearabic'] = 0xFD3F; t['parenrightbt'] = 0xF8F8; t['parenrightex'] = 0xF8F7; t['parenrightinferior'] = 0x208E; t['parenrightmonospace'] = 0xFF09; t['parenrightsmall'] = 0xFE5A; t['parenrightsuperior'] = 0x207E; t['parenrighttp'] = 0xF8F6; t['parenrightvertical'] = 0xFE36; t['partialdiff'] = 0x2202; t['paseqhebrew'] = 0x05C0; t['pashtahebrew'] = 0x0599; t['pasquare'] = 0x33A9; t['patah'] = 0x05B7; t['patah11'] = 0x05B7; t['patah1d'] = 0x05B7; t['patah2a'] = 0x05B7; t['patahhebrew'] = 0x05B7; t['patahnarrowhebrew'] = 0x05B7; t['patahquarterhebrew'] = 0x05B7; t['patahwidehebrew'] = 0x05B7; t['pazerhebrew'] = 0x05A1; t['pbopomofo'] = 0x3106; t['pcircle'] = 0x24DF; t['pdotaccent'] = 0x1E57; t['pe'] = 0x05E4; t['pecyrillic'] = 0x043F; t['pedagesh'] = 0xFB44; t['pedageshhebrew'] = 0xFB44; t['peezisquare'] = 0x333B; t['pefinaldageshhebrew'] = 0xFB43; t['peharabic'] = 0x067E; t['peharmenian'] = 0x057A; t['pehebrew'] = 0x05E4; t['pehfinalarabic'] = 0xFB57; t['pehinitialarabic'] = 0xFB58; t['pehiragana'] = 0x307A; t['pehmedialarabic'] = 0xFB59; t['pekatakana'] = 0x30DA; t['pemiddlehookcyrillic'] = 0x04A7; t['perafehebrew'] = 0xFB4E; t['percent'] = 0x0025; t['percentarabic'] = 0x066A; t['percentmonospace'] = 0xFF05; t['percentsmall'] = 0xFE6A; t['period'] = 0x002E; t['periodarmenian'] = 0x0589; t['periodcentered'] = 0x00B7; t['periodhalfwidth'] = 0xFF61; t['periodinferior'] = 0xF6E7; t['periodmonospace'] = 0xFF0E; t['periodsmall'] = 0xFE52; t['periodsuperior'] = 0xF6E8; t['perispomenigreekcmb'] = 0x0342; t['perpendicular'] = 0x22A5; t['perthousand'] = 0x2030; t['peseta'] = 0x20A7; t['pfsquare'] = 0x338A; t['phabengali'] = 0x09AB; t['phadeva'] = 0x092B; t['phagujarati'] = 0x0AAB; t['phagurmukhi'] = 0x0A2B; t['phi'] = 0x03C6; t['phi1'] = 0x03D5; t['phieuphacirclekorean'] = 0x327A; t['phieuphaparenkorean'] = 0x321A; t['phieuphcirclekorean'] = 0x326C; t['phieuphkorean'] = 0x314D; t['phieuphparenkorean'] = 0x320C; t['philatin'] = 0x0278; t['phinthuthai'] = 0x0E3A; t['phisymbolgreek'] = 0x03D5; t['phook'] = 0x01A5; t['phophanthai'] = 0x0E1E; t['phophungthai'] = 0x0E1C; t['phosamphaothai'] = 0x0E20; t['pi'] = 0x03C0; t['pieupacirclekorean'] = 0x3273; t['pieupaparenkorean'] = 0x3213; t['pieupcieuckorean'] = 0x3176; t['pieupcirclekorean'] = 0x3265; t['pieupkiyeokkorean'] = 0x3172; t['pieupkorean'] = 0x3142; t['pieupparenkorean'] = 0x3205; t['pieupsioskiyeokkorean'] = 0x3174; t['pieupsioskorean'] = 0x3144; t['pieupsiostikeutkorean'] = 0x3175; t['pieupthieuthkorean'] = 0x3177; t['pieuptikeutkorean'] = 0x3173; t['pihiragana'] = 0x3074; t['pikatakana'] = 0x30D4; t['pisymbolgreek'] = 0x03D6; t['piwrarmenian'] = 0x0583; t['plus'] = 0x002B; t['plusbelowcmb'] = 0x031F; t['pluscircle'] = 0x2295; t['plusminus'] = 0x00B1; t['plusmod'] = 0x02D6; t['plusmonospace'] = 0xFF0B; t['plussmall'] = 0xFE62; t['plussuperior'] = 0x207A; t['pmonospace'] = 0xFF50; t['pmsquare'] = 0x33D8; t['pohiragana'] = 0x307D; t['pointingindexdownwhite'] = 0x261F; t['pointingindexleftwhite'] = 0x261C; t['pointingindexrightwhite'] = 0x261E; t['pointingindexupwhite'] = 0x261D; t['pokatakana'] = 0x30DD; t['poplathai'] = 0x0E1B; t['postalmark'] = 0x3012; t['postalmarkface'] = 0x3020; t['pparen'] = 0x24AB; t['precedes'] = 0x227A; t['prescription'] = 0x211E; t['primemod'] = 0x02B9; t['primereversed'] = 0x2035; t['product'] = 0x220F; t['projective'] = 0x2305; t['prolongedkana'] = 0x30FC; t['propellor'] = 0x2318; t['propersubset'] = 0x2282; t['propersuperset'] = 0x2283; t['proportion'] = 0x2237; t['proportional'] = 0x221D; t['psi'] = 0x03C8; t['psicyrillic'] = 0x0471; t['psilipneumatacyrilliccmb'] = 0x0486; t['pssquare'] = 0x33B0; t['puhiragana'] = 0x3077; t['pukatakana'] = 0x30D7; t['pvsquare'] = 0x33B4; t['pwsquare'] = 0x33BA; t['q'] = 0x0071; t['qadeva'] = 0x0958; t['qadmahebrew'] = 0x05A8; t['qafarabic'] = 0x0642; t['qaffinalarabic'] = 0xFED6; t['qafinitialarabic'] = 0xFED7; t['qafmedialarabic'] = 0xFED8; t['qamats'] = 0x05B8; t['qamats10'] = 0x05B8; t['qamats1a'] = 0x05B8; t['qamats1c'] = 0x05B8; t['qamats27'] = 0x05B8; t['qamats29'] = 0x05B8; t['qamats33'] = 0x05B8; t['qamatsde'] = 0x05B8; t['qamatshebrew'] = 0x05B8; t['qamatsnarrowhebrew'] = 0x05B8; t['qamatsqatanhebrew'] = 0x05B8; t['qamatsqatannarrowhebrew'] = 0x05B8; t['qamatsqatanquarterhebrew'] = 0x05B8; t['qamatsqatanwidehebrew'] = 0x05B8; t['qamatsquarterhebrew'] = 0x05B8; t['qamatswidehebrew'] = 0x05B8; t['qarneyparahebrew'] = 0x059F; t['qbopomofo'] = 0x3111; t['qcircle'] = 0x24E0; t['qhook'] = 0x02A0; t['qmonospace'] = 0xFF51; t['qof'] = 0x05E7; t['qofdagesh'] = 0xFB47; t['qofdageshhebrew'] = 0xFB47; t['qofhebrew'] = 0x05E7; t['qparen'] = 0x24AC; t['quarternote'] = 0x2669; t['qubuts'] = 0x05BB; t['qubuts18'] = 0x05BB; t['qubuts25'] = 0x05BB; t['qubuts31'] = 0x05BB; t['qubutshebrew'] = 0x05BB; t['qubutsnarrowhebrew'] = 0x05BB; t['qubutsquarterhebrew'] = 0x05BB; t['qubutswidehebrew'] = 0x05BB; t['question'] = 0x003F; t['questionarabic'] = 0x061F; t['questionarmenian'] = 0x055E; t['questiondown'] = 0x00BF; t['questiondownsmall'] = 0xF7BF; t['questiongreek'] = 0x037E; t['questionmonospace'] = 0xFF1F; t['questionsmall'] = 0xF73F; t['quotedbl'] = 0x0022; t['quotedblbase'] = 0x201E; t['quotedblleft'] = 0x201C; t['quotedblmonospace'] = 0xFF02; t['quotedblprime'] = 0x301E; t['quotedblprimereversed'] = 0x301D; t['quotedblright'] = 0x201D; t['quoteleft'] = 0x2018; t['quoteleftreversed'] = 0x201B; t['quotereversed'] = 0x201B; t['quoteright'] = 0x2019; t['quoterightn'] = 0x0149; t['quotesinglbase'] = 0x201A; t['quotesingle'] = 0x0027; t['quotesinglemonospace'] = 0xFF07; t['r'] = 0x0072; t['raarmenian'] = 0x057C; t['rabengali'] = 0x09B0; t['racute'] = 0x0155; t['radeva'] = 0x0930; t['radical'] = 0x221A; t['radicalex'] = 0xF8E5; t['radoverssquare'] = 0x33AE; t['radoverssquaredsquare'] = 0x33AF; t['radsquare'] = 0x33AD; t['rafe'] = 0x05BF; t['rafehebrew'] = 0x05BF; t['ragujarati'] = 0x0AB0; t['ragurmukhi'] = 0x0A30; t['rahiragana'] = 0x3089; t['rakatakana'] = 0x30E9; t['rakatakanahalfwidth'] = 0xFF97; t['ralowerdiagonalbengali'] = 0x09F1; t['ramiddlediagonalbengali'] = 0x09F0; t['ramshorn'] = 0x0264; t['ratio'] = 0x2236; t['rbopomofo'] = 0x3116; t['rcaron'] = 0x0159; t['rcedilla'] = 0x0157; t['rcircle'] = 0x24E1; t['rcommaaccent'] = 0x0157; t['rdblgrave'] = 0x0211; t['rdotaccent'] = 0x1E59; t['rdotbelow'] = 0x1E5B; t['rdotbelowmacron'] = 0x1E5D; t['referencemark'] = 0x203B; t['reflexsubset'] = 0x2286; t['reflexsuperset'] = 0x2287; t['registered'] = 0x00AE; t['registersans'] = 0xF8E8; t['registerserif'] = 0xF6DA; t['reharabic'] = 0x0631; t['reharmenian'] = 0x0580; t['rehfinalarabic'] = 0xFEAE; t['rehiragana'] = 0x308C; t['rekatakana'] = 0x30EC; t['rekatakanahalfwidth'] = 0xFF9A; t['resh'] = 0x05E8; t['reshdageshhebrew'] = 0xFB48; t['reshhebrew'] = 0x05E8; t['reversedtilde'] = 0x223D; t['reviahebrew'] = 0x0597; t['reviamugrashhebrew'] = 0x0597; t['revlogicalnot'] = 0x2310; t['rfishhook'] = 0x027E; t['rfishhookreversed'] = 0x027F; t['rhabengali'] = 0x09DD; t['rhadeva'] = 0x095D; t['rho'] = 0x03C1; t['rhook'] = 0x027D; t['rhookturned'] = 0x027B; t['rhookturnedsuperior'] = 0x02B5; t['rhosymbolgreek'] = 0x03F1; t['rhotichookmod'] = 0x02DE; t['rieulacirclekorean'] = 0x3271; t['rieulaparenkorean'] = 0x3211; t['rieulcirclekorean'] = 0x3263; t['rieulhieuhkorean'] = 0x3140; t['rieulkiyeokkorean'] = 0x313A; t['rieulkiyeoksioskorean'] = 0x3169; t['rieulkorean'] = 0x3139; t['rieulmieumkorean'] = 0x313B; t['rieulpansioskorean'] = 0x316C; t['rieulparenkorean'] = 0x3203; t['rieulphieuphkorean'] = 0x313F; t['rieulpieupkorean'] = 0x313C; t['rieulpieupsioskorean'] = 0x316B; t['rieulsioskorean'] = 0x313D; t['rieulthieuthkorean'] = 0x313E; t['rieultikeutkorean'] = 0x316A; t['rieulyeorinhieuhkorean'] = 0x316D; t['rightangle'] = 0x221F; t['righttackbelowcmb'] = 0x0319; t['righttriangle'] = 0x22BF; t['rihiragana'] = 0x308A; t['rikatakana'] = 0x30EA; t['rikatakanahalfwidth'] = 0xFF98; t['ring'] = 0x02DA; t['ringbelowcmb'] = 0x0325; t['ringcmb'] = 0x030A; t['ringhalfleft'] = 0x02BF; t['ringhalfleftarmenian'] = 0x0559; t['ringhalfleftbelowcmb'] = 0x031C; t['ringhalfleftcentered'] = 0x02D3; t['ringhalfright'] = 0x02BE; t['ringhalfrightbelowcmb'] = 0x0339; t['ringhalfrightcentered'] = 0x02D2; t['rinvertedbreve'] = 0x0213; t['rittorusquare'] = 0x3351; t['rlinebelow'] = 0x1E5F; t['rlongleg'] = 0x027C; t['rlonglegturned'] = 0x027A; t['rmonospace'] = 0xFF52; t['rohiragana'] = 0x308D; t['rokatakana'] = 0x30ED; t['rokatakanahalfwidth'] = 0xFF9B; t['roruathai'] = 0x0E23; t['rparen'] = 0x24AD; t['rrabengali'] = 0x09DC; t['rradeva'] = 0x0931; t['rragurmukhi'] = 0x0A5C; t['rreharabic'] = 0x0691; t['rrehfinalarabic'] = 0xFB8D; t['rrvocalicbengali'] = 0x09E0; t['rrvocalicdeva'] = 0x0960; t['rrvocalicgujarati'] = 0x0AE0; t['rrvocalicvowelsignbengali'] = 0x09C4; t['rrvocalicvowelsigndeva'] = 0x0944; t['rrvocalicvowelsigngujarati'] = 0x0AC4; t['rsuperior'] = 0xF6F1; t['rtblock'] = 0x2590; t['rturned'] = 0x0279; t['rturnedsuperior'] = 0x02B4; t['ruhiragana'] = 0x308B; t['rukatakana'] = 0x30EB; t['rukatakanahalfwidth'] = 0xFF99; t['rupeemarkbengali'] = 0x09F2; t['rupeesignbengali'] = 0x09F3; t['rupiah'] = 0xF6DD; t['ruthai'] = 0x0E24; t['rvocalicbengali'] = 0x098B; t['rvocalicdeva'] = 0x090B; t['rvocalicgujarati'] = 0x0A8B; t['rvocalicvowelsignbengali'] = 0x09C3; t['rvocalicvowelsigndeva'] = 0x0943; t['rvocalicvowelsigngujarati'] = 0x0AC3; t['s'] = 0x0073; t['sabengali'] = 0x09B8; t['sacute'] = 0x015B; t['sacutedotaccent'] = 0x1E65; t['sadarabic'] = 0x0635; t['sadeva'] = 0x0938; t['sadfinalarabic'] = 0xFEBA; t['sadinitialarabic'] = 0xFEBB; t['sadmedialarabic'] = 0xFEBC; t['sagujarati'] = 0x0AB8; t['sagurmukhi'] = 0x0A38; t['sahiragana'] = 0x3055; t['sakatakana'] = 0x30B5; t['sakatakanahalfwidth'] = 0xFF7B; t['sallallahoualayhewasallamarabic'] = 0xFDFA; t['samekh'] = 0x05E1; t['samekhdagesh'] = 0xFB41; t['samekhdageshhebrew'] = 0xFB41; t['samekhhebrew'] = 0x05E1; t['saraaathai'] = 0x0E32; t['saraaethai'] = 0x0E41; t['saraaimaimalaithai'] = 0x0E44; t['saraaimaimuanthai'] = 0x0E43; t['saraamthai'] = 0x0E33; t['saraathai'] = 0x0E30; t['saraethai'] = 0x0E40; t['saraiileftthai'] = 0xF886; t['saraiithai'] = 0x0E35; t['saraileftthai'] = 0xF885; t['saraithai'] = 0x0E34; t['saraothai'] = 0x0E42; t['saraueeleftthai'] = 0xF888; t['saraueethai'] = 0x0E37; t['saraueleftthai'] = 0xF887; t['sarauethai'] = 0x0E36; t['sarauthai'] = 0x0E38; t['sarauuthai'] = 0x0E39; t['sbopomofo'] = 0x3119; t['scaron'] = 0x0161; t['scarondotaccent'] = 0x1E67; t['scedilla'] = 0x015F; t['schwa'] = 0x0259; t['schwacyrillic'] = 0x04D9; t['schwadieresiscyrillic'] = 0x04DB; t['schwahook'] = 0x025A; t['scircle'] = 0x24E2; t['scircumflex'] = 0x015D; t['scommaaccent'] = 0x0219; t['sdotaccent'] = 0x1E61; t['sdotbelow'] = 0x1E63; t['sdotbelowdotaccent'] = 0x1E69; t['seagullbelowcmb'] = 0x033C; t['second'] = 0x2033; t['secondtonechinese'] = 0x02CA; t['section'] = 0x00A7; t['seenarabic'] = 0x0633; t['seenfinalarabic'] = 0xFEB2; t['seeninitialarabic'] = 0xFEB3; t['seenmedialarabic'] = 0xFEB4; t['segol'] = 0x05B6; t['segol13'] = 0x05B6; t['segol1f'] = 0x05B6; t['segol2c'] = 0x05B6; t['segolhebrew'] = 0x05B6; t['segolnarrowhebrew'] = 0x05B6; t['segolquarterhebrew'] = 0x05B6; t['segoltahebrew'] = 0x0592; t['segolwidehebrew'] = 0x05B6; t['seharmenian'] = 0x057D; t['sehiragana'] = 0x305B; t['sekatakana'] = 0x30BB; t['sekatakanahalfwidth'] = 0xFF7E; t['semicolon'] = 0x003B; t['semicolonarabic'] = 0x061B; t['semicolonmonospace'] = 0xFF1B; t['semicolonsmall'] = 0xFE54; t['semivoicedmarkkana'] = 0x309C; t['semivoicedmarkkanahalfwidth'] = 0xFF9F; t['sentisquare'] = 0x3322; t['sentosquare'] = 0x3323; t['seven'] = 0x0037; t['sevenarabic'] = 0x0667; t['sevenbengali'] = 0x09ED; t['sevencircle'] = 0x2466; t['sevencircleinversesansserif'] = 0x2790; t['sevendeva'] = 0x096D; t['seveneighths'] = 0x215E; t['sevengujarati'] = 0x0AED; t['sevengurmukhi'] = 0x0A6D; t['sevenhackarabic'] = 0x0667; t['sevenhangzhou'] = 0x3027; t['sevenideographicparen'] = 0x3226; t['seveninferior'] = 0x2087; t['sevenmonospace'] = 0xFF17; t['sevenoldstyle'] = 0xF737; t['sevenparen'] = 0x247A; t['sevenperiod'] = 0x248E; t['sevenpersian'] = 0x06F7; t['sevenroman'] = 0x2176; t['sevensuperior'] = 0x2077; t['seventeencircle'] = 0x2470; t['seventeenparen'] = 0x2484; t['seventeenperiod'] = 0x2498; t['seventhai'] = 0x0E57; t['sfthyphen'] = 0x00AD; t['shaarmenian'] = 0x0577; t['shabengali'] = 0x09B6; t['shacyrillic'] = 0x0448; t['shaddaarabic'] = 0x0651; t['shaddadammaarabic'] = 0xFC61; t['shaddadammatanarabic'] = 0xFC5E; t['shaddafathaarabic'] = 0xFC60; t['shaddakasraarabic'] = 0xFC62; t['shaddakasratanarabic'] = 0xFC5F; t['shade'] = 0x2592; t['shadedark'] = 0x2593; t['shadelight'] = 0x2591; t['shademedium'] = 0x2592; t['shadeva'] = 0x0936; t['shagujarati'] = 0x0AB6; t['shagurmukhi'] = 0x0A36; t['shalshelethebrew'] = 0x0593; t['shbopomofo'] = 0x3115; t['shchacyrillic'] = 0x0449; t['sheenarabic'] = 0x0634; t['sheenfinalarabic'] = 0xFEB6; t['sheeninitialarabic'] = 0xFEB7; t['sheenmedialarabic'] = 0xFEB8; t['sheicoptic'] = 0x03E3; t['sheqel'] = 0x20AA; t['sheqelhebrew'] = 0x20AA; t['sheva'] = 0x05B0; t['sheva115'] = 0x05B0; t['sheva15'] = 0x05B0; t['sheva22'] = 0x05B0; t['sheva2e'] = 0x05B0; t['shevahebrew'] = 0x05B0; t['shevanarrowhebrew'] = 0x05B0; t['shevaquarterhebrew'] = 0x05B0; t['shevawidehebrew'] = 0x05B0; t['shhacyrillic'] = 0x04BB; t['shimacoptic'] = 0x03ED; t['shin'] = 0x05E9; t['shindagesh'] = 0xFB49; t['shindageshhebrew'] = 0xFB49; t['shindageshshindot'] = 0xFB2C; t['shindageshshindothebrew'] = 0xFB2C; t['shindageshsindot'] = 0xFB2D; t['shindageshsindothebrew'] = 0xFB2D; t['shindothebrew'] = 0x05C1; t['shinhebrew'] = 0x05E9; t['shinshindot'] = 0xFB2A; t['shinshindothebrew'] = 0xFB2A; t['shinsindot'] = 0xFB2B; t['shinsindothebrew'] = 0xFB2B; t['shook'] = 0x0282; t['sigma'] = 0x03C3; t['sigma1'] = 0x03C2; t['sigmafinal'] = 0x03C2; t['sigmalunatesymbolgreek'] = 0x03F2; t['sihiragana'] = 0x3057; t['sikatakana'] = 0x30B7; t['sikatakanahalfwidth'] = 0xFF7C; t['siluqhebrew'] = 0x05BD; t['siluqlefthebrew'] = 0x05BD; t['similar'] = 0x223C; t['sindothebrew'] = 0x05C2; t['siosacirclekorean'] = 0x3274; t['siosaparenkorean'] = 0x3214; t['sioscieuckorean'] = 0x317E; t['sioscirclekorean'] = 0x3266; t['sioskiyeokkorean'] = 0x317A; t['sioskorean'] = 0x3145; t['siosnieunkorean'] = 0x317B; t['siosparenkorean'] = 0x3206; t['siospieupkorean'] = 0x317D; t['siostikeutkorean'] = 0x317C; t['six'] = 0x0036; t['sixarabic'] = 0x0666; t['sixbengali'] = 0x09EC; t['sixcircle'] = 0x2465; t['sixcircleinversesansserif'] = 0x278F; t['sixdeva'] = 0x096C; t['sixgujarati'] = 0x0AEC; t['sixgurmukhi'] = 0x0A6C; t['sixhackarabic'] = 0x0666; t['sixhangzhou'] = 0x3026; t['sixideographicparen'] = 0x3225; t['sixinferior'] = 0x2086; t['sixmonospace'] = 0xFF16; t['sixoldstyle'] = 0xF736; t['sixparen'] = 0x2479; t['sixperiod'] = 0x248D; t['sixpersian'] = 0x06F6; t['sixroman'] = 0x2175; t['sixsuperior'] = 0x2076; t['sixteencircle'] = 0x246F; t['sixteencurrencydenominatorbengali'] = 0x09F9; t['sixteenparen'] = 0x2483; t['sixteenperiod'] = 0x2497; t['sixthai'] = 0x0E56; t['slash'] = 0x002F; t['slashmonospace'] = 0xFF0F; t['slong'] = 0x017F; t['slongdotaccent'] = 0x1E9B; t['smileface'] = 0x263A; t['smonospace'] = 0xFF53; t['sofpasuqhebrew'] = 0x05C3; t['softhyphen'] = 0x00AD; t['softsigncyrillic'] = 0x044C; t['sohiragana'] = 0x305D; t['sokatakana'] = 0x30BD; t['sokatakanahalfwidth'] = 0xFF7F; t['soliduslongoverlaycmb'] = 0x0338; t['solidusshortoverlaycmb'] = 0x0337; t['sorusithai'] = 0x0E29; t['sosalathai'] = 0x0E28; t['sosothai'] = 0x0E0B; t['sosuathai'] = 0x0E2A; t['space'] = 0x0020; t['spacehackarabic'] = 0x0020; t['spade'] = 0x2660; t['spadesuitblack'] = 0x2660; t['spadesuitwhite'] = 0x2664; t['sparen'] = 0x24AE; t['squarebelowcmb'] = 0x033B; t['squarecc'] = 0x33C4; t['squarecm'] = 0x339D; t['squarediagonalcrosshatchfill'] = 0x25A9; t['squarehorizontalfill'] = 0x25A4; t['squarekg'] = 0x338F; t['squarekm'] = 0x339E; t['squarekmcapital'] = 0x33CE; t['squareln'] = 0x33D1; t['squarelog'] = 0x33D2; t['squaremg'] = 0x338E; t['squaremil'] = 0x33D5; t['squaremm'] = 0x339C; t['squaremsquared'] = 0x33A1; t['squareorthogonalcrosshatchfill'] = 0x25A6; t['squareupperlefttolowerrightfill'] = 0x25A7; t['squareupperrighttolowerleftfill'] = 0x25A8; t['squareverticalfill'] = 0x25A5; t['squarewhitewithsmallblack'] = 0x25A3; t['srsquare'] = 0x33DB; t['ssabengali'] = 0x09B7; t['ssadeva'] = 0x0937; t['ssagujarati'] = 0x0AB7; t['ssangcieuckorean'] = 0x3149; t['ssanghieuhkorean'] = 0x3185; t['ssangieungkorean'] = 0x3180; t['ssangkiyeokkorean'] = 0x3132; t['ssangnieunkorean'] = 0x3165; t['ssangpieupkorean'] = 0x3143; t['ssangsioskorean'] = 0x3146; t['ssangtikeutkorean'] = 0x3138; t['ssuperior'] = 0xF6F2; t['sterling'] = 0x00A3; t['sterlingmonospace'] = 0xFFE1; t['strokelongoverlaycmb'] = 0x0336; t['strokeshortoverlaycmb'] = 0x0335; t['subset'] = 0x2282; t['subsetnotequal'] = 0x228A; t['subsetorequal'] = 0x2286; t['succeeds'] = 0x227B; t['suchthat'] = 0x220B; t['suhiragana'] = 0x3059; t['sukatakana'] = 0x30B9; t['sukatakanahalfwidth'] = 0xFF7D; t['sukunarabic'] = 0x0652; t['summation'] = 0x2211; t['sun'] = 0x263C; t['superset'] = 0x2283; t['supersetnotequal'] = 0x228B; t['supersetorequal'] = 0x2287; t['svsquare'] = 0x33DC; t['syouwaerasquare'] = 0x337C; t['t'] = 0x0074; t['tabengali'] = 0x09A4; t['tackdown'] = 0x22A4; t['tackleft'] = 0x22A3; t['tadeva'] = 0x0924; t['tagujarati'] = 0x0AA4; t['tagurmukhi'] = 0x0A24; t['taharabic'] = 0x0637; t['tahfinalarabic'] = 0xFEC2; t['tahinitialarabic'] = 0xFEC3; t['tahiragana'] = 0x305F; t['tahmedialarabic'] = 0xFEC4; t['taisyouerasquare'] = 0x337D; t['takatakana'] = 0x30BF; t['takatakanahalfwidth'] = 0xFF80; t['tatweelarabic'] = 0x0640; t['tau'] = 0x03C4; t['tav'] = 0x05EA; t['tavdages'] = 0xFB4A; t['tavdagesh'] = 0xFB4A; t['tavdageshhebrew'] = 0xFB4A; t['tavhebrew'] = 0x05EA; t['tbar'] = 0x0167; t['tbopomofo'] = 0x310A; t['tcaron'] = 0x0165; t['tccurl'] = 0x02A8; t['tcedilla'] = 0x0163; t['tcheharabic'] = 0x0686; t['tchehfinalarabic'] = 0xFB7B; t['tchehinitialarabic'] = 0xFB7C; t['tchehmedialarabic'] = 0xFB7D; t['tcircle'] = 0x24E3; t['tcircumflexbelow'] = 0x1E71; t['tcommaaccent'] = 0x0163; t['tdieresis'] = 0x1E97; t['tdotaccent'] = 0x1E6B; t['tdotbelow'] = 0x1E6D; t['tecyrillic'] = 0x0442; t['tedescendercyrillic'] = 0x04AD; t['teharabic'] = 0x062A; t['tehfinalarabic'] = 0xFE96; t['tehhahinitialarabic'] = 0xFCA2; t['tehhahisolatedarabic'] = 0xFC0C; t['tehinitialarabic'] = 0xFE97; t['tehiragana'] = 0x3066; t['tehjeeminitialarabic'] = 0xFCA1; t['tehjeemisolatedarabic'] = 0xFC0B; t['tehmarbutaarabic'] = 0x0629; t['tehmarbutafinalarabic'] = 0xFE94; t['tehmedialarabic'] = 0xFE98; t['tehmeeminitialarabic'] = 0xFCA4; t['tehmeemisolatedarabic'] = 0xFC0E; t['tehnoonfinalarabic'] = 0xFC73; t['tekatakana'] = 0x30C6; t['tekatakanahalfwidth'] = 0xFF83; t['telephone'] = 0x2121; t['telephoneblack'] = 0x260E; t['telishagedolahebrew'] = 0x05A0; t['telishaqetanahebrew'] = 0x05A9; t['tencircle'] = 0x2469; t['tenideographicparen'] = 0x3229; t['tenparen'] = 0x247D; t['tenperiod'] = 0x2491; t['tenroman'] = 0x2179; t['tesh'] = 0x02A7; t['tet'] = 0x05D8; t['tetdagesh'] = 0xFB38; t['tetdageshhebrew'] = 0xFB38; t['tethebrew'] = 0x05D8; t['tetsecyrillic'] = 0x04B5; t['tevirhebrew'] = 0x059B; t['tevirlefthebrew'] = 0x059B; t['thabengali'] = 0x09A5; t['thadeva'] = 0x0925; t['thagujarati'] = 0x0AA5; t['thagurmukhi'] = 0x0A25; t['thalarabic'] = 0x0630; t['thalfinalarabic'] = 0xFEAC; t['thanthakhatlowleftthai'] = 0xF898; t['thanthakhatlowrightthai'] = 0xF897; t['thanthakhatthai'] = 0x0E4C; t['thanthakhatupperleftthai'] = 0xF896; t['theharabic'] = 0x062B; t['thehfinalarabic'] = 0xFE9A; t['thehinitialarabic'] = 0xFE9B; t['thehmedialarabic'] = 0xFE9C; t['thereexists'] = 0x2203; t['therefore'] = 0x2234; t['theta'] = 0x03B8; t['theta1'] = 0x03D1; t['thetasymbolgreek'] = 0x03D1; t['thieuthacirclekorean'] = 0x3279; t['thieuthaparenkorean'] = 0x3219; t['thieuthcirclekorean'] = 0x326B; t['thieuthkorean'] = 0x314C; t['thieuthparenkorean'] = 0x320B; t['thirteencircle'] = 0x246C; t['thirteenparen'] = 0x2480; t['thirteenperiod'] = 0x2494; t['thonangmonthothai'] = 0x0E11; t['thook'] = 0x01AD; t['thophuthaothai'] = 0x0E12; t['thorn'] = 0x00FE; t['thothahanthai'] = 0x0E17; t['thothanthai'] = 0x0E10; t['thothongthai'] = 0x0E18; t['thothungthai'] = 0x0E16; t['thousandcyrillic'] = 0x0482; t['thousandsseparatorarabic'] = 0x066C; t['thousandsseparatorpersian'] = 0x066C; t['three'] = 0x0033; t['threearabic'] = 0x0663; t['threebengali'] = 0x09E9; t['threecircle'] = 0x2462; t['threecircleinversesansserif'] = 0x278C; t['threedeva'] = 0x0969; t['threeeighths'] = 0x215C; t['threegujarati'] = 0x0AE9; t['threegurmukhi'] = 0x0A69; t['threehackarabic'] = 0x0663; t['threehangzhou'] = 0x3023; t['threeideographicparen'] = 0x3222; t['threeinferior'] = 0x2083; t['threemonospace'] = 0xFF13; t['threenumeratorbengali'] = 0x09F6; t['threeoldstyle'] = 0xF733; t['threeparen'] = 0x2476; t['threeperiod'] = 0x248A; t['threepersian'] = 0x06F3; t['threequarters'] = 0x00BE; t['threequartersemdash'] = 0xF6DE; t['threeroman'] = 0x2172; t['threesuperior'] = 0x00B3; t['threethai'] = 0x0E53; t['thzsquare'] = 0x3394; t['tihiragana'] = 0x3061; t['tikatakana'] = 0x30C1; t['tikatakanahalfwidth'] = 0xFF81; t['tikeutacirclekorean'] = 0x3270; t['tikeutaparenkorean'] = 0x3210; t['tikeutcirclekorean'] = 0x3262; t['tikeutkorean'] = 0x3137; t['tikeutparenkorean'] = 0x3202; t['tilde'] = 0x02DC; t['tildebelowcmb'] = 0x0330; t['tildecmb'] = 0x0303; t['tildecomb'] = 0x0303; t['tildedoublecmb'] = 0x0360; t['tildeoperator'] = 0x223C; t['tildeoverlaycmb'] = 0x0334; t['tildeverticalcmb'] = 0x033E; t['timescircle'] = 0x2297; t['tipehahebrew'] = 0x0596; t['tipehalefthebrew'] = 0x0596; t['tippigurmukhi'] = 0x0A70; t['titlocyrilliccmb'] = 0x0483; t['tiwnarmenian'] = 0x057F; t['tlinebelow'] = 0x1E6F; t['tmonospace'] = 0xFF54; t['toarmenian'] = 0x0569; t['tohiragana'] = 0x3068; t['tokatakana'] = 0x30C8; t['tokatakanahalfwidth'] = 0xFF84; t['tonebarextrahighmod'] = 0x02E5; t['tonebarextralowmod'] = 0x02E9; t['tonebarhighmod'] = 0x02E6; t['tonebarlowmod'] = 0x02E8; t['tonebarmidmod'] = 0x02E7; t['tonefive'] = 0x01BD; t['tonesix'] = 0x0185; t['tonetwo'] = 0x01A8; t['tonos'] = 0x0384; t['tonsquare'] = 0x3327; t['topatakthai'] = 0x0E0F; t['tortoiseshellbracketleft'] = 0x3014; t['tortoiseshellbracketleftsmall'] = 0xFE5D; t['tortoiseshellbracketleftvertical'] = 0xFE39; t['tortoiseshellbracketright'] = 0x3015; t['tortoiseshellbracketrightsmall'] = 0xFE5E; t['tortoiseshellbracketrightvertical'] = 0xFE3A; t['totaothai'] = 0x0E15; t['tpalatalhook'] = 0x01AB; t['tparen'] = 0x24AF; t['trademark'] = 0x2122; t['trademarksans'] = 0xF8EA; t['trademarkserif'] = 0xF6DB; t['tretroflexhook'] = 0x0288; t['triagdn'] = 0x25BC; t['triaglf'] = 0x25C4; t['triagrt'] = 0x25BA; t['triagup'] = 0x25B2; t['ts'] = 0x02A6; t['tsadi'] = 0x05E6; t['tsadidagesh'] = 0xFB46; t['tsadidageshhebrew'] = 0xFB46; t['tsadihebrew'] = 0x05E6; t['tsecyrillic'] = 0x0446; t['tsere'] = 0x05B5; t['tsere12'] = 0x05B5; t['tsere1e'] = 0x05B5; t['tsere2b'] = 0x05B5; t['tserehebrew'] = 0x05B5; t['tserenarrowhebrew'] = 0x05B5; t['tserequarterhebrew'] = 0x05B5; t['tserewidehebrew'] = 0x05B5; t['tshecyrillic'] = 0x045B; t['tsuperior'] = 0xF6F3; t['ttabengali'] = 0x099F; t['ttadeva'] = 0x091F; t['ttagujarati'] = 0x0A9F; t['ttagurmukhi'] = 0x0A1F; t['tteharabic'] = 0x0679; t['ttehfinalarabic'] = 0xFB67; t['ttehinitialarabic'] = 0xFB68; t['ttehmedialarabic'] = 0xFB69; t['tthabengali'] = 0x09A0; t['tthadeva'] = 0x0920; t['tthagujarati'] = 0x0AA0; t['tthagurmukhi'] = 0x0A20; t['tturned'] = 0x0287; t['tuhiragana'] = 0x3064; t['tukatakana'] = 0x30C4; t['tukatakanahalfwidth'] = 0xFF82; t['tusmallhiragana'] = 0x3063; t['tusmallkatakana'] = 0x30C3; t['tusmallkatakanahalfwidth'] = 0xFF6F; t['twelvecircle'] = 0x246B; t['twelveparen'] = 0x247F; t['twelveperiod'] = 0x2493; t['twelveroman'] = 0x217B; t['twentycircle'] = 0x2473; t['twentyhangzhou'] = 0x5344; t['twentyparen'] = 0x2487; t['twentyperiod'] = 0x249B; t['two'] = 0x0032; t['twoarabic'] = 0x0662; t['twobengali'] = 0x09E8; t['twocircle'] = 0x2461; t['twocircleinversesansserif'] = 0x278B; t['twodeva'] = 0x0968; t['twodotenleader'] = 0x2025; t['twodotleader'] = 0x2025; t['twodotleadervertical'] = 0xFE30; t['twogujarati'] = 0x0AE8; t['twogurmukhi'] = 0x0A68; t['twohackarabic'] = 0x0662; t['twohangzhou'] = 0x3022; t['twoideographicparen'] = 0x3221; t['twoinferior'] = 0x2082; t['twomonospace'] = 0xFF12; t['twonumeratorbengali'] = 0x09F5; t['twooldstyle'] = 0xF732; t['twoparen'] = 0x2475; t['twoperiod'] = 0x2489; t['twopersian'] = 0x06F2; t['tworoman'] = 0x2171; t['twostroke'] = 0x01BB; t['twosuperior'] = 0x00B2; t['twothai'] = 0x0E52; t['twothirds'] = 0x2154; t['u'] = 0x0075; t['uacute'] = 0x00FA; t['ubar'] = 0x0289; t['ubengali'] = 0x0989; t['ubopomofo'] = 0x3128; t['ubreve'] = 0x016D; t['ucaron'] = 0x01D4; t['ucircle'] = 0x24E4; t['ucircumflex'] = 0x00FB; t['ucircumflexbelow'] = 0x1E77; t['ucyrillic'] = 0x0443; t['udattadeva'] = 0x0951; t['udblacute'] = 0x0171; t['udblgrave'] = 0x0215; t['udeva'] = 0x0909; t['udieresis'] = 0x00FC; t['udieresisacute'] = 0x01D8; t['udieresisbelow'] = 0x1E73; t['udieresiscaron'] = 0x01DA; t['udieresiscyrillic'] = 0x04F1; t['udieresisgrave'] = 0x01DC; t['udieresismacron'] = 0x01D6; t['udotbelow'] = 0x1EE5; t['ugrave'] = 0x00F9; t['ugujarati'] = 0x0A89; t['ugurmukhi'] = 0x0A09; t['uhiragana'] = 0x3046; t['uhookabove'] = 0x1EE7; t['uhorn'] = 0x01B0; t['uhornacute'] = 0x1EE9; t['uhorndotbelow'] = 0x1EF1; t['uhorngrave'] = 0x1EEB; t['uhornhookabove'] = 0x1EED; t['uhorntilde'] = 0x1EEF; t['uhungarumlaut'] = 0x0171; t['uhungarumlautcyrillic'] = 0x04F3; t['uinvertedbreve'] = 0x0217; t['ukatakana'] = 0x30A6; t['ukatakanahalfwidth'] = 0xFF73; t['ukcyrillic'] = 0x0479; t['ukorean'] = 0x315C; t['umacron'] = 0x016B; t['umacroncyrillic'] = 0x04EF; t['umacrondieresis'] = 0x1E7B; t['umatragurmukhi'] = 0x0A41; t['umonospace'] = 0xFF55; t['underscore'] = 0x005F; t['underscoredbl'] = 0x2017; t['underscoremonospace'] = 0xFF3F; t['underscorevertical'] = 0xFE33; t['underscorewavy'] = 0xFE4F; t['union'] = 0x222A; t['universal'] = 0x2200; t['uogonek'] = 0x0173; t['uparen'] = 0x24B0; t['upblock'] = 0x2580; t['upperdothebrew'] = 0x05C4; t['upsilon'] = 0x03C5; t['upsilondieresis'] = 0x03CB; t['upsilondieresistonos'] = 0x03B0; t['upsilonlatin'] = 0x028A; t['upsilontonos'] = 0x03CD; t['uptackbelowcmb'] = 0x031D; t['uptackmod'] = 0x02D4; t['uragurmukhi'] = 0x0A73; t['uring'] = 0x016F; t['ushortcyrillic'] = 0x045E; t['usmallhiragana'] = 0x3045; t['usmallkatakana'] = 0x30A5; t['usmallkatakanahalfwidth'] = 0xFF69; t['ustraightcyrillic'] = 0x04AF; t['ustraightstrokecyrillic'] = 0x04B1; t['utilde'] = 0x0169; t['utildeacute'] = 0x1E79; t['utildebelow'] = 0x1E75; t['uubengali'] = 0x098A; t['uudeva'] = 0x090A; t['uugujarati'] = 0x0A8A; t['uugurmukhi'] = 0x0A0A; t['uumatragurmukhi'] = 0x0A42; t['uuvowelsignbengali'] = 0x09C2; t['uuvowelsigndeva'] = 0x0942; t['uuvowelsigngujarati'] = 0x0AC2; t['uvowelsignbengali'] = 0x09C1; t['uvowelsigndeva'] = 0x0941; t['uvowelsigngujarati'] = 0x0AC1; t['v'] = 0x0076; t['vadeva'] = 0x0935; t['vagujarati'] = 0x0AB5; t['vagurmukhi'] = 0x0A35; t['vakatakana'] = 0x30F7; t['vav'] = 0x05D5; t['vavdagesh'] = 0xFB35; t['vavdagesh65'] = 0xFB35; t['vavdageshhebrew'] = 0xFB35; t['vavhebrew'] = 0x05D5; t['vavholam'] = 0xFB4B; t['vavholamhebrew'] = 0xFB4B; t['vavvavhebrew'] = 0x05F0; t['vavyodhebrew'] = 0x05F1; t['vcircle'] = 0x24E5; t['vdotbelow'] = 0x1E7F; t['vecyrillic'] = 0x0432; t['veharabic'] = 0x06A4; t['vehfinalarabic'] = 0xFB6B; t['vehinitialarabic'] = 0xFB6C; t['vehmedialarabic'] = 0xFB6D; t['vekatakana'] = 0x30F9; t['venus'] = 0x2640; t['verticalbar'] = 0x007C; t['verticallineabovecmb'] = 0x030D; t['verticallinebelowcmb'] = 0x0329; t['verticallinelowmod'] = 0x02CC; t['verticallinemod'] = 0x02C8; t['vewarmenian'] = 0x057E; t['vhook'] = 0x028B; t['vikatakana'] = 0x30F8; t['viramabengali'] = 0x09CD; t['viramadeva'] = 0x094D; t['viramagujarati'] = 0x0ACD; t['visargabengali'] = 0x0983; t['visargadeva'] = 0x0903; t['visargagujarati'] = 0x0A83; t['vmonospace'] = 0xFF56; t['voarmenian'] = 0x0578; t['voicediterationhiragana'] = 0x309E; t['voicediterationkatakana'] = 0x30FE; t['voicedmarkkana'] = 0x309B; t['voicedmarkkanahalfwidth'] = 0xFF9E; t['vokatakana'] = 0x30FA; t['vparen'] = 0x24B1; t['vtilde'] = 0x1E7D; t['vturned'] = 0x028C; t['vuhiragana'] = 0x3094; t['vukatakana'] = 0x30F4; t['w'] = 0x0077; t['wacute'] = 0x1E83; t['waekorean'] = 0x3159; t['wahiragana'] = 0x308F; t['wakatakana'] = 0x30EF; t['wakatakanahalfwidth'] = 0xFF9C; t['wakorean'] = 0x3158; t['wasmallhiragana'] = 0x308E; t['wasmallkatakana'] = 0x30EE; t['wattosquare'] = 0x3357; t['wavedash'] = 0x301C; t['wavyunderscorevertical'] = 0xFE34; t['wawarabic'] = 0x0648; t['wawfinalarabic'] = 0xFEEE; t['wawhamzaabovearabic'] = 0x0624; t['wawhamzaabovefinalarabic'] = 0xFE86; t['wbsquare'] = 0x33DD; t['wcircle'] = 0x24E6; t['wcircumflex'] = 0x0175; t['wdieresis'] = 0x1E85; t['wdotaccent'] = 0x1E87; t['wdotbelow'] = 0x1E89; t['wehiragana'] = 0x3091; t['weierstrass'] = 0x2118; t['wekatakana'] = 0x30F1; t['wekorean'] = 0x315E; t['weokorean'] = 0x315D; t['wgrave'] = 0x1E81; t['whitebullet'] = 0x25E6; t['whitecircle'] = 0x25CB; t['whitecircleinverse'] = 0x25D9; t['whitecornerbracketleft'] = 0x300E; t['whitecornerbracketleftvertical'] = 0xFE43; t['whitecornerbracketright'] = 0x300F; t['whitecornerbracketrightvertical'] = 0xFE44; t['whitediamond'] = 0x25C7; t['whitediamondcontainingblacksmalldiamond'] = 0x25C8; t['whitedownpointingsmalltriangle'] = 0x25BF; t['whitedownpointingtriangle'] = 0x25BD; t['whiteleftpointingsmalltriangle'] = 0x25C3; t['whiteleftpointingtriangle'] = 0x25C1; t['whitelenticularbracketleft'] = 0x3016; t['whitelenticularbracketright'] = 0x3017; t['whiterightpointingsmalltriangle'] = 0x25B9; t['whiterightpointingtriangle'] = 0x25B7; t['whitesmallsquare'] = 0x25AB; t['whitesmilingface'] = 0x263A; t['whitesquare'] = 0x25A1; t['whitestar'] = 0x2606; t['whitetelephone'] = 0x260F; t['whitetortoiseshellbracketleft'] = 0x3018; t['whitetortoiseshellbracketright'] = 0x3019; t['whiteuppointingsmalltriangle'] = 0x25B5; t['whiteuppointingtriangle'] = 0x25B3; t['wihiragana'] = 0x3090; t['wikatakana'] = 0x30F0; t['wikorean'] = 0x315F; t['wmonospace'] = 0xFF57; t['wohiragana'] = 0x3092; t['wokatakana'] = 0x30F2; t['wokatakanahalfwidth'] = 0xFF66; t['won'] = 0x20A9; t['wonmonospace'] = 0xFFE6; t['wowaenthai'] = 0x0E27; t['wparen'] = 0x24B2; t['wring'] = 0x1E98; t['wsuperior'] = 0x02B7; t['wturned'] = 0x028D; t['wynn'] = 0x01BF; t['x'] = 0x0078; t['xabovecmb'] = 0x033D; t['xbopomofo'] = 0x3112; t['xcircle'] = 0x24E7; t['xdieresis'] = 0x1E8D; t['xdotaccent'] = 0x1E8B; t['xeharmenian'] = 0x056D; t['xi'] = 0x03BE; t['xmonospace'] = 0xFF58; t['xparen'] = 0x24B3; t['xsuperior'] = 0x02E3; t['y'] = 0x0079; t['yaadosquare'] = 0x334E; t['yabengali'] = 0x09AF; t['yacute'] = 0x00FD; t['yadeva'] = 0x092F; t['yaekorean'] = 0x3152; t['yagujarati'] = 0x0AAF; t['yagurmukhi'] = 0x0A2F; t['yahiragana'] = 0x3084; t['yakatakana'] = 0x30E4; t['yakatakanahalfwidth'] = 0xFF94; t['yakorean'] = 0x3151; t['yamakkanthai'] = 0x0E4E; t['yasmallhiragana'] = 0x3083; t['yasmallkatakana'] = 0x30E3; t['yasmallkatakanahalfwidth'] = 0xFF6C; t['yatcyrillic'] = 0x0463; t['ycircle'] = 0x24E8; t['ycircumflex'] = 0x0177; t['ydieresis'] = 0x00FF; t['ydotaccent'] = 0x1E8F; t['ydotbelow'] = 0x1EF5; t['yeharabic'] = 0x064A; t['yehbarreearabic'] = 0x06D2; t['yehbarreefinalarabic'] = 0xFBAF; t['yehfinalarabic'] = 0xFEF2; t['yehhamzaabovearabic'] = 0x0626; t['yehhamzaabovefinalarabic'] = 0xFE8A; t['yehhamzaaboveinitialarabic'] = 0xFE8B; t['yehhamzaabovemedialarabic'] = 0xFE8C; t['yehinitialarabic'] = 0xFEF3; t['yehmedialarabic'] = 0xFEF4; t['yehmeeminitialarabic'] = 0xFCDD; t['yehmeemisolatedarabic'] = 0xFC58; t['yehnoonfinalarabic'] = 0xFC94; t['yehthreedotsbelowarabic'] = 0x06D1; t['yekorean'] = 0x3156; t['yen'] = 0x00A5; t['yenmonospace'] = 0xFFE5; t['yeokorean'] = 0x3155; t['yeorinhieuhkorean'] = 0x3186; t['yerahbenyomohebrew'] = 0x05AA; t['yerahbenyomolefthebrew'] = 0x05AA; t['yericyrillic'] = 0x044B; t['yerudieresiscyrillic'] = 0x04F9; t['yesieungkorean'] = 0x3181; t['yesieungpansioskorean'] = 0x3183; t['yesieungsioskorean'] = 0x3182; t['yetivhebrew'] = 0x059A; t['ygrave'] = 0x1EF3; t['yhook'] = 0x01B4; t['yhookabove'] = 0x1EF7; t['yiarmenian'] = 0x0575; t['yicyrillic'] = 0x0457; t['yikorean'] = 0x3162; t['yinyang'] = 0x262F; t['yiwnarmenian'] = 0x0582; t['ymonospace'] = 0xFF59; t['yod'] = 0x05D9; t['yoddagesh'] = 0xFB39; t['yoddageshhebrew'] = 0xFB39; t['yodhebrew'] = 0x05D9; t['yodyodhebrew'] = 0x05F2; t['yodyodpatahhebrew'] = 0xFB1F; t['yohiragana'] = 0x3088; t['yoikorean'] = 0x3189; t['yokatakana'] = 0x30E8; t['yokatakanahalfwidth'] = 0xFF96; t['yokorean'] = 0x315B; t['yosmallhiragana'] = 0x3087; t['yosmallkatakana'] = 0x30E7; t['yosmallkatakanahalfwidth'] = 0xFF6E; t['yotgreek'] = 0x03F3; t['yoyaekorean'] = 0x3188; t['yoyakorean'] = 0x3187; t['yoyakthai'] = 0x0E22; t['yoyingthai'] = 0x0E0D; t['yparen'] = 0x24B4; t['ypogegrammeni'] = 0x037A; t['ypogegrammenigreekcmb'] = 0x0345; t['yr'] = 0x01A6; t['yring'] = 0x1E99; t['ysuperior'] = 0x02B8; t['ytilde'] = 0x1EF9; t['yturned'] = 0x028E; t['yuhiragana'] = 0x3086; t['yuikorean'] = 0x318C; t['yukatakana'] = 0x30E6; t['yukatakanahalfwidth'] = 0xFF95; t['yukorean'] = 0x3160; t['yusbigcyrillic'] = 0x046B; t['yusbigiotifiedcyrillic'] = 0x046D; t['yuslittlecyrillic'] = 0x0467; t['yuslittleiotifiedcyrillic'] = 0x0469; t['yusmallhiragana'] = 0x3085; t['yusmallkatakana'] = 0x30E5; t['yusmallkatakanahalfwidth'] = 0xFF6D; t['yuyekorean'] = 0x318B; t['yuyeokorean'] = 0x318A; t['yyabengali'] = 0x09DF; t['yyadeva'] = 0x095F; t['z'] = 0x007A; t['zaarmenian'] = 0x0566; t['zacute'] = 0x017A; t['zadeva'] = 0x095B; t['zagurmukhi'] = 0x0A5B; t['zaharabic'] = 0x0638; t['zahfinalarabic'] = 0xFEC6; t['zahinitialarabic'] = 0xFEC7; t['zahiragana'] = 0x3056; t['zahmedialarabic'] = 0xFEC8; t['zainarabic'] = 0x0632; t['zainfinalarabic'] = 0xFEB0; t['zakatakana'] = 0x30B6; t['zaqefgadolhebrew'] = 0x0595; t['zaqefqatanhebrew'] = 0x0594; t['zarqahebrew'] = 0x0598; t['zayin'] = 0x05D6; t['zayindagesh'] = 0xFB36; t['zayindageshhebrew'] = 0xFB36; t['zayinhebrew'] = 0x05D6; t['zbopomofo'] = 0x3117; t['zcaron'] = 0x017E; t['zcircle'] = 0x24E9; t['zcircumflex'] = 0x1E91; t['zcurl'] = 0x0291; t['zdot'] = 0x017C; t['zdotaccent'] = 0x017C; t['zdotbelow'] = 0x1E93; t['zecyrillic'] = 0x0437; t['zedescendercyrillic'] = 0x0499; t['zedieresiscyrillic'] = 0x04DF; t['zehiragana'] = 0x305C; t['zekatakana'] = 0x30BC; t['zero'] = 0x0030; t['zeroarabic'] = 0x0660; t['zerobengali'] = 0x09E6; t['zerodeva'] = 0x0966; t['zerogujarati'] = 0x0AE6; t['zerogurmukhi'] = 0x0A66; t['zerohackarabic'] = 0x0660; t['zeroinferior'] = 0x2080; t['zeromonospace'] = 0xFF10; t['zerooldstyle'] = 0xF730; t['zeropersian'] = 0x06F0; t['zerosuperior'] = 0x2070; t['zerothai'] = 0x0E50; t['zerowidthjoiner'] = 0xFEFF; t['zerowidthnonjoiner'] = 0x200C; t['zerowidthspace'] = 0x200B; t['zeta'] = 0x03B6; t['zhbopomofo'] = 0x3113; t['zhearmenian'] = 0x056A; t['zhebrevecyrillic'] = 0x04C2; t['zhecyrillic'] = 0x0436; t['zhedescendercyrillic'] = 0x0497; t['zhedieresiscyrillic'] = 0x04DD; t['zihiragana'] = 0x3058; t['zikatakana'] = 0x30B8; t['zinorhebrew'] = 0x05AE; t['zlinebelow'] = 0x1E95; t['zmonospace'] = 0xFF5A; t['zohiragana'] = 0x305E; t['zokatakana'] = 0x30BE; t['zparen'] = 0x24B5; t['zretroflexhook'] = 0x0290; t['zstroke'] = 0x01B6; t['zuhiragana'] = 0x305A; t['zukatakana'] = 0x30BA; t['.notdef'] = 0x0000; t['angbracketleftbig'] = 0x2329; t['angbracketleftBig'] = 0x2329; t['angbracketleftbigg'] = 0x2329; t['angbracketleftBigg'] = 0x2329; t['angbracketrightBig'] = 0x232A; t['angbracketrightbig'] = 0x232A; t['angbracketrightBigg'] = 0x232A; t['angbracketrightbigg'] = 0x232A; t['arrowhookleft'] = 0x21AA; t['arrowhookright'] = 0x21A9; t['arrowlefttophalf'] = 0x21BC; t['arrowleftbothalf'] = 0x21BD; t['arrownortheast'] = 0x2197; t['arrownorthwest'] = 0x2196; t['arrowrighttophalf'] = 0x21C0; t['arrowrightbothalf'] = 0x21C1; t['arrowsoutheast'] = 0x2198; t['arrowsouthwest'] = 0x2199; t['backslashbig'] = 0x2216; t['backslashBig'] = 0x2216; t['backslashBigg'] = 0x2216; t['backslashbigg'] = 0x2216; t['bardbl'] = 0x2016; t['bracehtipdownleft'] = 0xFE37; t['bracehtipdownright'] = 0xFE37; t['bracehtipupleft'] = 0xFE38; t['bracehtipupright'] = 0xFE38; t['braceleftBig'] = 0x007B; t['braceleftbig'] = 0x007B; t['braceleftbigg'] = 0x007B; t['braceleftBigg'] = 0x007B; t['bracerightBig'] = 0x007D; t['bracerightbig'] = 0x007D; t['bracerightbigg'] = 0x007D; t['bracerightBigg'] = 0x007D; t['bracketleftbig'] = 0x005B; t['bracketleftBig'] = 0x005B; t['bracketleftbigg'] = 0x005B; t['bracketleftBigg'] = 0x005B; t['bracketrightBig'] = 0x005D; t['bracketrightbig'] = 0x005D; t['bracketrightbigg'] = 0x005D; t['bracketrightBigg'] = 0x005D; t['ceilingleftbig'] = 0x2308; t['ceilingleftBig'] = 0x2308; t['ceilingleftBigg'] = 0x2308; t['ceilingleftbigg'] = 0x2308; t['ceilingrightbig'] = 0x2309; t['ceilingrightBig'] = 0x2309; t['ceilingrightbigg'] = 0x2309; t['ceilingrightBigg'] = 0x2309; t['circledotdisplay'] = 0x2299; t['circledottext'] = 0x2299; t['circlemultiplydisplay'] = 0x2297; t['circlemultiplytext'] = 0x2297; t['circleplusdisplay'] = 0x2295; t['circleplustext'] = 0x2295; t['contintegraldisplay'] = 0x222E; t['contintegraltext'] = 0x222E; t['coproductdisplay'] = 0x2210; t['coproducttext'] = 0x2210; t['floorleftBig'] = 0x230A; t['floorleftbig'] = 0x230A; t['floorleftbigg'] = 0x230A; t['floorleftBigg'] = 0x230A; t['floorrightbig'] = 0x230B; t['floorrightBig'] = 0x230B; t['floorrightBigg'] = 0x230B; t['floorrightbigg'] = 0x230B; t['hatwide'] = 0x0302; t['hatwider'] = 0x0302; t['hatwidest'] = 0x0302; t['intercal'] = 0x1D40; t['integraldisplay'] = 0x222B; t['integraltext'] = 0x222B; t['intersectiondisplay'] = 0x22C2; t['intersectiontext'] = 0x22C2; t['logicalanddisplay'] = 0x2227; t['logicalandtext'] = 0x2227; t['logicalordisplay'] = 0x2228; t['logicalortext'] = 0x2228; t['parenleftBig'] = 0x0028; t['parenleftbig'] = 0x0028; t['parenleftBigg'] = 0x0028; t['parenleftbigg'] = 0x0028; t['parenrightBig'] = 0x0029; t['parenrightbig'] = 0x0029; t['parenrightBigg'] = 0x0029; t['parenrightbigg'] = 0x0029; t['prime'] = 0x2032; t['productdisplay'] = 0x220F; t['producttext'] = 0x220F; t['radicalbig'] = 0x221A; t['radicalBig'] = 0x221A; t['radicalBigg'] = 0x221A; t['radicalbigg'] = 0x221A; t['radicalbt'] = 0x221A; t['radicaltp'] = 0x221A; t['radicalvertex'] = 0x221A; t['slashbig'] = 0x002F; t['slashBig'] = 0x002F; t['slashBigg'] = 0x002F; t['slashbigg'] = 0x002F; t['summationdisplay'] = 0x2211; t['summationtext'] = 0x2211; t['tildewide'] = 0x02DC; t['tildewider'] = 0x02DC; t['tildewidest'] = 0x02DC; t['uniondisplay'] = 0x22C3; t['unionmultidisplay'] = 0x228E; t['unionmultitext'] = 0x228E; t['unionsqdisplay'] = 0x2294; t['unionsqtext'] = 0x2294; t['uniontext'] = 0x22C3; t['vextenddouble'] = 0x2225; t['vextendsingle'] = 0x2223; }); var getDingbatsGlyphsUnicode = getLookupTableFactory(function (t) { t['space'] = 0x0020; t['a1'] = 0x2701; t['a2'] = 0x2702; t['a202'] = 0x2703; t['a3'] = 0x2704; t['a4'] = 0x260E; t['a5'] = 0x2706; t['a119'] = 0x2707; t['a118'] = 0x2708; t['a117'] = 0x2709; t['a11'] = 0x261B; t['a12'] = 0x261E; t['a13'] = 0x270C; t['a14'] = 0x270D; t['a15'] = 0x270E; t['a16'] = 0x270F; t['a105'] = 0x2710; t['a17'] = 0x2711; t['a18'] = 0x2712; t['a19'] = 0x2713; t['a20'] = 0x2714; t['a21'] = 0x2715; t['a22'] = 0x2716; t['a23'] = 0x2717; t['a24'] = 0x2718; t['a25'] = 0x2719; t['a26'] = 0x271A; t['a27'] = 0x271B; t['a28'] = 0x271C; t['a6'] = 0x271D; t['a7'] = 0x271E; t['a8'] = 0x271F; t['a9'] = 0x2720; t['a10'] = 0x2721; t['a29'] = 0x2722; t['a30'] = 0x2723; t['a31'] = 0x2724; t['a32'] = 0x2725; t['a33'] = 0x2726; t['a34'] = 0x2727; t['a35'] = 0x2605; t['a36'] = 0x2729; t['a37'] = 0x272A; t['a38'] = 0x272B; t['a39'] = 0x272C; t['a40'] = 0x272D; t['a41'] = 0x272E; t['a42'] = 0x272F; t['a43'] = 0x2730; t['a44'] = 0x2731; t['a45'] = 0x2732; t['a46'] = 0x2733; t['a47'] = 0x2734; t['a48'] = 0x2735; t['a49'] = 0x2736; t['a50'] = 0x2737; t['a51'] = 0x2738; t['a52'] = 0x2739; t['a53'] = 0x273A; t['a54'] = 0x273B; t['a55'] = 0x273C; t['a56'] = 0x273D; t['a57'] = 0x273E; t['a58'] = 0x273F; t['a59'] = 0x2740; t['a60'] = 0x2741; t['a61'] = 0x2742; t['a62'] = 0x2743; t['a63'] = 0x2744; t['a64'] = 0x2745; t['a65'] = 0x2746; t['a66'] = 0x2747; t['a67'] = 0x2748; t['a68'] = 0x2749; t['a69'] = 0x274A; t['a70'] = 0x274B; t['a71'] = 0x25CF; t['a72'] = 0x274D; t['a73'] = 0x25A0; t['a74'] = 0x274F; t['a203'] = 0x2750; t['a75'] = 0x2751; t['a204'] = 0x2752; t['a76'] = 0x25B2; t['a77'] = 0x25BC; t['a78'] = 0x25C6; t['a79'] = 0x2756; t['a81'] = 0x25D7; t['a82'] = 0x2758; t['a83'] = 0x2759; t['a84'] = 0x275A; t['a97'] = 0x275B; t['a98'] = 0x275C; t['a99'] = 0x275D; t['a100'] = 0x275E; t['a101'] = 0x2761; t['a102'] = 0x2762; t['a103'] = 0x2763; t['a104'] = 0x2764; t['a106'] = 0x2765; t['a107'] = 0x2766; t['a108'] = 0x2767; t['a112'] = 0x2663; t['a111'] = 0x2666; t['a110'] = 0x2665; t['a109'] = 0x2660; t['a120'] = 0x2460; t['a121'] = 0x2461; t['a122'] = 0x2462; t['a123'] = 0x2463; t['a124'] = 0x2464; t['a125'] = 0x2465; t['a126'] = 0x2466; t['a127'] = 0x2467; t['a128'] = 0x2468; t['a129'] = 0x2469; t['a130'] = 0x2776; t['a131'] = 0x2777; t['a132'] = 0x2778; t['a133'] = 0x2779; t['a134'] = 0x277A; t['a135'] = 0x277B; t['a136'] = 0x277C; t['a137'] = 0x277D; t['a138'] = 0x277E; t['a139'] = 0x277F; t['a140'] = 0x2780; t['a141'] = 0x2781; t['a142'] = 0x2782; t['a143'] = 0x2783; t['a144'] = 0x2784; t['a145'] = 0x2785; t['a146'] = 0x2786; t['a147'] = 0x2787; t['a148'] = 0x2788; t['a149'] = 0x2789; t['a150'] = 0x278A; t['a151'] = 0x278B; t['a152'] = 0x278C; t['a153'] = 0x278D; t['a154'] = 0x278E; t['a155'] = 0x278F; t['a156'] = 0x2790; t['a157'] = 0x2791; t['a158'] = 0x2792; t['a159'] = 0x2793; t['a160'] = 0x2794; t['a161'] = 0x2192; t['a163'] = 0x2194; t['a164'] = 0x2195; t['a196'] = 0x2798; t['a165'] = 0x2799; t['a192'] = 0x279A; t['a166'] = 0x279B; t['a167'] = 0x279C; t['a168'] = 0x279D; t['a169'] = 0x279E; t['a170'] = 0x279F; t['a171'] = 0x27A0; t['a172'] = 0x27A1; t['a173'] = 0x27A2; t['a162'] = 0x27A3; t['a174'] = 0x27A4; t['a175'] = 0x27A5; t['a176'] = 0x27A6; t['a177'] = 0x27A7; t['a178'] = 0x27A8; t['a179'] = 0x27A9; t['a193'] = 0x27AA; t['a180'] = 0x27AB; t['a199'] = 0x27AC; t['a181'] = 0x27AD; t['a200'] = 0x27AE; t['a182'] = 0x27AF; t['a201'] = 0x27B1; t['a183'] = 0x27B2; t['a184'] = 0x27B3; t['a197'] = 0x27B4; t['a185'] = 0x27B5; t['a194'] = 0x27B6; t['a198'] = 0x27B7; t['a186'] = 0x27B8; t['a195'] = 0x27B9; t['a187'] = 0x27BA; t['a188'] = 0x27BB; t['a189'] = 0x27BC; t['a190'] = 0x27BD; t['a191'] = 0x27BE; t['a89'] = 0x2768; t['a90'] = 0x2769; t['a93'] = 0x276A; t['a94'] = 0x276B; t['a91'] = 0x276C; t['a92'] = 0x276D; t['a205'] = 0x276E; t['a85'] = 0x276F; t['a206'] = 0x2770; t['a86'] = 0x2771; t['a87'] = 0x2772; t['a88'] = 0x2773; t['a95'] = 0x2774; t['a96'] = 0x2775; t['.notdef'] = 0x0000; }); exports.getGlyphsUnicode = getGlyphsUnicode; exports.getDingbatsGlyphsUnicode = getDingbatsGlyphsUnicode; /***/ }), /* 178 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getSupplementalGlyphMapForCalibri = exports.getSupplementalGlyphMapForArialBlack = exports.getGlyphMapForStandardFonts = exports.getSymbolsFonts = exports.getSerifFonts = exports.getNonStdFontMap = exports.getStdFontMap = void 0; var _util = __w_extracthighlights_require__(6); var getStdFontMap = (0, _util.getLookupTableFactory)(function (t) { 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-Bold'] = 'Courier-Bold'; 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'] = 'Helvetica'; t['Helvetica-Bold'] = 'Helvetica-Bold'; t['Helvetica-BoldItalic'] = 'Helvetica-BoldOblique'; t['Helvetica-BoldOblique'] = 'Helvetica-BoldOblique'; t['Helvetica-Italic'] = 'Helvetica-Oblique'; t['Helvetica-Oblique'] = 'Helvetica-Oblique'; t['SegoeUISymbol'] = 'Helvetica'; 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; var getNonStdFontMap = (0, _util.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['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['Wingdings'] = 'ZapfDingbats'; }); exports.getNonStdFontMap = getNonStdFontMap; var getSerifFonts = (0, _util.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['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; var getSymbolsFonts = (0, _util.getLookupTableFactory)(function (t) { t['Dingbats'] = true; t['Symbol'] = true; t['ZapfDingbats'] = true; }); exports.getSymbolsFonts = getSymbolsFonts; var getGlyphMapForStandardFonts = (0, _util.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[210] = 218; t[223] = 711; t[224] = 321; t[225] = 322; t[227] = 353; t[229] = 382; 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[268] = 283; t[269] = 313; t[275] = 323; t[276] = 324; t[278] = 328; 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; var getSupplementalGlyphMapForArialBlack = (0, _util.getLookupTableFactory)(function (t) { t[227] = 322; t[264] = 261; t[291] = 346; }); exports.getSupplementalGlyphMapForArialBlack = getSupplementalGlyphMapForArialBlack; var getSupplementalGlyphMapForCalibri = (0, _util.getLookupTableFactory)(function (t) { t[1] = 32; t[4] = 65; t[17] = 66; t[18] = 67; t[24] = 68; t[28] = 69; t[38] = 70; t[39] = 71; t[44] = 72; t[47] = 73; 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[94] = 83; t[100] = 84; t[104] = 85; t[115] = 86; t[116] = 87; t[121] = 88; t[122] = 89; t[127] = 90; t[258] = 97; t[268] = 261; t[271] = 98; t[272] = 99; t[273] = 263; t[282] = 100; t[286] = 101; t[295] = 281; t[296] = 102; t[336] = 103; t[346] = 104; t[349] = 105; 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[400] = 115; t[401] = 347; t[410] = 116; t[437] = 117; t[448] = 118; t[449] = 119; t[454] = 120; t[455] = 121; t[460] = 122; 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; /***/ }), /* 179 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var getLookupTableFactory = __w_extracthighlights_require__(6).getLookupTableFactory; var getSpecialPUASymbols = 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) { var unicode = glyphsUnicodeMap[name]; if (unicode !== undefined) { return unicode; } if (!name) { return -1; } if (name[0] === 'u') { var nameLen = name.length, 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; } var 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 (var i = 0, ii = UnicodeRanges.length; i < ii; i++) { var range = UnicodeRanges[i]; if (value >= range.begin && value < range.end) { return i; } } return -1; } function isRTLRangeFor(value) { var 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; } var getNormalizedUnicodes = getLookupTableFactory(function (t) { t['\u00A8'] = '\u0020\u0308'; t['\u00AF'] = '\u0020\u0304'; t['\u00B4'] = '\u0020\u0301'; t['\u00B5'] = '\u03BC'; t['\u00B8'] = '\u0020\u0327'; t['\u0132'] = '\u0049\u004A'; t['\u0133'] = '\u0069\u006A'; t['\u013F'] = '\u004C\u00B7'; t['\u0140'] = '\u006C\u00B7'; t['\u0149'] = '\u02BC\u006E'; t['\u017F'] = '\u0073'; t['\u01C4'] = '\u0044\u017D'; t['\u01C5'] = '\u0044\u017E'; t['\u01C6'] = '\u0064\u017E'; t['\u01C7'] = '\u004C\u004A'; t['\u01C8'] = '\u004C\u006A'; t['\u01C9'] = '\u006C\u006A'; t['\u01CA'] = '\u004E\u004A'; t['\u01CB'] = '\u004E\u006A'; t['\u01CC'] = '\u006E\u006A'; t['\u01F1'] = '\u0044\u005A'; t['\u01F2'] = '\u0044\u007A'; t['\u01F3'] = '\u0064\u007A'; t['\u02D8'] = '\u0020\u0306'; t['\u02D9'] = '\u0020\u0307'; t['\u02DA'] = '\u0020\u030A'; t['\u02DB'] = '\u0020\u0328'; t['\u02DC'] = '\u0020\u0303'; t['\u02DD'] = '\u0020\u030B'; t['\u037A'] = '\u0020\u0345'; t['\u0384'] = '\u0020\u0301'; t['\u03D0'] = '\u03B2'; t['\u03D1'] = '\u03B8'; t['\u03D2'] = '\u03A5'; t['\u03D5'] = '\u03C6'; t['\u03D6'] = '\u03C0'; t['\u03F0'] = '\u03BA'; t['\u03F1'] = '\u03C1'; t['\u03F2'] = '\u03C2'; t['\u03F4'] = '\u0398'; t['\u03F5'] = '\u03B5'; t['\u03F9'] = '\u03A3'; t['\u0587'] = '\u0565\u0582'; t['\u0675'] = '\u0627\u0674'; t['\u0676'] = '\u0648\u0674'; t['\u0677'] = '\u06C7\u0674'; t['\u0678'] = '\u064A\u0674'; t['\u0E33'] = '\u0E4D\u0E32'; t['\u0EB3'] = '\u0ECD\u0EB2'; t['\u0EDC'] = '\u0EAB\u0E99'; t['\u0EDD'] = '\u0EAB\u0EA1'; t['\u0F77'] = '\u0FB2\u0F81'; t['\u0F79'] = '\u0FB3\u0F81'; t['\u1E9A'] = '\u0061\u02BE'; t['\u1FBD'] = '\u0020\u0313'; t['\u1FBF'] = '\u0020\u0313'; t['\u1FC0'] = '\u0020\u0342'; t['\u1FFE'] = '\u0020\u0314'; t['\u2002'] = '\u0020'; t['\u2003'] = '\u0020'; t['\u2004'] = '\u0020'; t['\u2005'] = '\u0020'; t['\u2006'] = '\u0020'; t['\u2008'] = '\u0020'; t['\u2009'] = '\u0020'; t['\u200A'] = '\u0020'; t['\u2017'] = '\u0020\u0333'; t['\u2024'] = '\u002E'; t['\u2025'] = '\u002E\u002E'; t['\u2026'] = '\u002E\u002E\u002E'; t['\u2033'] = '\u2032\u2032'; t['\u2034'] = '\u2032\u2032\u2032'; t['\u2036'] = '\u2035\u2035'; t['\u2037'] = '\u2035\u2035\u2035'; t['\u203C'] = '\u0021\u0021'; t['\u203E'] = '\u0020\u0305'; t['\u2047'] = '\u003F\u003F'; t['\u2048'] = '\u003F\u0021'; t['\u2049'] = '\u0021\u003F'; t['\u2057'] = '\u2032\u2032\u2032\u2032'; t['\u205F'] = '\u0020'; t['\u20A8'] = '\u0052\u0073'; t['\u2100'] = '\u0061\u002F\u0063'; t['\u2101'] = '\u0061\u002F\u0073'; t['\u2103'] = '\u00B0\u0043'; t['\u2105'] = '\u0063\u002F\u006F'; t['\u2106'] = '\u0063\u002F\u0075'; t['\u2107'] = '\u0190'; t['\u2109'] = '\u00B0\u0046'; t['\u2116'] = '\u004E\u006F'; t['\u2121'] = '\u0054\u0045\u004C'; t['\u2135'] = '\u05D0'; t['\u2136'] = '\u05D1'; t['\u2137'] = '\u05D2'; t['\u2138'] = '\u05D3'; t['\u213B'] = '\u0046\u0041\u0058'; t['\u2160'] = '\u0049'; t['\u2161'] = '\u0049\u0049'; t['\u2162'] = '\u0049\u0049\u0049'; t['\u2163'] = '\u0049\u0056'; t['\u2164'] = '\u0056'; t['\u2165'] = '\u0056\u0049'; t['\u2166'] = '\u0056\u0049\u0049'; t['\u2167'] = '\u0056\u0049\u0049\u0049'; t['\u2168'] = '\u0049\u0058'; t['\u2169'] = '\u0058'; t['\u216A'] = '\u0058\u0049'; t['\u216B'] = '\u0058\u0049\u0049'; t['\u216C'] = '\u004C'; t['\u216D'] = '\u0043'; t['\u216E'] = '\u0044'; t['\u216F'] = '\u004D'; t['\u2170'] = '\u0069'; t['\u2171'] = '\u0069\u0069'; t['\u2172'] = '\u0069\u0069\u0069'; t['\u2173'] = '\u0069\u0076'; t['\u2174'] = '\u0076'; t['\u2175'] = '\u0076\u0069'; t['\u2176'] = '\u0076\u0069\u0069'; t['\u2177'] = '\u0076\u0069\u0069\u0069'; t['\u2178'] = '\u0069\u0078'; t['\u2179'] = '\u0078'; t['\u217A'] = '\u0078\u0069'; t['\u217B'] = '\u0078\u0069\u0069'; t['\u217C'] = '\u006C'; t['\u217D'] = '\u0063'; t['\u217E'] = '\u0064'; t['\u217F'] = '\u006D'; t['\u222C'] = '\u222B\u222B'; t['\u222D'] = '\u222B\u222B\u222B'; t['\u222F'] = '\u222E\u222E'; t['\u2230'] = '\u222E\u222E\u222E'; t['\u2474'] = '\u0028\u0031\u0029'; t['\u2475'] = '\u0028\u0032\u0029'; t['\u2476'] = '\u0028\u0033\u0029'; t['\u2477'] = '\u0028\u0034\u0029'; t['\u2478'] = '\u0028\u0035\u0029'; t['\u2479'] = '\u0028\u0036\u0029'; t['\u247A'] = '\u0028\u0037\u0029'; t['\u247B'] = '\u0028\u0038\u0029'; t['\u247C'] = '\u0028\u0039\u0029'; t['\u247D'] = '\u0028\u0031\u0030\u0029'; t['\u247E'] = '\u0028\u0031\u0031\u0029'; t['\u247F'] = '\u0028\u0031\u0032\u0029'; t['\u2480'] = '\u0028\u0031\u0033\u0029'; t['\u2481'] = '\u0028\u0031\u0034\u0029'; t['\u2482'] = '\u0028\u0031\u0035\u0029'; t['\u2483'] = '\u0028\u0031\u0036\u0029'; t['\u2484'] = '\u0028\u0031\u0037\u0029'; t['\u2485'] = '\u0028\u0031\u0038\u0029'; t['\u2486'] = '\u0028\u0031\u0039\u0029'; t['\u2487'] = '\u0028\u0032\u0030\u0029'; t['\u2488'] = '\u0031\u002E'; t['\u2489'] = '\u0032\u002E'; t['\u248A'] = '\u0033\u002E'; t['\u248B'] = '\u0034\u002E'; t['\u248C'] = '\u0035\u002E'; t['\u248D'] = '\u0036\u002E'; t['\u248E'] = '\u0037\u002E'; t['\u248F'] = '\u0038\u002E'; t['\u2490'] = '\u0039\u002E'; t['\u2491'] = '\u0031\u0030\u002E'; t['\u2492'] = '\u0031\u0031\u002E'; t['\u2493'] = '\u0031\u0032\u002E'; t['\u2494'] = '\u0031\u0033\u002E'; t['\u2495'] = '\u0031\u0034\u002E'; t['\u2496'] = '\u0031\u0035\u002E'; t['\u2497'] = '\u0031\u0036\u002E'; t['\u2498'] = '\u0031\u0037\u002E'; t['\u2499'] = '\u0031\u0038\u002E'; t['\u249A'] = '\u0031\u0039\u002E'; t['\u249B'] = '\u0032\u0030\u002E'; t['\u249C'] = '\u0028\u0061\u0029'; t['\u249D'] = '\u0028\u0062\u0029'; t['\u249E'] = '\u0028\u0063\u0029'; t['\u249F'] = '\u0028\u0064\u0029'; t['\u24A0'] = '\u0028\u0065\u0029'; t['\u24A1'] = '\u0028\u0066\u0029'; t['\u24A2'] = '\u0028\u0067\u0029'; t['\u24A3'] = '\u0028\u0068\u0029'; t['\u24A4'] = '\u0028\u0069\u0029'; t['\u24A5'] = '\u0028\u006A\u0029'; t['\u24A6'] = '\u0028\u006B\u0029'; t['\u24A7'] = '\u0028\u006C\u0029'; t['\u24A8'] = '\u0028\u006D\u0029'; t['\u24A9'] = '\u0028\u006E\u0029'; t['\u24AA'] = '\u0028\u006F\u0029'; t['\u24AB'] = '\u0028\u0070\u0029'; t['\u24AC'] = '\u0028\u0071\u0029'; t['\u24AD'] = '\u0028\u0072\u0029'; t['\u24AE'] = '\u0028\u0073\u0029'; t['\u24AF'] = '\u0028\u0074\u0029'; t['\u24B0'] = '\u0028\u0075\u0029'; t['\u24B1'] = '\u0028\u0076\u0029'; t['\u24B2'] = '\u0028\u0077\u0029'; t['\u24B3'] = '\u0028\u0078\u0029'; t['\u24B4'] = '\u0028\u0079\u0029'; t['\u24B5'] = '\u0028\u007A\u0029'; t['\u2A0C'] = '\u222B\u222B\u222B\u222B'; t['\u2A74'] = '\u003A\u003A\u003D'; t['\u2A75'] = '\u003D\u003D'; t['\u2A76'] = '\u003D\u003D\u003D'; t['\u2E9F'] = '\u6BCD'; t['\u2EF3'] = '\u9F9F'; t['\u2F00'] = '\u4E00'; t['\u2F01'] = '\u4E28'; t['\u2F02'] = '\u4E36'; t['\u2F03'] = '\u4E3F'; t['\u2F04'] = '\u4E59'; t['\u2F05'] = '\u4E85'; t['\u2F06'] = '\u4E8C'; t['\u2F07'] = '\u4EA0'; t['\u2F08'] = '\u4EBA'; t['\u2F09'] = '\u513F'; t['\u2F0A'] = '\u5165'; t['\u2F0B'] = '\u516B'; t['\u2F0C'] = '\u5182'; t['\u2F0D'] = '\u5196'; t['\u2F0E'] = '\u51AB'; t['\u2F0F'] = '\u51E0'; t['\u2F10'] = '\u51F5'; t['\u2F11'] = '\u5200'; t['\u2F12'] = '\u529B'; t['\u2F13'] = '\u52F9'; t['\u2F14'] = '\u5315'; t['\u2F15'] = '\u531A'; t['\u2F16'] = '\u5338'; t['\u2F17'] = '\u5341'; t['\u2F18'] = '\u535C'; t['\u2F19'] = '\u5369'; t['\u2F1A'] = '\u5382'; t['\u2F1B'] = '\u53B6'; t['\u2F1C'] = '\u53C8'; t['\u2F1D'] = '\u53E3'; t['\u2F1E'] = '\u56D7'; t['\u2F1F'] = '\u571F'; t['\u2F20'] = '\u58EB'; t['\u2F21'] = '\u5902'; t['\u2F22'] = '\u590A'; t['\u2F23'] = '\u5915'; t['\u2F24'] = '\u5927'; t['\u2F25'] = '\u5973'; t['\u2F26'] = '\u5B50'; t['\u2F27'] = '\u5B80'; t['\u2F28'] = '\u5BF8'; t['\u2F29'] = '\u5C0F'; t['\u2F2A'] = '\u5C22'; t['\u2F2B'] = '\u5C38'; t['\u2F2C'] = '\u5C6E'; t['\u2F2D'] = '\u5C71'; t['\u2F2E'] = '\u5DDB'; t['\u2F2F'] = '\u5DE5'; t['\u2F30'] = '\u5DF1'; t['\u2F31'] = '\u5DFE'; t['\u2F32'] = '\u5E72'; t['\u2F33'] = '\u5E7A'; t['\u2F34'] = '\u5E7F'; t['\u2F35'] = '\u5EF4'; t['\u2F36'] = '\u5EFE'; t['\u2F37'] = '\u5F0B'; t['\u2F38'] = '\u5F13'; t['\u2F39'] = '\u5F50'; t['\u2F3A'] = '\u5F61'; t['\u2F3B'] = '\u5F73'; t['\u2F3C'] = '\u5FC3'; t['\u2F3D'] = '\u6208'; t['\u2F3E'] = '\u6236'; t['\u2F3F'] = '\u624B'; t['\u2F40'] = '\u652F'; t['\u2F41'] = '\u6534'; t['\u2F42'] = '\u6587'; t['\u2F43'] = '\u6597'; t['\u2F44'] = '\u65A4'; t['\u2F45'] = '\u65B9'; t['\u2F46'] = '\u65E0'; t['\u2F47'] = '\u65E5'; t['\u2F48'] = '\u66F0'; t['\u2F49'] = '\u6708'; t['\u2F4A'] = '\u6728'; t['\u2F4B'] = '\u6B20'; t['\u2F4C'] = '\u6B62'; t['\u2F4D'] = '\u6B79'; t['\u2F4E'] = '\u6BB3'; t['\u2F4F'] = '\u6BCB'; t['\u2F50'] = '\u6BD4'; t['\u2F51'] = '\u6BDB'; t['\u2F52'] = '\u6C0F'; t['\u2F53'] = '\u6C14'; t['\u2F54'] = '\u6C34'; t['\u2F55'] = '\u706B'; t['\u2F56'] = '\u722A'; t['\u2F57'] = '\u7236'; t['\u2F58'] = '\u723B'; t['\u2F59'] = '\u723F'; t['\u2F5A'] = '\u7247'; t['\u2F5B'] = '\u7259'; t['\u2F5C'] = '\u725B'; t['\u2F5D'] = '\u72AC'; t['\u2F5E'] = '\u7384'; t['\u2F5F'] = '\u7389'; t['\u2F60'] = '\u74DC'; t['\u2F61'] = '\u74E6'; t['\u2F62'] = '\u7518'; t['\u2F63'] = '\u751F'; t['\u2F64'] = '\u7528'; t['\u2F65'] = '\u7530'; t['\u2F66'] = '\u758B'; t['\u2F67'] = '\u7592'; t['\u2F68'] = '\u7676'; t['\u2F69'] = '\u767D'; t['\u2F6A'] = '\u76AE'; t['\u2F6B'] = '\u76BF'; t['\u2F6C'] = '\u76EE'; t['\u2F6D'] = '\u77DB'; t['\u2F6E'] = '\u77E2'; t['\u2F6F'] = '\u77F3'; t['\u2F70'] = '\u793A'; t['\u2F71'] = '\u79B8'; t['\u2F72'] = '\u79BE'; t['\u2F73'] = '\u7A74'; t['\u2F74'] = '\u7ACB'; t['\u2F75'] = '\u7AF9'; t['\u2F76'] = '\u7C73'; t['\u2F77'] = '\u7CF8'; t['\u2F78'] = '\u7F36'; t['\u2F79'] = '\u7F51'; t['\u2F7A'] = '\u7F8A'; t['\u2F7B'] = '\u7FBD'; t['\u2F7C'] = '\u8001'; t['\u2F7D'] = '\u800C'; t['\u2F7E'] = '\u8012'; t['\u2F7F'] = '\u8033'; t['\u2F80'] = '\u807F'; t['\u2F81'] = '\u8089'; t['\u2F82'] = '\u81E3'; t['\u2F83'] = '\u81EA'; t['\u2F84'] = '\u81F3'; t['\u2F85'] = '\u81FC'; t['\u2F86'] = '\u820C'; t['\u2F87'] = '\u821B'; t['\u2F88'] = '\u821F'; t['\u2F89'] = '\u826E'; t['\u2F8A'] = '\u8272'; t['\u2F8B'] = '\u8278'; t['\u2F8C'] = '\u864D'; t['\u2F8D'] = '\u866B'; t['\u2F8E'] = '\u8840'; t['\u2F8F'] = '\u884C'; t['\u2F90'] = '\u8863'; t['\u2F91'] = '\u897E'; t['\u2F92'] = '\u898B'; t['\u2F93'] = '\u89D2'; t['\u2F94'] = '\u8A00'; t['\u2F95'] = '\u8C37'; t['\u2F96'] = '\u8C46'; t['\u2F97'] = '\u8C55'; t['\u2F98'] = '\u8C78'; t['\u2F99'] = '\u8C9D'; t['\u2F9A'] = '\u8D64'; t['\u2F9B'] = '\u8D70'; t['\u2F9C'] = '\u8DB3'; t['\u2F9D'] = '\u8EAB'; t['\u2F9E'] = '\u8ECA'; t['\u2F9F'] = '\u8F9B'; t['\u2FA0'] = '\u8FB0'; t['\u2FA1'] = '\u8FB5'; t['\u2FA2'] = '\u9091'; t['\u2FA3'] = '\u9149'; t['\u2FA4'] = '\u91C6'; t['\u2FA5'] = '\u91CC'; t['\u2FA6'] = '\u91D1'; t['\u2FA7'] = '\u9577'; t['\u2FA8'] = '\u9580'; t['\u2FA9'] = '\u961C'; t['\u2FAA'] = '\u96B6'; t['\u2FAB'] = '\u96B9'; t['\u2FAC'] = '\u96E8'; t['\u2FAD'] = '\u9751'; t['\u2FAE'] = '\u975E'; t['\u2FAF'] = '\u9762'; t['\u2FB0'] = '\u9769'; t['\u2FB1'] = '\u97CB'; t['\u2FB2'] = '\u97ED'; t['\u2FB3'] = '\u97F3'; t['\u2FB4'] = '\u9801'; t['\u2FB5'] = '\u98A8'; t['\u2FB6'] = '\u98DB'; t['\u2FB7'] = '\u98DF'; t['\u2FB8'] = '\u9996'; t['\u2FB9'] = '\u9999'; t['\u2FBA'] = '\u99AC'; t['\u2FBB'] = '\u9AA8'; t['\u2FBC'] = '\u9AD8'; t['\u2FBD'] = '\u9ADF'; t['\u2FBE'] = '\u9B25'; t['\u2FBF'] = '\u9B2F'; t['\u2FC0'] = '\u9B32'; t['\u2FC1'] = '\u9B3C'; t['\u2FC2'] = '\u9B5A'; t['\u2FC3'] = '\u9CE5'; t['\u2FC4'] = '\u9E75'; t['\u2FC5'] = '\u9E7F'; t['\u2FC6'] = '\u9EA5'; t['\u2FC7'] = '\u9EBB'; t['\u2FC8'] = '\u9EC3'; t['\u2FC9'] = '\u9ECD'; t['\u2FCA'] = '\u9ED1'; t['\u2FCB'] = '\u9EF9'; t['\u2FCC'] = '\u9EFD'; t['\u2FCD'] = '\u9F0E'; t['\u2FCE'] = '\u9F13'; t['\u2FCF'] = '\u9F20'; t['\u2FD0'] = '\u9F3B'; t['\u2FD1'] = '\u9F4A'; t['\u2FD2'] = '\u9F52'; t['\u2FD3'] = '\u9F8D'; t['\u2FD4'] = '\u9F9C'; t['\u2FD5'] = '\u9FA0'; t['\u3036'] = '\u3012'; t['\u3038'] = '\u5341'; t['\u3039'] = '\u5344'; t['\u303A'] = '\u5345'; t['\u309B'] = '\u0020\u3099'; t['\u309C'] = '\u0020\u309A'; t['\u3131'] = '\u1100'; t['\u3132'] = '\u1101'; t['\u3133'] = '\u11AA'; t['\u3134'] = '\u1102'; t['\u3135'] = '\u11AC'; t['\u3136'] = '\u11AD'; t['\u3137'] = '\u1103'; t['\u3138'] = '\u1104'; t['\u3139'] = '\u1105'; t['\u313A'] = '\u11B0'; t['\u313B'] = '\u11B1'; t['\u313C'] = '\u11B2'; t['\u313D'] = '\u11B3'; t['\u313E'] = '\u11B4'; t['\u313F'] = '\u11B5'; t['\u3140'] = '\u111A'; t['\u3141'] = '\u1106'; t['\u3142'] = '\u1107'; t['\u3143'] = '\u1108'; t['\u3144'] = '\u1121'; t['\u3145'] = '\u1109'; t['\u3146'] = '\u110A'; t['\u3147'] = '\u110B'; t['\u3148'] = '\u110C'; t['\u3149'] = '\u110D'; t['\u314A'] = '\u110E'; t['\u314B'] = '\u110F'; t['\u314C'] = '\u1110'; t['\u314D'] = '\u1111'; t['\u314E'] = '\u1112'; t['\u314F'] = '\u1161'; t['\u3150'] = '\u1162'; t['\u3151'] = '\u1163'; t['\u3152'] = '\u1164'; t['\u3153'] = '\u1165'; t['\u3154'] = '\u1166'; t['\u3155'] = '\u1167'; t['\u3156'] = '\u1168'; t['\u3157'] = '\u1169'; t['\u3158'] = '\u116A'; t['\u3159'] = '\u116B'; t['\u315A'] = '\u116C'; t['\u315B'] = '\u116D'; t['\u315C'] = '\u116E'; t['\u315D'] = '\u116F'; t['\u315E'] = '\u1170'; t['\u315F'] = '\u1171'; t['\u3160'] = '\u1172'; t['\u3161'] = '\u1173'; t['\u3162'] = '\u1174'; t['\u3163'] = '\u1175'; t['\u3164'] = '\u1160'; t['\u3165'] = '\u1114'; t['\u3166'] = '\u1115'; t['\u3167'] = '\u11C7'; t['\u3168'] = '\u11C8'; t['\u3169'] = '\u11CC'; t['\u316A'] = '\u11CE'; t['\u316B'] = '\u11D3'; t['\u316C'] = '\u11D7'; t['\u316D'] = '\u11D9'; t['\u316E'] = '\u111C'; t['\u316F'] = '\u11DD'; t['\u3170'] = '\u11DF'; t['\u3171'] = '\u111D'; t['\u3172'] = '\u111E'; t['\u3173'] = '\u1120'; t['\u3174'] = '\u1122'; t['\u3175'] = '\u1123'; t['\u3176'] = '\u1127'; t['\u3177'] = '\u1129'; t['\u3178'] = '\u112B'; t['\u3179'] = '\u112C'; t['\u317A'] = '\u112D'; t['\u317B'] = '\u112E'; t['\u317C'] = '\u112F'; t['\u317D'] = '\u1132'; t['\u317E'] = '\u1136'; t['\u317F'] = '\u1140'; t['\u3180'] = '\u1147'; t['\u3181'] = '\u114C'; t['\u3182'] = '\u11F1'; t['\u3183'] = '\u11F2'; t['\u3184'] = '\u1157'; t['\u3185'] = '\u1158'; t['\u3186'] = '\u1159'; t['\u3187'] = '\u1184'; t['\u3188'] = '\u1185'; t['\u3189'] = '\u1188'; t['\u318A'] = '\u1191'; t['\u318B'] = '\u1192'; t['\u318C'] = '\u1194'; t['\u318D'] = '\u119E'; t['\u318E'] = '\u11A1'; t['\u3200'] = '\u0028\u1100\u0029'; t['\u3201'] = '\u0028\u1102\u0029'; t['\u3202'] = '\u0028\u1103\u0029'; t['\u3203'] = '\u0028\u1105\u0029'; t['\u3204'] = '\u0028\u1106\u0029'; t['\u3205'] = '\u0028\u1107\u0029'; t['\u3206'] = '\u0028\u1109\u0029'; t['\u3207'] = '\u0028\u110B\u0029'; t['\u3208'] = '\u0028\u110C\u0029'; t['\u3209'] = '\u0028\u110E\u0029'; t['\u320A'] = '\u0028\u110F\u0029'; t['\u320B'] = '\u0028\u1110\u0029'; t['\u320C'] = '\u0028\u1111\u0029'; t['\u320D'] = '\u0028\u1112\u0029'; t['\u320E'] = '\u0028\u1100\u1161\u0029'; t['\u320F'] = '\u0028\u1102\u1161\u0029'; t['\u3210'] = '\u0028\u1103\u1161\u0029'; t['\u3211'] = '\u0028\u1105\u1161\u0029'; t['\u3212'] = '\u0028\u1106\u1161\u0029'; t['\u3213'] = '\u0028\u1107\u1161\u0029'; t['\u3214'] = '\u0028\u1109\u1161\u0029'; t['\u3215'] = '\u0028\u110B\u1161\u0029'; t['\u3216'] = '\u0028\u110C\u1161\u0029'; t['\u3217'] = '\u0028\u110E\u1161\u0029'; t['\u3218'] = '\u0028\u110F\u1161\u0029'; t['\u3219'] = '\u0028\u1110\u1161\u0029'; t['\u321A'] = '\u0028\u1111\u1161\u0029'; t['\u321B'] = '\u0028\u1112\u1161\u0029'; t['\u321C'] = '\u0028\u110C\u116E\u0029'; t['\u321D'] = '\u0028\u110B\u1169\u110C\u1165\u11AB\u0029'; t['\u321E'] = '\u0028\u110B\u1169\u1112\u116E\u0029'; t['\u3220'] = '\u0028\u4E00\u0029'; t['\u3221'] = '\u0028\u4E8C\u0029'; t['\u3222'] = '\u0028\u4E09\u0029'; t['\u3223'] = '\u0028\u56DB\u0029'; t['\u3224'] = '\u0028\u4E94\u0029'; t['\u3225'] = '\u0028\u516D\u0029'; t['\u3226'] = '\u0028\u4E03\u0029'; t['\u3227'] = '\u0028\u516B\u0029'; t['\u3228'] = '\u0028\u4E5D\u0029'; t['\u3229'] = '\u0028\u5341\u0029'; t['\u322A'] = '\u0028\u6708\u0029'; t['\u322B'] = '\u0028\u706B\u0029'; t['\u322C'] = '\u0028\u6C34\u0029'; t['\u322D'] = '\u0028\u6728\u0029'; t['\u322E'] = '\u0028\u91D1\u0029'; t['\u322F'] = '\u0028\u571F\u0029'; t['\u3230'] = '\u0028\u65E5\u0029'; t['\u3231'] = '\u0028\u682A\u0029'; t['\u3232'] = '\u0028\u6709\u0029'; t['\u3233'] = '\u0028\u793E\u0029'; t['\u3234'] = '\u0028\u540D\u0029'; t['\u3235'] = '\u0028\u7279\u0029'; t['\u3236'] = '\u0028\u8CA1\u0029'; t['\u3237'] = '\u0028\u795D\u0029'; t['\u3238'] = '\u0028\u52B4\u0029'; t['\u3239'] = '\u0028\u4EE3\u0029'; t['\u323A'] = '\u0028\u547C\u0029'; t['\u323B'] = '\u0028\u5B66\u0029'; t['\u323C'] = '\u0028\u76E3\u0029'; t['\u323D'] = '\u0028\u4F01\u0029'; t['\u323E'] = '\u0028\u8CC7\u0029'; t['\u323F'] = '\u0028\u5354\u0029'; t['\u3240'] = '\u0028\u796D\u0029'; t['\u3241'] = '\u0028\u4F11\u0029'; t['\u3242'] = '\u0028\u81EA\u0029'; t['\u3243'] = '\u0028\u81F3\u0029'; t['\u32C0'] = '\u0031\u6708'; t['\u32C1'] = '\u0032\u6708'; t['\u32C2'] = '\u0033\u6708'; t['\u32C3'] = '\u0034\u6708'; t['\u32C4'] = '\u0035\u6708'; t['\u32C5'] = '\u0036\u6708'; t['\u32C6'] = '\u0037\u6708'; t['\u32C7'] = '\u0038\u6708'; t['\u32C8'] = '\u0039\u6708'; t['\u32C9'] = '\u0031\u0030\u6708'; t['\u32CA'] = '\u0031\u0031\u6708'; t['\u32CB'] = '\u0031\u0032\u6708'; t['\u3358'] = '\u0030\u70B9'; t['\u3359'] = '\u0031\u70B9'; t['\u335A'] = '\u0032\u70B9'; t['\u335B'] = '\u0033\u70B9'; t['\u335C'] = '\u0034\u70B9'; t['\u335D'] = '\u0035\u70B9'; t['\u335E'] = '\u0036\u70B9'; t['\u335F'] = '\u0037\u70B9'; t['\u3360'] = '\u0038\u70B9'; t['\u3361'] = '\u0039\u70B9'; t['\u3362'] = '\u0031\u0030\u70B9'; t['\u3363'] = '\u0031\u0031\u70B9'; t['\u3364'] = '\u0031\u0032\u70B9'; t['\u3365'] = '\u0031\u0033\u70B9'; t['\u3366'] = '\u0031\u0034\u70B9'; t['\u3367'] = '\u0031\u0035\u70B9'; t['\u3368'] = '\u0031\u0036\u70B9'; t['\u3369'] = '\u0031\u0037\u70B9'; t['\u336A'] = '\u0031\u0038\u70B9'; t['\u336B'] = '\u0031\u0039\u70B9'; t['\u336C'] = '\u0032\u0030\u70B9'; t['\u336D'] = '\u0032\u0031\u70B9'; t['\u336E'] = '\u0032\u0032\u70B9'; t['\u336F'] = '\u0032\u0033\u70B9'; t['\u3370'] = '\u0032\u0034\u70B9'; t['\u33E0'] = '\u0031\u65E5'; t['\u33E1'] = '\u0032\u65E5'; t['\u33E2'] = '\u0033\u65E5'; t['\u33E3'] = '\u0034\u65E5'; t['\u33E4'] = '\u0035\u65E5'; t['\u33E5'] = '\u0036\u65E5'; t['\u33E6'] = '\u0037\u65E5'; t['\u33E7'] = '\u0038\u65E5'; t['\u33E8'] = '\u0039\u65E5'; t['\u33E9'] = '\u0031\u0030\u65E5'; t['\u33EA'] = '\u0031\u0031\u65E5'; t['\u33EB'] = '\u0031\u0032\u65E5'; t['\u33EC'] = '\u0031\u0033\u65E5'; t['\u33ED'] = '\u0031\u0034\u65E5'; t['\u33EE'] = '\u0031\u0035\u65E5'; t['\u33EF'] = '\u0031\u0036\u65E5'; t['\u33F0'] = '\u0031\u0037\u65E5'; t['\u33F1'] = '\u0031\u0038\u65E5'; t['\u33F2'] = '\u0031\u0039\u65E5'; t['\u33F3'] = '\u0032\u0030\u65E5'; t['\u33F4'] = '\u0032\u0031\u65E5'; t['\u33F5'] = '\u0032\u0032\u65E5'; t['\u33F6'] = '\u0032\u0033\u65E5'; t['\u33F7'] = '\u0032\u0034\u65E5'; t['\u33F8'] = '\u0032\u0035\u65E5'; t['\u33F9'] = '\u0032\u0036\u65E5'; t['\u33FA'] = '\u0032\u0037\u65E5'; t['\u33FB'] = '\u0032\u0038\u65E5'; t['\u33FC'] = '\u0032\u0039\u65E5'; t['\u33FD'] = '\u0033\u0030\u65E5'; t['\u33FE'] = '\u0033\u0031\u65E5'; t['\uFB00'] = '\u0066\u0066'; t['\uFB01'] = '\u0066\u0069'; t['\uFB02'] = '\u0066\u006C'; t['\uFB03'] = '\u0066\u0066\u0069'; t['\uFB04'] = '\u0066\u0066\u006C'; t['\uFB05'] = '\u017F\u0074'; t['\uFB06'] = '\u0073\u0074'; t['\uFB13'] = '\u0574\u0576'; t['\uFB14'] = '\u0574\u0565'; t['\uFB15'] = '\u0574\u056B'; t['\uFB16'] = '\u057E\u0576'; t['\uFB17'] = '\u0574\u056D'; t['\uFB4F'] = '\u05D0\u05DC'; t['\uFB50'] = '\u0671'; t['\uFB51'] = '\u0671'; t['\uFB52'] = '\u067B'; t['\uFB53'] = '\u067B'; t['\uFB54'] = '\u067B'; t['\uFB55'] = '\u067B'; t['\uFB56'] = '\u067E'; t['\uFB57'] = '\u067E'; t['\uFB58'] = '\u067E'; t['\uFB59'] = '\u067E'; t['\uFB5A'] = '\u0680'; t['\uFB5B'] = '\u0680'; t['\uFB5C'] = '\u0680'; t['\uFB5D'] = '\u0680'; t['\uFB5E'] = '\u067A'; t['\uFB5F'] = '\u067A'; t['\uFB60'] = '\u067A'; t['\uFB61'] = '\u067A'; t['\uFB62'] = '\u067F'; t['\uFB63'] = '\u067F'; t['\uFB64'] = '\u067F'; t['\uFB65'] = '\u067F'; t['\uFB66'] = '\u0679'; t['\uFB67'] = '\u0679'; t['\uFB68'] = '\u0679'; t['\uFB69'] = '\u0679'; t['\uFB6A'] = '\u06A4'; t['\uFB6B'] = '\u06A4'; t['\uFB6C'] = '\u06A4'; t['\uFB6D'] = '\u06A4'; t['\uFB6E'] = '\u06A6'; t['\uFB6F'] = '\u06A6'; t['\uFB70'] = '\u06A6'; t['\uFB71'] = '\u06A6'; t['\uFB72'] = '\u0684'; t['\uFB73'] = '\u0684'; t['\uFB74'] = '\u0684'; t['\uFB75'] = '\u0684'; t['\uFB76'] = '\u0683'; t['\uFB77'] = '\u0683'; t['\uFB78'] = '\u0683'; t['\uFB79'] = '\u0683'; t['\uFB7A'] = '\u0686'; t['\uFB7B'] = '\u0686'; t['\uFB7C'] = '\u0686'; t['\uFB7D'] = '\u0686'; t['\uFB7E'] = '\u0687'; t['\uFB7F'] = '\u0687'; t['\uFB80'] = '\u0687'; t['\uFB81'] = '\u0687'; t['\uFB82'] = '\u068D'; t['\uFB83'] = '\u068D'; t['\uFB84'] = '\u068C'; t['\uFB85'] = '\u068C'; t['\uFB86'] = '\u068E'; t['\uFB87'] = '\u068E'; t['\uFB88'] = '\u0688'; t['\uFB89'] = '\u0688'; t['\uFB8A'] = '\u0698'; t['\uFB8B'] = '\u0698'; t['\uFB8C'] = '\u0691'; t['\uFB8D'] = '\u0691'; t['\uFB8E'] = '\u06A9'; t['\uFB8F'] = '\u06A9'; t['\uFB90'] = '\u06A9'; t['\uFB91'] = '\u06A9'; t['\uFB92'] = '\u06AF'; t['\uFB93'] = '\u06AF'; t['\uFB94'] = '\u06AF'; t['\uFB95'] = '\u06AF'; t['\uFB96'] = '\u06B3'; t['\uFB97'] = '\u06B3'; t['\uFB98'] = '\u06B3'; t['\uFB99'] = '\u06B3'; t['\uFB9A'] = '\u06B1'; t['\uFB9B'] = '\u06B1'; t['\uFB9C'] = '\u06B1'; t['\uFB9D'] = '\u06B1'; t['\uFB9E'] = '\u06BA'; t['\uFB9F'] = '\u06BA'; t['\uFBA0'] = '\u06BB'; t['\uFBA1'] = '\u06BB'; t['\uFBA2'] = '\u06BB'; t['\uFBA3'] = '\u06BB'; t['\uFBA4'] = '\u06C0'; t['\uFBA5'] = '\u06C0'; t['\uFBA6'] = '\u06C1'; t['\uFBA7'] = '\u06C1'; t['\uFBA8'] = '\u06C1'; t['\uFBA9'] = '\u06C1'; t['\uFBAA'] = '\u06BE'; t['\uFBAB'] = '\u06BE'; t['\uFBAC'] = '\u06BE'; t['\uFBAD'] = '\u06BE'; t['\uFBAE'] = '\u06D2'; t['\uFBAF'] = '\u06D2'; t['\uFBB0'] = '\u06D3'; t['\uFBB1'] = '\u06D3'; t['\uFBD3'] = '\u06AD'; t['\uFBD4'] = '\u06AD'; t['\uFBD5'] = '\u06AD'; t['\uFBD6'] = '\u06AD'; t['\uFBD7'] = '\u06C7'; t['\uFBD8'] = '\u06C7'; t['\uFBD9'] = '\u06C6'; t['\uFBDA'] = '\u06C6'; t['\uFBDB'] = '\u06C8'; t['\uFBDC'] = '\u06C8'; t['\uFBDD'] = '\u0677'; t['\uFBDE'] = '\u06CB'; t['\uFBDF'] = '\u06CB'; t['\uFBE0'] = '\u06C5'; t['\uFBE1'] = '\u06C5'; t['\uFBE2'] = '\u06C9'; t['\uFBE3'] = '\u06C9'; t['\uFBE4'] = '\u06D0'; t['\uFBE5'] = '\u06D0'; t['\uFBE6'] = '\u06D0'; t['\uFBE7'] = '\u06D0'; t['\uFBE8'] = '\u0649'; t['\uFBE9'] = '\u0649'; t['\uFBEA'] = '\u0626\u0627'; t['\uFBEB'] = '\u0626\u0627'; t['\uFBEC'] = '\u0626\u06D5'; t['\uFBED'] = '\u0626\u06D5'; t['\uFBEE'] = '\u0626\u0648'; t['\uFBEF'] = '\u0626\u0648'; t['\uFBF0'] = '\u0626\u06C7'; t['\uFBF1'] = '\u0626\u06C7'; t['\uFBF2'] = '\u0626\u06C6'; t['\uFBF3'] = '\u0626\u06C6'; t['\uFBF4'] = '\u0626\u06C8'; t['\uFBF5'] = '\u0626\u06C8'; t['\uFBF6'] = '\u0626\u06D0'; t['\uFBF7'] = '\u0626\u06D0'; t['\uFBF8'] = '\u0626\u06D0'; t['\uFBF9'] = '\u0626\u0649'; t['\uFBFA'] = '\u0626\u0649'; t['\uFBFB'] = '\u0626\u0649'; t['\uFBFC'] = '\u06CC'; t['\uFBFD'] = '\u06CC'; t['\uFBFE'] = '\u06CC'; t['\uFBFF'] = '\u06CC'; t['\uFC00'] = '\u0626\u062C'; t['\uFC01'] = '\u0626\u062D'; t['\uFC02'] = '\u0626\u0645'; t['\uFC03'] = '\u0626\u0649'; t['\uFC04'] = '\u0626\u064A'; t['\uFC05'] = '\u0628\u062C'; t['\uFC06'] = '\u0628\u062D'; t['\uFC07'] = '\u0628\u062E'; t['\uFC08'] = '\u0628\u0645'; t['\uFC09'] = '\u0628\u0649'; t['\uFC0A'] = '\u0628\u064A'; t['\uFC0B'] = '\u062A\u062C'; t['\uFC0C'] = '\u062A\u062D'; t['\uFC0D'] = '\u062A\u062E'; t['\uFC0E'] = '\u062A\u0645'; t['\uFC0F'] = '\u062A\u0649'; t['\uFC10'] = '\u062A\u064A'; t['\uFC11'] = '\u062B\u062C'; t['\uFC12'] = '\u062B\u0645'; t['\uFC13'] = '\u062B\u0649'; t['\uFC14'] = '\u062B\u064A'; t['\uFC15'] = '\u062C\u062D'; t['\uFC16'] = '\u062C\u0645'; t['\uFC17'] = '\u062D\u062C'; t['\uFC18'] = '\u062D\u0645'; t['\uFC19'] = '\u062E\u062C'; t['\uFC1A'] = '\u062E\u062D'; t['\uFC1B'] = '\u062E\u0645'; t['\uFC1C'] = '\u0633\u062C'; t['\uFC1D'] = '\u0633\u062D'; t['\uFC1E'] = '\u0633\u062E'; t['\uFC1F'] = '\u0633\u0645'; t['\uFC20'] = '\u0635\u062D'; t['\uFC21'] = '\u0635\u0645'; t['\uFC22'] = '\u0636\u062C'; t['\uFC23'] = '\u0636\u062D'; t['\uFC24'] = '\u0636\u062E'; t['\uFC25'] = '\u0636\u0645'; t['\uFC26'] = '\u0637\u062D'; t['\uFC27'] = '\u0637\u0645'; t['\uFC28'] = '\u0638\u0645'; t['\uFC29'] = '\u0639\u062C'; t['\uFC2A'] = '\u0639\u0645'; t['\uFC2B'] = '\u063A\u062C'; t['\uFC2C'] = '\u063A\u0645'; t['\uFC2D'] = '\u0641\u062C'; t['\uFC2E'] = '\u0641\u062D'; t['\uFC2F'] = '\u0641\u062E'; t['\uFC30'] = '\u0641\u0645'; t['\uFC31'] = '\u0641\u0649'; t['\uFC32'] = '\u0641\u064A'; t['\uFC33'] = '\u0642\u062D'; t['\uFC34'] = '\u0642\u0645'; t['\uFC35'] = '\u0642\u0649'; t['\uFC36'] = '\u0642\u064A'; t['\uFC37'] = '\u0643\u0627'; t['\uFC38'] = '\u0643\u062C'; t['\uFC39'] = '\u0643\u062D'; t['\uFC3A'] = '\u0643\u062E'; t['\uFC3B'] = '\u0643\u0644'; t['\uFC3C'] = '\u0643\u0645'; t['\uFC3D'] = '\u0643\u0649'; t['\uFC3E'] = '\u0643\u064A'; t['\uFC3F'] = '\u0644\u062C'; t['\uFC40'] = '\u0644\u062D'; t['\uFC41'] = '\u0644\u062E'; t['\uFC42'] = '\u0644\u0645'; t['\uFC43'] = '\u0644\u0649'; t['\uFC44'] = '\u0644\u064A'; t['\uFC45'] = '\u0645\u062C'; t['\uFC46'] = '\u0645\u062D'; t['\uFC47'] = '\u0645\u062E'; t['\uFC48'] = '\u0645\u0645'; t['\uFC49'] = '\u0645\u0649'; t['\uFC4A'] = '\u0645\u064A'; t['\uFC4B'] = '\u0646\u062C'; t['\uFC4C'] = '\u0646\u062D'; t['\uFC4D'] = '\u0646\u062E'; t['\uFC4E'] = '\u0646\u0645'; t['\uFC4F'] = '\u0646\u0649'; t['\uFC50'] = '\u0646\u064A'; t['\uFC51'] = '\u0647\u062C'; t['\uFC52'] = '\u0647\u0645'; t['\uFC53'] = '\u0647\u0649'; t['\uFC54'] = '\u0647\u064A'; t['\uFC55'] = '\u064A\u062C'; t['\uFC56'] = '\u064A\u062D'; t['\uFC57'] = '\u064A\u062E'; t['\uFC58'] = '\u064A\u0645'; t['\uFC59'] = '\u064A\u0649'; t['\uFC5A'] = '\u064A\u064A'; t['\uFC5B'] = '\u0630\u0670'; t['\uFC5C'] = '\u0631\u0670'; t['\uFC5D'] = '\u0649\u0670'; t['\uFC5E'] = '\u0020\u064C\u0651'; t['\uFC5F'] = '\u0020\u064D\u0651'; t['\uFC60'] = '\u0020\u064E\u0651'; t['\uFC61'] = '\u0020\u064F\u0651'; t['\uFC62'] = '\u0020\u0650\u0651'; t['\uFC63'] = '\u0020\u0651\u0670'; t['\uFC64'] = '\u0626\u0631'; t['\uFC65'] = '\u0626\u0632'; t['\uFC66'] = '\u0626\u0645'; t['\uFC67'] = '\u0626\u0646'; t['\uFC68'] = '\u0626\u0649'; t['\uFC69'] = '\u0626\u064A'; t['\uFC6A'] = '\u0628\u0631'; t['\uFC6B'] = '\u0628\u0632'; t['\uFC6C'] = '\u0628\u0645'; t['\uFC6D'] = '\u0628\u0646'; t['\uFC6E'] = '\u0628\u0649'; t['\uFC6F'] = '\u0628\u064A'; t['\uFC70'] = '\u062A\u0631'; t['\uFC71'] = '\u062A\u0632'; t['\uFC72'] = '\u062A\u0645'; t['\uFC73'] = '\u062A\u0646'; t['\uFC74'] = '\u062A\u0649'; t['\uFC75'] = '\u062A\u064A'; t['\uFC76'] = '\u062B\u0631'; t['\uFC77'] = '\u062B\u0632'; t['\uFC78'] = '\u062B\u0645'; t['\uFC79'] = '\u062B\u0646'; t['\uFC7A'] = '\u062B\u0649'; t['\uFC7B'] = '\u062B\u064A'; t['\uFC7C'] = '\u0641\u0649'; t['\uFC7D'] = '\u0641\u064A'; t['\uFC7E'] = '\u0642\u0649'; t['\uFC7F'] = '\u0642\u064A'; t['\uFC80'] = '\u0643\u0627'; t['\uFC81'] = '\u0643\u0644'; t['\uFC82'] = '\u0643\u0645'; t['\uFC83'] = '\u0643\u0649'; t['\uFC84'] = '\u0643\u064A'; t['\uFC85'] = '\u0644\u0645'; t['\uFC86'] = '\u0644\u0649'; t['\uFC87'] = '\u0644\u064A'; t['\uFC88'] = '\u0645\u0627'; t['\uFC89'] = '\u0645\u0645'; t['\uFC8A'] = '\u0646\u0631'; t['\uFC8B'] = '\u0646\u0632'; t['\uFC8C'] = '\u0646\u0645'; t['\uFC8D'] = '\u0646\u0646'; t['\uFC8E'] = '\u0646\u0649'; t['\uFC8F'] = '\u0646\u064A'; t['\uFC90'] = '\u0649\u0670'; t['\uFC91'] = '\u064A\u0631'; t['\uFC92'] = '\u064A\u0632'; t['\uFC93'] = '\u064A\u0645'; t['\uFC94'] = '\u064A\u0646'; t['\uFC95'] = '\u064A\u0649'; t['\uFC96'] = '\u064A\u064A'; t['\uFC97'] = '\u0626\u062C'; t['\uFC98'] = '\u0626\u062D'; t['\uFC99'] = '\u0626\u062E'; t['\uFC9A'] = '\u0626\u0645'; t['\uFC9B'] = '\u0626\u0647'; t['\uFC9C'] = '\u0628\u062C'; t['\uFC9D'] = '\u0628\u062D'; t['\uFC9E'] = '\u0628\u062E'; t['\uFC9F'] = '\u0628\u0645'; t['\uFCA0'] = '\u0628\u0647'; t['\uFCA1'] = '\u062A\u062C'; t['\uFCA2'] = '\u062A\u062D'; t['\uFCA3'] = '\u062A\u062E'; t['\uFCA4'] = '\u062A\u0645'; t['\uFCA5'] = '\u062A\u0647'; t['\uFCA6'] = '\u062B\u0645'; t['\uFCA7'] = '\u062C\u062D'; t['\uFCA8'] = '\u062C\u0645'; t['\uFCA9'] = '\u062D\u062C'; t['\uFCAA'] = '\u062D\u0645'; t['\uFCAB'] = '\u062E\u062C'; t['\uFCAC'] = '\u062E\u0645'; t['\uFCAD'] = '\u0633\u062C'; t['\uFCAE'] = '\u0633\u062D'; t['\uFCAF'] = '\u0633\u062E'; t['\uFCB0'] = '\u0633\u0645'; t['\uFCB1'] = '\u0635\u062D'; t['\uFCB2'] = '\u0635\u062E'; t['\uFCB3'] = '\u0635\u0645'; t['\uFCB4'] = '\u0636\u062C'; t['\uFCB5'] = '\u0636\u062D'; t['\uFCB6'] = '\u0636\u062E'; t['\uFCB7'] = '\u0636\u0645'; t['\uFCB8'] = '\u0637\u062D'; t['\uFCB9'] = '\u0638\u0645'; t['\uFCBA'] = '\u0639\u062C'; t['\uFCBB'] = '\u0639\u0645'; t['\uFCBC'] = '\u063A\u062C'; t['\uFCBD'] = '\u063A\u0645'; t['\uFCBE'] = '\u0641\u062C'; t['\uFCBF'] = '\u0641\u062D'; t['\uFCC0'] = '\u0641\u062E'; t['\uFCC1'] = '\u0641\u0645'; t['\uFCC2'] = '\u0642\u062D'; t['\uFCC3'] = '\u0642\u0645'; t['\uFCC4'] = '\u0643\u062C'; t['\uFCC5'] = '\u0643\u062D'; t['\uFCC6'] = '\u0643\u062E'; t['\uFCC7'] = '\u0643\u0644'; t['\uFCC8'] = '\u0643\u0645'; t['\uFCC9'] = '\u0644\u062C'; t['\uFCCA'] = '\u0644\u062D'; t['\uFCCB'] = '\u0644\u062E'; t['\uFCCC'] = '\u0644\u0645'; t['\uFCCD'] = '\u0644\u0647'; t['\uFCCE'] = '\u0645\u062C'; t['\uFCCF'] = '\u0645\u062D'; t['\uFCD0'] = '\u0645\u062E'; t['\uFCD1'] = '\u0645\u0645'; t['\uFCD2'] = '\u0646\u062C'; t['\uFCD3'] = '\u0646\u062D'; t['\uFCD4'] = '\u0646\u062E'; t['\uFCD5'] = '\u0646\u0645'; t['\uFCD6'] = '\u0646\u0647'; t['\uFCD7'] = '\u0647\u062C'; t['\uFCD8'] = '\u0647\u0645'; t['\uFCD9'] = '\u0647\u0670'; t['\uFCDA'] = '\u064A\u062C'; t['\uFCDB'] = '\u064A\u062D'; t['\uFCDC'] = '\u064A\u062E'; t['\uFCDD'] = '\u064A\u0645'; t['\uFCDE'] = '\u064A\u0647'; t['\uFCDF'] = '\u0626\u0645'; t['\uFCE0'] = '\u0626\u0647'; t['\uFCE1'] = '\u0628\u0645'; t['\uFCE2'] = '\u0628\u0647'; t['\uFCE3'] = '\u062A\u0645'; t['\uFCE4'] = '\u062A\u0647'; t['\uFCE5'] = '\u062B\u0645'; t['\uFCE6'] = '\u062B\u0647'; t['\uFCE7'] = '\u0633\u0645'; t['\uFCE8'] = '\u0633\u0647'; t['\uFCE9'] = '\u0634\u0645'; t['\uFCEA'] = '\u0634\u0647'; t['\uFCEB'] = '\u0643\u0644'; t['\uFCEC'] = '\u0643\u0645'; t['\uFCED'] = '\u0644\u0645'; t['\uFCEE'] = '\u0646\u0645'; t['\uFCEF'] = '\u0646\u0647'; t['\uFCF0'] = '\u064A\u0645'; t['\uFCF1'] = '\u064A\u0647'; t['\uFCF2'] = '\u0640\u064E\u0651'; t['\uFCF3'] = '\u0640\u064F\u0651'; t['\uFCF4'] = '\u0640\u0650\u0651'; t['\uFCF5'] = '\u0637\u0649'; t['\uFCF6'] = '\u0637\u064A'; t['\uFCF7'] = '\u0639\u0649'; t['\uFCF8'] = '\u0639\u064A'; t['\uFCF9'] = '\u063A\u0649'; t['\uFCFA'] = '\u063A\u064A'; t['\uFCFB'] = '\u0633\u0649'; t['\uFCFC'] = '\u0633\u064A'; t['\uFCFD'] = '\u0634\u0649'; t['\uFCFE'] = '\u0634\u064A'; t['\uFCFF'] = '\u062D\u0649'; t['\uFD00'] = '\u062D\u064A'; t['\uFD01'] = '\u062C\u0649'; t['\uFD02'] = '\u062C\u064A'; t['\uFD03'] = '\u062E\u0649'; t['\uFD04'] = '\u062E\u064A'; t['\uFD05'] = '\u0635\u0649'; t['\uFD06'] = '\u0635\u064A'; t['\uFD07'] = '\u0636\u0649'; t['\uFD08'] = '\u0636\u064A'; t['\uFD09'] = '\u0634\u062C'; t['\uFD0A'] = '\u0634\u062D'; t['\uFD0B'] = '\u0634\u062E'; t['\uFD0C'] = '\u0634\u0645'; t['\uFD0D'] = '\u0634\u0631'; t['\uFD0E'] = '\u0633\u0631'; t['\uFD0F'] = '\u0635\u0631'; t['\uFD10'] = '\u0636\u0631'; t['\uFD11'] = '\u0637\u0649'; t['\uFD12'] = '\u0637\u064A'; t['\uFD13'] = '\u0639\u0649'; t['\uFD14'] = '\u0639\u064A'; t['\uFD15'] = '\u063A\u0649'; t['\uFD16'] = '\u063A\u064A'; t['\uFD17'] = '\u0633\u0649'; t['\uFD18'] = '\u0633\u064A'; t['\uFD19'] = '\u0634\u0649'; t['\uFD1A'] = '\u0634\u064A'; t['\uFD1B'] = '\u062D\u0649'; t['\uFD1C'] = '\u062D\u064A'; t['\uFD1D'] = '\u062C\u0649'; t['\uFD1E'] = '\u062C\u064A'; t['\uFD1F'] = '\u062E\u0649'; t['\uFD20'] = '\u062E\u064A'; t['\uFD21'] = '\u0635\u0649'; t['\uFD22'] = '\u0635\u064A'; t['\uFD23'] = '\u0636\u0649'; t['\uFD24'] = '\u0636\u064A'; t['\uFD25'] = '\u0634\u062C'; t['\uFD26'] = '\u0634\u062D'; t['\uFD27'] = '\u0634\u062E'; t['\uFD28'] = '\u0634\u0645'; t['\uFD29'] = '\u0634\u0631'; t['\uFD2A'] = '\u0633\u0631'; t['\uFD2B'] = '\u0635\u0631'; t['\uFD2C'] = '\u0636\u0631'; t['\uFD2D'] = '\u0634\u062C'; t['\uFD2E'] = '\u0634\u062D'; t['\uFD2F'] = '\u0634\u062E'; t['\uFD30'] = '\u0634\u0645'; t['\uFD31'] = '\u0633\u0647'; t['\uFD32'] = '\u0634\u0647'; t['\uFD33'] = '\u0637\u0645'; t['\uFD34'] = '\u0633\u062C'; t['\uFD35'] = '\u0633\u062D'; t['\uFD36'] = '\u0633\u062E'; t['\uFD37'] = '\u0634\u062C'; t['\uFD38'] = '\u0634\u062D'; t['\uFD39'] = '\u0634\u062E'; t['\uFD3A'] = '\u0637\u0645'; t['\uFD3B'] = '\u0638\u0645'; t['\uFD3C'] = '\u0627\u064B'; t['\uFD3D'] = '\u0627\u064B'; t['\uFD50'] = '\u062A\u062C\u0645'; t['\uFD51'] = '\u062A\u062D\u062C'; t['\uFD52'] = '\u062A\u062D\u062C'; t['\uFD53'] = '\u062A\u062D\u0645'; t['\uFD54'] = '\u062A\u062E\u0645'; t['\uFD55'] = '\u062A\u0645\u062C'; t['\uFD56'] = '\u062A\u0645\u062D'; t['\uFD57'] = '\u062A\u0645\u062E'; t['\uFD58'] = '\u062C\u0645\u062D'; t['\uFD59'] = '\u062C\u0645\u062D'; t['\uFD5A'] = '\u062D\u0645\u064A'; t['\uFD5B'] = '\u062D\u0645\u0649'; t['\uFD5C'] = '\u0633\u062D\u062C'; t['\uFD5D'] = '\u0633\u062C\u062D'; t['\uFD5E'] = '\u0633\u062C\u0649'; t['\uFD5F'] = '\u0633\u0645\u062D'; t['\uFD60'] = '\u0633\u0645\u062D'; t['\uFD61'] = '\u0633\u0645\u062C'; t['\uFD62'] = '\u0633\u0645\u0645'; t['\uFD63'] = '\u0633\u0645\u0645'; t['\uFD64'] = '\u0635\u062D\u062D'; t['\uFD65'] = '\u0635\u062D\u062D'; t['\uFD66'] = '\u0635\u0645\u0645'; t['\uFD67'] = '\u0634\u062D\u0645'; t['\uFD68'] = '\u0634\u062D\u0645'; t['\uFD69'] = '\u0634\u062C\u064A'; t['\uFD6A'] = '\u0634\u0645\u062E'; t['\uFD6B'] = '\u0634\u0645\u062E'; t['\uFD6C'] = '\u0634\u0645\u0645'; t['\uFD6D'] = '\u0634\u0645\u0645'; t['\uFD6E'] = '\u0636\u062D\u0649'; t['\uFD6F'] = '\u0636\u062E\u0645'; t['\uFD70'] = '\u0636\u062E\u0645'; t['\uFD71'] = '\u0637\u0645\u062D'; t['\uFD72'] = '\u0637\u0645\u062D'; t['\uFD73'] = '\u0637\u0645\u0645'; t['\uFD74'] = '\u0637\u0645\u064A'; t['\uFD75'] = '\u0639\u062C\u0645'; t['\uFD76'] = '\u0639\u0645\u0645'; t['\uFD77'] = '\u0639\u0645\u0645'; t['\uFD78'] = '\u0639\u0645\u0649'; t['\uFD79'] = '\u063A\u0645\u0645'; t['\uFD7A'] = '\u063A\u0645\u064A'; t['\uFD7B'] = '\u063A\u0645\u0649'; t['\uFD7C'] = '\u0641\u062E\u0645'; t['\uFD7D'] = '\u0641\u062E\u0645'; t['\uFD7E'] = '\u0642\u0645\u062D'; t['\uFD7F'] = '\u0642\u0645\u0645'; t['\uFD80'] = '\u0644\u062D\u0645'; t['\uFD81'] = '\u0644\u062D\u064A'; t['\uFD82'] = '\u0644\u062D\u0649'; t['\uFD83'] = '\u0644\u062C\u062C'; t['\uFD84'] = '\u0644\u062C\u062C'; t['\uFD85'] = '\u0644\u062E\u0645'; t['\uFD86'] = '\u0644\u062E\u0645'; t['\uFD87'] = '\u0644\u0645\u062D'; t['\uFD88'] = '\u0644\u0645\u062D'; t['\uFD89'] = '\u0645\u062D\u062C'; t['\uFD8A'] = '\u0645\u062D\u0645'; t['\uFD8B'] = '\u0645\u062D\u064A'; t['\uFD8C'] = '\u0645\u062C\u062D'; t['\uFD8D'] = '\u0645\u062C\u0645'; t['\uFD8E'] = '\u0645\u062E\u062C'; t['\uFD8F'] = '\u0645\u062E\u0645'; t['\uFD92'] = '\u0645\u062C\u062E'; t['\uFD93'] = '\u0647\u0645\u062C'; t['\uFD94'] = '\u0647\u0645\u0645'; t['\uFD95'] = '\u0646\u062D\u0645'; t['\uFD96'] = '\u0646\u062D\u0649'; t['\uFD97'] = '\u0646\u062C\u0645'; t['\uFD98'] = '\u0646\u062C\u0645'; t['\uFD99'] = '\u0646\u062C\u0649'; t['\uFD9A'] = '\u0646\u0645\u064A'; t['\uFD9B'] = '\u0646\u0645\u0649'; t['\uFD9C'] = '\u064A\u0645\u0645'; t['\uFD9D'] = '\u064A\u0645\u0645'; t['\uFD9E'] = '\u0628\u062E\u064A'; t['\uFD9F'] = '\u062A\u062C\u064A'; t['\uFDA0'] = '\u062A\u062C\u0649'; t['\uFDA1'] = '\u062A\u062E\u064A'; t['\uFDA2'] = '\u062A\u062E\u0649'; t['\uFDA3'] = '\u062A\u0645\u064A'; t['\uFDA4'] = '\u062A\u0645\u0649'; t['\uFDA5'] = '\u062C\u0645\u064A'; t['\uFDA6'] = '\u062C\u062D\u0649'; t['\uFDA7'] = '\u062C\u0645\u0649'; t['\uFDA8'] = '\u0633\u062E\u0649'; t['\uFDA9'] = '\u0635\u062D\u064A'; t['\uFDAA'] = '\u0634\u062D\u064A'; t['\uFDAB'] = '\u0636\u062D\u064A'; t['\uFDAC'] = '\u0644\u062C\u064A'; t['\uFDAD'] = '\u0644\u0645\u064A'; t['\uFDAE'] = '\u064A\u062D\u064A'; t['\uFDAF'] = '\u064A\u062C\u064A'; t['\uFDB0'] = '\u064A\u0645\u064A'; t['\uFDB1'] = '\u0645\u0645\u064A'; t['\uFDB2'] = '\u0642\u0645\u064A'; t['\uFDB3'] = '\u0646\u062D\u064A'; t['\uFDB4'] = '\u0642\u0645\u062D'; t['\uFDB5'] = '\u0644\u062D\u0645'; t['\uFDB6'] = '\u0639\u0645\u064A'; t['\uFDB7'] = '\u0643\u0645\u064A'; t['\uFDB8'] = '\u0646\u062C\u062D'; t['\uFDB9'] = '\u0645\u062E\u064A'; t['\uFDBA'] = '\u0644\u062C\u0645'; t['\uFDBB'] = '\u0643\u0645\u0645'; t['\uFDBC'] = '\u0644\u062C\u0645'; t['\uFDBD'] = '\u0646\u062C\u062D'; t['\uFDBE'] = '\u062C\u062D\u064A'; t['\uFDBF'] = '\u062D\u062C\u064A'; t['\uFDC0'] = '\u0645\u062C\u064A'; t['\uFDC1'] = '\u0641\u0645\u064A'; t['\uFDC2'] = '\u0628\u062D\u064A'; t['\uFDC3'] = '\u0643\u0645\u0645'; t['\uFDC4'] = '\u0639\u062C\u0645'; t['\uFDC5'] = '\u0635\u0645\u0645'; t['\uFDC6'] = '\u0633\u062E\u064A'; t['\uFDC7'] = '\u0646\u062C\u064A'; t['\uFE49'] = '\u203E'; t['\uFE4A'] = '\u203E'; t['\uFE4B'] = '\u203E'; t['\uFE4C'] = '\u203E'; t['\uFE4D'] = '\u005F'; t['\uFE4E'] = '\u005F'; t['\uFE4F'] = '\u005F'; t['\uFE80'] = '\u0621'; t['\uFE81'] = '\u0622'; t['\uFE82'] = '\u0622'; t['\uFE83'] = '\u0623'; t['\uFE84'] = '\u0623'; t['\uFE85'] = '\u0624'; t['\uFE86'] = '\u0624'; t['\uFE87'] = '\u0625'; t['\uFE88'] = '\u0625'; t['\uFE89'] = '\u0626'; t['\uFE8A'] = '\u0626'; t['\uFE8B'] = '\u0626'; t['\uFE8C'] = '\u0626'; t['\uFE8D'] = '\u0627'; t['\uFE8E'] = '\u0627'; t['\uFE8F'] = '\u0628'; t['\uFE90'] = '\u0628'; t['\uFE91'] = '\u0628'; t['\uFE92'] = '\u0628'; t['\uFE93'] = '\u0629'; t['\uFE94'] = '\u0629'; t['\uFE95'] = '\u062A'; t['\uFE96'] = '\u062A'; t['\uFE97'] = '\u062A'; t['\uFE98'] = '\u062A'; t['\uFE99'] = '\u062B'; t['\uFE9A'] = '\u062B'; t['\uFE9B'] = '\u062B'; t['\uFE9C'] = '\u062B'; t['\uFE9D'] = '\u062C'; t['\uFE9E'] = '\u062C'; t['\uFE9F'] = '\u062C'; t['\uFEA0'] = '\u062C'; t['\uFEA1'] = '\u062D'; t['\uFEA2'] = '\u062D'; t['\uFEA3'] = '\u062D'; t['\uFEA4'] = '\u062D'; t['\uFEA5'] = '\u062E'; t['\uFEA6'] = '\u062E'; t['\uFEA7'] = '\u062E'; t['\uFEA8'] = '\u062E'; t['\uFEA9'] = '\u062F'; t['\uFEAA'] = '\u062F'; t['\uFEAB'] = '\u0630'; t['\uFEAC'] = '\u0630'; t['\uFEAD'] = '\u0631'; t['\uFEAE'] = '\u0631'; t['\uFEAF'] = '\u0632'; t['\uFEB0'] = '\u0632'; t['\uFEB1'] = '\u0633'; t['\uFEB2'] = '\u0633'; t['\uFEB3'] = '\u0633'; t['\uFEB4'] = '\u0633'; t['\uFEB5'] = '\u0634'; t['\uFEB6'] = '\u0634'; t['\uFEB7'] = '\u0634'; t['\uFEB8'] = '\u0634'; t['\uFEB9'] = '\u0635'; t['\uFEBA'] = '\u0635'; t['\uFEBB'] = '\u0635'; t['\uFEBC'] = '\u0635'; t['\uFEBD'] = '\u0636'; t['\uFEBE'] = '\u0636'; t['\uFEBF'] = '\u0636'; t['\uFEC0'] = '\u0636'; t['\uFEC1'] = '\u0637'; t['\uFEC2'] = '\u0637'; t['\uFEC3'] = '\u0637'; t['\uFEC4'] = '\u0637'; t['\uFEC5'] = '\u0638'; t['\uFEC6'] = '\u0638'; t['\uFEC7'] = '\u0638'; t['\uFEC8'] = '\u0638'; t['\uFEC9'] = '\u0639'; t['\uFECA'] = '\u0639'; t['\uFECB'] = '\u0639'; t['\uFECC'] = '\u0639'; t['\uFECD'] = '\u063A'; t['\uFECE'] = '\u063A'; t['\uFECF'] = '\u063A'; t['\uFED0'] = '\u063A'; t['\uFED1'] = '\u0641'; t['\uFED2'] = '\u0641'; t['\uFED3'] = '\u0641'; t['\uFED4'] = '\u0641'; t['\uFED5'] = '\u0642'; t['\uFED6'] = '\u0642'; t['\uFED7'] = '\u0642'; t['\uFED8'] = '\u0642'; t['\uFED9'] = '\u0643'; t['\uFEDA'] = '\u0643'; t['\uFEDB'] = '\u0643'; t['\uFEDC'] = '\u0643'; t['\uFEDD'] = '\u0644'; t['\uFEDE'] = '\u0644'; t['\uFEDF'] = '\u0644'; t['\uFEE0'] = '\u0644'; t['\uFEE1'] = '\u0645'; t['\uFEE2'] = '\u0645'; t['\uFEE3'] = '\u0645'; t['\uFEE4'] = '\u0645'; t['\uFEE5'] = '\u0646'; t['\uFEE6'] = '\u0646'; t['\uFEE7'] = '\u0646'; t['\uFEE8'] = '\u0646'; t['\uFEE9'] = '\u0647'; t['\uFEEA'] = '\u0647'; t['\uFEEB'] = '\u0647'; t['\uFEEC'] = '\u0647'; t['\uFEED'] = '\u0648'; t['\uFEEE'] = '\u0648'; t['\uFEEF'] = '\u0649'; t['\uFEF0'] = '\u0649'; t['\uFEF1'] = '\u064A'; t['\uFEF2'] = '\u064A'; t['\uFEF3'] = '\u064A'; t['\uFEF4'] = '\u064A'; t['\uFEF5'] = '\u0644\u0622'; t['\uFEF6'] = '\u0644\u0622'; t['\uFEF7'] = '\u0644\u0623'; t['\uFEF8'] = '\u0644\u0623'; t['\uFEF9'] = '\u0644\u0625'; t['\uFEFA'] = '\u0644\u0625'; t['\uFEFB'] = '\u0644\u0627'; t['\uFEFC'] = '\u0644\u0627'; }); function reverseIfRtl(chars) { var charsLength = chars.length; if (charsLength <= 1 || !isRTLRangeFor(chars.charCodeAt(0))) { return chars; } var s = ''; for (var ii = charsLength - 1; ii >= 0; ii--) { s += chars[ii]; } return s; } exports.mapSpecialUnicodeValues = mapSpecialUnicodeValues; exports.reverseIfRtl = reverseIfRtl; exports.getUnicodeRangeFor = getUnicodeRangeFor; exports.getNormalizedUnicodes = getNormalizedUnicodes; exports.getUnicodeForGlyph = getUnicodeForGlyph; /***/ }), /* 180 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.FontRendererFactory = void 0; var _util = __w_extracthighlights_require__(6); var _cff_parser = __w_extracthighlights_require__(174); var _glyphlist = __w_extracthighlights_require__(177); var _encodings = __w_extracthighlights_require__(176); var _stream = __w_extracthighlights_require__(157); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var FontRendererFactory = function FontRendererFactoryClosure() { 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 parseCmap(data, start, end) { var offset = getUshort(data, start + 2) === 1 ? getLong(data, start + 8) : getLong(data, start + 16); var format = getUshort(data, start + offset); var ranges, p, i; if (format === 4) { getUshort(data, start + offset + 2); var 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) { var idOffset = getUshort(data, p); if (idOffset === 0) { continue; } ranges[i].ids = []; for (var 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); var 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: ".concat(format)); } function parseCff(data, start, end, seacAnalysisEnabled) { var properties = {}; var parser = new _cff_parser.CFFParser(new _stream.Stream(data, start, end - start), properties, seacAnalysisEnabled); var 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) { var 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; }; } var glyphs = []; var startOffset = itemDecode(loca, 0); for (var j = itemSize; j < loca.length; j += itemSize) { var endOffset = itemDecode(loca, j); glyphs.push(glyf.subarray(startOffset, endOffset)); startOffset = endOffset; } return glyphs; } function lookupCmap(ranges, unicode) { var code = unicode.codePointAt(0), gid = 0; var l = 0, r = ranges.length - 1; while (l < r) { var 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] }); } var i = 0; var numberOfContours = (code[i] << 24 | code[i + 1] << 16) >> 16; var flags; var x = 0, y = 0; i += 10; if (numberOfContours < 0) { do { flags = code[i] << 8 | code[i + 1]; var glyphIndex = code[i + 2] << 8 | code[i + 3]; i += 4; var 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; } var 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; } var subglyph = font.glyphs[glyphIndex]; if (subglyph) { cmds.push({ cmd: 'save' }); cmds.push({ cmd: 'transform', args: [scaleX, scale01, scale10, scaleY, x, y] }); compileGlyf(subglyph, cmds, font); cmds.push({ cmd: 'restore' }); } } while (flags & 0x20); } else { var endPtsOfContours = []; var j, jj; for (j = 0; j < numberOfContours; j++) { endPtsOfContours.push(code[i] << 8 | code[i + 1]); i += 2; } var instructionLength = code[i] << 8 | code[i + 1]; i += 2 + instructionLength; var numberOfPoints = endPtsOfContours[endPtsOfContours.length - 1] + 1; var points = []; while (points.length < numberOfPoints) { flags = code[i++]; var repeat = 1; if (flags & 0x08) { repeat += code[i++]; } while (repeat-- > 0) { points.push({ flags: 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; } var startPoint = 0; for (i = 0; i < numberOfContours; i++) { var endPoint = endPtsOfContours[i]; var 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 { var 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(code, cmds, font, glyphId) { var stack = []; var x = 0, y = 0; var stems = 0; 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] }); } function parse(code) { var i = 0; while (i < code.length) { var stackClean = false; var v = code[i++]; var 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) { var fdIndex = font.fdSelect.getFDIndex(glyphId); if (fdIndex >= 0 && fdIndex < font.fdArray.length) { var fontDict = font.fdArray[fdIndex], subrs = void 0; if (fontDict.privateDict && fontDict.privateDict.subrsIndex) { subrs = fontDict.privateDict.subrsIndex.objects; } if (subrs) { var numSubrs = subrs.length; n += numSubrs < 1240 ? 107 : numSubrs < 33900 ? 1131 : 32768; 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: var 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 ".concat(v)); } break; case 14: if (stack.length >= 4) { var achar = stack.pop(); var bchar = stack.pop(); y = stack.pop(); x = stack.pop(); cmds.push({ cmd: 'save' }); cmds.push({ cmd: 'translate', args: [x, y] }); var 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: ".concat(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(code); } var NOOP = []; var CompiledFont = /*#__PURE__*/ function () { function CompiledFont(fontMatrix) { _classCallCheck(this, CompiledFont); if (this.constructor === CompiledFont) { (0, _util.unreachable)('Cannot initialize CompiledFont.'); } this.fontMatrix = fontMatrix; this.compiledGlyphs = Object.create(null); this.compiledCharCodeToGlyphId = Object.create(null); } _createClass(CompiledFont, [{ key: "getPathJs", value: function getPathJs(unicode) { var cmap = lookupCmap(this.cmap, unicode); var fn = this.compiledGlyphs[cmap.glyphId]; if (!fn) { fn = this.compileGlyph(this.glyphs[cmap.glyphId], cmap.glyphId); this.compiledGlyphs[cmap.glyphId] = fn; } if (this.compiledCharCodeToGlyphId[cmap.charCode] === undefined) { this.compiledCharCodeToGlyphId[cmap.charCode] = cmap.glyphId; } return fn; } }, { key: "compileGlyph", value: function compileGlyph(code, glyphId) { if (!code || code.length === 0 || code[0] === 14) { return NOOP; } var fontMatrix = this.fontMatrix; if (this.isCFFCIDFont) { var fdIndex = this.fdSelect.getFDIndex(glyphId); if (fdIndex >= 0 && fdIndex < this.fdArray.length) { var fontDict = this.fdArray[fdIndex]; fontMatrix = fontDict.getByName('FontMatrix') || _util.FONT_IDENTITY_MATRIX; } else { (0, _util.warn)('Invalid fd index for glyph index.'); } } var cmds = []; cmds.push({ cmd: 'save' }); cmds.push({ cmd: 'transform', args: fontMatrix.slice() }); cmds.push({ cmd: 'scale', args: ['size', '-size'] }); this.compileGlyphImpl(code, cmds, glyphId); cmds.push({ cmd: 'restore' }); return cmds; } }, { key: "compileGlyphImpl", value: function compileGlyphImpl() { (0, _util.unreachable)('Children classes should implement this.'); } }, { key: "hasBuiltPath", value: function hasBuiltPath(unicode) { var cmap = lookupCmap(this.cmap, unicode); return this.compiledGlyphs[cmap.glyphId] !== undefined && this.compiledCharCodeToGlyphId[cmap.charCode] !== undefined; } }]); return CompiledFont; }(); var TrueTypeCompiled = /*#__PURE__*/ function (_CompiledFont) { _inherits(TrueTypeCompiled, _CompiledFont); function TrueTypeCompiled(glyphs, cmap, fontMatrix) { var _this; _classCallCheck(this, TrueTypeCompiled); _this = _possibleConstructorReturn(this, _getPrototypeOf(TrueTypeCompiled).call(this, fontMatrix || [0.000488, 0, 0, 0.000488, 0, 0])); _this.glyphs = glyphs; _this.cmap = cmap; return _this; } _createClass(TrueTypeCompiled, [{ key: "compileGlyphImpl", value: function compileGlyphImpl(code, cmds) { compileGlyf(code, cmds, this); } }]); return TrueTypeCompiled; }(CompiledFont); var Type2Compiled = /*#__PURE__*/ function (_CompiledFont2) { _inherits(Type2Compiled, _CompiledFont2); function Type2Compiled(cffInfo, cmap, fontMatrix, glyphNameMap) { var _this2; _classCallCheck(this, Type2Compiled); _this2 = _possibleConstructorReturn(this, _getPrototypeOf(Type2Compiled).call(this, fontMatrix || [0.001, 0, 0, 0.001, 0, 0])); _this2.glyphs = cffInfo.glyphs; _this2.gsubrs = cffInfo.gsubrs || []; _this2.subrs = cffInfo.subrs || []; _this2.cmap = cmap; _this2.glyphNameMap = glyphNameMap || (0, _glyphlist.getGlyphsUnicode)(); _this2.gsubrsBias = _this2.gsubrs.length < 1240 ? 107 : _this2.gsubrs.length < 33900 ? 1131 : 32768; _this2.subrsBias = _this2.subrs.length < 1240 ? 107 : _this2.subrs.length < 33900 ? 1131 : 32768; _this2.isCFFCIDFont = cffInfo.isCFFCIDFont; _this2.fdSelect = cffInfo.fdSelect; _this2.fdArray = cffInfo.fdArray; return _this2; } _createClass(Type2Compiled, [{ key: "compileGlyphImpl", value: function compileGlyphImpl(code, cmds, glyphId) { compileCharString(code, cmds, this, glyphId); } }]); return Type2Compiled; }(CompiledFont); return { create: function FontRendererFactory_create(font, seacAnalysisEnabled) { var data = new Uint8Array(font.data); var cmap, glyf, loca, cff, indexToLocFormat, unitsPerEm; var numTables = getUshort(data, 4); for (var i = 0, p = 12; i < numTables; i++, p += 16) { var tag = (0, _util.bytesToString)(data.subarray(p, p + 4)); var offset = getLong(data, p + 8); var 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) { var 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; /***/ }), /* 181 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Type1Parser = void 0; var _util = __w_extracthighlights_require__(6); var _encodings = __w_extracthighlights_require__(176); var _stream = __w_extracthighlights_require__(157); var HINTING_ENABLED = false; var Type1CharString = function Type1CharStringClosure() { var 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] }; function Type1CharString() { this.width = 0; this.lsb = 0; this.flexing = false; this.output = []; this.stack = []; } Type1CharString.prototype = { convert: function Type1CharString_convert(encoded, subrs, seacAnalysisEnabled) { var count = encoded.length; var error = false; var wx, sbx, subrNumber; for (var i = 0; i < count; i++) { var 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; } var 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) { this.seac = this.stack.splice(-4, 4); 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(); var 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; } var num2 = this.stack.pop(); var 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(); var numArgs = this.stack.pop(); if (subrNumber === 0 && numArgs === 3) { var 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 = 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: function executeCommand(howManyArgs, command, keepStack) { var stackLength = this.stack.length; if (howManyArgs > stackLength) { return true; } var start = stackLength - howManyArgs; for (var i = start; i < stackLength; i++) { var 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; }(); var Type1Parser = function Type1ParserClosure() { var EEXEC_ENCRYPT_KEY = 55665; var 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); } var r = key | 0, c1 = 52845, c2 = 22719, i, j; for (i = 0; i < discardNumber; i++) { r = (data[i] + r) * c1 + c2 & (1 << 16) - 1; } var count = data.length - discardNumber; var decrypted = new Uint8Array(count); for (i = discardNumber, j = 0; j < count; i++, j++) { var value = data[i]; decrypted[j] = value ^ r >> 8; r = (value + r) * c1 + c2 & (1 << 16) - 1; } return decrypted; } function decryptAscii(data, key, discardNumber) { var r = key | 0, c1 = 52845, c2 = 22719; var count = data.length, maybeLength = count >>> 1; var decrypted = new Uint8Array(maybeLength); var i, j; for (i = 0, j = 0; i < count; i++) { var digit1 = data[i]; if (!isHexDigit(digit1)) { continue; } i++; var digit2; while (i < count && !isHexDigit(digit2 = data[i])) { i++; } if (i < count) { var value = parseInt(String.fromCharCode(digit1, digit2), 16); decrypted[j++] = value ^ r >> 8; r = (value + r) * c1 + c2 & (1 << 16) - 1; } } return Array.prototype.slice.call(decrypted, discardNumber, j); } function isSpecial(c) { return c === 0x2F || c === 0x5B || c === 0x5D || c === 0x7B || c === 0x7D || c === 0x28 || c === 0x29; } function Type1Parser(stream, encrypted, seacAnalysisEnabled) { if (encrypted) { var data = stream.getBytes(); var isBinary = !(isHexDigit(data[0]) && isHexDigit(data[1]) && isHexDigit(data[2]) && isHexDigit(data[3])); 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(); } Type1Parser.prototype = { readNumberArray: function Type1Parser_readNumberArray() { this.getToken(); var array = []; while (true) { var token = this.getToken(); if (token === null || token === ']' || token === '}') { break; } array.push(parseFloat(token || 0)); } return array; }, readNumber: function Type1Parser_readNumber() { var token = this.getToken(); return parseFloat(token || 0); }, readInt: function Type1Parser_readInt() { var token = this.getToken(); return parseInt(token || 0, 10) | 0; }, readBoolean: function Type1Parser_readBoolean() { var token = this.getToken(); return token === 'true' ? 1 : 0; }, nextChar: function Type1_nextChar() { return this.currentChar = this.stream.getByte(); }, getToken: function Type1Parser_getToken() { var comment = false; var 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, _util.isSpace)(ch)) { break; } ch = this.nextChar(); } if (isSpecial(ch)) { this.nextChar(); return String.fromCharCode(ch); } var token = ''; do { token += String.fromCharCode(ch); ch = this.nextChar(); } while (ch >= 0 && !(0, _util.isSpace)(ch) && !isSpecial(ch)); return token; }, readCharStrings: function Type1Parser_readCharStrings(bytes, lenIV) { if (lenIV === -1) { return bytes; } return decrypt(bytes, CHAR_STRS_ENCRYPT_KEY, lenIV); }, extractFontProgram: function Type1Parser_extractFontProgram() { var stream = this.stream; var subrs = [], charstrings = []; var privateData = Object.create(null); privateData['lenIV'] = 4; var program = { subrs: [], charstrings: [], properties: { 'privateData': privateData } }; var 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; } var 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: glyph, encoded: encoded }); } break; case 'Subrs': this.readInt(); this.getToken(); while (this.getToken() === 'dup') { var 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': var 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 (var i = 0; i < charstrings.length; i++) { glyph = charstrings[i].glyph; encoded = charstrings[i].encoded; var charString = new Type1CharString(); var error = charString.convert(encoded, subrs, this.seacAnalysisEnabled); var output = charString.output; if (error) { output = [14]; } program.charstrings.push({ glyphName: glyph, charstring: output, width: charString.width, lsb: charString.lsb, seac: charString.seac }); } return program; }, extractFontHeader: function Type1Parser_extractFontHeader(properties) { var token; while ((token = this.getToken()) !== null) { if (token !== '/') { continue; } token = this.getToken(); switch (token) { case 'FontMatrix': var matrix = this.readNumberArray(); properties.fontMatrix = matrix; break; case 'Encoding': var encodingArg = this.getToken(); var encoding; if (!/^\d+$/.test(encodingArg)) { encoding = (0, _encodings.getEncoding)(encodingArg); } else { encoding = []; var size = parseInt(encodingArg, 10) | 0; this.getToken(); for (var j = 0; j < size; j++) { token = this.getToken(); while (token !== 'dup' && token !== 'def') { token = this.getToken(); if (token === null) { return; } } if (token === 'def') { break; } var index = this.readInt(); this.getToken(); var glyph = this.getToken(); encoding[index] = glyph; this.getToken(); } } properties.builtInEncoding = encoding; break; case 'FontBBox': var 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; /***/ }), /* 182 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getTilingPatternIR = getTilingPatternIR; exports.Pattern = void 0; var _util = __w_extracthighlights_require__(6); var _colorspace = __w_extracthighlights_require__(168); var _primitives = __w_extracthighlights_require__(155); var ShadingType = { FUNCTION_BASED: 1, AXIAL: 2, RADIAL: 3, FREE_FORM_MESH: 4, LATTICE_FORM_MESH: 5, COONS_PATCH_MESH: 6, TENSOR_PATCH_MESH: 7 }; var Pattern = function PatternClosure() { function Pattern() { (0, _util.unreachable)('should not call Pattern constructor'); } Pattern.prototype = { getPattern: function Pattern_getPattern(ctx) { (0, _util.unreachable)("Should not call Pattern.getStyle: ".concat(ctx)); } }; Pattern.parseShading = function (shading, matrix, xref, res, handler, pdfFunctionFactory) { var dict = (0, _primitives.isStream)(shading) ? shading.dict : shading; var type = dict.get('ShadingType'); try { switch (type) { case ShadingType.AXIAL: case ShadingType.RADIAL: return new Shadings.RadialAxial(dict, matrix, xref, res, pdfFunctionFactory); case ShadingType.FREE_FORM_MESH: case ShadingType.LATTICE_FORM_MESH: case ShadingType.COONS_PATCH_MESH: case ShadingType.TENSOR_PATCH_MESH: return new Shadings.Mesh(shading, matrix, xref, res, pdfFunctionFactory); default: throw new _util.FormatError('Unsupported ShadingType: ' + type); } } catch (ex) { if (ex instanceof _util.MissingDataException) { throw ex; } handler.send('UnsupportedFeature', { featureId: _util.UNSUPPORTED_FEATURES.shadingPattern }); (0, _util.warn)(ex); return new Shadings.Dummy(); } }; return Pattern; }(); exports.Pattern = Pattern; var Shadings = {}; Shadings.SMALL_NUMBER = 1e-6; Shadings.RadialAxial = function RadialAxialClosure() { function RadialAxial(dict, matrix, xref, res, pdfFunctionFactory) { this.matrix = matrix; this.coordsArr = dict.getArray('Coords'); this.shadingType = dict.get('ShadingType'); this.type = 'Pattern'; var cs = dict.get('ColorSpace', 'CS'); cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory); this.cs = cs; var t0 = 0.0, t1 = 1.0; if (dict.has('Domain')) { var domainArr = dict.getArray('Domain'); t0 = domainArr[0]; t1 = domainArr[1]; } var extendStart = false, extendEnd = false; if (dict.has('Extend')) { var extendArr = dict.getArray('Extend'); extendStart = extendArr[0]; extendEnd = extendArr[1]; } if (this.shadingType === ShadingType.RADIAL && (!extendStart || !extendEnd)) { var x1 = this.coordsArr[0]; var y1 = this.coordsArr[1]; var r1 = this.coordsArr[2]; var x2 = this.coordsArr[3]; var y2 = this.coordsArr[4]; var r2 = this.coordsArr[5]; var distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)); if (r1 <= r2 + distance && r2 <= r1 + distance) { (0, _util.warn)('Unsupported radial gradient.'); } } this.extendStart = extendStart; this.extendEnd = extendEnd; var fnObj = dict.get('Function'); var fn = pdfFunctionFactory.createFromArray(fnObj); var diff = t1 - t0; var step = diff / 10; var colorStops = this.colorStops = []; if (t0 >= t1 || step <= 0) { (0, _util.info)('Bad shading domain.'); return; } var color = new Float32Array(cs.numComps), ratio = new Float32Array(1); var rgbColor; for (var i = t0; i <= t1; i += step) { ratio[0] = i; fn(ratio, 0, color, 0); rgbColor = cs.getRgb(color, 0); var cssColor = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); colorStops.push([(i - t0) / diff, cssColor]); } var background = 'transparent'; if (dict.has('Background')) { rgbColor = cs.getRgb(dict.get('Background'), 0); background = _util.Util.makeCssRgb(rgbColor[0], rgbColor[1], rgbColor[2]); } if (!extendStart) { colorStops.unshift([0, background]); colorStops[1][0] += Shadings.SMALL_NUMBER; } if (!extendEnd) { colorStops[colorStops.length - 1][0] -= Shadings.SMALL_NUMBER; colorStops.push([1, background]); } this.colorStops = colorStops; } RadialAxial.prototype = { getIR: function RadialAxial_getIR() { var coordsArr = this.coordsArr; var shadingType = this.shadingType; var 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: ".concat(shadingType)); } var matrix = this.matrix; if (matrix) { p0 = _util.Util.applyTransform(p0, matrix); p1 = _util.Util.applyTransform(p1, matrix); if (shadingType === ShadingType.RADIAL) { var scale = _util.Util.singularValueDecompose2dScale(matrix); r0 *= scale[0]; r1 *= scale[1]; } } return ['RadialAxial', type, this.colorStops, p0, p1, r0, r1]; } }; return RadialAxial; }(); Shadings.Mesh = function MeshClosure() { function MeshStreamReader(stream, context) { this.stream = stream; this.context = context; this.buffer = 0; this.bufferLength = 0; var numComps = context.numComps; this.tmpCompsBuf = new Float32Array(numComps); var csNumComps = context.colorSpace.numComps; this.tmpCsCompsBuf = context.colorFn ? new Float32Array(csNumComps) : this.tmpCompsBuf; } MeshStreamReader.prototype = { get hasData() { if (this.stream.end) { return this.stream.pos < this.stream.end; } if (this.bufferLength > 0) { return true; } var nextByte = this.stream.getByte(); if (nextByte < 0) { return false; } this.buffer = nextByte; this.bufferLength = 8; return true; }, readBits: function MeshStreamReader_readBits(n) { var buffer = this.buffer; var 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(); var 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: function MeshStreamReader_align() { this.buffer = 0; this.bufferLength = 0; }, readFlag: function MeshStreamReader_readFlag() { return this.readBits(this.context.bitsPerFlag); }, readCoordinate: function MeshStreamReader_readCoordinate() { var bitsPerCoordinate = this.context.bitsPerCoordinate; var xi = this.readBits(bitsPerCoordinate); var yi = this.readBits(bitsPerCoordinate); var decode = this.context.decode; var 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: function MeshStreamReader_readComponents() { var numComps = this.context.numComps; var bitsPerComponent = this.context.bitsPerComponent; var scale = bitsPerComponent < 32 ? 1 / ((1 << bitsPerComponent) - 1) : 2.3283064365386963e-10; var decode = this.context.decode; var components = this.tmpCompsBuf; for (var i = 0, j = 4; i < numComps; i++, j += 2) { var ci = this.readBits(bitsPerComponent); components[i] = ci * scale * (decode[j + 1] - decode[j]) + decode[j]; } var color = this.tmpCsCompsBuf; if (this.context.colorFn) { this.context.colorFn(components, 0, color, 0); } return this.context.colorSpace.getRgb(color, 0); } }; function decodeType4Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var ps = []; var verticesLeft = 0; while (reader.hasData) { var f = reader.readFlag(); var coord = reader.readCoordinate(); var 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(); } mesh.figures.push({ type: 'triangles', coords: new Int32Array(ps), colors: new Int32Array(ps) }); } function decodeType5Shading(mesh, reader, verticesPerRow) { var coords = mesh.coords; var colors = mesh.colors; var ps = []; while (reader.hasData) { var coord = reader.readCoordinate(); var color = reader.readComponents(); ps.push(coords.length); coords.push(coord); colors.push(color); } mesh.figures.push({ type: 'lattice', coords: new Int32Array(ps), colors: new Int32Array(ps), verticesPerRow: verticesPerRow }); } var MIN_SPLIT_PATCH_CHUNKS_AMOUNT = 3; var MAX_SPLIT_PATCH_CHUNKS_AMOUNT = 20; var TRIANGLE_DENSITY = 20; var getB = function getBClosure() { function buildB(count) { var lut = []; for (var i = 0; i <= count; i++) { var 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; } var cache = []; return function getB(count) { if (!cache[count]) { cache[count] = buildB(count); } return cache[count]; }; }(); function buildFigureFromPatch(mesh, index) { var figure = mesh.figures[index]; (0, _util.assert)(figure.type === 'patch', 'Unexpected patch mesh figure'); var coords = mesh.coords, colors = mesh.colors; var pi = figure.coords; var ci = figure.colors; var figureMinX = Math.min(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); var figureMinY = Math.min(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); var figureMaxX = Math.max(coords[pi[0]][0], coords[pi[3]][0], coords[pi[12]][0], coords[pi[15]][0]); var figureMaxY = Math.max(coords[pi[0]][1], coords[pi[3]][1], coords[pi[12]][1], coords[pi[15]][1]); var splitXBy = Math.ceil((figureMaxX - figureMinX) * TRIANGLE_DENSITY / (mesh.bounds[2] - mesh.bounds[0])); splitXBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitXBy)); var splitYBy = Math.ceil((figureMaxY - figureMinY) * TRIANGLE_DENSITY / (mesh.bounds[3] - mesh.bounds[1])); splitYBy = Math.max(MIN_SPLIT_PATCH_CHUNKS_AMOUNT, Math.min(MAX_SPLIT_PATCH_CHUNKS_AMOUNT, splitYBy)); var verticesPerRow = splitXBy + 1; var figureCoords = new Int32Array((splitYBy + 1) * verticesPerRow); var figureColors = new Int32Array((splitYBy + 1) * verticesPerRow); var k = 0; var cl = new Uint8Array(3), cr = new Uint8Array(3); var c0 = colors[ci[0]], c1 = colors[ci[1]], c2 = colors[ci[2]], c3 = colors[ci[3]]; var bRow = getB(splitYBy), bCol = getB(splitXBy); for (var 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 (var col = 0; col <= splitXBy; col++, k++) { if ((row === 0 || row === splitYBy) && (col === 0 || col === splitXBy)) { continue; } var x = 0, y = 0; var q = 0; for (var i = 0; i <= 3; i++) { for (var j = 0; j <= 3; j++, q++) { var 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; var 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]; mesh.figures[index] = { type: 'lattice', coords: figureCoords, colors: figureColors, verticesPerRow: verticesPerRow }; } function decodeType6Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var ps = new Int32Array(16); var cs = new Int32Array(4); while (reader.hasData) { var f = reader.readFlag(); if (!(0 <= f && f <= 3)) { throw new _util.FormatError('Unknown type6 flag'); } var i, ii; var pi = coords.length; for (i = 0, ii = f !== 0 ? 8 : 12; i < ii; i++) { coords.push(reader.readCoordinate()); } var ci = colors.length; for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { colors.push(reader.readComponents()); } var 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]); mesh.figures.push({ type: 'patch', coords: new Int32Array(ps), colors: new Int32Array(cs) }); } } function decodeType7Shading(mesh, reader) { var coords = mesh.coords; var colors = mesh.colors; var ps = new Int32Array(16); var cs = new Int32Array(4); while (reader.hasData) { var f = reader.readFlag(); if (!(0 <= f && f <= 3)) { throw new _util.FormatError('Unknown type7 flag'); } var i, ii; var pi = coords.length; for (i = 0, ii = f !== 0 ? 12 : 16; i < ii; i++) { coords.push(reader.readCoordinate()); } var ci = colors.length; for (i = 0, ii = f !== 0 ? 2 : 4; i < ii; i++) { colors.push(reader.readComponents()); } var 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; } mesh.figures.push({ type: 'patch', coords: new Int32Array(ps), colors: new Int32Array(cs) }); } } function updateBounds(mesh) { var minX = mesh.coords[0][0], minY = mesh.coords[0][1], maxX = minX, maxY = minY; for (var i = 1, ii = mesh.coords.length; i < ii; i++) { var x = mesh.coords[i][0], y = mesh.coords[i][1]; minX = minX > x ? x : minX; minY = minY > y ? y : minY; maxX = maxX < x ? x : maxX; maxY = maxY < y ? y : maxY; } mesh.bounds = [minX, minY, maxX, maxY]; } function packData(mesh) { var i, ii, j, jj; var coords = mesh.coords; var coordsPacked = new Float32Array(coords.length * 2); for (i = 0, j = 0, ii = coords.length; i < ii; i++) { var xy = coords[i]; coordsPacked[j++] = xy[0]; coordsPacked[j++] = xy[1]; } mesh.coords = coordsPacked; var colors = mesh.colors; var colorsPacked = new Uint8Array(colors.length * 3); for (i = 0, j = 0, ii = colors.length; i < ii; i++) { var c = colors[i]; colorsPacked[j++] = c[0]; colorsPacked[j++] = c[1]; colorsPacked[j++] = c[2]; } mesh.colors = colorsPacked; var figures = mesh.figures; for (i = 0, ii = figures.length; i < ii; i++) { var figure = figures[i], ps = figure.coords, cs = figure.colors; for (j = 0, jj = ps.length; j < jj; j++) { ps[j] *= 2; cs[j] *= 3; } } } function Mesh(stream, matrix, xref, res, pdfFunctionFactory) { if (!(0, _primitives.isStream)(stream)) { throw new _util.FormatError('Mesh data is not a stream'); } var dict = stream.dict; this.matrix = matrix; this.shadingType = dict.get('ShadingType'); this.type = 'Pattern'; this.bbox = dict.getArray('BBox'); var cs = dict.get('ColorSpace', 'CS'); cs = _colorspace.ColorSpace.parse(cs, xref, res, pdfFunctionFactory); this.cs = cs; this.background = dict.has('Background') ? cs.getRgb(dict.get('Background'), 0) : null; var fnObj = dict.get('Function'); var fn = fnObj ? pdfFunctionFactory.createFromArray(fnObj) : null; this.coords = []; this.colors = []; this.figures = []; var 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 }; var reader = new MeshStreamReader(stream, decodeContext); var patchMesh = false; switch (this.shadingType) { case ShadingType.FREE_FORM_MESH: decodeType4Shading(this, reader); break; case ShadingType.LATTICE_FORM_MESH: var verticesPerRow = dict.get('VerticesPerRow') | 0; if (verticesPerRow < 2) { throw new _util.FormatError('Invalid VerticesPerRow'); } decodeType5Shading(this, reader, verticesPerRow); break; case ShadingType.COONS_PATCH_MESH: decodeType6Shading(this, reader); patchMesh = true; break; case ShadingType.TENSOR_PATCH_MESH: decodeType7Shading(this, reader); patchMesh = true; break; default: (0, _util.unreachable)('Unsupported mesh type.'); break; } if (patchMesh) { updateBounds(this); for (var i = 0, ii = this.figures.length; i < ii; i++) { buildFigureFromPatch(this, i); } } updateBounds(this); packData(this); } Mesh.prototype = { getIR: function Mesh_getIR() { return ['Mesh', this.shadingType, this.coords, this.colors, this.figures, this.bounds, this.matrix, this.bbox, this.background]; } }; return Mesh; }(); Shadings.Dummy = function DummyClosure() { function Dummy() { this.type = 'Pattern'; } Dummy.prototype = { getIR: function Dummy_getIR() { return ['Dummy']; } }; return Dummy; }(); function getTilingPatternIR(operatorList, dict, args) { var matrix = dict.getArray('Matrix'); var bbox = _util.Util.normalizeRect(dict.getArray('BBox')); var xstep = dict.get('XStep'); var ystep = dict.get('YStep'); var paintType = dict.get('PaintType'); var tilingType = dict.get('TilingType'); if (bbox[2] - bbox[0] === 0 || bbox[3] - bbox[1] === 0) { throw new _util.FormatError("Invalid getTilingPatternIR /BBox array: [".concat(bbox, "].")); } return ['TilingPattern', args, operatorList, matrix, bbox, xstep, ystep, paintType, tilingType]; } /***/ }), /* 183 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.bidi = bidi; var _util = __w_extracthighlights_require__(6); var 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']; var 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) { for (var j = start, jj = arr.length; j < jj; ++j) { if (arr[j] !== value) { return j; } } return j; } function setValues(arr, start, end, value) { for (var j = start; j < end; ++j) { arr[j] = value; } } function reverseValues(arr, start, end) { for (var i = start, j = end - 1; i < j; ++i, --j) { var temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } function createBidiText(str, isLTR, vertical) { return { str: str, dir: vertical ? 'ttb' : isLTR ? 'ltr' : 'rtl' }; } var chars = []; var types = []; function bidi(str, startLevel, vertical) { var isLTR = true; var strLength = str.length; if (strLength === 0 || vertical) { return createBidiText(str, isLTR, vertical); } chars.length = strLength; types.length = strLength; var numBidi = 0; var i, ii; for (i = 0; i < strLength; ++i) { chars[i] = str.charAt(i); var charCode = str.charCodeAt(i); var 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) { isLTR = true; startLevel = 0; } else { isLTR = false; startLevel = 1; } } var levels = []; for (i = 0; i < strLength; ++i) { levels[i] = startLevel; } var e = isOdd(startLevel) ? 'R' : 'L'; var sor = e; var eor = sor; var lastType = sor; for (i = 0; i < strLength; ++i) { if (types[i] === 'NSM') { types[i] = lastType; } else { lastType = types[i]; } } lastType = sor; var 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') { var j; for (j = i - 1; j >= 0; --j) { if (types[j] !== 'ET') { break; } types[j] = 'EN'; } for (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') { var end = findUnequal(types, i + 1, 'ON'); var before = sor; if (i > 0) { before = types[i - 1]; } var 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; } } } var highestLevel = -1; var lowestOddLevel = 99; var 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) { var 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) { var ch = chars[i]; if (ch === '<' || ch === '>') { chars[i] = ''; } } return createBidiText(chars.join(''), isLTR); } /***/ }), /* 184 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getMetrics = void 0; var _util = __w_extracthighlights_require__(6); var getMetrics = (0, _util.getLookupTableFactory)(function (t) { t['Courier'] = 600; t['Courier-Bold'] = 600; t['Courier-BoldOblique'] = 600; t['Courier-Oblique'] = 600; t['Helvetica'] = (0, _util.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, _util.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, _util.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, _util.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, _util.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, _util.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, _util.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, _util.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, _util.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, _util.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; /***/ }), /* 185 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.isPDFFunction = isPDFFunction; exports.PostScriptCompiler = exports.PostScriptEvaluator = exports.PDFFunctionFactory = void 0; var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); var _ps_parser = __w_extracthighlights_require__(186); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var IsEvalSupportedCached = { get value() { return (0, _util.shadow)(this, 'value', (0, _util.isEvalSupported)()); } }; var PDFFunctionFactory = /*#__PURE__*/ function () { function PDFFunctionFactory(_ref) { var xref = _ref.xref, _ref$isEvalSupported = _ref.isEvalSupported, isEvalSupported = _ref$isEvalSupported === void 0 ? true : _ref$isEvalSupported; _classCallCheck(this, PDFFunctionFactory); this.xref = xref; this.isEvalSupported = isEvalSupported !== false; } _createClass(PDFFunctionFactory, [{ key: "create", value: function create(fn) { return PDFFunction.parse({ xref: this.xref, isEvalSupported: this.isEvalSupported, fn: fn }); } }, { key: "createFromArray", value: function createFromArray(fnObj) { return PDFFunction.parseArray({ xref: this.xref, isEvalSupported: this.isEvalSupported, fnObj: fnObj }); } }]); return PDFFunctionFactory; }(); exports.PDFFunctionFactory = PDFFunctionFactory; function toNumberArray(arr) { if (!Array.isArray(arr)) { return null; } var length = arr.length; for (var i = 0; i < length; i++) { if (typeof arr[i] !== 'number') { var result = new Array(length); for (var _i = 0; _i < length; _i++) { result[_i] = +arr[_i]; } return result; } } return arr; } var PDFFunction = function PDFFunctionClosure() { var CONSTRUCT_SAMPLED = 0; var CONSTRUCT_INTERPOLATED = 2; var CONSTRUCT_STICHED = 3; var CONSTRUCT_POSTSCRIPT = 4; return { getSampleArray: function getSampleArray(size, outputSize, bps, stream) { var i, ii; var length = 1; for (i = 0, ii = size.length; i < ii; i++) { length *= size[i]; } length *= outputSize; var array = new Array(length); var codeSize = 0; var codeBuf = 0; var sampleMul = 1.0 / (Math.pow(2.0, bps) - 1); var strBytes = stream.getBytes((length * bps + 7) / 8); var 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; }, getIR: function getIR(_ref2) { var xref = _ref2.xref, isEvalSupported = _ref2.isEvalSupported, fn = _ref2.fn; var dict = fn.dict; if (!dict) { dict = fn; } var types = [this.constructSampled, null, this.constructInterpolated, this.constructStiched, this.constructPostScript]; var typeNum = dict.get('FunctionType'); var typeFn = types[typeNum]; if (!typeFn) { throw new _util.FormatError('Unknown type of function'); } return typeFn.call(this, { xref: xref, isEvalSupported: isEvalSupported, fn: fn, dict: dict }); }, fromIR: function fromIR(_ref3) { var xref = _ref3.xref, isEvalSupported = _ref3.isEvalSupported, IR = _ref3.IR; var type = IR[0]; switch (type) { case CONSTRUCT_SAMPLED: return this.constructSampledFromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); case CONSTRUCT_INTERPOLATED: return this.constructInterpolatedFromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); case CONSTRUCT_STICHED: return this.constructStichedFromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); default: return this.constructPostScriptFromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); } }, parse: function parse(_ref4) { var xref = _ref4.xref, isEvalSupported = _ref4.isEvalSupported, fn = _ref4.fn; var IR = this.getIR({ xref: xref, isEvalSupported: isEvalSupported, fn: fn }); return this.fromIR({ xref: xref, isEvalSupported: isEvalSupported, IR: IR }); }, parseArray: function parseArray(_ref5) { var xref = _ref5.xref, isEvalSupported = _ref5.isEvalSupported, fnObj = _ref5.fnObj; if (!Array.isArray(fnObj)) { return this.parse({ xref: xref, isEvalSupported: isEvalSupported, fn: fnObj }); } var fnArray = []; for (var j = 0, jj = fnObj.length; j < jj; j++) { fnArray.push(this.parse({ xref: xref, isEvalSupported: isEvalSupported, fn: xref.fetchIfRef(fnObj[j]) })); } return function (src, srcOffset, dest, destOffset) { for (var i = 0, ii = fnArray.length; i < ii; i++) { fnArray[i](src, srcOffset, dest, destOffset + i); } }; }, constructSampled: function constructSampled(_ref6) { _ref6.xref; _ref6.isEvalSupported; var fn = _ref6.fn, dict = _ref6.dict; function toMultiArray(arr) { var inputLength = arr.length; var out = []; var index = 0; for (var i = 0; i < inputLength; i += 2) { out[index] = [arr[i], arr[i + 1]]; ++index; } return out; } var domain = toNumberArray(dict.getArray('Domain')); var range = toNumberArray(dict.getArray('Range')); if (!domain || !range) { throw new _util.FormatError('No domain or range'); } var inputSize = domain.length / 2; var outputSize = range.length / 2; domain = toMultiArray(domain); range = toMultiArray(range); var size = toNumberArray(dict.getArray('Size')); var bps = dict.get('BitsPerSample'); var order = dict.get('Order') || 1; if (order !== 1) { (0, _util.info)('No support for cubic spline interpolation: ' + order); } var encode = toNumberArray(dict.getArray('Encode')); if (!encode) { encode = []; for (var i = 0; i < inputSize; ++i) { encode.push([0, size[i] - 1]); } } else { encode = toMultiArray(encode); } var decode = toNumberArray(dict.getArray('Decode')); if (!decode) { decode = range; } else { decode = toMultiArray(decode); } var samples = this.getSampleArray(size, outputSize, bps, fn); return [CONSTRUCT_SAMPLED, inputSize, domain, encode, decode, samples, size, outputSize, Math.pow(2, bps) - 1, range]; }, constructSampledFromIR: function constructSampledFromIR(_ref7) { _ref7.xref; _ref7.isEvalSupported; var IR = _ref7.IR; function interpolate(x, xmin, xmax, ymin, ymax) { return ymin + (x - xmin) * ((ymax - ymin) / (xmax - xmin)); } return function constructSampledFromIRResult(src, srcOffset, dest, destOffset) { var m = IR[1]; var domain = IR[2]; var encode = IR[3]; var decode = IR[4]; var samples = IR[5]; var size = IR[6]; var n = IR[7]; var range = IR[9]; var cubeVertices = 1 << m; var cubeN = new Float64Array(cubeVertices); var cubeVertex = new Uint32Array(cubeVertices); var i, j; for (j = 0; j < cubeVertices; j++) { cubeN[j] = 1; } var k = n, pos = 1; for (i = 0; i < m; ++i) { var domain_2i = domain[i][0]; var domain_2i_1 = domain[i][1]; var xi = Math.min(Math.max(src[srcOffset + i], domain_2i), domain_2i_1); var e = interpolate(xi, domain_2i, domain_2i_1, encode[i][0], encode[i][1]); var size_i = size[i]; e = Math.min(Math.max(e, 0), size_i - 1); var e0 = e < size_i - 1 ? Math.floor(e) : e - 1; var n0 = e0 + 1 - e; var n1 = e - e0; var offset0 = e0 * k; var 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 < n; ++j) { var 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]); } }; }, constructInterpolated: function constructInterpolated(_ref8) { _ref8.xref; _ref8.isEvalSupported; _ref8.fn; var dict = _ref8.dict; var c0 = toNumberArray(dict.getArray('C0')) || [0]; var c1 = toNumberArray(dict.getArray('C1')) || [1]; var n = dict.get('N'); var length = c0.length; var diff = []; for (var i = 0; i < length; ++i) { diff.push(c1[i] - c0[i]); } return [CONSTRUCT_INTERPOLATED, c0, diff, n]; }, constructInterpolatedFromIR: function constructInterpolatedFromIR(_ref9) { _ref9.xref; _ref9.isEvalSupported; var IR = _ref9.IR; var c0 = IR[1]; var diff = IR[2]; var n = IR[3]; var length = diff.length; return function constructInterpolatedFromIRResult(src, srcOffset, dest, destOffset) { var x = n === 1 ? src[srcOffset] : Math.pow(src[srcOffset], n); for (var j = 0; j < length; ++j) { dest[destOffset + j] = c0[j] + x * diff[j]; } }; }, constructStiched: function constructStiched(_ref10) { var xref = _ref10.xref, isEvalSupported = _ref10.isEvalSupported; _ref10.fn; var dict = _ref10.dict; var domain = toNumberArray(dict.getArray('Domain')); if (!domain) { throw new _util.FormatError('No domain'); } var inputSize = domain.length / 2; if (inputSize !== 1) { throw new _util.FormatError('Bad domain for stiched function'); } var fnRefs = dict.get('Functions'); var fns = []; for (var i = 0, ii = fnRefs.length; i < ii; ++i) { fns.push(this.parse({ xref: xref, isEvalSupported: isEvalSupported, fn: xref.fetchIfRef(fnRefs[i]) })); } var bounds = toNumberArray(dict.getArray('Bounds')); var encode = toNumberArray(dict.getArray('Encode')); return [CONSTRUCT_STICHED, domain, bounds, encode, fns]; }, constructStichedFromIR: function constructStichedFromIR(_ref11) { _ref11.xref; _ref11.isEvalSupported; var IR = _ref11.IR; var domain = IR[1]; var bounds = IR[2]; var encode = IR[3]; var fns = IR[4]; var tmpBuf = new Float32Array(1); return function constructStichedFromIRResult(src, srcOffset, dest, destOffset) { var clip = function constructStichedFromIRClip(v, min, max) { if (v > max) { v = max; } else if (v < min) { v = min; } return v; }; var v = clip(src[srcOffset], domain[0], domain[1]); for (var i = 0, ii = bounds.length; i < ii; ++i) { if (v < bounds[i]) { break; } } var dmin = domain[0]; if (i > 0) { dmin = bounds[i - 1]; } var dmax = domain[1]; if (i < bounds.length) { dmax = bounds[i]; } var rmin = encode[2 * i]; var rmax = encode[2 * i + 1]; tmpBuf[0] = dmin === dmax ? rmin : rmin + (v - dmin) * (rmax - rmin) / (dmax - dmin); fns[i](tmpBuf, 0, dest, destOffset); }; }, constructPostScript: function constructPostScript(_ref12) { _ref12.xref; _ref12.isEvalSupported; var fn = _ref12.fn, dict = _ref12.dict; var domain = toNumberArray(dict.getArray('Domain')); var range = toNumberArray(dict.getArray('Range')); if (!domain) { throw new _util.FormatError('No domain.'); } if (!range) { throw new _util.FormatError('No range.'); } var lexer = new _ps_parser.PostScriptLexer(fn); var parser = new _ps_parser.PostScriptParser(lexer); var code = parser.parse(); return [CONSTRUCT_POSTSCRIPT, domain, range, code]; }, constructPostScriptFromIR: function constructPostScriptFromIR(_ref13) { _ref13.xref; var isEvalSupported = _ref13.isEvalSupported, IR = _ref13.IR; var domain = IR[1]; var range = IR[2]; var code = IR[3]; if (isEvalSupported && IsEvalSupportedCached.value) { var 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'); var numOutputs = range.length >> 1; var numInputs = domain.length >> 1; var evaluator = new PostScriptEvaluator(code); var cache = Object.create(null); var MAX_CACHE_SIZE = 2048 * 4; var cache_available = MAX_CACHE_SIZE; var tmpBuf = new Float32Array(numInputs); return function constructPostScriptFromIRResult(src, srcOffset, dest, destOffset) { var i, value; var key = ''; var input = tmpBuf; for (i = 0; i < numInputs; i++) { value = src[srcOffset + i]; input[i] = value; key += value + '_'; } var cachedValue = cache[key]; if (cachedValue !== undefined) { dest.set(cachedValue, destOffset); return; } var output = new Float32Array(numOutputs); var stack = evaluator.execute(input); var stackIndex = stack.length - numOutputs; for (i = 0; i < numOutputs; i++) { value = stack[stackIndex + i]; var 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) { var 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'); } var PostScriptStack = function PostScriptStackClosure() { var MAX_STACK_SIZE = 100; function PostScriptStack(initialStack) { this.stack = !initialStack ? [] : Array.prototype.slice.call(initialStack, 0); } PostScriptStack.prototype = { push: function PostScriptStack_push(value) { if (this.stack.length >= MAX_STACK_SIZE) { throw new Error('PostScript function stack overflow.'); } this.stack.push(value); }, pop: function PostScriptStack_pop() { if (this.stack.length <= 0) { throw new Error('PostScript function stack underflow.'); } return this.stack.pop(); }, copy: function PostScriptStack_copy(n) { if (this.stack.length + n >= MAX_STACK_SIZE) { throw new Error('PostScript function stack overflow.'); } var stack = this.stack; for (var i = stack.length - n, j = n - 1; j >= 0; j--, i++) { stack.push(stack[i]); } }, index: function PostScriptStack_index(n) { this.push(this.stack[this.stack.length - n - 1]); }, roll: function PostScriptStack_roll(n, p) { var stack = this.stack; var l = stack.length - n; var r = stack.length - 1, c = l + (p - Math.floor(p / n) * n), i, j, t; for (i = l, j = r; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } for (i = l, j = c - 1; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } for (i = c, j = r; i < j; i++, j--) { t = stack[i]; stack[i] = stack[j]; stack[j] = t; } } }; return PostScriptStack; }(); var PostScriptEvaluator = function PostScriptEvaluatorClosure() { function PostScriptEvaluator(operators) { this.operators = operators; } PostScriptEvaluator.prototype = { execute: function PostScriptEvaluator_execute(initialStack) { var stack = new PostScriptStack(initialStack); var counter = 0; var operators = this.operators; var length = operators.length; var 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(Math.pow(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 ".concat(operator)); } } return stack.stack; } }; return PostScriptEvaluator; }(); exports.PostScriptEvaluator = PostScriptEvaluator; var PostScriptCompiler = function PostScriptCompilerClosure() { function AstNode(type) { this.type = type; } AstNode.prototype.visit = function (visitor) { (0, _util.unreachable)('abstract method'); }; function AstArgument(index, min, max) { AstNode.call(this, 'args'); this.index = index; this.min = min; this.max = max; } AstArgument.prototype = Object.create(AstNode.prototype); AstArgument.prototype.visit = function (visitor) { visitor.visitArgument(this); }; function AstLiteral(number) { AstNode.call(this, 'literal'); this.number = number; this.min = number; this.max = number; } AstLiteral.prototype = Object.create(AstNode.prototype); AstLiteral.prototype.visit = function (visitor) { visitor.visitLiteral(this); }; function AstBinaryOperation(op, arg1, arg2, min, max) { AstNode.call(this, 'binary'); this.op = op; this.arg1 = arg1; this.arg2 = arg2; this.min = min; this.max = max; } AstBinaryOperation.prototype = Object.create(AstNode.prototype); AstBinaryOperation.prototype.visit = function (visitor) { visitor.visitBinaryOperation(this); }; function AstMin(arg, max) { AstNode.call(this, 'max'); this.arg = arg; this.min = arg.min; this.max = max; } AstMin.prototype = Object.create(AstNode.prototype); AstMin.prototype.visit = function (visitor) { visitor.visitMin(this); }; function AstVariable(index, min, max) { AstNode.call(this, 'var'); this.index = index; this.min = min; this.max = max; } AstVariable.prototype = Object.create(AstNode.prototype); AstVariable.prototype.visit = function (visitor) { visitor.visitVariable(this); }; function AstVariableDefinition(variable, arg) { AstNode.call(this, 'definition'); this.variable = variable; this.arg = arg; } AstVariableDefinition.prototype = Object.create(AstNode.prototype); AstVariableDefinition.prototype.visit = function (visitor) { visitor.visitVariableDefinition(this); }; function ExpressionBuilderVisitor() { this.parts = []; } ExpressionBuilderVisitor.prototype = { visitArgument: function visitArgument(arg) { this.parts.push('Math.max(', arg.min, ', Math.min(', arg.max, ', src[srcOffset + ', arg.index, ']))'); }, visitVariable: function visitVariable(variable) { this.parts.push('v', variable.index); }, visitLiteral: function visitLiteral(literal) { this.parts.push(literal.number); }, visitBinaryOperation: function visitBinaryOperation(operation) { this.parts.push('('); operation.arg1.visit(this); this.parts.push(' ', operation.op, ' '); operation.arg2.visit(this); this.parts.push(')'); }, visitVariableDefinition: function visitVariableDefinition(definition) { this.parts.push('var '); definition.variable.visit(this); this.parts.push(' = '); definition.arg.visit(this); this.parts.push(';'); }, visitMin: function visitMin(max) { this.parts.push('Math.min('); max.arg.visit(this); this.parts.push(', ', max.max, ')'); }, toString: function 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; } } var min = Math.min(num1.min * num2.min, num1.min * num2.max, num1.max * num2.min, num1.max * num2.max); var 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); } function PostScriptCompiler() {} PostScriptCompiler.prototype = { compile: function PostScriptCompiler_compile(code, domain, range) { var stack = []; var i, ii; var instructions = []; var inputSize = domain.length >> 1, outputSize = range.length >> 1; var lastRegister = 0; var n, j; var num1, num2, ast1, ast2, tmpVar, item; for (i = 0; i < inputSize; i++) { stack.push(new AstArgument(i, domain[i * 2], domain[i * 2 + 1])); } for (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; } var result = []; instructions.forEach(function (instruction) { var statementBuilder = new ExpressionBuilderVisitor(); instruction.visit(statementBuilder); result.push(statementBuilder.toString()); }); stack.forEach(function (expr, i) { var statementBuilder = new ExpressionBuilderVisitor(); expr.visit(statementBuilder); var min = range[i * 2], max = range[i * 2 + 1]; var 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; /***/ }), /* 186 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PostScriptParser = exports.PostScriptLexer = void 0; var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var PostScriptParser = /*#__PURE__*/ function () { function PostScriptParser(lexer) { _classCallCheck(this, PostScriptParser); this.lexer = lexer; this.operators = []; this.token = null; this.prev = null; } _createClass(PostScriptParser, [{ key: "nextToken", value: function nextToken() { this.prev = this.token; this.token = this.lexer.getToken(); } }, { key: "accept", value: function accept(type) { if (this.token.type === type) { this.nextToken(); return true; } return false; } }, { key: "expect", value: function expect(type) { if (this.accept(type)) { return true; } throw new _util.FormatError("Unexpected symbol: found ".concat(this.token.type, " expected ").concat(type, ".")); } }, { key: "parse", value: function parse() { this.nextToken(); this.expect(PostScriptTokenTypes.LBRACE); this.parseBlock(); this.expect(PostScriptTokenTypes.RBRACE); return this.operators; } }, { key: "parseBlock", value: function 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; } } } }, { key: "parseCondition", value: function parseCondition() { var 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)) { var jumpLocation = this.operators.length; this.operators.push(null, null); var 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.'); } } }]); return PostScriptParser; }(); exports.PostScriptParser = PostScriptParser; var PostScriptTokenTypes = { LBRACE: 0, RBRACE: 1, NUMBER: 2, OPERATOR: 3, IF: 4, IFELSE: 5 }; var PostScriptToken = function PostScriptTokenClosure() { var opCache = Object.create(null); var PostScriptToken = /*#__PURE__*/ function () { function PostScriptToken(type, value) { _classCallCheck(this, PostScriptToken); this.type = type; this.value = value; } _createClass(PostScriptToken, null, [{ key: "getOperator", value: function getOperator(op) { var opValue = opCache[op]; if (opValue) { return opValue; } return opCache[op] = new PostScriptToken(PostScriptTokenTypes.OPERATOR, op); } }, { key: "LBRACE", get: function get() { return (0, _util.shadow)(this, 'LBRACE', new PostScriptToken(PostScriptTokenTypes.LBRACE, '{')); } }, { key: "RBRACE", get: function get() { return (0, _util.shadow)(this, 'RBRACE', new PostScriptToken(PostScriptTokenTypes.RBRACE, '}')); } }, { key: "IF", get: function get() { return (0, _util.shadow)(this, 'IF', new PostScriptToken(PostScriptTokenTypes.IF, 'IF')); } }, { key: "IFELSE", get: function get() { return (0, _util.shadow)(this, 'IFELSE', new PostScriptToken(PostScriptTokenTypes.IFELSE, 'IFELSE')); } }]); return PostScriptToken; }(); return PostScriptToken; }(); var PostScriptLexer = /*#__PURE__*/ function () { function PostScriptLexer(stream) { _classCallCheck(this, PostScriptLexer); this.stream = stream; this.nextChar(); this.strBuf = []; } _createClass(PostScriptLexer, [{ key: "nextChar", value: function nextChar() { return this.currentChar = this.stream.getByte(); } }, { key: "getToken", value: function getToken() { var comment = false; var 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, _util.isSpace)(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; } var 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)); } var str = strBuf.join(''); switch (str.toLowerCase()) { case 'if': return PostScriptToken.IF; case 'ifelse': return PostScriptToken.IFELSE; default: return PostScriptToken.getOperator(str); } } }, { key: "getNumber", value: function getNumber() { var ch = this.currentChar; var 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; } } var value = parseFloat(strBuf.join('')); if (isNaN(value)) { throw new _util.FormatError("Invalid floating point number: ".concat(value)); } return value; } }]); return PostScriptLexer; }(); exports.PostScriptLexer = PostScriptLexer; /***/ }), /* 187 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.MurmurHash3_64 = void 0; var _util = __w_extracthighlights_require__(6); var MurmurHash3_64 = function MurmurHash3_64Closure(seed) { var MASK_HIGH = 0xffff0000; var MASK_LOW = 0xffff; function MurmurHash3_64(seed) { var SEED = 0xc3d2e1f0; this.h1 = seed ? seed & 0xffffffff : SEED; this.h2 = seed ? seed & 0xffffffff : SEED; } MurmurHash3_64.prototype = { update: function MurmurHash3_64_update(input) { var data, length; if ((0, _util.isString)(input)) { data = new Uint8Array(input.length * 2); length = 0; for (var i = 0, ii = input.length; i < ii; i++) { var 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; length = data.byteLength; } else { throw new Error('Wrong data format in MurmurHash3_64_update. ' + 'Input must be a string or array.'); } var blockCounts = length >> 2; var tailLength = length - blockCounts * 4; var dataUint32 = new Uint32Array(data.buffer, 0, blockCounts); var k1 = 0; var k2 = 0; var h1 = this.h1; var h2 = this.h2; var C1 = 0xcc9e2d51; var C2 = 0x1b873593; var C1_LOW = C1 & MASK_LOW; var C2_LOW = C2 & MASK_LOW; for (var _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; return this; }, hexdigest: function MurmurHash3_64_hexdigest() { var h1 = this.h1; var 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; for (var i = 0, arr = [h1, h2], str = ''; i < arr.length; i++) { var hex = (arr[i] >>> 0).toString(16); while (hex.length < 8) { hex = '0' + hex; } str += hex; } return str; } }; return MurmurHash3_64; }(); exports.MurmurHash3_64 = MurmurHash3_64; /***/ }), /* 188 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFImage = void 0; var _util = __w_extracthighlights_require__(6); var _primitives = __w_extracthighlights_require__(155); var _colorspace = __w_extracthighlights_require__(168); var _stream = __w_extracthighlights_require__(157); var _jpeg_stream = __w_extracthighlights_require__(163); var _jpx = __w_extracthighlights_require__(166); function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } var PDFImage = function PDFImageClosure() { function handleImageData(image, nativeDecoder) { if (nativeDecoder && nativeDecoder.canDecode(image)) { return nativeDecoder.decode(image).catch(function (reason) { (0, _util.warn)('Native image decoding failed -- trying to recover: ' + (reason && reason.message)); return image; }); } return Promise.resolve(image); } function decodeAndClamp(value, addend, coefficient, max) { value = addend + value * coefficient; return value < 0 ? 0 : value > max ? max : value; } function resizeImageMask(src, bpc, w1, h1, w2, h2) { var length = w2 * h2; var dest = bpc <= 8 ? new Uint8Array(length) : bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length); var xRatio = w1 / w2; var yRatio = h1 / h2; var i, j, py, newIndex = 0, oldIndex; var xScaled = new Uint16Array(w2); var 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; } function PDFImage(_ref) { var xref = _ref.xref, res = _ref.res, image = _ref.image, _ref$isInline = _ref.isInline, isInline = _ref$isInline === void 0 ? false : _ref$isInline, _ref$smask = _ref.smask, smask = _ref$smask === void 0 ? null : _ref$smask, _ref$mask = _ref.mask, mask = _ref$mask === void 0 ? null : _ref$mask, _ref$isMask = _ref.isMask, isMask = _ref$isMask === void 0 ? false : _ref$isMask, pdfFunctionFactory = _ref.pdfFunctionFactory; this.image = image; var dict = image.dict; var filter = dict.get('Filter'); if ((0, _primitives.isName)(filter)) { switch (filter.name) { case 'JPXDecode': var 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; } } var width = dict.get('Width', 'W'); var height = dict.get('Height', 'H'); 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: ".concat(width, " or ") + "height: ".concat(height)); } this.width = width; this.height = height; this.interpolate = dict.get('Interpolate', 'I') || false; this.imageMask = dict.get('ImageMask', 'IM') || false; this.matte = dict.get('Matte') || false; var bitsPerComponent = image.bitsPerComponent; if (!bitsPerComponent) { bitsPerComponent = dict.get('BitsPerComponent', 'BPC'); if (!bitsPerComponent) { if (this.imageMask) { bitsPerComponent = 1; } else { throw new _util.FormatError("Bits per component missing in image: ".concat(this.imageMask)); } } } this.bpc = bitsPerComponent; if (!this.imageMask) { var colorSpace = dict.get('ColorSpace', 'CS'); 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 ".concat(image.numComps, " ") + 'color components not supported.'); } } var resources = isInline ? res : null; this.colorSpace = _colorspace.ColorSpace.parse(colorSpace, xref, resources, pdfFunctionFactory); this.numComps = this.colorSpace.numComps; } this.decode = dict.getArray('Decode', 'D'); this.needsDecode = false; if (this.decode && (this.colorSpace && !this.colorSpace.isDefaultDecode(this.decode, bitsPerComponent) || isMask && !_colorspace.ColorSpace.isDefaultDecode(this.decode, 1))) { this.needsDecode = true; var max = (1 << bitsPerComponent) - 1; this.decodeCoefficients = []; this.decodeAddends = []; var isIndexed = this.colorSpace && this.colorSpace.name === 'Indexed'; for (var i = 0, j = 0; i < this.decode.length; i += 2, ++j) { var dmin = this.decode[i]; var 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: xref, res: res, image: smask, isInline: isInline, pdfFunctionFactory: pdfFunctionFactory }); } else if (mask) { if ((0, _primitives.isStream)(mask)) { var maskDict = mask.dict, imageMask = maskDict.get('ImageMask', 'IM'); if (!imageMask) { (0, _util.warn)('Ignoring /Mask in image without /ImageMask.'); } else { this.mask = new PDFImage({ xref: xref, res: res, image: mask, isInline: isInline, isMask: true, pdfFunctionFactory: pdfFunctionFactory }); } } else { this.mask = mask; } } } PDFImage.buildImage = function (_ref2) { _ref2.handler; var xref = _ref2.xref, res = _ref2.res, image = _ref2.image, _ref2$isInline = _ref2.isInline, isInline = _ref2$isInline === void 0 ? false : _ref2$isInline, _ref2$nativeDecoder = _ref2.nativeDecoder, nativeDecoder = _ref2$nativeDecoder === void 0 ? null : _ref2$nativeDecoder, pdfFunctionFactory = _ref2.pdfFunctionFactory; var imagePromise = handleImageData(image, nativeDecoder); var smaskPromise; var maskPromise; var smask = image.dict.get('SMask'); var mask = image.dict.get('Mask'); if (smask) { smaskPromise = handleImageData(smask, nativeDecoder); maskPromise = Promise.resolve(null); } else { smaskPromise = Promise.resolve(null); if (mask) { if ((0, _primitives.isStream)(mask)) { maskPromise = handleImageData(mask, nativeDecoder); } else if (Array.isArray(mask)) { maskPromise = Promise.resolve(mask); } else { (0, _util.warn)('Unsupported mask format.'); maskPromise = Promise.resolve(null); } } else { maskPromise = Promise.resolve(null); } } return Promise.all([imagePromise, smaskPromise, maskPromise]).then(function (_ref3) { var _ref4 = _slicedToArray(_ref3, 3), imageData = _ref4[0], smaskData = _ref4[1], maskData = _ref4[2]; return new PDFImage({ xref: xref, res: res, image: imageData, isInline: isInline, smask: smaskData, mask: maskData, pdfFunctionFactory: pdfFunctionFactory }); }); }; PDFImage.createMask = function (_ref5) { var imgArray = _ref5.imgArray, width = _ref5.width, height = _ref5.height, imageIsFromDecodeStream = _ref5.imageIsFromDecodeStream, inverseDecode = _ref5.inverseDecode; var computedLength = (width + 7 >> 3) * height; var actualLength = imgArray.byteLength; var haveFullData = computedLength === actualLength; var 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: data, width: width, height: height }; }; PDFImage.prototype = { 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: function decodeBuffer(buffer) { var bpc = this.bpc; var numComps = this.numComps; var decodeAddends = this.decodeAddends; var decodeCoefficients = this.decodeCoefficients; var max = (1 << bpc) - 1; var i, ii; if (bpc === 1) { for (i = 0, ii = buffer.length; i < ii; i++) { buffer[i] = +!buffer[i]; } return; } var index = 0; for (i = 0, ii = this.width * this.height; i < ii; i++) { for (var j = 0; j < numComps; j++) { buffer[index] = decodeAndClamp(buffer[index], decodeAddends[j], decodeCoefficients[j], max); index++; } } }, getComponents: function getComponents(buffer) { var bpc = this.bpc; if (bpc === 8) { return buffer; } var width = this.width; var height = this.height; var numComps = this.numComps; var length = width * height * numComps; var bufferPos = 0; var output = bpc <= 8 ? new Uint8Array(length) : bpc <= 16 ? new Uint16Array(length) : new Uint32Array(length); var rowComps = width * numComps; var max = (1 << bpc) - 1; var i = 0, ii, buf; if (bpc === 1) { var mask, loop1End, loop2End; for (var 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 { var 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; } var remainingBits = bits - bpc; var value = buf >> remainingBits; output[i] = value < 0 ? 0 : value > max ? max : value; buf = buf & (1 << remainingBits) - 1; bits = remainingBits; } } return output; }, fillOpacity: function fillOpacity(rgbaBuf, width, height, actualHeight, image) { var smask = this.smask; var mask = this.mask; var 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); var numComps = this.numComps; for (i = 0, ii = width * height; i < ii; ++i) { var opacity = 0; var imageOffset = i * numComps; for (j = 0; j < numComps; ++j) { var color = image[imageOffset + j]; var 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: function undoPreblend(buffer, width, height) { var matte = this.smask && this.smask.matte; if (!matte) { return; } var matteRgb = this.colorSpace.getRgb(matte, 0); var matteR = matteRgb[0]; var matteG = matteRgb[1]; var matteB = matteRgb[2]; var length = width * height * 4; for (var i = 0; i < length; i += 4) { var alpha = buffer[i + 3]; if (alpha === 0) { buffer[i] = 255; buffer[i + 1] = 255; buffer[i + 2] = 255; continue; } var 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: function createImageData() { var forceRGBA = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var drawWidth = this.drawWidth; var drawHeight = this.drawHeight; var imgData = { width: drawWidth, height: drawHeight, kind: 0, data: null }; var numComps = this.numComps; var originalWidth = this.width; var originalHeight = this.height; var bpc = this.bpc; var rowBytes = originalWidth * numComps * bpc + 7 >> 3; var imgArray; if (!forceRGBA) { var 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 _stream.DecodeStream) { imgData.data = imgArray; } else { var 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.'); var buffer = imgData.data; for (var i = 0, ii = buffer.length; i < ii; i++) { buffer[i] ^= 0xff; } } return imgData; } if (this.image instanceof _jpeg_stream.JpegStream && !this.smask && !this.mask) { var 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); var actualHeight = 0 | imgArray.length / rowBytes * drawHeight / originalHeight; var comps = this.getComponents(imgArray); var 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: function fillGrayBuffer(buffer) { var numComps = this.numComps; if (numComps !== 1) { throw new _util.FormatError("Reading gray scale from a color image: ".concat(numComps)); } var width = this.width; var height = this.height; var bpc = this.bpc; var rowBytes = width * numComps * bpc + 7 >> 3; var imgArray = this.getImageBytes(height * rowBytes); var comps = this.getComponents(imgArray); var 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; var scale = 255 / ((1 << bpc) - 1); for (i = 0; i < length; ++i) { buffer[i] = scale * comps[i]; } }, getImageBytes: function getImageBytes(length, drawWidth, drawHeight) { var forceRGB = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 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); } }; return PDFImage; }(); exports.PDFImage = PDFImage; /***/ }), /* 189 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageHandler = MessageHandler; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(2)); var _util = __w_extracthighlights_require__(6); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function resolveCall(_x, _x2) { return _resolveCall.apply(this, arguments); } function _resolveCall() { _resolveCall = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee(fn, args) { var thisArg, _args = arguments; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: thisArg = _args.length > 2 && _args[2] !== undefined ? _args[2] : null; if (fn) { _context.next = 3; break; } return _context.abrupt("return"); case 3: return _context.abrupt("return", fn.apply(thisArg, args)); case 4: case "end": return _context.stop(); } } }, _callee, this); })); return _resolveCall.apply(this, arguments); } function wrapReason(reason) { if (_typeof(reason) !== 'object') { return reason; } switch (reason.name) { case 'AbortException': return new _util.AbortException(reason.message); case 'MissingPDFException': return new _util.MissingPDFException(reason.message); case 'UnexpectedResponseException': return new _util.UnexpectedResponseException(reason.message, reason.status); default: return new _util.UnknownErrorException(reason.message, reason.details); } } function makeReasonSerializable(reason) { if (!(reason instanceof Error) || reason instanceof _util.AbortException || reason instanceof _util.MissingPDFException || reason instanceof _util.UnexpectedResponseException || reason instanceof _util.UnknownErrorException) { return reason; } return new _util.UnknownErrorException(reason.message, reason.toString()); } function resolveOrReject(capability, success, reason) { if (success) { capability.resolve(); } else { capability.reject(reason); } } function finalize(promise) { return Promise.resolve(promise).catch(function () {}); } function MessageHandler(sourceName, targetName, comObj) { var _this = this; this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.postMessageTransfers = true; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); var ah = this.actionHandler = Object.create(null); this._onComObjOnMessage = function (event) { var data = event.data; if (data.targetName !== _this.sourceName) { return; } if (data.stream) { _this._processStreamMessage(data); } else if (data.isReply) { var callbackId = data.callbackId; if (data.callbackId in callbacksCapabilities) { var callback = callbacksCapabilities[callbackId]; delete callbacksCapabilities[callbackId]; if ('error' in data) { callback.reject(wrapReason(data.error)); } else { callback.resolve(data.data); } } else { throw new Error("Cannot resolve callback ".concat(callbackId)); } } else if (data.action in ah) { var action = ah[data.action]; if (data.callbackId) { var _sourceName = _this.sourceName; var _targetName = data.sourceName; Promise.resolve().then(function () { return action[0].call(action[1], data.data); }).then(function (result) { comObj.postMessage({ sourceName: _sourceName, targetName: _targetName, isReply: true, callbackId: data.callbackId, data: result }); }, function (reason) { comObj.postMessage({ sourceName: _sourceName, targetName: _targetName, isReply: true, callbackId: data.callbackId, error: makeReasonSerializable(reason) }); }); } else if (data.streamId) { _this._createStreamSink(data); } else { action[0].call(action[1], data.data); } } else { throw new Error("Unknown action from worker: ".concat(data.action)); } }; comObj.addEventListener('message', this._onComObjOnMessage); } MessageHandler.prototype = { on: function on(actionName, handler, scope) { var ah = this.actionHandler; if (ah[actionName]) { throw new Error("There is already an actionName called \"".concat(actionName, "\"")); } ah[actionName] = [handler, scope]; }, send: function send(actionName, data, transfers) { var message = { sourceName: this.sourceName, targetName: this.targetName, action: actionName, data: data }; this.postMessage(message, transfers); }, sendWithPromise: function sendWithPromise(actionName, data, transfers) { var callbackId = this.callbackId++; var message = { sourceName: this.sourceName, targetName: this.targetName, action: actionName, data: data, callbackId: callbackId }; var capability = (0, _util.createPromiseCapability)(); this.callbacksCapabilities[callbackId] = capability; try { this.postMessage(message, transfers); } catch (e) { capability.reject(e); } return capability.promise; }, sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) { var _this2 = this; var streamId = this.streamId++; var sourceName = this.sourceName; var targetName = this.targetName; return new _util.ReadableStream({ start: function start(controller) { var startCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId] = { controller: controller, startCall: startCapability, isClosed: false }; _this2.postMessage({ sourceName: sourceName, targetName: targetName, action: actionName, streamId: streamId, data: data, desiredSize: controller.desiredSize }); return startCapability.promise; }, pull: function pull(controller) { var pullCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId].pullCall = pullCapability; _this2.postMessage({ sourceName: sourceName, targetName: targetName, stream: 'pull', streamId: streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: function cancel(reason) { var cancelCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId].cancelCall = cancelCapability; _this2.streamControllers[streamId].isClosed = true; _this2.postMessage({ sourceName: sourceName, targetName: targetName, stream: 'cancel', reason: reason, streamId: streamId }); return cancelCapability.promise; } }, queueingStrategy); }, _createStreamSink: function _createStreamSink(data) { var _this3 = this; var self = this; var action = this.actionHandler[data.action]; var streamId = data.streamId; var desiredSize = data.desiredSize; var sourceName = this.sourceName; var targetName = data.sourceName; var capability = (0, _util.createPromiseCapability)(); var sendStreamRequest = function sendStreamRequest(_ref) { var stream = _ref.stream, chunk = _ref.chunk, transfers = _ref.transfers, success = _ref.success, reason = _ref.reason; _this3.postMessage({ sourceName: sourceName, targetName: targetName, stream: stream, streamId: streamId, chunk: chunk, success: success, reason: reason }, transfers); }; var streamSink = { enqueue: function enqueue(chunk) { var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var transfers = arguments.length > 2 ? arguments[2] : undefined; if (this.isCancelled) { return; } var lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, _util.createPromiseCapability)(); this.ready = this.sinkCapability.promise; } sendStreamRequest({ stream: 'enqueue', chunk: chunk, transfers: transfers }); }, close: function close() { if (this.isCancelled) { return; } this.isCancelled = true; sendStreamRequest({ stream: 'close' }); delete self.streamSinks[streamId]; }, error: function error(reason) { if (this.isCancelled) { return; } this.isCancelled = true; sendStreamRequest({ stream: 'error', reason: reason }); }, sinkCapability: capability, onPull: null, onCancel: null, isCancelled: false, desiredSize: desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; resolveCall(action[0], [data.data, streamSink], action[1]).then(function () { sendStreamRequest({ stream: 'start_complete', success: true }); }, function (reason) { sendStreamRequest({ stream: 'start_complete', success: false, reason: reason }); }); }, _processStreamMessage: function _processStreamMessage(data) { var _this4 = this; var sourceName = this.sourceName; var targetName = data.sourceName; var streamId = data.streamId; var sendStreamResponse = function sendStreamResponse(_ref2) { var stream = _ref2.stream, success = _ref2.success, reason = _ref2.reason; _this4.comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: stream, success: success, streamId: streamId, reason: reason }); }; var deleteStreamController = function deleteStreamController() { Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) { return capability && finalize(capability.promise); })).then(function () { delete _this4.streamControllers[data.streamId]; }); }; switch (data.stream) { case 'start_complete': resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, wrapReason(data.reason)); break; case 'pull_complete': resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, wrapReason(data.reason)); break; case 'pull': if (!this.streamSinks[data.streamId]) { sendStreamResponse({ stream: 'pull_complete', success: true }); break; } if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) { this.streamSinks[data.streamId].sinkCapability.resolve(); } this.streamSinks[data.streamId].desiredSize = data.desiredSize; resolveCall(this.streamSinks[data.streamId].onPull).then(function () { sendStreamResponse({ stream: 'pull_complete', success: true }); }, function (reason) { sendStreamResponse({ stream: 'pull_complete', success: false, reason: reason }); }); break; case 'enqueue': (0, _util.assert)(this.streamControllers[data.streamId], 'enqueue should have stream controller'); if (!this.streamControllers[data.streamId].isClosed) { this.streamControllers[data.streamId].controller.enqueue(data.chunk); } break; case 'close': (0, _util.assert)(this.streamControllers[data.streamId], 'close should have stream controller'); if (this.streamControllers[data.streamId].isClosed) { break; } this.streamControllers[data.streamId].isClosed = true; this.streamControllers[data.streamId].controller.close(); deleteStreamController(); break; case 'error': (0, _util.assert)(this.streamControllers[data.streamId], 'error should have stream controller'); this.streamControllers[data.streamId].controller.error(wrapReason(data.reason)); deleteStreamController(); break; case 'cancel_complete': resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, wrapReason(data.reason)); deleteStreamController(); break; case 'cancel': if (!this.streamSinks[data.streamId]) { break; } resolveCall(this.streamSinks[data.streamId].onCancel, [wrapReason(data.reason)]).then(function () { sendStreamResponse({ stream: 'cancel_complete', success: true }); }, function (reason) { sendStreamResponse({ stream: 'cancel_complete', success: false, reason: reason }); }); this.streamSinks[data.streamId].sinkCapability.reject(wrapReason(data.reason)); this.streamSinks[data.streamId].isCancelled = true; delete this.streamSinks[data.streamId]; break; default: throw new Error('Unexpected stream case'); } }, postMessage: function postMessage(message, transfers) { if (transfers && this.postMessageTransfers) { this.comObj.postMessage(message, transfers); } else { this.comObj.postMessage(message); } }, destroy: function destroy() { this.comObj.removeEventListener('message', this._onComObjOnMessage); } }; /***/ }) /******/ ]); }); }); var extracthighlights = createCommonjsModule(function (module, exports) { /** * @licstart The following is the entire license notice for the * Javascript code in this page * * Copyright 2018 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. * * This would prove I've got at least some control... * * @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 /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __w_extracthighlights_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __w_extracthighlights_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __w_extracthighlights_require__.m = modules; /******/ /******/ // expose the module cache /******/ __w_extracthighlights_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __w_extracthighlights_require__.d = function(exports, name, getter) { /******/ if(!__w_extracthighlights_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __w_extracthighlights_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __w_extracthighlights_require__.t = function(value, mode) { /******/ if(mode & 1) value = __w_extracthighlights_require__(value); /******/ if(mode & 8) return value; /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __w_extracthighlights_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __w_extracthighlights_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __w_extracthighlights_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __w_extracthighlights_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __w_extracthighlights_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __w_extracthighlights_require__.p = ""; /******/ /******/ /******/ // Load entry module and return exports /******/ return __w_extracthighlights_require__(__w_extracthighlights_require__.s = 0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var extracthighlightsSharedUtil = __w_extracthighlights_require__(1); var extracthighlightsDisplayAPI = __w_extracthighlights_require__(146); var extracthighlightsDisplayTextLayer = __w_extracthighlights_require__(162); var extracthighlightsDisplayAnnotationLayer = __w_extracthighlights_require__(163); var extracthighlightsDisplayDOMUtils = __w_extracthighlights_require__(151); var extracthighlightsDisplaySVG = __w_extracthighlights_require__(164); var extracthighlightsDisplayWorkerOptions = __w_extracthighlights_require__(156); var extracthighlightsDisplayAPICompatibility = __w_extracthighlights_require__(153); { var isNodeJS = __w_extracthighlights_require__(4); if (isNodeJS()) { var PDFNodeStream = __w_extracthighlights_require__(165).PDFNodeStream; extracthighlightsDisplayAPI.setPDFNetworkStreamFactory(function (params) { return new PDFNodeStream(params); }); } else if (typeof Response !== 'undefined' && 'body' in Response.prototype && typeof ReadableStream !== 'undefined') { var PDFFetchStream = __w_extracthighlights_require__(168).PDFFetchStream; extracthighlightsDisplayAPI.setPDFNetworkStreamFactory(function (params) { return new PDFFetchStream(params); }); } else { var PDFNetworkStream = __w_extracthighlights_require__(169).PDFNetworkStream; extracthighlightsDisplayAPI.setPDFNetworkStreamFactory(function (params) { return new PDFNetworkStream(params); }); } } exports.build = extracthighlightsDisplayAPI.build; exports.version = extracthighlightsDisplayAPI.version; exports.getDocument = extracthighlightsDisplayAPI.getDocument; exports.LoopbackPort = extracthighlightsDisplayAPI.LoopbackPort; exports.PDFDataRangeTransport = extracthighlightsDisplayAPI.PDFDataRangeTransport; exports.PDFWorker = extracthighlightsDisplayAPI.PDFWorker; exports.renderTextLayer = extracthighlightsDisplayTextLayer.renderTextLayer; exports.AnnotationLayer = extracthighlightsDisplayAnnotationLayer.AnnotationLayer; exports.createPromiseCapability = extracthighlightsSharedUtil.createPromiseCapability; exports.PasswordResponses = extracthighlightsSharedUtil.PasswordResponses; exports.InvalidPDFException = extracthighlightsSharedUtil.InvalidPDFException; exports.MissingPDFException = extracthighlightsSharedUtil.MissingPDFException; exports.SVGGraphics = extracthighlightsDisplaySVG.SVGGraphics; exports.NativeImageDecoding = extracthighlightsSharedUtil.NativeImageDecoding; exports.CMapCompressionType = extracthighlightsSharedUtil.CMapCompressionType; exports.PermissionFlag = extracthighlightsSharedUtil.PermissionFlag; exports.UnexpectedResponseException = extracthighlightsSharedUtil.UnexpectedResponseException; exports.OPS = extracthighlightsSharedUtil.OPS; exports.VerbosityLevel = extracthighlightsSharedUtil.VerbosityLevel; exports.UNSUPPORTED_FEATURES = extracthighlightsSharedUtil.UNSUPPORTED_FEATURES; exports.createValidAbsoluteUrl = extracthighlightsSharedUtil.createValidAbsoluteUrl; exports.createObjectURL = extracthighlightsSharedUtil.createObjectURL; exports.removeNullCharacters = extracthighlightsSharedUtil.removeNullCharacters; exports.shadow = extracthighlightsSharedUtil.shadow; exports.Util = extracthighlightsSharedUtil.Util; exports.ReadableStream = extracthighlightsSharedUtil.ReadableStream; exports.URL = extracthighlightsSharedUtil.URL; exports.RenderingCancelledException = extracthighlightsDisplayDOMUtils.RenderingCancelledException; exports.getFilenameFromUrl = extracthighlightsDisplayDOMUtils.getFilenameFromUrl; exports.LinkTarget = extracthighlightsDisplayDOMUtils.LinkTarget; exports.addLinkAttributes = extracthighlightsDisplayDOMUtils.addLinkAttributes; exports.loadScript = extracthighlightsDisplayDOMUtils.loadScript; exports.GlobalWorkerOptions = extracthighlightsDisplayWorkerOptions.GlobalWorkerOptions; exports.apiCompatibilityParams = extracthighlightsDisplayAPICompatibility.apiCompatibilityParams; /***/ }), /* 1 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.toRomanNumerals = toRomanNumerals; exports.arrayByteLength = arrayByteLength; exports.arraysToBytes = arraysToBytes; exports.assert = assert; exports.bytesToString = bytesToString; exports.createPromiseCapability = createPromiseCapability; exports.deprecated = deprecated; exports.getInheritableProperty = getInheritableProperty; exports.getLookupTableFactory = getLookupTableFactory; exports.getVerbosityLevel = getVerbosityLevel; exports.info = info; exports.isArrayBuffer = isArrayBuffer; exports.isBool = isBool; exports.isEmptyObj = isEmptyObj; exports.isNum = isNum; exports.isString = isString; exports.isSpace = isSpace; exports.isSameOrigin = isSameOrigin; exports.createValidAbsoluteUrl = createValidAbsoluteUrl; exports.isLittleEndian = isLittleEndian; exports.isEvalSupported = isEvalSupported; exports.log2 = log2; exports.readInt8 = readInt8; exports.readUint16 = readUint16; exports.readUint32 = readUint32; exports.removeNullCharacters = removeNullCharacters; exports.setVerbosityLevel = setVerbosityLevel; exports.shadow = shadow; exports.string32 = string32; exports.stringToBytes = stringToBytes; exports.stringToPDFString = stringToPDFString; exports.stringToUTF8String = stringToUTF8String; exports.utf8StringToString = utf8StringToString; exports.warn = warn; exports.unreachable = unreachable; Object.defineProperty(exports, "ReadableStream", { enumerable: true, get: function get() { return _streams_polyfill.ReadableStream; } }); Object.defineProperty(exports, "URL", { enumerable: true, get: function get() { return _url_polyfill.URL; } }); exports.createObjectURL = exports.FormatError = exports.XRefParseException = exports.XRefEntryException = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.TextRenderingMode = exports.StreamType = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.NativeImageDecoding = exports.MissingPDFException = exports.MissingDataException = exports.InvalidPDFException = exports.AbortException = exports.CMapCompressionType = exports.ImageKind = exports.FontType = exports.AnnotationType = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.UNSUPPORTED_FEATURES = exports.VerbosityLevel = exports.OPS = exports.IDENTITY_MATRIX = exports.FONT_IDENTITY_MATRIX = void 0; __w_extracthighlights_require__(2); var _streams_polyfill = __w_extracthighlights_require__(142); var _url_polyfill = __w_extracthighlights_require__(144); function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0]; exports.IDENTITY_MATRIX = IDENTITY_MATRIX; var FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0]; exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX; var NativeImageDecoding = { NONE: 'none', DECODE: 'decode', DISPLAY: 'display' }; exports.NativeImageDecoding = NativeImageDecoding; var 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; var 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; var ImageKind = { GRAYSCALE_1BPP: 1, RGB_24BPP: 2, RGBA_32BPP: 3 }; exports.ImageKind = ImageKind; var 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; var AnnotationFlag = { INVISIBLE: 0x01, HIDDEN: 0x02, PRINT: 0x04, NOZOOM: 0x08, NOROTATE: 0x10, NOVIEW: 0x20, READONLY: 0x40, LOCKED: 0x80, TOGGLENOVIEW: 0x100, LOCKEDCONTENTS: 0x200 }; exports.AnnotationFlag = AnnotationFlag; var 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; var AnnotationBorderStyleType = { SOLID: 1, DASHED: 2, BEVELED: 3, INSET: 4, UNDERLINE: 5 }; exports.AnnotationBorderStyleType = AnnotationBorderStyleType; var StreamType = { UNKNOWN: 0, FLATE: 1, LZW: 2, DCT: 3, JPX: 4, JBIG: 5, A85: 6, AHX: 7, CCF: 8, RL: 9 }; exports.StreamType = StreamType; var FontType = { UNKNOWN: 0, TYPE1: 1, TYPE1C: 2, CIDFONTTYPE0: 3, CIDFONTTYPE0C: 4, TRUETYPE: 5, CIDFONTTYPE2: 6, TYPE3: 7, OPENTYPE: 8, TYPE0: 9, MMTYPE1: 10 }; exports.FontType = FontType; var VerbosityLevel = { ERRORS: 0, WARNINGS: 1, INFOS: 5 }; exports.VerbosityLevel = VerbosityLevel; var CMapCompressionType = { NONE: 0, BINARY: 1, STREAM: 2 }; exports.CMapCompressionType = CMapCompressionType; var 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; var UNSUPPORTED_FEATURES = { unknown: 'unknown', forms: 'forms', javaScript: 'javaScript', smask: 'smask', shadingPattern: 'shadingPattern', font: 'font' }; exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES; var PasswordResponses = { NEED_PASSWORD: 1, INCORRECT_PASSWORD: 2 }; exports.PasswordResponses = PasswordResponses; var 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 deprecated(details) { // console.log('Deprecated API usage: ' + details); } function unreachable(msg) { throw new Error(msg); } function assert(cond, msg) { if (!cond) { unreachable(msg); } } function isSameOrigin(baseUrl, otherUrl) { try { var base = new _url_polyfill.URL(baseUrl); if (!base.origin || base.origin === 'null') { return false; } } catch (e) { return false; } var other = new _url_polyfill.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) { if (!url) { return null; } try { var absoluteUrl = baseUrl ? new _url_polyfill.URL(url, baseUrl) : new _url_polyfill.URL(url); if (_isValidProtocol(absoluteUrl)) { return absoluteUrl; } } catch (ex) {} return null; } function shadow(obj, prop, value) { Object.defineProperty(obj, prop, { value: value, enumerable: true, configurable: true, writable: false }); return value; } function getLookupTableFactory(initializer) { var lookup; return function () { if (initializer) { lookup = Object.create(null); initializer(lookup); initializer = null; } return lookup; }; } var PasswordException = function PasswordExceptionClosure() { function PasswordException(msg, code) { this.name = 'PasswordException'; this.message = msg; this.code = code; } PasswordException.prototype = new Error(); PasswordException.constructor = PasswordException; return PasswordException; }(); exports.PasswordException = PasswordException; var UnknownErrorException = function UnknownErrorExceptionClosure() { function UnknownErrorException(msg, details) { this.name = 'UnknownErrorException'; this.message = msg; this.details = details; } UnknownErrorException.prototype = new Error(); UnknownErrorException.constructor = UnknownErrorException; return UnknownErrorException; }(); exports.UnknownErrorException = UnknownErrorException; var InvalidPDFException = function InvalidPDFExceptionClosure() { function InvalidPDFException(msg) { this.name = 'InvalidPDFException'; this.message = msg; } InvalidPDFException.prototype = new Error(); InvalidPDFException.constructor = InvalidPDFException; return InvalidPDFException; }(); exports.InvalidPDFException = InvalidPDFException; var MissingPDFException = function MissingPDFExceptionClosure() { function MissingPDFException(msg) { this.name = 'MissingPDFException'; this.message = msg; } MissingPDFException.prototype = new Error(); MissingPDFException.constructor = MissingPDFException; return MissingPDFException; }(); exports.MissingPDFException = MissingPDFException; var UnexpectedResponseException = function UnexpectedResponseExceptionClosure() { function UnexpectedResponseException(msg, status) { this.name = 'UnexpectedResponseException'; this.message = msg; this.status = status; } UnexpectedResponseException.prototype = new Error(); UnexpectedResponseException.constructor = UnexpectedResponseException; return UnexpectedResponseException; }(); exports.UnexpectedResponseException = UnexpectedResponseException; var MissingDataException = function MissingDataExceptionClosure() { function MissingDataException(begin, end) { this.begin = begin; this.end = end; this.message = 'Missing data [' + begin + ', ' + end + ')'; } MissingDataException.prototype = new Error(); MissingDataException.prototype.name = 'MissingDataException'; MissingDataException.constructor = MissingDataException; return MissingDataException; }(); exports.MissingDataException = MissingDataException; var XRefEntryException = function XRefEntryExceptionClosure() { function XRefEntryException(msg) { this.message = msg; } XRefEntryException.prototype = new Error(); XRefEntryException.prototype.name = 'XRefEntryException'; XRefEntryException.constructor = XRefEntryException; return XRefEntryException; }(); exports.XRefEntryException = XRefEntryException; var XRefParseException = function XRefParseExceptionClosure() { function XRefParseException(msg) { this.message = msg; } XRefParseException.prototype = new Error(); XRefParseException.prototype.name = 'XRefParseException'; XRefParseException.constructor = XRefParseException; return XRefParseException; }(); exports.XRefParseException = XRefParseException; var FormatError = function FormatErrorClosure() { function FormatError(msg) { this.message = msg; } FormatError.prototype = new Error(); FormatError.prototype.name = 'FormatError'; FormatError.constructor = FormatError; return FormatError; }(); exports.FormatError = FormatError; var AbortException = function AbortExceptionClosure() { function AbortException(msg) { this.name = 'AbortException'; this.message = msg; } AbortException.prototype = new Error(); AbortException.constructor = AbortException; return AbortException; }(); exports.AbortException = AbortException; var NullCharactersRegExp = /\x00/g; function removeNullCharacters(str) { if (typeof str !== 'string') { warn('The argument for removeNullCharacters must be a string.'); return str; } return str.replace(NullCharactersRegExp, ''); } function bytesToString(bytes) { assert(bytes !== null && _typeof(bytes) === 'object' && bytes.length !== undefined, 'Invalid argument for bytesToString'); var length = bytes.length; var MAX_ARGUMENT_COUNT = 8192; if (length < MAX_ARGUMENT_COUNT) { return String.fromCharCode.apply(null, bytes); } var strBuf = []; for (var i = 0; i < length; i += MAX_ARGUMENT_COUNT) { var chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length); var 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'); var length = str.length; var bytes = new Uint8Array(length); for (var 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); return arr.byteLength; } function arraysToBytes(arr) { if (arr.length === 1 && arr[0] instanceof Uint8Array) { return arr[0]; } var resultLength = 0; var i, ii = arr.length; var item, itemLength; for (i = 0; i < ii; i++) { item = arr[i]; itemLength = arrayByteLength(item); resultLength += itemLength; } var pos = 0; var data = new Uint8Array(resultLength); for (i = 0; i < ii; i++) { item = arr[i]; if (!(item instanceof Uint8Array)) { if (typeof item === 'string') { item = stringToBytes(item); } else { item = new Uint8Array(item); } } 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 log2(x) { if (x <= 0) { return 0; } return Math.ceil(Math.log2(x)); } function readInt8(data, start) { return data[start] << 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 isLittleEndian() { var buffer8 = new Uint8Array(4); buffer8[0] = 1; var view32 = new Uint32Array(buffer8.buffer, 0, 1); return view32[0] === 1; } function isEvalSupported() { try { new Function(''); return true; } catch (e) { return false; } } function getInheritableProperty(_ref) { var dict = _ref.dict, key = _ref.key, _ref$getArray = _ref.getArray, getArray = _ref$getArray === void 0 ? false : _ref$getArray, _ref$stopWhenFound = _ref.stopWhenFound, stopWhenFound = _ref$stopWhenFound === void 0 ? true : _ref$stopWhenFound; var LOOP_LIMIT = 100; var loopCount = 0; var values; while (dict) { var value = getArray ? dict.getArray(key) : dict.get(key); if (value !== undefined) { if (stopWhenFound) { return value; } if (!values) { values = []; } values.push(value); } if (++loopCount > LOOP_LIMIT) { warn("getInheritableProperty: maximum loop count exceeded for \"".concat(key, "\"")); break; } dict = dict.get('Parent'); } return values; } var Util = function UtilClosure() { function Util() {} var rgbBuf = ['rgb(', 0, ',', 0, ',', 0, ')']; Util.makeCssRgb = function Util_makeCssRgb(r, g, b) { rgbBuf[1] = r; rgbBuf[3] = g; rgbBuf[5] = b; return rgbBuf.join(''); }; Util.transform = function Util_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]]; }; Util.applyTransform = function Util_applyTransform(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; }; Util.applyInverseTransform = function Util_applyInverseTransform(p, m) { var d = m[0] * m[3] - m[1] * m[2]; var xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d; var yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d; return [xt, yt]; }; Util.getAxialAlignedBoundingBox = function Util_getAxialAlignedBoundingBox(r, m) { var p1 = Util.applyTransform(r, m); var p2 = Util.applyTransform(r.slice(2, 4), m); var p3 = Util.applyTransform([r[0], r[3]], m); var 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])]; }; Util.inverseTransform = function Util_inverseTransform(m) { var 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]; }; Util.apply3dTransform = function Util_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]]; }; Util.singularValueDecompose2dScale = function Util_singularValueDecompose2dScale(m) { var transpose = [m[0], m[2], m[1], m[3]]; var a = m[0] * transpose[0] + m[1] * transpose[2]; var b = m[0] * transpose[1] + m[1] * transpose[3]; var c = m[2] * transpose[0] + m[3] * transpose[2]; var d = m[2] * transpose[1] + m[3] * transpose[3]; var first = (a + d) / 2; var second = Math.sqrt((a + d) * (a + d) - 4 * (a * d - c * b)) / 2; var sx = first + second || 1; var sy = first - second || 1; return [Math.sqrt(sx), Math.sqrt(sy)]; }; Util.normalizeRect = function Util_normalizeRect(rect) { var 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; }; Util.intersect = function Util_intersect(rect1, rect2) { function compare(a, b) { return a - b; } var orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare), orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare), 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 false; } 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 false; } return result; }; return Util; }(); exports.Util = Util; var 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) { var lowerCase = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; assert(Number.isInteger(number) && number > 0, 'The number should be a positive integer.'); var pos, romanBuf = []; 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]); var romanStr = romanBuf.join(''); return lowerCase ? romanStr.toLowerCase() : romanStr; } var 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) { var i, n = str.length, strBuf = []; if (str[0] === '\xFE' && str[1] === '\xFF') { for (i = 2; i < n; i += 2) { strBuf.push(String.fromCharCode(str.charCodeAt(i) << 8 | str.charCodeAt(i + 1))); } } else { for (i = 0; i < n; ++i) { var code = PDFStringTranslateTable[str.charCodeAt(i)]; strBuf.push(code ? String.fromCharCode(code) : str.charAt(i)); } } return strBuf.join(''); } function stringToUTF8String(str) { return decodeURIComponent(escape(str)); } function utf8StringToString(str) { return unescape(encodeURIComponent(str)); } function isEmptyObj(obj) { for (var key in obj) { return false; } return true; } 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 isSpace(ch) { return ch === 0x20 || ch === 0x09 || ch === 0x0D || ch === 0x0A; } function createPromiseCapability() { var capability = Object.create(null); var isSettled = false; Object.defineProperty(capability, 'settled', { get: function 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; } var createObjectURL = function createObjectURLClosure() { var digits = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; return function createObjectURL(data, contentType) { var forceDataSchema = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (!forceDataSchema && _url_polyfill.URL.createObjectURL) { var blob = new Blob([data], { type: contentType }); return _url_polyfill.URL.createObjectURL(blob); } var buffer = 'data:' + contentType + ';base64,'; for (var i = 0, ii = data.length; i < ii; i += 3) { var b1 = data[i] & 0xFF; var b2 = data[i + 1] & 0xFF; var b3 = data[i + 2] & 0xFF; var d1 = b1 >> 2, d2 = (b1 & 3) << 4 | b2 >> 4; var d3 = i + 1 < ii ? (b2 & 0xF) << 2 | b3 >> 6 : 64; var d4 = i + 2 < ii ? b3 & 0x3F : 64; buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4]; } return buffer; }; }(); exports.createObjectURL = createObjectURL; /***/ }), /* 2 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var globalScope = __w_extracthighlights_require__(3); if (!globalScope._extracthighlightsCompatibilityChecked) { globalScope._extracthighlightsCompatibilityChecked = true; var isNodeJS = __w_extracthighlights_require__(4); var hasDOM = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object' && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object'; (function checkNodeBtoa() { if (globalScope.btoa || !isNodeJS()) { return; } globalScope.btoa = function (chars) { return Buffer.from(chars, 'binary').toString('base64'); }; })(); (function checkNodeAtob() { if (globalScope.atob || !isNodeJS()) { return; } globalScope.atob = function (input) { return Buffer.from(input, 'base64').toString('binary'); }; })(); (function checkChildNodeRemove() { if (!hasDOM) { return; } if (typeof Element.prototype.remove !== 'undefined') { return; } Element.prototype.remove = function () { if (this.parentNode) { this.parentNode.removeChild(this); } }; })(); (function checkDOMTokenListAddRemove() { if (!hasDOM || isNodeJS()) { return; } var div = document.createElement('div'); div.classList.add('testOne', 'testTwo'); if (div.classList.contains('testOne') === true && div.classList.contains('testTwo') === true) { return; } var OriginalDOMTokenListAdd = DOMTokenList.prototype.add; var OriginalDOMTokenListRemove = DOMTokenList.prototype.remove; DOMTokenList.prototype.add = function () { for (var _len = arguments.length, tokens = new Array(_len), _key = 0; _key < _len; _key++) { tokens[_key] = arguments[_key]; } for (var _i = 0; _i < tokens.length; _i++) { var token = tokens[_i]; OriginalDOMTokenListAdd.call(this, token); } }; DOMTokenList.prototype.remove = function () { for (var _len2 = arguments.length, tokens = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { tokens[_key2] = arguments[_key2]; } for (var _i2 = 0; _i2 < tokens.length; _i2++) { var token = tokens[_i2]; OriginalDOMTokenListRemove.call(this, token); } }; })(); (function checkDOMTokenListToggle() { if (!hasDOM || isNodeJS()) { return; } var div = document.createElement('div'); if (div.classList.toggle('test', 0) === false) { return; } DOMTokenList.prototype.toggle = function (token) { var force = arguments.length > 1 ? !!arguments[1] : !this.contains(token); return this[force ? 'add' : 'remove'](token), force; }; })(); (function checkStringStartsWith() { if (String.prototype.startsWith) { return; } __w_extracthighlights_require__(5); })(); (function checkStringEndsWith() { if (String.prototype.endsWith) { return; } __w_extracthighlights_require__(35); })(); (function checkStringIncludes() { if (String.prototype.includes) { return; } __w_extracthighlights_require__(37); })(); (function checkArrayIncludes() { if (Array.prototype.includes) { return; } __w_extracthighlights_require__(39); })(); (function checkArrayFrom() { if (Array.from) { return; } __w_extracthighlights_require__(46); })(); (function checkObjectAssign() { if (Object.assign) { return; } __w_extracthighlights_require__(69); })(); (function checkMathLog2() { if (Math.log2) { return; } Math.log2 = __w_extracthighlights_require__(74); })(); (function checkNumberIsNaN() { if (Number.isNaN) { return; } Number.isNaN = __w_extracthighlights_require__(76); })(); (function checkNumberIsInteger() { if (Number.isInteger) { return; } Number.isInteger = __w_extracthighlights_require__(78); })(); (function checkPromise() { if (globalScope.Promise && globalScope.Promise.prototype && globalScope.Promise.prototype.finally) { return; } globalScope.Promise = __w_extracthighlights_require__(81); })(); (function checkWeakMap() { if (globalScope.WeakMap) { return; } globalScope.WeakMap = __w_extracthighlights_require__(101); })(); (function checkWeakSet() { if (globalScope.WeakSet) { return; } globalScope.WeakSet = __w_extracthighlights_require__(118); })(); (function checkStringCodePointAt() { if (String.codePointAt) { return; } String.codePointAt = __w_extracthighlights_require__(122); })(); (function checkStringFromCodePoint() { if (String.fromCodePoint) { return; } String.fromCodePoint = __w_extracthighlights_require__(124); })(); (function checkSymbol() { if (globalScope.Symbol) { return; } __w_extracthighlights_require__(126); })(); (function checkStringPadStart() { if (String.prototype.padStart) { return; } __w_extracthighlights_require__(133); })(); (function checkStringPadEnd() { if (String.prototype.padEnd) { return; } __w_extracthighlights_require__(137); })(); (function checkObjectValues() { if (Object.values) { return; } Object.values = __w_extracthighlights_require__(139); })(); } /***/ }), /* 3 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = typeof window !== 'undefined' && window.Math === Math ? window : typeof commonjsGlobal !== 'undefined' && commonjsGlobal.Math === Math ? commonjsGlobal : typeof self !== 'undefined' && self.Math === Math ? self : {}; /***/ }), /* 4 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } module.exports = function isNodeJS() { return (typeof process === "undefined" ? "undefined" : _typeof(process)) === 'object' && process + '' === '[object process]' && !process.versions['nw']; }; /***/ }), /* 5 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(6); module.exports = __w_extracthighlights_require__(9).String.startsWith; /***/ }), /* 6 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var toLength = __w_extracthighlights_require__(25); var context = __w_extracthighlights_require__(27); var STARTS_WITH = 'startsWith'; var $startsWith = ''[STARTS_WITH]; $export($export.P + $export.F * __w_extracthighlights_require__(34)(STARTS_WITH), 'String', { startsWith: function startsWith(searchString) { var that = context(this, searchString, STARTS_WITH); var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length)); var search = String(searchString); return $startsWith ? $startsWith.call(that, search, index) : that.slice(index, index + search.length) === search; } }); /***/ }), /* 7 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(8); var core = __w_extracthighlights_require__(9); var hide = __w_extracthighlights_require__(10); var redefine = __w_extracthighlights_require__(20); var ctx = __w_extracthighlights_require__(23); var PROTOTYPE = 'prototype'; var $export = function $export(type, name, source) { var IS_FORCED = type & $export.F; var IS_GLOBAL = type & $export.G; var IS_STATIC = type & $export.S; var IS_PROTO = type & $export.P; var IS_BIND = type & $export.B; var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE]; var exports = IS_GLOBAL ? core : core[name] || (core[name] = {}); var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); var key, own, out, exp; if (IS_GLOBAL) source = name; for (key in source) { own = !IS_FORCED && target && target[key] !== undefined; out = (own ? target : source)[key]; exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; if (target) redefine(target, key, out, type & $export.U); if (exports[key] != out) hide(exports, key, exp); if (IS_PROTO && expProto[key] != out) expProto[key] = out; } }; global.core = core; $export.F = 1; $export.G = 2; $export.S = 4; $export.P = 8; $export.B = 16; $export.W = 32; $export.U = 64; $export.R = 128; module.exports = $export; /***/ }), /* 8 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = module.exports = typeof window != 'undefined' && window.Math == Math ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); if (typeof __g == 'number') __g = global; /***/ }), /* 9 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var core = module.exports = { version: '2.6.2' }; if (typeof __e == 'number') __e = core; /***/ }), /* 10 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var dP = __w_extracthighlights_require__(11); var createDesc = __w_extracthighlights_require__(19); module.exports = __w_extracthighlights_require__(15) ? function (object, key, value) { return dP.f(object, key, createDesc(1, value)); } : function (object, key, value) { object[key] = value; return object; }; /***/ }), /* 11 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(12); var IE8_DOM_DEFINE = __w_extracthighlights_require__(14); var toPrimitive = __w_extracthighlights_require__(18); var dP = Object.defineProperty; exports.f = __w_extracthighlights_require__(15) ? Object.defineProperty : function defineProperty(O, P, Attributes) { anObject(O); P = toPrimitive(P, true); anObject(Attributes); if (IE8_DOM_DEFINE) try { return dP(O, P, Attributes); } catch (e) {} if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); if ('value' in Attributes) O[P] = Attributes.value; return O; }; /***/ }), /* 12 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); module.exports = function (it) { if (!isObject(it)) throw TypeError(it + ' is not an object!'); return it; }; /***/ }), /* 13 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } module.exports = function (it) { return _typeof(it) === 'object' ? it !== null : typeof it === 'function'; }; /***/ }), /* 14 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = !__w_extracthighlights_require__(15) && !__w_extracthighlights_require__(16)(function () { return Object.defineProperty(__w_extracthighlights_require__(17)('div'), 'a', { get: function get() { return 7; } }).a != 7; }); /***/ }), /* 15 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = !__w_extracthighlights_require__(16)(function () { return Object.defineProperty({}, 'a', { get: function get() { return 7; } }).a != 7; }); /***/ }), /* 16 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (exec) { try { return !!exec(); } catch (e) { return true; } }; /***/ }), /* 17 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); var document = __w_extracthighlights_require__(8).document; var is = isObject(document) && isObject(document.createElement); module.exports = function (it) { return is ? document.createElement(it) : {}; }; /***/ }), /* 18 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); module.exports = function (it, S) { if (!isObject(it)) return it; var fn, val; if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val; if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val; throw TypeError("Can't convert object to primitive value"); }; /***/ }), /* 19 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (bitmap, value) { return { enumerable: !(bitmap & 1), configurable: !(bitmap & 2), writable: !(bitmap & 4), value: value }; }; /***/ }), /* 20 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(8); var hide = __w_extracthighlights_require__(10); var has = __w_extracthighlights_require__(21); var SRC = __w_extracthighlights_require__(22)('src'); var TO_STRING = 'toString'; var $toString = Function[TO_STRING]; var TPL = ('' + $toString).split(TO_STRING); __w_extracthighlights_require__(9).inspectSource = function (it) { return $toString.call(it); }; (module.exports = function (O, key, val, safe) { var isFunction = typeof val == 'function'; if (isFunction) has(val, 'name') || hide(val, 'name', key); if (O[key] === val) return; if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); if (O === global) { O[key] = val; } else if (!safe) { delete O[key]; hide(O, key, val); } else if (O[key]) { O[key] = val; } else { hide(O, key, val); } })(Function.prototype, TO_STRING, function toString() { return typeof this == 'function' && this[SRC] || $toString.call(this); }); /***/ }), /* 21 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var hasOwnProperty = {}.hasOwnProperty; module.exports = function (it, key) { return hasOwnProperty.call(it, key); }; /***/ }), /* 22 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var id = 0; var px = Math.random(); module.exports = function (key) { return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); }; /***/ }), /* 23 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var aFunction = __w_extracthighlights_require__(24); module.exports = function (fn, that, length) { aFunction(fn); if (that === undefined) return fn; switch (length) { case 1: return function (a) { return fn.call(that, a); }; case 2: return function (a, b) { return fn.call(that, a, b); }; case 3: return function (a, b, c) { return fn.call(that, a, b, c); }; } return function () { return fn.apply(that, arguments); }; }; /***/ }), /* 24 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (it) { if (typeof it != 'function') throw TypeError(it + ' is not a function!'); return it; }; /***/ }), /* 25 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toInteger = __w_extracthighlights_require__(26); var min = Math.min; module.exports = function (it) { return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; }; /***/ }), /* 26 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ceil = Math.ceil; var floor = Math.floor; module.exports = function (it) { return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); }; /***/ }), /* 27 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isRegExp = __w_extracthighlights_require__(28); var defined = __w_extracthighlights_require__(33); module.exports = function (that, searchString, NAME) { if (isRegExp(searchString)) throw TypeError('String#' + NAME + " doesn't accept regex!"); return String(defined(that)); }; /***/ }), /* 28 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); var cof = __w_extracthighlights_require__(29); var MATCH = __w_extracthighlights_require__(30)('match'); module.exports = function (it) { var isRegExp; return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp'); }; /***/ }), /* 29 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toString = {}.toString; module.exports = function (it) { return toString.call(it).slice(8, -1); }; /***/ }), /* 30 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var store = __w_extracthighlights_require__(31)('wks'); var uid = __w_extracthighlights_require__(22); var _Symbol = __w_extracthighlights_require__(8).Symbol; var USE_SYMBOL = typeof _Symbol == 'function'; var $exports = module.exports = function (name) { return store[name] || (store[name] = USE_SYMBOL && _Symbol[name] || (USE_SYMBOL ? _Symbol : uid)('Symbol.' + name)); }; $exports.store = store; /***/ }), /* 31 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var core = __w_extracthighlights_require__(9); var global = __w_extracthighlights_require__(8); var SHARED = '__core-js_shared__'; var store = global[SHARED] || (global[SHARED] = {}); (module.exports = function (key, value) { return store[key] || (store[key] = value !== undefined ? value : {}); })('versions', []).push({ version: core.version, mode: __w_extracthighlights_require__(32) ? 'pure' : 'global', copyright: '© 2019 Denis Pushkarev (zloirock.ru)' }); /***/ }), /* 32 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = false; /***/ }), /* 33 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (it) { if (it == undefined) throw TypeError("Can't call method on " + it); return it; }; /***/ }), /* 34 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var MATCH = __w_extracthighlights_require__(30)('match'); module.exports = function (KEY) { var re = /./; try { '/./'[KEY](re); } catch (e) { try { re[MATCH] = false; return !'/./'[KEY](re); } catch (f) {} } return true; }; /***/ }), /* 35 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(36); module.exports = __w_extracthighlights_require__(9).String.endsWith; /***/ }), /* 36 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var toLength = __w_extracthighlights_require__(25); var context = __w_extracthighlights_require__(27); var ENDS_WITH = 'endsWith'; var $endsWith = ''[ENDS_WITH]; $export($export.P + $export.F * __w_extracthighlights_require__(34)(ENDS_WITH), 'String', { endsWith: function endsWith(searchString) { var that = context(this, searchString, ENDS_WITH); var endPosition = arguments.length > 1 ? arguments[1] : undefined; var len = toLength(that.length); var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len); var search = String(searchString); return $endsWith ? $endsWith.call(that, search, end) : that.slice(end - search.length, end) === search; } }); /***/ }), /* 37 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(38); module.exports = __w_extracthighlights_require__(9).String.includes; /***/ }), /* 38 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var context = __w_extracthighlights_require__(27); var INCLUDES = 'includes'; $export($export.P + $export.F * __w_extracthighlights_require__(34)(INCLUDES), 'String', { includes: function includes(searchString) { return !!~context(this, searchString, INCLUDES).indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined); } }); /***/ }), /* 39 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(40); module.exports = __w_extracthighlights_require__(9).Array.includes; /***/ }), /* 40 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var $includes = __w_extracthighlights_require__(41)(true); $export($export.P, 'Array', { includes: function includes(el) { return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); } }); __w_extracthighlights_require__(45)('includes'); /***/ }), /* 41 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toIObject = __w_extracthighlights_require__(42); var toLength = __w_extracthighlights_require__(25); var toAbsoluteIndex = __w_extracthighlights_require__(44); module.exports = function (IS_INCLUDES) { return function ($this, el, fromIndex) { var O = toIObject($this); var length = toLength(O.length); var index = toAbsoluteIndex(fromIndex, length); var value; if (IS_INCLUDES && el != el) while (length > index) { value = O[index++]; if (value != value) return true; } else for (; length > index; index++) { if (IS_INCLUDES || index in O) { if (O[index] === el) return IS_INCLUDES || index || 0; } } return !IS_INCLUDES && -1; }; }; /***/ }), /* 42 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var IObject = __w_extracthighlights_require__(43); var defined = __w_extracthighlights_require__(33); module.exports = function (it) { return IObject(defined(it)); }; /***/ }), /* 43 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var cof = __w_extracthighlights_require__(29); module.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) { return cof(it) == 'String' ? it.split('') : Object(it); }; /***/ }), /* 44 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toInteger = __w_extracthighlights_require__(26); var max = Math.max; var min = Math.min; module.exports = function (index, length) { index = toInteger(index); return index < 0 ? max(index + length, 0) : min(index, length); }; /***/ }), /* 45 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var UNSCOPABLES = __w_extracthighlights_require__(30)('unscopables'); var ArrayProto = Array.prototype; if (ArrayProto[UNSCOPABLES] == undefined) __w_extracthighlights_require__(10)(ArrayProto, UNSCOPABLES, {}); module.exports = function (key) { ArrayProto[UNSCOPABLES][key] = true; }; /***/ }), /* 46 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(47); __w_extracthighlights_require__(62); module.exports = __w_extracthighlights_require__(9).Array.from; /***/ }), /* 47 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $at = __w_extracthighlights_require__(48)(true); __w_extracthighlights_require__(49)(String, 'String', function (iterated) { this._t = String(iterated); this._i = 0; }, function () { var O = this._t; var index = this._i; var point; if (index >= O.length) return { value: undefined, done: true }; point = $at(O, index); this._i += point.length; return { value: point, done: false }; }); /***/ }), /* 48 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toInteger = __w_extracthighlights_require__(26); var defined = __w_extracthighlights_require__(33); module.exports = function (TO_STRING) { return function (that, pos) { var s = String(defined(that)); var i = toInteger(pos); var l = s.length; var a, b; if (i < 0 || i >= l) return TO_STRING ? '' : undefined; a = s.charCodeAt(i); return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff ? TO_STRING ? s.charAt(i) : a : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; }; }; /***/ }), /* 49 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var LIBRARY = __w_extracthighlights_require__(32); var $export = __w_extracthighlights_require__(7); var redefine = __w_extracthighlights_require__(20); var hide = __w_extracthighlights_require__(10); var Iterators = __w_extracthighlights_require__(50); var $iterCreate = __w_extracthighlights_require__(51); var setToStringTag = __w_extracthighlights_require__(59); var getPrototypeOf = __w_extracthighlights_require__(60); var ITERATOR = __w_extracthighlights_require__(30)('iterator'); var BUGGY = !([].keys && 'next' in [].keys()); var FF_ITERATOR = '@@iterator'; var KEYS = 'keys'; var VALUES = 'values'; var returnThis = function returnThis() { return this; }; module.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) { $iterCreate(Constructor, NAME, next); var getMethod = function getMethod(kind) { if (!BUGGY && kind in proto) return proto[kind]; switch (kind) { case KEYS: return function keys() { return new Constructor(this, kind); }; case VALUES: return function values() { return new Constructor(this, kind); }; } return function entries() { return new Constructor(this, kind); }; }; var TAG = NAME + ' Iterator'; var DEF_VALUES = DEFAULT == VALUES; var VALUES_BUG = false; var proto = Base.prototype; var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]; var $default = $native || getMethod(DEFAULT); var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined; var $anyNative = NAME == 'Array' ? proto.entries || $native : $native; var methods, key, IteratorPrototype; if ($anyNative) { IteratorPrototype = getPrototypeOf($anyNative.call(new Base())); if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) { setToStringTag(IteratorPrototype, TAG, true); if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis); } } if (DEF_VALUES && $native && $native.name !== VALUES) { VALUES_BUG = true; $default = function values() { return $native.call(this); }; } if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) { hide(proto, ITERATOR, $default); } Iterators[NAME] = $default; Iterators[TAG] = returnThis; if (DEFAULT) { methods = { values: DEF_VALUES ? $default : getMethod(VALUES), keys: IS_SET ? $default : getMethod(KEYS), entries: $entries }; if (FORCED) for (key in methods) { if (!(key in proto)) redefine(proto, key, methods[key]); } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); } return methods; }; /***/ }), /* 50 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = {}; /***/ }), /* 51 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var create = __w_extracthighlights_require__(52); var descriptor = __w_extracthighlights_require__(19); var setToStringTag = __w_extracthighlights_require__(59); var IteratorPrototype = {}; __w_extracthighlights_require__(10)(IteratorPrototype, __w_extracthighlights_require__(30)('iterator'), function () { return this; }); module.exports = function (Constructor, NAME, next) { Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) }); setToStringTag(Constructor, NAME + ' Iterator'); }; /***/ }), /* 52 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(12); var dPs = __w_extracthighlights_require__(53); var enumBugKeys = __w_extracthighlights_require__(57); var IE_PROTO = __w_extracthighlights_require__(56)('IE_PROTO'); var Empty = function Empty() {}; var PROTOTYPE = 'prototype'; var _createDict = function createDict() { var iframe = __w_extracthighlights_require__(17)('iframe'); var i = enumBugKeys.length; var lt = '<'; var gt = '>'; var iframeDocument; iframe.style.display = 'none'; __w_extracthighlights_require__(58).appendChild(iframe); iframe.src = 'javascript:'; iframeDocument = iframe.contentWindow.document; iframeDocument.open(); iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt); iframeDocument.close(); _createDict = iframeDocument.F; while (i--) { delete _createDict[PROTOTYPE][enumBugKeys[i]]; } return _createDict(); }; module.exports = Object.create || function create(O, Properties) { var result; if (O !== null) { Empty[PROTOTYPE] = anObject(O); result = new Empty(); Empty[PROTOTYPE] = null; result[IE_PROTO] = O; } else result = _createDict(); return Properties === undefined ? result : dPs(result, Properties); }; /***/ }), /* 53 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var dP = __w_extracthighlights_require__(11); var anObject = __w_extracthighlights_require__(12); var getKeys = __w_extracthighlights_require__(54); module.exports = __w_extracthighlights_require__(15) ? Object.defineProperties : function defineProperties(O, Properties) { anObject(O); var keys = getKeys(Properties); var length = keys.length; var i = 0; var P; while (length > i) { dP.f(O, P = keys[i++], Properties[P]); } return O; }; /***/ }), /* 54 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $keys = __w_extracthighlights_require__(55); var enumBugKeys = __w_extracthighlights_require__(57); module.exports = Object.keys || function keys(O) { return $keys(O, enumBugKeys); }; /***/ }), /* 55 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var has = __w_extracthighlights_require__(21); var toIObject = __w_extracthighlights_require__(42); var arrayIndexOf = __w_extracthighlights_require__(41)(false); var IE_PROTO = __w_extracthighlights_require__(56)('IE_PROTO'); module.exports = function (object, names) { var O = toIObject(object); var i = 0; var result = []; var key; for (key in O) { if (key != IE_PROTO) has(O, key) && result.push(key); } while (names.length > i) { if (has(O, key = names[i++])) { ~arrayIndexOf(result, key) || result.push(key); } } return result; }; /***/ }), /* 56 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var shared = __w_extracthighlights_require__(31)('keys'); var uid = __w_extracthighlights_require__(22); module.exports = function (key) { return shared[key] || (shared[key] = uid(key)); }; /***/ }), /* 57 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'.split(','); /***/ }), /* 58 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var document = __w_extracthighlights_require__(8).document; module.exports = document && document.documentElement; /***/ }), /* 59 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var def = __w_extracthighlights_require__(11).f; var has = __w_extracthighlights_require__(21); var TAG = __w_extracthighlights_require__(30)('toStringTag'); module.exports = function (it, tag, stat) { if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag }); }; /***/ }), /* 60 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var has = __w_extracthighlights_require__(21); var toObject = __w_extracthighlights_require__(61); var IE_PROTO = __w_extracthighlights_require__(56)('IE_PROTO'); var ObjectProto = Object.prototype; module.exports = Object.getPrototypeOf || function (O) { O = toObject(O); if (has(O, IE_PROTO)) return O[IE_PROTO]; if (typeof O.constructor == 'function' && O instanceof O.constructor) { return O.constructor.prototype; } return O instanceof Object ? ObjectProto : null; }; /***/ }), /* 61 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var defined = __w_extracthighlights_require__(33); module.exports = function (it) { return Object(defined(it)); }; /***/ }), /* 62 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ctx = __w_extracthighlights_require__(23); var $export = __w_extracthighlights_require__(7); var toObject = __w_extracthighlights_require__(61); var call = __w_extracthighlights_require__(63); var isArrayIter = __w_extracthighlights_require__(64); var toLength = __w_extracthighlights_require__(25); var createProperty = __w_extracthighlights_require__(65); var getIterFn = __w_extracthighlights_require__(66); $export($export.S + $export.F * !__w_extracthighlights_require__(68)(function (iter) { Array.from(iter); }), 'Array', { from: function from(arrayLike) { var O = toObject(arrayLike); var C = typeof this == 'function' ? this : Array; var aLen = arguments.length; var mapfn = aLen > 1 ? arguments[1] : undefined; var mapping = mapfn !== undefined; var index = 0; var iterFn = getIterFn(O); var length, result, step, iterator; if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); } } else { length = toLength(O.length); for (result = new C(length); length > index; index++) { createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); } } result.length = index; return result; } }); /***/ }), /* 63 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(12); module.exports = function (iterator, fn, value, entries) { try { return entries ? fn(anObject(value)[0], value[1]) : fn(value); } catch (e) { var ret = iterator['return']; if (ret !== undefined) anObject(ret.call(iterator)); throw e; } }; /***/ }), /* 64 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var Iterators = __w_extracthighlights_require__(50); var ITERATOR = __w_extracthighlights_require__(30)('iterator'); var ArrayProto = Array.prototype; module.exports = function (it) { return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it); }; /***/ }), /* 65 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $defineProperty = __w_extracthighlights_require__(11); var createDesc = __w_extracthighlights_require__(19); module.exports = function (object, index, value) { if (index in object) $defineProperty.f(object, index, createDesc(0, value));else object[index] = value; }; /***/ }), /* 66 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var classof = __w_extracthighlights_require__(67); var ITERATOR = __w_extracthighlights_require__(30)('iterator'); var Iterators = __w_extracthighlights_require__(50); module.exports = __w_extracthighlights_require__(9).getIteratorMethod = function (it) { if (it != undefined) return it[ITERATOR] || it['@@iterator'] || Iterators[classof(it)]; }; /***/ }), /* 67 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var cof = __w_extracthighlights_require__(29); var TAG = __w_extracthighlights_require__(30)('toStringTag'); var ARG = cof(function () { return arguments; }()) == 'Arguments'; var tryGet = function tryGet(it, key) { try { return it[key]; } catch (e) {} }; module.exports = function (it) { var O, T, B; return it === undefined ? 'Undefined' : it === null ? 'Null' : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T : ARG ? cof(O) : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; }; /***/ }), /* 68 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ITERATOR = __w_extracthighlights_require__(30)('iterator'); var SAFE_CLOSING = false; try { var riter = [7][ITERATOR](); riter['return'] = function () { SAFE_CLOSING = true; }; Array.from(riter, function () { throw 2; }); } catch (e) {} module.exports = function (exec, skipClosing) { if (!skipClosing && !SAFE_CLOSING) return false; var safe = false; try { var arr = [7]; var iter = arr[ITERATOR](); iter.next = function () { return { done: safe = true }; }; arr[ITERATOR] = function () { return iter; }; exec(arr); } catch (e) {} return safe; }; /***/ }), /* 69 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(70); module.exports = __w_extracthighlights_require__(9).Object.assign; /***/ }), /* 70 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); $export($export.S + $export.F, 'Object', { assign: __w_extracthighlights_require__(71) }); /***/ }), /* 71 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var getKeys = __w_extracthighlights_require__(54); var gOPS = __w_extracthighlights_require__(72); var pIE = __w_extracthighlights_require__(73); var toObject = __w_extracthighlights_require__(61); var IObject = __w_extracthighlights_require__(43); var $assign = Object.assign; module.exports = !$assign || __w_extracthighlights_require__(16)(function () { var A = {}; var B = {}; var S = Symbol(); var K = 'abcdefghijklmnopqrst'; A[S] = 7; K.split('').forEach(function (k) { B[k] = k; }); return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K; }) ? function assign(target, source) { var T = toObject(target); var aLen = arguments.length; var index = 1; var getSymbols = gOPS.f; var isEnum = pIE.f; while (aLen > index) { var S = IObject(arguments[index++]); var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S); var length = keys.length; var j = 0; var key; while (length > j) { if (isEnum.call(S, key = keys[j++])) T[key] = S[key]; } } return T; } : $assign; /***/ }), /* 72 */ /***/ (function(module, exports, __w_extracthighlights_require__) { exports.f = Object.getOwnPropertySymbols; /***/ }), /* 73 */ /***/ (function(module, exports, __w_extracthighlights_require__) { exports.f = {}.propertyIsEnumerable; /***/ }), /* 74 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(75); module.exports = __w_extracthighlights_require__(9).Math.log2; /***/ }), /* 75 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); $export($export.S, 'Math', { log2: function log2(x) { return Math.log(x) / Math.LN2; } }); /***/ }), /* 76 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(77); module.exports = __w_extracthighlights_require__(9).Number.isNaN; /***/ }), /* 77 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); $export($export.S, 'Number', { isNaN: function isNaN(number) { return number != number; } }); /***/ }), /* 78 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(79); module.exports = __w_extracthighlights_require__(9).Number.isInteger; /***/ }), /* 79 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); $export($export.S, 'Number', { isInteger: __w_extracthighlights_require__(80) }); /***/ }), /* 80 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); var floor = Math.floor; module.exports = function isInteger(it) { return !isObject(it) && isFinite(it) && floor(it) === it; }; /***/ }), /* 81 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(82); __w_extracthighlights_require__(47); __w_extracthighlights_require__(83); __w_extracthighlights_require__(86); __w_extracthighlights_require__(99); __w_extracthighlights_require__(100); module.exports = __w_extracthighlights_require__(9).Promise; /***/ }), /* 82 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var classof = __w_extracthighlights_require__(67); var test = {}; test[__w_extracthighlights_require__(30)('toStringTag')] = 'z'; if (test + '' != '[object z]') { __w_extracthighlights_require__(20)(Object.prototype, 'toString', function toString() { return '[object ' + classof(this) + ']'; }, true); } /***/ }), /* 83 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $iterators = __w_extracthighlights_require__(84); var getKeys = __w_extracthighlights_require__(54); var redefine = __w_extracthighlights_require__(20); var global = __w_extracthighlights_require__(8); var hide = __w_extracthighlights_require__(10); var Iterators = __w_extracthighlights_require__(50); var wks = __w_extracthighlights_require__(30); var ITERATOR = wks('iterator'); var TO_STRING_TAG = wks('toStringTag'); var ArrayValues = Iterators.Array; var DOMIterables = { CSSRuleList: true, CSSStyleDeclaration: false, CSSValueList: false, ClientRectList: false, DOMRectList: false, DOMStringList: false, DOMTokenList: true, DataTransferItemList: false, FileList: false, HTMLAllCollection: false, HTMLCollection: false, HTMLFormElement: false, HTMLSelectElement: false, MediaList: true, MimeTypeArray: false, NamedNodeMap: false, NodeList: true, PaintRequestList: false, Plugin: false, PluginArray: false, SVGLengthList: false, SVGNumberList: false, SVGPathSegList: false, SVGPointList: false, SVGStringList: false, SVGTransformList: false, SourceBufferList: false, StyleSheetList: true, TextTrackCueList: false, TextTrackList: false, TouchList: false }; for (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) { var NAME = collections[i]; var explicit = DOMIterables[NAME]; var Collection = global[NAME]; var proto = Collection && Collection.prototype; var key; if (proto) { if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues); if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME); Iterators[NAME] = ArrayValues; if (explicit) for (key in $iterators) { if (!proto[key]) redefine(proto, key, $iterators[key], true); } } } /***/ }), /* 84 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var addToUnscopables = __w_extracthighlights_require__(45); var step = __w_extracthighlights_require__(85); var Iterators = __w_extracthighlights_require__(50); var toIObject = __w_extracthighlights_require__(42); module.exports = __w_extracthighlights_require__(49)(Array, 'Array', function (iterated, kind) { this._t = toIObject(iterated); this._i = 0; this._k = kind; }, function () { var O = this._t; var kind = this._k; var index = this._i++; if (!O || index >= O.length) { this._t = undefined; return step(1); } if (kind == 'keys') return step(0, index); if (kind == 'values') return step(0, O[index]); return step(0, [index, O[index]]); }, 'values'); Iterators.Arguments = Iterators.Array; addToUnscopables('keys'); addToUnscopables('values'); addToUnscopables('entries'); /***/ }), /* 85 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (done, value) { return { value: value, done: !!done }; }; /***/ }), /* 86 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var LIBRARY = __w_extracthighlights_require__(32); var global = __w_extracthighlights_require__(8); var ctx = __w_extracthighlights_require__(23); var classof = __w_extracthighlights_require__(67); var $export = __w_extracthighlights_require__(7); var isObject = __w_extracthighlights_require__(13); var aFunction = __w_extracthighlights_require__(24); var anInstance = __w_extracthighlights_require__(87); var forOf = __w_extracthighlights_require__(88); var speciesConstructor = __w_extracthighlights_require__(89); var task = __w_extracthighlights_require__(90).set; var microtask = __w_extracthighlights_require__(92)(); var newPromiseCapabilityModule = __w_extracthighlights_require__(93); var perform = __w_extracthighlights_require__(94); var userAgent = __w_extracthighlights_require__(95); var promiseResolve = __w_extracthighlights_require__(96); var PROMISE = 'Promise'; var TypeError = global.TypeError; var process = global.process; var versions = process && process.versions; var v8 = versions && versions.v8 || ''; var $Promise = global[PROMISE]; var isNode = classof(process) == 'process'; var empty = function empty() {}; var Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper; var newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f; var USE_NATIVE = !!function () { try { var promise = $Promise.resolve(1); var FakePromise = (promise.constructor = {})[__w_extracthighlights_require__(30)('species')] = function (exec) { exec(empty, empty); }; return (isNode || typeof PromiseRejectionEvent == 'function') && promise.then(empty) instanceof FakePromise && v8.indexOf('6.6') !== 0 && userAgent.indexOf('Chrome/66') === -1; } catch (e) {} }(); var isThenable = function isThenable(it) { var then; return isObject(it) && typeof (then = it.then) == 'function' ? then : false; }; var notify = function notify(promise, isReject) { if (promise._n) return; promise._n = true; var chain = promise._c; microtask(function () { var value = promise._v; var ok = promise._s == 1; var i = 0; var run = function run(reaction) { var handler = ok ? reaction.ok : reaction.fail; var resolve = reaction.resolve; var reject = reaction.reject; var domain = reaction.domain; var result, then, exited; try { if (handler) { if (!ok) { if (promise._h == 2) onHandleUnhandled(promise); promise._h = 1; } if (handler === true) result = value;else { if (domain) domain.enter(); result = handler(value); if (domain) { domain.exit(); exited = true; } } if (result === reaction.promise) { reject(TypeError('Promise-chain cycle')); } else if (then = isThenable(result)) { then.call(result, resolve, reject); } else resolve(result); } else reject(value); } catch (e) { if (domain && !exited) domain.exit(); reject(e); } }; while (chain.length > i) { run(chain[i++]); } promise._c = []; promise._n = false; if (isReject && !promise._h) onUnhandled(promise); }); }; var onUnhandled = function onUnhandled(promise) { task.call(global, function () { var value = promise._v; var unhandled = isUnhandled(promise); var result, handler, console; if (unhandled) { result = perform(function () { if (isNode) { process.emit('unhandledRejection', value, promise); } else if (handler = global.onunhandledrejection) { handler({ promise: promise, reason: value }); } else if ((console = global.console) && console.error) { console.error('Unhandled promise rejection', value); } }); promise._h = isNode || isUnhandled(promise) ? 2 : 1; } promise._a = undefined; if (unhandled && result.e) throw result.v; }); }; var isUnhandled = function isUnhandled(promise) { return promise._h !== 1 && (promise._a || promise._c).length === 0; }; var onHandleUnhandled = function onHandleUnhandled(promise) { task.call(global, function () { var handler; if (isNode) { process.emit('rejectionHandled', promise); } else if (handler = global.onrejectionhandled) { handler({ promise: promise, reason: promise._v }); } }); }; var $reject = function $reject(value) { var promise = this; if (promise._d) return; promise._d = true; promise = promise._w || promise; promise._v = value; promise._s = 2; if (!promise._a) promise._a = promise._c.slice(); notify(promise, true); }; var $resolve = function $resolve(value) { var promise = this; var then; if (promise._d) return; promise._d = true; promise = promise._w || promise; try { if (promise === value) throw TypeError("Promise can't be resolved itself"); if (then = isThenable(value)) { microtask(function () { var wrapper = { _w: promise, _d: false }; try { then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1)); } catch (e) { $reject.call(wrapper, e); } }); } else { promise._v = value; promise._s = 1; notify(promise, false); } } catch (e) { $reject.call({ _w: promise, _d: false }, e); } }; if (!USE_NATIVE) { $Promise = function Promise(executor) { anInstance(this, $Promise, PROMISE, '_h'); aFunction(executor); Internal.call(this); try { executor(ctx($resolve, this, 1), ctx($reject, this, 1)); } catch (err) { $reject.call(this, err); } }; Internal = function Promise(executor) { this._c = []; this._a = undefined; this._s = 0; this._d = false; this._v = undefined; this._h = 0; this._n = false; }; Internal.prototype = __w_extracthighlights_require__(97)($Promise.prototype, { then: function then(onFulfilled, onRejected) { var reaction = newPromiseCapability(speciesConstructor(this, $Promise)); reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; reaction.fail = typeof onRejected == 'function' && onRejected; reaction.domain = isNode ? process.domain : undefined; this._c.push(reaction); if (this._a) this._a.push(reaction); if (this._s) notify(this, false); return reaction.promise; }, 'catch': function _catch(onRejected) { return this.then(undefined, onRejected); } }); OwnPromiseCapability = function OwnPromiseCapability() { var promise = new Internal(); this.promise = promise; this.resolve = ctx($resolve, promise, 1); this.reject = ctx($reject, promise, 1); }; newPromiseCapabilityModule.f = newPromiseCapability = function newPromiseCapability(C) { return C === $Promise || C === Wrapper ? new OwnPromiseCapability(C) : newGenericPromiseCapability(C); }; } $export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise }); __w_extracthighlights_require__(59)($Promise, PROMISE); __w_extracthighlights_require__(98)(PROMISE); Wrapper = __w_extracthighlights_require__(9)[PROMISE]; $export($export.S + $export.F * !USE_NATIVE, PROMISE, { reject: function reject(r) { var capability = newPromiseCapability(this); var $$reject = capability.reject; $$reject(r); return capability.promise; } }); $export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, { resolve: function resolve(x) { return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x); } }); $export($export.S + $export.F * !(USE_NATIVE && __w_extracthighlights_require__(68)(function (iter) { $Promise.all(iter)['catch'](empty); })), PROMISE, { all: function all(iterable) { var C = this; var capability = newPromiseCapability(C); var resolve = capability.resolve; var reject = capability.reject; var result = perform(function () { var values = []; var index = 0; var remaining = 1; forOf(iterable, false, function (promise) { var $index = index++; var alreadyCalled = false; values.push(undefined); remaining++; C.resolve(promise).then(function (value) { if (alreadyCalled) return; alreadyCalled = true; values[$index] = value; --remaining || resolve(values); }, reject); }); --remaining || resolve(values); }); if (result.e) reject(result.v); return capability.promise; }, race: function race(iterable) { var C = this; var capability = newPromiseCapability(C); var reject = capability.reject; var result = perform(function () { forOf(iterable, false, function (promise) { C.resolve(promise).then(capability.resolve, reject); }); }); if (result.e) reject(result.v); return capability.promise; } }); /***/ }), /* 87 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (it, Constructor, name, forbiddenField) { if (!(it instanceof Constructor) || forbiddenField !== undefined && forbiddenField in it) { throw TypeError(name + ': incorrect invocation!'); } return it; }; /***/ }), /* 88 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ctx = __w_extracthighlights_require__(23); var call = __w_extracthighlights_require__(63); var isArrayIter = __w_extracthighlights_require__(64); var anObject = __w_extracthighlights_require__(12); var toLength = __w_extracthighlights_require__(25); var getIterFn = __w_extracthighlights_require__(66); var BREAK = {}; var RETURN = {}; var _exports = module.exports = function (iterable, entries, fn, that, ITERATOR) { var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable); var f = ctx(fn, that, entries ? 2 : 1); var index = 0; var length, step, iterator, result; if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!'); if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) { result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]); if (result === BREAK || result === RETURN) return result; } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) { result = call(iterator, f, step.value, entries); if (result === BREAK || result === RETURN) return result; } }; _exports.BREAK = BREAK; _exports.RETURN = RETURN; /***/ }), /* 89 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(12); var aFunction = __w_extracthighlights_require__(24); var SPECIES = __w_extracthighlights_require__(30)('species'); module.exports = function (O, D) { var C = anObject(O).constructor; var S; return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S); }; /***/ }), /* 90 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ctx = __w_extracthighlights_require__(23); var invoke = __w_extracthighlights_require__(91); var html = __w_extracthighlights_require__(58); var cel = __w_extracthighlights_require__(17); var global = __w_extracthighlights_require__(8); var process = global.process; var setTask = global.setImmediate; var clearTask = global.clearImmediate; var MessageChannel = global.MessageChannel; var Dispatch = global.Dispatch; var counter = 0; var queue = {}; var ONREADYSTATECHANGE = 'onreadystatechange'; var defer, channel, port; var run = function run() { var id = +this; if (queue.hasOwnProperty(id)) { var fn = queue[id]; delete queue[id]; fn(); } }; var listener = function listener(event) { run.call(event.data); }; if (!setTask || !clearTask) { setTask = function setImmediate(fn) { var args = []; var i = 1; while (arguments.length > i) { args.push(arguments[i++]); } queue[++counter] = function () { invoke(typeof fn == 'function' ? fn : Function(fn), args); }; defer(counter); return counter; }; clearTask = function clearImmediate(id) { delete queue[id]; }; if (__w_extracthighlights_require__(29)(process) == 'process') { defer = function defer(id) { process.nextTick(ctx(run, id, 1)); }; } else if (Dispatch && Dispatch.now) { defer = function defer(id) { Dispatch.now(ctx(run, id, 1)); }; } else if (MessageChannel) { channel = new MessageChannel(); port = channel.port2; channel.port1.onmessage = listener; defer = ctx(port.postMessage, port, 1); } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) { defer = function defer(id) { global.postMessage(id + '', '*'); }; global.addEventListener('message', listener, false); } else if (ONREADYSTATECHANGE in cel('script')) { defer = function defer(id) { html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () { html.removeChild(this); run.call(id); }; }; } else { defer = function defer(id) { setTimeout(ctx(run, id, 1), 0); }; } } module.exports = { set: setTask, clear: clearTask }; /***/ }), /* 91 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (fn, args, that) { var un = that === undefined; switch (args.length) { case 0: return un ? fn() : fn.call(that); case 1: return un ? fn(args[0]) : fn.call(that, args[0]); case 2: return un ? fn(args[0], args[1]) : fn.call(that, args[0], args[1]); case 3: return un ? fn(args[0], args[1], args[2]) : fn.call(that, args[0], args[1], args[2]); case 4: return un ? fn(args[0], args[1], args[2], args[3]) : fn.call(that, args[0], args[1], args[2], args[3]); } return fn.apply(that, args); }; /***/ }), /* 92 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(8); var macrotask = __w_extracthighlights_require__(90).set; var Observer = global.MutationObserver || global.WebKitMutationObserver; var process = global.process; var Promise = global.Promise; var isNode = __w_extracthighlights_require__(29)(process) == 'process'; module.exports = function () { var head, last, notify; var flush = function flush() { var parent, fn; if (isNode && (parent = process.domain)) parent.exit(); while (head) { fn = head.fn; head = head.next; try { fn(); } catch (e) { if (head) notify();else last = undefined; throw e; } } last = undefined; if (parent) parent.enter(); }; if (isNode) { notify = function notify() { process.nextTick(flush); }; } else if (Observer && !(global.navigator && global.navigator.standalone)) { var toggle = true; var node = document.createTextNode(''); new Observer(flush).observe(node, { characterData: true }); notify = function notify() { node.data = toggle = !toggle; }; } else if (Promise && Promise.resolve) { var promise = Promise.resolve(undefined); notify = function notify() { promise.then(flush); }; } else { notify = function notify() { macrotask.call(global, flush); }; } return function (fn) { var task = { fn: fn, next: undefined }; if (last) last.next = task; if (!head) { head = task; notify(); } last = task; }; }; /***/ }), /* 93 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var aFunction = __w_extracthighlights_require__(24); function PromiseCapability(C) { var resolve, reject; this.promise = new C(function ($$resolve, $$reject) { if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); resolve = $$resolve; reject = $$reject; }); this.resolve = aFunction(resolve); this.reject = aFunction(reject); } module.exports.f = function (C) { return new PromiseCapability(C); }; /***/ }), /* 94 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (exec) { try { return { e: false, v: exec() }; } catch (e) { return { e: true, v: e }; } }; /***/ }), /* 95 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(8); var navigator = global.navigator; module.exports = navigator && navigator.userAgent || ''; /***/ }), /* 96 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var anObject = __w_extracthighlights_require__(12); var isObject = __w_extracthighlights_require__(13); var newPromiseCapability = __w_extracthighlights_require__(93); module.exports = function (C, x) { anObject(C); if (isObject(x) && x.constructor === C) return x; var promiseCapability = newPromiseCapability.f(C); var resolve = promiseCapability.resolve; resolve(x); return promiseCapability.promise; }; /***/ }), /* 97 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var redefine = __w_extracthighlights_require__(20); module.exports = function (target, src, safe) { for (var key in src) { redefine(target, key, src[key], safe); } return target; }; /***/ }), /* 98 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(8); var dP = __w_extracthighlights_require__(11); var DESCRIPTORS = __w_extracthighlights_require__(15); var SPECIES = __w_extracthighlights_require__(30)('species'); module.exports = function (KEY) { var C = global[KEY]; if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, { configurable: true, get: function get() { return this; } }); }; /***/ }), /* 99 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var core = __w_extracthighlights_require__(9); var global = __w_extracthighlights_require__(8); var speciesConstructor = __w_extracthighlights_require__(89); var promiseResolve = __w_extracthighlights_require__(96); $export($export.P + $export.R, 'Promise', { 'finally': function _finally(onFinally) { var C = speciesConstructor(this, core.Promise || global.Promise); var isFunction = typeof onFinally == 'function'; return this.then(isFunction ? function (x) { return promiseResolve(C, onFinally()).then(function () { return x; }); } : onFinally, isFunction ? function (e) { return promiseResolve(C, onFinally()).then(function () { throw e; }); } : onFinally); } }); /***/ }), /* 100 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var newPromiseCapability = __w_extracthighlights_require__(93); var perform = __w_extracthighlights_require__(94); $export($export.S, 'Promise', { 'try': function _try(callbackfn) { var promiseCapability = newPromiseCapability.f(this); var result = perform(callbackfn); (result.e ? promiseCapability.reject : promiseCapability.resolve)(result.v); return promiseCapability.promise; } }); /***/ }), /* 101 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(82); __w_extracthighlights_require__(83); __w_extracthighlights_require__(102); __w_extracthighlights_require__(114); __w_extracthighlights_require__(116); module.exports = __w_extracthighlights_require__(9).WeakMap; /***/ }), /* 102 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var each = __w_extracthighlights_require__(103)(0); var redefine = __w_extracthighlights_require__(20); var meta = __w_extracthighlights_require__(107); var assign = __w_extracthighlights_require__(71); var weak = __w_extracthighlights_require__(108); var isObject = __w_extracthighlights_require__(13); var fails = __w_extracthighlights_require__(16); var validate = __w_extracthighlights_require__(109); var WEAK_MAP = 'WeakMap'; var getWeak = meta.getWeak; var isExtensible = Object.isExtensible; var uncaughtFrozenStore = weak.ufstore; var tmp = {}; var InternalMap; var wrapper = function wrapper(get) { return function WeakMap() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }; var methods = { get: function get(key) { if (isObject(key)) { var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key); return data ? data[this._i] : undefined; } }, set: function set(key, value) { return weak.def(validate(this, WEAK_MAP), key, value); } }; var $WeakMap = module.exports = __w_extracthighlights_require__(110)(WEAK_MAP, wrapper, methods, weak, true, true); if (fails(function () { return new $WeakMap().set((Object.freeze || Object)(tmp), 7).get(tmp) != 7; })) { InternalMap = weak.getConstructor(wrapper, WEAK_MAP); assign(InternalMap.prototype, methods); meta.NEED = true; each(['delete', 'has', 'get', 'set'], function (key) { var proto = $WeakMap.prototype; var method = proto[key]; redefine(proto, key, function (a, b) { if (isObject(a) && !isExtensible(a)) { if (!this._f) this._f = new InternalMap(); var result = this._f[key](a, b); return key == 'set' ? this : result; } return method.call(this, a, b); }); }); } /***/ }), /* 103 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var ctx = __w_extracthighlights_require__(23); var IObject = __w_extracthighlights_require__(43); var toObject = __w_extracthighlights_require__(61); var toLength = __w_extracthighlights_require__(25); var asc = __w_extracthighlights_require__(104); module.exports = function (TYPE, $create) { var IS_MAP = TYPE == 1; var IS_FILTER = TYPE == 2; var IS_SOME = TYPE == 3; var IS_EVERY = TYPE == 4; var IS_FIND_INDEX = TYPE == 6; var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; var create = $create || asc; return function ($this, callbackfn, that) { var O = toObject($this); var self = IObject(O); var f = ctx(callbackfn, that, 3); var length = toLength(self.length); var index = 0; var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; var val, res; for (; length > index; index++) { if (NO_HOLES || index in self) { val = self[index]; res = f(val, index, O); if (TYPE) { if (IS_MAP) result[index] = res;else if (res) switch (TYPE) { case 3: return true; case 5: return val; case 6: return index; case 2: result.push(val); } else if (IS_EVERY) return false; } } } return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result; }; }; /***/ }), /* 104 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var speciesConstructor = __w_extracthighlights_require__(105); module.exports = function (original, length) { return new (speciesConstructor(original))(length); }; /***/ }), /* 105 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); var isArray = __w_extracthighlights_require__(106); var SPECIES = __w_extracthighlights_require__(30)('species'); module.exports = function (original) { var C; if (isArray(original)) { C = original.constructor; if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; if (isObject(C)) { C = C[SPECIES]; if (C === null) C = undefined; } } return C === undefined ? Array : C; }; /***/ }), /* 106 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var cof = __w_extracthighlights_require__(29); module.exports = Array.isArray || function isArray(arg) { return cof(arg) == 'Array'; }; /***/ }), /* 107 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var META = __w_extracthighlights_require__(22)('meta'); var isObject = __w_extracthighlights_require__(13); var has = __w_extracthighlights_require__(21); var setDesc = __w_extracthighlights_require__(11).f; var id = 0; var isExtensible = Object.isExtensible || function () { return true; }; var FREEZE = !__w_extracthighlights_require__(16)(function () { return isExtensible(Object.preventExtensions({})); }); var setMeta = function setMeta(it) { setDesc(it, META, { value: { i: 'O' + ++id, w: {} } }); }; var fastKey = function fastKey(it, create) { if (!isObject(it)) return _typeof(it) == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; if (!has(it, META)) { if (!isExtensible(it)) return 'F'; if (!create) return 'E'; setMeta(it); } return it[META].i; }; var getWeak = function getWeak(it, create) { if (!has(it, META)) { if (!isExtensible(it)) return true; if (!create) return false; setMeta(it); } return it[META].w; }; var onFreeze = function onFreeze(it) { if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it); return it; }; var meta = module.exports = { KEY: META, NEED: false, fastKey: fastKey, getWeak: getWeak, onFreeze: onFreeze }; /***/ }), /* 108 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var redefineAll = __w_extracthighlights_require__(97); var getWeak = __w_extracthighlights_require__(107).getWeak; var anObject = __w_extracthighlights_require__(12); var isObject = __w_extracthighlights_require__(13); var anInstance = __w_extracthighlights_require__(87); var forOf = __w_extracthighlights_require__(88); var createArrayMethod = __w_extracthighlights_require__(103); var $has = __w_extracthighlights_require__(21); var validate = __w_extracthighlights_require__(109); var arrayFind = createArrayMethod(5); var arrayFindIndex = createArrayMethod(6); var id = 0; var uncaughtFrozenStore = function uncaughtFrozenStore(that) { return that._l || (that._l = new UncaughtFrozenStore()); }; var UncaughtFrozenStore = function UncaughtFrozenStore() { this.a = []; }; var findUncaughtFrozen = function findUncaughtFrozen(store, key) { return arrayFind(store.a, function (it) { return it[0] === key; }); }; UncaughtFrozenStore.prototype = { get: function get(key) { var entry = findUncaughtFrozen(this, key); if (entry) return entry[1]; }, has: function has(key) { return !!findUncaughtFrozen(this, key); }, set: function set(key, value) { var entry = findUncaughtFrozen(this, key); if (entry) entry[1] = value;else this.a.push([key, value]); }, 'delete': function _delete(key) { var index = arrayFindIndex(this.a, function (it) { return it[0] === key; }); if (~index) this.a.splice(index, 1); return !!~index; } }; module.exports = { getConstructor: function getConstructor(wrapper, NAME, IS_MAP, ADDER) { var C = wrapper(function (that, iterable) { anInstance(that, C, NAME, '_i'); that._t = NAME; that._i = id++; that._l = undefined; if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); }); redefineAll(C.prototype, { 'delete': function _delete(key) { if (!isObject(key)) return false; var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key); return data && $has(data, this._i) && delete data[this._i]; }, has: function has(key) { if (!isObject(key)) return false; var data = getWeak(key); if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key); return data && $has(data, this._i); } }); return C; }, def: function def(that, key, value) { var data = getWeak(anObject(key), true); if (data === true) uncaughtFrozenStore(that).set(key, value);else data[that._i] = value; return that; }, ufstore: uncaughtFrozenStore }; /***/ }), /* 109 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); module.exports = function (it, TYPE) { if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!'); return it; }; /***/ }), /* 110 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(8); var $export = __w_extracthighlights_require__(7); var redefine = __w_extracthighlights_require__(20); var redefineAll = __w_extracthighlights_require__(97); var meta = __w_extracthighlights_require__(107); var forOf = __w_extracthighlights_require__(88); var anInstance = __w_extracthighlights_require__(87); var isObject = __w_extracthighlights_require__(13); var fails = __w_extracthighlights_require__(16); var $iterDetect = __w_extracthighlights_require__(68); var setToStringTag = __w_extracthighlights_require__(59); var inheritIfRequired = __w_extracthighlights_require__(111); module.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) { var Base = global[NAME]; var C = Base; var ADDER = IS_MAP ? 'set' : 'add'; var proto = C && C.prototype; var O = {}; var fixMethod = function fixMethod(KEY) { var fn = proto[KEY]; redefine(proto, KEY, KEY == 'delete' ? function (a) { return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); } : KEY == 'has' ? function has(a) { return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a); } : KEY == 'get' ? function get(a) { return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a); } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; } : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }); }; if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () { new C().entries().next(); }))) { C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER); redefineAll(C.prototype, methods); meta.NEED = true; } else { var instance = new C(); var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); var BUGGY_ZERO = !IS_WEAK && fails(function () { var $instance = new C(); var index = 5; while (index--) { $instance[ADDER](index, index); } return !$instance.has(-0); }); if (!ACCEPT_ITERABLES) { C = wrapper(function (target, iterable) { anInstance(target, C, NAME); var that = inheritIfRequired(new Base(), target, C); if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that); return that; }); C.prototype = proto; proto.constructor = C; } if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { fixMethod('delete'); fixMethod('has'); IS_MAP && fixMethod('get'); } if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); if (IS_WEAK && proto.clear) delete proto.clear; } setToStringTag(C, NAME); O[NAME] = C; $export($export.G + $export.W + $export.F * (C != Base), O); if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP); return C; }; /***/ }), /* 111 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); var setPrototypeOf = __w_extracthighlights_require__(112).set; module.exports = function (that, target, C) { var S = target.constructor; var P; if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) { setPrototypeOf(that, P); } return that; }; /***/ }), /* 112 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var isObject = __w_extracthighlights_require__(13); var anObject = __w_extracthighlights_require__(12); var check = function check(O, proto) { anObject(O); if (!isObject(proto) && proto !== null) throw TypeError(proto + ": can't set as prototype!"); }; module.exports = { set: Object.setPrototypeOf || ('__proto__' in {} ? function (test, buggy, set) { try { set = __w_extracthighlights_require__(23)(Function.call, __w_extracthighlights_require__(113).f(Object.prototype, '__proto__').set, 2); set(test, []); buggy = !(test instanceof Array); } catch (e) { buggy = true; } return function setPrototypeOf(O, proto) { check(O, proto); if (buggy) O.__proto__ = proto;else set(O, proto); return O; }; }({}, false) : undefined), check: check }; /***/ }), /* 113 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var pIE = __w_extracthighlights_require__(73); var createDesc = __w_extracthighlights_require__(19); var toIObject = __w_extracthighlights_require__(42); var toPrimitive = __w_extracthighlights_require__(18); var has = __w_extracthighlights_require__(21); var IE8_DOM_DEFINE = __w_extracthighlights_require__(14); var gOPD = Object.getOwnPropertyDescriptor; exports.f = __w_extracthighlights_require__(15) ? gOPD : function getOwnPropertyDescriptor(O, P) { O = toIObject(O); P = toPrimitive(P, true); if (IE8_DOM_DEFINE) try { return gOPD(O, P); } catch (e) {} if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]); }; /***/ }), /* 114 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(115)('WeakMap'); /***/ }), /* 115 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); module.exports = function (COLLECTION) { $export($export.S, COLLECTION, { of: function of() { var length = arguments.length; var A = new Array(length); while (length--) { A[length] = arguments[length]; } return new this(A); } }); }; /***/ }), /* 116 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(117)('WeakMap'); /***/ }), /* 117 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var aFunction = __w_extracthighlights_require__(24); var ctx = __w_extracthighlights_require__(23); var forOf = __w_extracthighlights_require__(88); module.exports = function (COLLECTION) { $export($export.S, COLLECTION, { from: function from(source) { var mapFn = arguments[1]; var mapping, A, n, cb; aFunction(this); mapping = mapFn !== undefined; if (mapping) aFunction(mapFn); if (source == undefined) return new this(); A = []; if (mapping) { n = 0; cb = ctx(mapFn, arguments[2], 2); forOf(source, false, function (nextItem) { A.push(cb(nextItem, n++)); }); } else { forOf(source, false, A.push, A); } return new this(A); } }); }; /***/ }), /* 118 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(82); __w_extracthighlights_require__(83); __w_extracthighlights_require__(119); __w_extracthighlights_require__(120); __w_extracthighlights_require__(121); module.exports = __w_extracthighlights_require__(9).WeakSet; /***/ }), /* 119 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var weak = __w_extracthighlights_require__(108); var validate = __w_extracthighlights_require__(109); var WEAK_SET = 'WeakSet'; __w_extracthighlights_require__(110)(WEAK_SET, function (get) { return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); }; }, { add: function add(value) { return weak.def(validate(this, WEAK_SET), value, true); } }, weak, false, true); /***/ }), /* 120 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(115)('WeakSet'); /***/ }), /* 121 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(117)('WeakSet'); /***/ }), /* 122 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(123); module.exports = __w_extracthighlights_require__(9).String.codePointAt; /***/ }), /* 123 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var $at = __w_extracthighlights_require__(48)(false); $export($export.P, 'String', { codePointAt: function codePointAt(pos) { return $at(this, pos); } }); /***/ }), /* 124 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(125); module.exports = __w_extracthighlights_require__(9).String.fromCodePoint; /***/ }), /* 125 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var toAbsoluteIndex = __w_extracthighlights_require__(44); var fromCharCode = String.fromCharCode; var $fromCodePoint = String.fromCodePoint; $export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', { fromCodePoint: function fromCodePoint(x) { var res = []; var aLen = arguments.length; var i = 0; var code; while (aLen > i) { code = +arguments[i++]; if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point'); res.push(code < 0x10000 ? fromCharCode(code) : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)); } return res.join(''); } }); /***/ }), /* 126 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(127); __w_extracthighlights_require__(82); module.exports = __w_extracthighlights_require__(9).Symbol; /***/ }), /* 127 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var global = __w_extracthighlights_require__(8); var has = __w_extracthighlights_require__(21); var DESCRIPTORS = __w_extracthighlights_require__(15); var $export = __w_extracthighlights_require__(7); var redefine = __w_extracthighlights_require__(20); var META = __w_extracthighlights_require__(107).KEY; var $fails = __w_extracthighlights_require__(16); var shared = __w_extracthighlights_require__(31); var setToStringTag = __w_extracthighlights_require__(59); var uid = __w_extracthighlights_require__(22); var wks = __w_extracthighlights_require__(30); var wksExt = __w_extracthighlights_require__(128); var wksDefine = __w_extracthighlights_require__(129); var enumKeys = __w_extracthighlights_require__(130); var isArray = __w_extracthighlights_require__(106); var anObject = __w_extracthighlights_require__(12); var isObject = __w_extracthighlights_require__(13); var toIObject = __w_extracthighlights_require__(42); var toPrimitive = __w_extracthighlights_require__(18); var createDesc = __w_extracthighlights_require__(19); var _create = __w_extracthighlights_require__(52); var gOPNExt = __w_extracthighlights_require__(131); var $GOPD = __w_extracthighlights_require__(113); var $DP = __w_extracthighlights_require__(11); var $keys = __w_extracthighlights_require__(54); var gOPD = $GOPD.f; var dP = $DP.f; var gOPN = gOPNExt.f; var $Symbol = global.Symbol; var $JSON = global.JSON; var _stringify = $JSON && $JSON.stringify; var PROTOTYPE = 'prototype'; var HIDDEN = wks('_hidden'); var TO_PRIMITIVE = wks('toPrimitive'); var isEnum = {}.propertyIsEnumerable; var SymbolRegistry = shared('symbol-registry'); var AllSymbols = shared('symbols'); var OPSymbols = shared('op-symbols'); var ObjectProto = Object[PROTOTYPE]; var USE_NATIVE = typeof $Symbol == 'function'; var QObject = global.QObject; var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild; var setSymbolDesc = DESCRIPTORS && $fails(function () { return _create(dP({}, 'a', { get: function get() { return dP(this, 'a', { value: 7 }).a; } })).a != 7; }) ? function (it, key, D) { var protoDesc = gOPD(ObjectProto, key); if (protoDesc) delete ObjectProto[key]; dP(it, key, D); if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc); } : dP; var wrap = function wrap(tag) { var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]); sym._k = tag; return sym; }; var isSymbol = USE_NATIVE && _typeof($Symbol.iterator) == 'symbol' ? function (it) { return _typeof(it) == 'symbol'; } : function (it) { return it instanceof $Symbol; }; var $defineProperty = function defineProperty(it, key, D) { if (it === ObjectProto) $defineProperty(OPSymbols, key, D); anObject(it); key = toPrimitive(key, true); anObject(D); if (has(AllSymbols, key)) { if (!D.enumerable) { if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {})); it[HIDDEN][key] = true; } else { if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false; D = _create(D, { enumerable: createDesc(0, false) }); } return setSymbolDesc(it, key, D); } return dP(it, key, D); }; var $defineProperties = function defineProperties(it, P) { anObject(it); var keys = enumKeys(P = toIObject(P)); var i = 0; var l = keys.length; var key; while (l > i) { $defineProperty(it, key = keys[i++], P[key]); } return it; }; var $create = function create(it, P) { return P === undefined ? _create(it) : $defineProperties(_create(it), P); }; var $propertyIsEnumerable = function propertyIsEnumerable(key) { var E = isEnum.call(this, key = toPrimitive(key, true)); if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false; return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true; }; var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) { it = toIObject(it); key = toPrimitive(key, true); if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return; var D = gOPD(it, key); if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true; return D; }; var $getOwnPropertyNames = function getOwnPropertyNames(it) { var names = gOPN(toIObject(it)); var result = []; var i = 0; var key; while (names.length > i) { if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key); } return result; }; var $getOwnPropertySymbols = function getOwnPropertySymbols(it) { var IS_OP = it === ObjectProto; var names = gOPN(IS_OP ? OPSymbols : toIObject(it)); var result = []; var i = 0; var key; while (names.length > i) { if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]); } return result; }; if (!USE_NATIVE) { $Symbol = function _Symbol() { if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!'); var tag = uid(arguments.length > 0 ? arguments[0] : undefined); var $set = function $set(value) { if (this === ObjectProto) $set.call(OPSymbols, value); if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false; setSymbolDesc(this, tag, createDesc(1, value)); }; if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set }); return wrap(tag); }; redefine($Symbol[PROTOTYPE], 'toString', function toString() { return this._k; }); $GOPD.f = $getOwnPropertyDescriptor; $DP.f = $defineProperty; __w_extracthighlights_require__(132).f = gOPNExt.f = $getOwnPropertyNames; __w_extracthighlights_require__(73).f = $propertyIsEnumerable; __w_extracthighlights_require__(72).f = $getOwnPropertySymbols; if (DESCRIPTORS && !__w_extracthighlights_require__(32)) { redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); } wksExt.f = function (name) { return wrap(wks(name)); }; } $export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol }); for (var es6Symbols = 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'.split(','), j = 0; es6Symbols.length > j;) { wks(es6Symbols[j++]); } for (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) { wksDefine(wellKnownSymbols[k++]); } $export($export.S + $export.F * !USE_NATIVE, 'Symbol', { 'for': function _for(key) { return has(SymbolRegistry, key += '') ? SymbolRegistry[key] : SymbolRegistry[key] = $Symbol(key); }, keyFor: function keyFor(sym) { if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!'); for (var key in SymbolRegistry) { if (SymbolRegistry[key] === sym) return key; } }, useSetter: function useSetter() { setter = true; }, useSimple: function useSimple() { setter = false; } }); $export($export.S + $export.F * !USE_NATIVE, 'Object', { create: $create, defineProperty: $defineProperty, defineProperties: $defineProperties, getOwnPropertyDescriptor: $getOwnPropertyDescriptor, getOwnPropertyNames: $getOwnPropertyNames, getOwnPropertySymbols: $getOwnPropertySymbols }); $JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () { var S = $Symbol(); return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}'; })), 'JSON', { stringify: function stringify(it) { var args = [it]; var i = 1; var replacer, $replacer; while (arguments.length > i) { args.push(arguments[i++]); } $replacer = replacer = args[1]; if (!isObject(replacer) && it === undefined || isSymbol(it)) return; if (!isArray(replacer)) replacer = function replacer(key, value) { if (typeof $replacer == 'function') value = $replacer.call(this, key, value); if (!isSymbol(value)) return value; }; args[1] = replacer; return _stringify.apply($JSON, args); } }); $Symbol[PROTOTYPE][TO_PRIMITIVE] || __w_extracthighlights_require__(10)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf); setToStringTag($Symbol, 'Symbol'); setToStringTag(Math, 'Math', true); setToStringTag(global.JSON, 'JSON', true); /***/ }), /* 128 */ /***/ (function(module, exports, __w_extracthighlights_require__) { exports.f = __w_extracthighlights_require__(30); /***/ }), /* 129 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var global = __w_extracthighlights_require__(8); var core = __w_extracthighlights_require__(9); var LIBRARY = __w_extracthighlights_require__(32); var wksExt = __w_extracthighlights_require__(128); var defineProperty = __w_extracthighlights_require__(11).f; module.exports = function (name) { var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {}); if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) }); }; /***/ }), /* 130 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var getKeys = __w_extracthighlights_require__(54); var gOPS = __w_extracthighlights_require__(72); var pIE = __w_extracthighlights_require__(73); module.exports = function (it) { var result = getKeys(it); var getSymbols = gOPS.f; if (getSymbols) { var symbols = getSymbols(it); var isEnum = pIE.f; var i = 0; var key; while (symbols.length > i) { if (isEnum.call(it, key = symbols[i++])) result.push(key); } } return result; }; /***/ }), /* 131 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var toIObject = __w_extracthighlights_require__(42); var gOPN = __w_extracthighlights_require__(132).f; var toString = {}.toString; var windowNames = (typeof window === "undefined" ? "undefined" : _typeof(window)) == 'object' && window && Object.getOwnPropertyNames ? Object.getOwnPropertyNames(window) : []; var getWindowNames = function getWindowNames(it) { try { return gOPN(it); } catch (e) { return windowNames.slice(); } }; module.exports.f = function getOwnPropertyNames(it) { return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it)); }; /***/ }), /* 132 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $keys = __w_extracthighlights_require__(55); var hiddenKeys = __w_extracthighlights_require__(57).concat('length', 'prototype'); exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { return $keys(O, hiddenKeys); }; /***/ }), /* 133 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(134); module.exports = __w_extracthighlights_require__(9).String.padStart; /***/ }), /* 134 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var $pad = __w_extracthighlights_require__(135); var userAgent = __w_extracthighlights_require__(95); $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { padStart: function padStart(maxLength) { return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true); } }); /***/ }), /* 135 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toLength = __w_extracthighlights_require__(25); var repeat = __w_extracthighlights_require__(136); var defined = __w_extracthighlights_require__(33); module.exports = function (that, maxLength, fillString, left) { var S = String(defined(that)); var stringLength = S.length; var fillStr = fillString === undefined ? ' ' : String(fillString); var intMaxLength = toLength(maxLength); if (intMaxLength <= stringLength || fillStr == '') return S; var fillLen = intMaxLength - stringLength; var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length)); if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); return left ? stringFiller + S : S + stringFiller; }; /***/ }), /* 136 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var toInteger = __w_extracthighlights_require__(26); var defined = __w_extracthighlights_require__(33); module.exports = function repeat(count) { var str = String(defined(this)); var res = ''; var n = toInteger(count); if (n < 0 || n == Infinity) throw RangeError("Count can't be negative"); for (; n > 0; (n >>>= 1) && (str += str)) { if (n & 1) res += str; } return res; }; /***/ }), /* 137 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(138); module.exports = __w_extracthighlights_require__(9).String.padEnd; /***/ }), /* 138 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var $pad = __w_extracthighlights_require__(135); var userAgent = __w_extracthighlights_require__(95); $export($export.P + $export.F * /Version\/10\.\d+(\.\d+)? Safari\//.test(userAgent), 'String', { padEnd: function padEnd(maxLength) { return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false); } }); /***/ }), /* 139 */ /***/ (function(module, exports, __w_extracthighlights_require__) { __w_extracthighlights_require__(140); module.exports = __w_extracthighlights_require__(9).Object.values; /***/ }), /* 140 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var $export = __w_extracthighlights_require__(7); var $values = __w_extracthighlights_require__(141)(false); $export($export.S, 'Object', { values: function values(it) { return $values(it); } }); /***/ }), /* 141 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var getKeys = __w_extracthighlights_require__(54); var toIObject = __w_extracthighlights_require__(42); var isEnum = __w_extracthighlights_require__(73).f; module.exports = function (isEntries) { return function (it) { var O = toIObject(it); var keys = getKeys(O); var length = keys.length; var i = 0; var result = []; var key; while (length > i) { if (isEnum.call(O, key = keys[i++])) { result.push(isEntries ? [key, O[key]] : O[key]); } } return result; }; }; /***/ }), /* 142 */ /***/ (function(module, exports, __w_extracthighlights_require__) { { var isReadableStreamSupported = false; if (typeof ReadableStream !== 'undefined') { try { new ReadableStream({ start: function start(controller) { controller.close(); } }); isReadableStreamSupported = true; } catch (e) {} } if (isReadableStreamSupported) { exports.ReadableStream = ReadableStream; } else { exports.ReadableStream = __w_extracthighlights_require__(143).ReadableStream; } } /***/ }), /* 143 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof2(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof2 = function _typeof2(obj) { return typeof obj; }; } else { _typeof2 = function _typeof2(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof2(obj); } (function (e, a) { for (var i in a) { e[i] = a[i]; } })(exports, function (modules) { var installedModules = {}; function __w_extracthighlights_require__(moduleId) { if (installedModules[moduleId]) return installedModules[moduleId].exports; var module = installedModules[moduleId] = { i: moduleId, l: false, exports: {} }; modules[moduleId].call(module.exports, module, module.exports, __w_extracthighlights_require__); module.l = true; return module.exports; } __w_extracthighlights_require__.m = modules; __w_extracthighlights_require__.c = installedModules; __w_extracthighlights_require__.i = function (value) { return value; }; __w_extracthighlights_require__.d = function (exports, name, getter) { if (!__w_extracthighlights_require__.o(exports, name)) { Object.defineProperty(exports, name, { configurable: false, enumerable: true, get: getter }); } }; __w_extracthighlights_require__.n = function (module) { var getter = module && module.__esModule ? function getDefault() { return module['default']; } : function getModuleExports() { return module; }; __w_extracthighlights_require__.d(getter, 'a', getter); return getter; }; __w_extracthighlights_require__.o = function (object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; __w_extracthighlights_require__.p = ""; return __w_extracthighlights_require__(__w_extracthighlights_require__.s = 7); }([function (module, exports, __w_extracthighlights_require__) { var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { return _typeof2(obj); } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : _typeof2(obj); }; var _require = __w_extracthighlights_require__(1), assert = _require.assert; function IsPropertyKey(argument) { return typeof argument === 'string' || (typeof argument === 'undefined' ? 'undefined' : _typeof(argument)) === 'symbol'; } exports.typeIsObject = function (x) { return (typeof x === 'undefined' ? 'undefined' : _typeof(x)) === 'object' && x !== null || typeof x === 'function'; }; exports.createDataProperty = function (o, p, v) { assert(exports.typeIsObject(o)); Object.defineProperty(o, p, { value: v, writable: true, enumerable: true, configurable: true }); }; exports.createArrayFromList = function (elements) { return elements.slice(); }; exports.ArrayBufferCopy = function (dest, destOffset, src, srcOffset, n) { new Uint8Array(dest).set(new Uint8Array(src, srcOffset, n), destOffset); }; exports.CreateIterResultObject = function (value, done) { assert(typeof done === 'boolean'); var obj = {}; Object.defineProperty(obj, 'value', { value: value, enumerable: true, writable: true, configurable: true }); Object.defineProperty(obj, 'done', { value: done, enumerable: true, writable: true, configurable: true }); return obj; }; exports.IsFiniteNonNegativeNumber = function (v) { if (Number.isNaN(v)) { return false; } if (v === Infinity) { return false; } if (v < 0) { return false; } return true; }; function Call(F, V, args) { if (typeof F !== 'function') { throw new TypeError('Argument is not a function'); } return Function.prototype.apply.call(F, V, args); } exports.InvokeOrNoop = function (O, P, args) { assert(O !== undefined); assert(IsPropertyKey(P)); assert(Array.isArray(args)); var method = O[P]; if (method === undefined) { return undefined; } return Call(method, O, args); }; exports.PromiseInvokeOrNoop = function (O, P, args) { assert(O !== undefined); assert(IsPropertyKey(P)); assert(Array.isArray(args)); try { return Promise.resolve(exports.InvokeOrNoop(O, P, args)); } catch (returnValueE) { return Promise.reject(returnValueE); } }; exports.PromiseInvokeOrPerformFallback = function (O, P, args, F, argsF) { assert(O !== undefined); assert(IsPropertyKey(P)); assert(Array.isArray(args)); assert(Array.isArray(argsF)); var method = void 0; try { method = O[P]; } catch (methodE) { return Promise.reject(methodE); } if (method === undefined) { return F.apply(null, argsF); } try { return Promise.resolve(Call(method, O, args)); } catch (e) { return Promise.reject(e); } }; exports.TransferArrayBuffer = function (O) { return O.slice(); }; exports.ValidateAndNormalizeHighWaterMark = function (highWaterMark) { highWaterMark = Number(highWaterMark); if (Number.isNaN(highWaterMark) || highWaterMark < 0) { throw new RangeError('highWaterMark property of a queuing strategy must be non-negative and non-NaN'); } return highWaterMark; }; exports.ValidateAndNormalizeQueuingStrategy = function (size, highWaterMark) { if (size !== undefined && typeof size !== 'function') { throw new TypeError('size property of a queuing strategy must be a function'); } highWaterMark = exports.ValidateAndNormalizeHighWaterMark(highWaterMark); return { size: size, highWaterMark: highWaterMark }; }; }, function (module, exports, __w_extracthighlights_require__) { function rethrowAssertionErrorRejection(e) { if (e && e.constructor === AssertionError) { setTimeout(function () { throw e; }, 0); } } function AssertionError(message) { this.name = 'AssertionError'; this.message = message || ''; this.stack = new Error().stack; } AssertionError.prototype = Object.create(Error.prototype); AssertionError.prototype.constructor = AssertionError; function assert(value, message) { if (!value) { throw new AssertionError(message); } } module.exports = { rethrowAssertionErrorRejection: rethrowAssertionErrorRejection, AssertionError: AssertionError, assert: assert }; }, function (module, exports, __w_extracthighlights_require__) { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var _require = __w_extracthighlights_require__(0), InvokeOrNoop = _require.InvokeOrNoop, PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, typeIsObject = _require.typeIsObject; var _require2 = __w_extracthighlights_require__(1), assert = _require2.assert, rethrowAssertionErrorRejection = _require2.rethrowAssertionErrorRejection; var _require3 = __w_extracthighlights_require__(3), DequeueValue = _require3.DequeueValue, EnqueueValueWithSize = _require3.EnqueueValueWithSize, PeekQueueValue = _require3.PeekQueueValue, ResetQueue = _require3.ResetQueue; var WritableStream = function () { function WritableStream() { var underlyingSink = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, size = _ref.size, _ref$highWaterMark = _ref.highWaterMark, highWaterMark = _ref$highWaterMark === undefined ? 1 : _ref$highWaterMark; _classCallCheck(this, WritableStream); this._state = 'writable'; this._storedError = undefined; this._writer = undefined; this._writableStreamController = undefined; this._writeRequests = []; this._inFlightWriteRequest = undefined; this._closeRequest = undefined; this._inFlightCloseRequest = undefined; this._pendingAbortRequest = undefined; this._backpressure = false; var type = underlyingSink.type; if (type !== undefined) { throw new RangeError('Invalid type is specified'); } this._writableStreamController = new WritableStreamDefaultController(this, underlyingSink, size, highWaterMark); this._writableStreamController.__startSteps(); } _createClass(WritableStream, [{ key: 'abort', value: function abort(reason) { if (IsWritableStream(this) === false) { return Promise.reject(streamBrandCheckException('abort')); } if (IsWritableStreamLocked(this) === true) { return Promise.reject(new TypeError('Cannot abort a stream that already has a writer')); } return WritableStreamAbort(this, reason); } }, { key: 'getWriter', value: function getWriter() { if (IsWritableStream(this) === false) { throw streamBrandCheckException('getWriter'); } return AcquireWritableStreamDefaultWriter(this); } }, { key: 'locked', get: function get() { if (IsWritableStream(this) === false) { throw streamBrandCheckException('locked'); } return IsWritableStreamLocked(this); } }]); return WritableStream; }(); module.exports = { AcquireWritableStreamDefaultWriter: AcquireWritableStreamDefaultWriter, IsWritableStream: IsWritableStream, IsWritableStreamLocked: IsWritableStreamLocked, WritableStream: WritableStream, WritableStreamAbort: WritableStreamAbort, WritableStreamDefaultControllerError: WritableStreamDefaultControllerError, WritableStreamDefaultWriterCloseWithErrorPropagation: WritableStreamDefaultWriterCloseWithErrorPropagation, WritableStreamDefaultWriterRelease: WritableStreamDefaultWriterRelease, WritableStreamDefaultWriterWrite: WritableStreamDefaultWriterWrite, WritableStreamCloseQueuedOrInFlight: WritableStreamCloseQueuedOrInFlight }; function AcquireWritableStreamDefaultWriter(stream) { return new WritableStreamDefaultWriter(stream); } function IsWritableStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_writableStreamController')) { return false; } return true; } function IsWritableStreamLocked(stream) { assert(IsWritableStream(stream) === true, 'IsWritableStreamLocked should only be used on known writable streams'); if (stream._writer === undefined) { return false; } return true; } function WritableStreamAbort(stream, reason) { var state = stream._state; if (state === 'closed') { return Promise.resolve(undefined); } if (state === 'errored') { return Promise.reject(stream._storedError); } var error = new TypeError('Requested to abort'); if (stream._pendingAbortRequest !== undefined) { return Promise.reject(error); } assert(state === 'writable' || state === 'erroring', 'state must be writable or erroring'); var wasAlreadyErroring = false; if (state === 'erroring') { wasAlreadyErroring = true; reason = undefined; } var promise = new Promise(function (resolve, reject) { stream._pendingAbortRequest = { _resolve: resolve, _reject: reject, _reason: reason, _wasAlreadyErroring: wasAlreadyErroring }; }); if (wasAlreadyErroring === false) { WritableStreamStartErroring(stream, error); } return promise; } function WritableStreamAddWriteRequest(stream) { assert(IsWritableStreamLocked(stream) === true); assert(stream._state === 'writable'); var promise = new Promise(function (resolve, reject) { var writeRequest = { _resolve: resolve, _reject: reject }; stream._writeRequests.push(writeRequest); }); return promise; } function WritableStreamDealWithRejection(stream, error) { var state = stream._state; if (state === 'writable') { WritableStreamStartErroring(stream, error); return; } assert(state === 'erroring'); WritableStreamFinishErroring(stream); } function WritableStreamStartErroring(stream, reason) { assert(stream._storedError === undefined, 'stream._storedError === undefined'); assert(stream._state === 'writable', 'state must be writable'); var controller = stream._writableStreamController; assert(controller !== undefined, 'controller must not be undefined'); stream._state = 'erroring'; stream._storedError = reason; var writer = stream._writer; if (writer !== undefined) { WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, reason); } if (WritableStreamHasOperationMarkedInFlight(stream) === false && controller._started === true) { WritableStreamFinishErroring(stream); } } function WritableStreamFinishErroring(stream) { assert(stream._state === 'erroring', 'stream._state === erroring'); assert(WritableStreamHasOperationMarkedInFlight(stream) === false, 'WritableStreamHasOperationMarkedInFlight(stream) === false'); stream._state = 'errored'; stream._writableStreamController.__errorSteps(); var storedError = stream._storedError; for (var i = 0; i < stream._writeRequests.length; i++) { var writeRequest = stream._writeRequests[i]; writeRequest._reject(storedError); } stream._writeRequests = []; if (stream._pendingAbortRequest === undefined) { WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var abortRequest = stream._pendingAbortRequest; stream._pendingAbortRequest = undefined; if (abortRequest._wasAlreadyErroring === true) { abortRequest._reject(storedError); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); return; } var promise = stream._writableStreamController.__abortSteps(abortRequest._reason); promise.then(function () { abortRequest._resolve(); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }, function (reason) { abortRequest._reject(reason); WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream); }); } function WritableStreamFinishInFlightWrite(stream) { assert(stream._inFlightWriteRequest !== undefined); stream._inFlightWriteRequest._resolve(undefined); stream._inFlightWriteRequest = undefined; } function WritableStreamFinishInFlightWriteWithError(stream, error) { assert(stream._inFlightWriteRequest !== undefined); stream._inFlightWriteRequest._reject(error); stream._inFlightWriteRequest = undefined; assert(stream._state === 'writable' || stream._state === 'erroring'); WritableStreamDealWithRejection(stream, error); } function WritableStreamFinishInFlightClose(stream) { assert(stream._inFlightCloseRequest !== undefined); stream._inFlightCloseRequest._resolve(undefined); stream._inFlightCloseRequest = undefined; var state = stream._state; assert(state === 'writable' || state === 'erroring'); if (state === 'erroring') { stream._storedError = undefined; if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._resolve(); stream._pendingAbortRequest = undefined; } } stream._state = 'closed'; var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseResolve(writer); } assert(stream._pendingAbortRequest === undefined, 'stream._pendingAbortRequest === undefined'); assert(stream._storedError === undefined, 'stream._storedError === undefined'); } function WritableStreamFinishInFlightCloseWithError(stream, error) { assert(stream._inFlightCloseRequest !== undefined); stream._inFlightCloseRequest._reject(error); stream._inFlightCloseRequest = undefined; assert(stream._state === 'writable' || stream._state === 'erroring'); if (stream._pendingAbortRequest !== undefined) { stream._pendingAbortRequest._reject(error); stream._pendingAbortRequest = undefined; } WritableStreamDealWithRejection(stream, error); } function WritableStreamCloseQueuedOrInFlight(stream) { if (stream._closeRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamHasOperationMarkedInFlight(stream) { if (stream._inFlightWriteRequest === undefined && stream._inFlightCloseRequest === undefined) { return false; } return true; } function WritableStreamMarkCloseRequestInFlight(stream) { assert(stream._inFlightCloseRequest === undefined); assert(stream._closeRequest !== undefined); stream._inFlightCloseRequest = stream._closeRequest; stream._closeRequest = undefined; } function WritableStreamMarkFirstWriteRequestInFlight(stream) { assert(stream._inFlightWriteRequest === undefined, 'there must be no pending write request'); assert(stream._writeRequests.length !== 0, 'writeRequests must not be empty'); stream._inFlightWriteRequest = stream._writeRequests.shift(); } function WritableStreamRejectCloseAndClosedPromiseIfNeeded(stream) { assert(stream._state === 'errored', '_stream_.[[state]] is `"errored"`'); if (stream._closeRequest !== undefined) { assert(stream._inFlightCloseRequest === undefined); stream._closeRequest._reject(stream._storedError); stream._closeRequest = undefined; } var writer = stream._writer; if (writer !== undefined) { defaultWriterClosedPromiseReject(writer, stream._storedError); writer._closedPromise.catch(function () {}); } } function WritableStreamUpdateBackpressure(stream, backpressure) { assert(stream._state === 'writable'); assert(WritableStreamCloseQueuedOrInFlight(stream) === false); var writer = stream._writer; if (writer !== undefined && backpressure !== stream._backpressure) { if (backpressure === true) { defaultWriterReadyPromiseReset(writer); } else { assert(backpressure === false); defaultWriterReadyPromiseResolve(writer); } } stream._backpressure = backpressure; } var WritableStreamDefaultWriter = function () { function WritableStreamDefaultWriter(stream) { _classCallCheck(this, WritableStreamDefaultWriter); if (IsWritableStream(stream) === false) { throw new TypeError('WritableStreamDefaultWriter can only be constructed with a WritableStream instance'); } if (IsWritableStreamLocked(stream) === true) { throw new TypeError('This stream has already been locked for exclusive writing by another writer'); } this._ownerWritableStream = stream; stream._writer = this; var state = stream._state; if (state === 'writable') { if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._backpressure === true) { defaultWriterReadyPromiseInitialize(this); } else { defaultWriterReadyPromiseInitializeAsResolved(this); } defaultWriterClosedPromiseInitialize(this); } else if (state === 'erroring') { defaultWriterReadyPromiseInitializeAsRejected(this, stream._storedError); this._readyPromise.catch(function () {}); defaultWriterClosedPromiseInitialize(this); } else if (state === 'closed') { defaultWriterReadyPromiseInitializeAsResolved(this); defaultWriterClosedPromiseInitializeAsResolved(this); } else { assert(state === 'errored', 'state must be errored'); var storedError = stream._storedError; defaultWriterReadyPromiseInitializeAsRejected(this, storedError); this._readyPromise.catch(function () {}); defaultWriterClosedPromiseInitializeAsRejected(this, storedError); this._closedPromise.catch(function () {}); } } _createClass(WritableStreamDefaultWriter, [{ key: 'abort', value: function abort(reason) { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('abort')); } if (this._ownerWritableStream === undefined) { return Promise.reject(defaultWriterLockException('abort')); } return WritableStreamDefaultWriterAbort(this, reason); } }, { key: 'close', value: function close() { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('close')); } var stream = this._ownerWritableStream; if (stream === undefined) { return Promise.reject(defaultWriterLockException('close')); } if (WritableStreamCloseQueuedOrInFlight(stream) === true) { return Promise.reject(new TypeError('cannot close an already-closing stream')); } return WritableStreamDefaultWriterClose(this); } }, { key: 'releaseLock', value: function releaseLock() { if (IsWritableStreamDefaultWriter(this) === false) { throw defaultWriterBrandCheckException('releaseLock'); } var stream = this._ownerWritableStream; if (stream === undefined) { return; } assert(stream._writer !== undefined); WritableStreamDefaultWriterRelease(this); } }, { key: 'write', value: function write(chunk) { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('write')); } if (this._ownerWritableStream === undefined) { return Promise.reject(defaultWriterLockException('write to')); } return WritableStreamDefaultWriterWrite(this, chunk); } }, { key: 'closed', get: function get() { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('closed')); } return this._closedPromise; } }, { key: 'desiredSize', get: function get() { if (IsWritableStreamDefaultWriter(this) === false) { throw defaultWriterBrandCheckException('desiredSize'); } if (this._ownerWritableStream === undefined) { throw defaultWriterLockException('desiredSize'); } return WritableStreamDefaultWriterGetDesiredSize(this); } }, { key: 'ready', get: function get() { if (IsWritableStreamDefaultWriter(this) === false) { return Promise.reject(defaultWriterBrandCheckException('ready')); } return this._readyPromise; } }]); return WritableStreamDefaultWriter; }(); function IsWritableStreamDefaultWriter(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_ownerWritableStream')) { return false; } return true; } function WritableStreamDefaultWriterAbort(writer, reason) { var stream = writer._ownerWritableStream; assert(stream !== undefined); return WritableStreamAbort(stream, reason); } function WritableStreamDefaultWriterClose(writer) { var stream = writer._ownerWritableStream; assert(stream !== undefined); var state = stream._state; if (state === 'closed' || state === 'errored') { return Promise.reject(new TypeError('The stream (in ' + state + ' state) is not in the writable state and cannot be closed')); } assert(state === 'writable' || state === 'erroring'); assert(WritableStreamCloseQueuedOrInFlight(stream) === false); var promise = new Promise(function (resolve, reject) { var closeRequest = { _resolve: resolve, _reject: reject }; stream._closeRequest = closeRequest; }); if (stream._backpressure === true && state === 'writable') { defaultWriterReadyPromiseResolve(writer); } WritableStreamDefaultControllerClose(stream._writableStreamController); return promise; } function WritableStreamDefaultWriterCloseWithErrorPropagation(writer) { var stream = writer._ownerWritableStream; assert(stream !== undefined); var state = stream._state; if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { return Promise.resolve(); } if (state === 'errored') { return Promise.reject(stream._storedError); } assert(state === 'writable' || state === 'erroring'); return WritableStreamDefaultWriterClose(writer); } function WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, error) { if (writer._closedPromiseState === 'pending') { defaultWriterClosedPromiseReject(writer, error); } else { defaultWriterClosedPromiseResetToRejected(writer, error); } writer._closedPromise.catch(function () {}); } function WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, error) { if (writer._readyPromiseState === 'pending') { defaultWriterReadyPromiseReject(writer, error); } else { defaultWriterReadyPromiseResetToRejected(writer, error); } writer._readyPromise.catch(function () {}); } function WritableStreamDefaultWriterGetDesiredSize(writer) { var stream = writer._ownerWritableStream; var state = stream._state; if (state === 'errored' || state === 'erroring') { return null; } if (state === 'closed') { return 0; } return WritableStreamDefaultControllerGetDesiredSize(stream._writableStreamController); } function WritableStreamDefaultWriterRelease(writer) { var stream = writer._ownerWritableStream; assert(stream !== undefined); assert(stream._writer === writer); var releasedError = new TypeError('Writer was released and can no longer be used to monitor the stream\'s closedness'); WritableStreamDefaultWriterEnsureReadyPromiseRejected(writer, releasedError); WritableStreamDefaultWriterEnsureClosedPromiseRejected(writer, releasedError); stream._writer = undefined; writer._ownerWritableStream = undefined; } function WritableStreamDefaultWriterWrite(writer, chunk) { var stream = writer._ownerWritableStream; assert(stream !== undefined); var controller = stream._writableStreamController; var chunkSize = WritableStreamDefaultControllerGetChunkSize(controller, chunk); if (stream !== writer._ownerWritableStream) { return Promise.reject(defaultWriterLockException('write to')); } var state = stream._state; if (state === 'errored') { return Promise.reject(stream._storedError); } if (WritableStreamCloseQueuedOrInFlight(stream) === true || state === 'closed') { return Promise.reject(new TypeError('The stream is closing or closed and cannot be written to')); } if (state === 'erroring') { return Promise.reject(stream._storedError); } assert(state === 'writable'); var promise = WritableStreamAddWriteRequest(stream); WritableStreamDefaultControllerWrite(controller, chunk, chunkSize); return promise; } var WritableStreamDefaultController = function () { function WritableStreamDefaultController(stream, underlyingSink, size, highWaterMark) { _classCallCheck(this, WritableStreamDefaultController); if (IsWritableStream(stream) === false) { throw new TypeError('WritableStreamDefaultController can only be constructed with a WritableStream instance'); } if (stream._writableStreamController !== undefined) { throw new TypeError('WritableStreamDefaultController instances can only be created by the WritableStream constructor'); } this._controlledWritableStream = stream; this._underlyingSink = underlyingSink; this._queue = undefined; this._queueTotalSize = undefined; ResetQueue(this); this._started = false; var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); this._strategySize = normalizedStrategy.size; this._strategyHWM = normalizedStrategy.highWaterMark; var backpressure = WritableStreamDefaultControllerGetBackpressure(this); WritableStreamUpdateBackpressure(stream, backpressure); } _createClass(WritableStreamDefaultController, [{ key: 'error', value: function error(e) { if (IsWritableStreamDefaultController(this) === false) { throw new TypeError('WritableStreamDefaultController.prototype.error can only be used on a WritableStreamDefaultController'); } var state = this._controlledWritableStream._state; if (state !== 'writable') { return; } WritableStreamDefaultControllerError(this, e); } }, { key: '__abortSteps', value: function __abortSteps(reason) { return PromiseInvokeOrNoop(this._underlyingSink, 'abort', [reason]); } }, { key: '__errorSteps', value: function __errorSteps() { ResetQueue(this); } }, { key: '__startSteps', value: function __startSteps() { var _this = this; var startResult = InvokeOrNoop(this._underlyingSink, 'start', [this]); var stream = this._controlledWritableStream; Promise.resolve(startResult).then(function () { assert(stream._state === 'writable' || stream._state === 'erroring'); _this._started = true; WritableStreamDefaultControllerAdvanceQueueIfNeeded(_this); }, function (r) { assert(stream._state === 'writable' || stream._state === 'erroring'); _this._started = true; WritableStreamDealWithRejection(stream, r); }).catch(rethrowAssertionErrorRejection); } }]); return WritableStreamDefaultController; }(); function WritableStreamDefaultControllerClose(controller) { EnqueueValueWithSize(controller, 'close', 0); WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function WritableStreamDefaultControllerGetChunkSize(controller, chunk) { var strategySize = controller._strategySize; if (strategySize === undefined) { return 1; } try { return strategySize(chunk); } catch (chunkSizeE) { WritableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); return 1; } } function WritableStreamDefaultControllerGetDesiredSize(controller) { return controller._strategyHWM - controller._queueTotalSize; } function WritableStreamDefaultControllerWrite(controller, chunk, chunkSize) { var writeRecord = { chunk: chunk }; try { EnqueueValueWithSize(controller, writeRecord, chunkSize); } catch (enqueueE) { WritableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); return; } var stream = controller._controlledWritableStream; if (WritableStreamCloseQueuedOrInFlight(stream) === false && stream._state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); } function IsWritableStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSink')) { return false; } return true; } function WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller) { var stream = controller._controlledWritableStream; if (controller._started === false) { return; } if (stream._inFlightWriteRequest !== undefined) { return; } var state = stream._state; if (state === 'closed' || state === 'errored') { return; } if (state === 'erroring') { WritableStreamFinishErroring(stream); return; } if (controller._queue.length === 0) { return; } var writeRecord = PeekQueueValue(controller); if (writeRecord === 'close') { WritableStreamDefaultControllerProcessClose(controller); } else { WritableStreamDefaultControllerProcessWrite(controller, writeRecord.chunk); } } function WritableStreamDefaultControllerErrorIfNeeded(controller, error) { if (controller._controlledWritableStream._state === 'writable') { WritableStreamDefaultControllerError(controller, error); } } function WritableStreamDefaultControllerProcessClose(controller) { var stream = controller._controlledWritableStream; WritableStreamMarkCloseRequestInFlight(stream); DequeueValue(controller); assert(controller._queue.length === 0, 'queue must be empty once the final write record is dequeued'); var sinkClosePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'close', []); sinkClosePromise.then(function () { WritableStreamFinishInFlightClose(stream); }, function (reason) { WritableStreamFinishInFlightCloseWithError(stream, reason); }).catch(rethrowAssertionErrorRejection); } function WritableStreamDefaultControllerProcessWrite(controller, chunk) { var stream = controller._controlledWritableStream; WritableStreamMarkFirstWriteRequestInFlight(stream); var sinkWritePromise = PromiseInvokeOrNoop(controller._underlyingSink, 'write', [chunk, controller]); sinkWritePromise.then(function () { WritableStreamFinishInFlightWrite(stream); var state = stream._state; assert(state === 'writable' || state === 'erroring'); DequeueValue(controller); if (WritableStreamCloseQueuedOrInFlight(stream) === false && state === 'writable') { var backpressure = WritableStreamDefaultControllerGetBackpressure(controller); WritableStreamUpdateBackpressure(stream, backpressure); } WritableStreamDefaultControllerAdvanceQueueIfNeeded(controller); }, function (reason) { WritableStreamFinishInFlightWriteWithError(stream, reason); }).catch(rethrowAssertionErrorRejection); } function WritableStreamDefaultControllerGetBackpressure(controller) { var desiredSize = WritableStreamDefaultControllerGetDesiredSize(controller); return desiredSize <= 0; } function WritableStreamDefaultControllerError(controller, error) { var stream = controller._controlledWritableStream; assert(stream._state === 'writable'); WritableStreamStartErroring(stream, error); } function streamBrandCheckException(name) { return new TypeError('WritableStream.prototype.' + name + ' can only be used on a WritableStream'); } function defaultWriterBrandCheckException(name) { return new TypeError('WritableStreamDefaultWriter.prototype.' + name + ' can only be used on a WritableStreamDefaultWriter'); } function defaultWriterLockException(name) { return new TypeError('Cannot ' + name + ' a stream using a released writer'); } function defaultWriterClosedPromiseInitialize(writer) { writer._closedPromise = new Promise(function (resolve, reject) { writer._closedPromise_resolve = resolve; writer._closedPromise_reject = reject; writer._closedPromiseState = 'pending'; }); } function defaultWriterClosedPromiseInitializeAsRejected(writer, reason) { writer._closedPromise = Promise.reject(reason); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseInitializeAsResolved(writer) { writer._closedPromise = Promise.resolve(undefined); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'resolved'; } function defaultWriterClosedPromiseReject(writer, reason) { assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); writer._closedPromise_reject(reason); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseResetToRejected(writer, reason) { assert(writer._closedPromise_resolve === undefined, 'writer._closedPromise_resolve === undefined'); assert(writer._closedPromise_reject === undefined, 'writer._closedPromise_reject === undefined'); assert(writer._closedPromiseState !== 'pending', 'writer._closedPromiseState is not pending'); writer._closedPromise = Promise.reject(reason); writer._closedPromiseState = 'rejected'; } function defaultWriterClosedPromiseResolve(writer) { assert(writer._closedPromise_resolve !== undefined, 'writer._closedPromise_resolve !== undefined'); assert(writer._closedPromise_reject !== undefined, 'writer._closedPromise_reject !== undefined'); assert(writer._closedPromiseState === 'pending', 'writer._closedPromiseState is pending'); writer._closedPromise_resolve(undefined); writer._closedPromise_resolve = undefined; writer._closedPromise_reject = undefined; writer._closedPromiseState = 'resolved'; } function defaultWriterReadyPromiseInitialize(writer) { writer._readyPromise = new Promise(function (resolve, reject) { writer._readyPromise_resolve = resolve; writer._readyPromise_reject = reject; }); writer._readyPromiseState = 'pending'; } function defaultWriterReadyPromiseInitializeAsRejected(writer, reason) { writer._readyPromise = Promise.reject(reason); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseInitializeAsResolved(writer) { writer._readyPromise = Promise.resolve(undefined); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'fulfilled'; } function defaultWriterReadyPromiseReject(writer, reason) { assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); writer._readyPromise_reject(reason); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseReset(writer) { assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); writer._readyPromise = new Promise(function (resolve, reject) { writer._readyPromise_resolve = resolve; writer._readyPromise_reject = reject; }); writer._readyPromiseState = 'pending'; } function defaultWriterReadyPromiseResetToRejected(writer, reason) { assert(writer._readyPromise_resolve === undefined, 'writer._readyPromise_resolve === undefined'); assert(writer._readyPromise_reject === undefined, 'writer._readyPromise_reject === undefined'); writer._readyPromise = Promise.reject(reason); writer._readyPromiseState = 'rejected'; } function defaultWriterReadyPromiseResolve(writer) { assert(writer._readyPromise_resolve !== undefined, 'writer._readyPromise_resolve !== undefined'); assert(writer._readyPromise_reject !== undefined, 'writer._readyPromise_reject !== undefined'); writer._readyPromise_resolve(undefined); writer._readyPromise_resolve = undefined; writer._readyPromise_reject = undefined; writer._readyPromiseState = 'fulfilled'; } }, function (module, exports, __w_extracthighlights_require__) { var _require = __w_extracthighlights_require__(0), IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber; var _require2 = __w_extracthighlights_require__(1), assert = _require2.assert; exports.DequeueValue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: DequeueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); assert(container._queue.length > 0, 'Spec-level failure: should never dequeue from an empty queue.'); var pair = container._queue.shift(); container._queueTotalSize -= pair.size; if (container._queueTotalSize < 0) { container._queueTotalSize = 0; } return pair.value; }; exports.EnqueueValueWithSize = function (container, value, size) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: EnqueueValueWithSize should only be used on containers with [[queue]] and ' + '[[queueTotalSize]].'); size = Number(size); if (!IsFiniteNonNegativeNumber(size)) { throw new RangeError('Size must be a finite, non-NaN, non-negative number.'); } container._queue.push({ value: value, size: size }); container._queueTotalSize += size; }; exports.PeekQueueValue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: PeekQueueValue should only be used on containers with [[queue]] and [[queueTotalSize]].'); assert(container._queue.length > 0, 'Spec-level failure: should never peek at an empty queue.'); var pair = container._queue[0]; return pair.value; }; exports.ResetQueue = function (container) { assert('_queue' in container && '_queueTotalSize' in container, 'Spec-level failure: ResetQueue should only be used on containers with [[queue]] and [[queueTotalSize]].'); container._queue = []; container._queueTotalSize = 0; }; }, function (module, exports, __w_extracthighlights_require__) { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var _require = __w_extracthighlights_require__(0), ArrayBufferCopy = _require.ArrayBufferCopy, CreateIterResultObject = _require.CreateIterResultObject, IsFiniteNonNegativeNumber = _require.IsFiniteNonNegativeNumber, InvokeOrNoop = _require.InvokeOrNoop, PromiseInvokeOrNoop = _require.PromiseInvokeOrNoop, TransferArrayBuffer = _require.TransferArrayBuffer, ValidateAndNormalizeQueuingStrategy = _require.ValidateAndNormalizeQueuingStrategy, ValidateAndNormalizeHighWaterMark = _require.ValidateAndNormalizeHighWaterMark; var _require2 = __w_extracthighlights_require__(0), createArrayFromList = _require2.createArrayFromList, createDataProperty = _require2.createDataProperty, typeIsObject = _require2.typeIsObject; var _require3 = __w_extracthighlights_require__(1), assert = _require3.assert, rethrowAssertionErrorRejection = _require3.rethrowAssertionErrorRejection; var _require4 = __w_extracthighlights_require__(3), DequeueValue = _require4.DequeueValue, EnqueueValueWithSize = _require4.EnqueueValueWithSize, ResetQueue = _require4.ResetQueue; var _require5 = __w_extracthighlights_require__(2), AcquireWritableStreamDefaultWriter = _require5.AcquireWritableStreamDefaultWriter, IsWritableStream = _require5.IsWritableStream, IsWritableStreamLocked = _require5.IsWritableStreamLocked, WritableStreamAbort = _require5.WritableStreamAbort, WritableStreamDefaultWriterCloseWithErrorPropagation = _require5.WritableStreamDefaultWriterCloseWithErrorPropagation, WritableStreamDefaultWriterRelease = _require5.WritableStreamDefaultWriterRelease, WritableStreamDefaultWriterWrite = _require5.WritableStreamDefaultWriterWrite, WritableStreamCloseQueuedOrInFlight = _require5.WritableStreamCloseQueuedOrInFlight; var ReadableStream = function () { function ReadableStream() { var underlyingSource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, size = _ref.size, highWaterMark = _ref.highWaterMark; _classCallCheck(this, ReadableStream); this._state = 'readable'; this._reader = undefined; this._storedError = undefined; this._disturbed = false; this._readableStreamController = undefined; var type = underlyingSource.type; var typeString = String(type); if (typeString === 'bytes') { if (highWaterMark === undefined) { highWaterMark = 0; } this._readableStreamController = new ReadableByteStreamController(this, underlyingSource, highWaterMark); } else if (type === undefined) { if (highWaterMark === undefined) { highWaterMark = 1; } this._readableStreamController = new ReadableStreamDefaultController(this, underlyingSource, size, highWaterMark); } else { throw new RangeError('Invalid type is specified'); } } _createClass(ReadableStream, [{ key: 'cancel', value: function cancel(reason) { if (IsReadableStream(this) === false) { return Promise.reject(streamBrandCheckException('cancel')); } if (IsReadableStreamLocked(this) === true) { return Promise.reject(new TypeError('Cannot cancel a stream that already has a reader')); } return ReadableStreamCancel(this, reason); } }, { key: 'getReader', value: function getReader() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, mode = _ref2.mode; if (IsReadableStream(this) === false) { throw streamBrandCheckException('getReader'); } if (mode === undefined) { return AcquireReadableStreamDefaultReader(this); } mode = String(mode); if (mode === 'byob') { return AcquireReadableStreamBYOBReader(this); } throw new RangeError('Invalid mode is specified'); } }, { key: 'pipeThrough', value: function pipeThrough(_ref3, options) { var writable = _ref3.writable, readable = _ref3.readable; var promise = this.pipeTo(writable, options); ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise); return readable; } }, { key: 'pipeTo', value: function pipeTo(dest) { var _this = this; var _ref4 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, preventClose = _ref4.preventClose, preventAbort = _ref4.preventAbort, preventCancel = _ref4.preventCancel; if (IsReadableStream(this) === false) { return Promise.reject(streamBrandCheckException('pipeTo')); } if (IsWritableStream(dest) === false) { return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo\'s first argument must be a WritableStream')); } preventClose = Boolean(preventClose); preventAbort = Boolean(preventAbort); preventCancel = Boolean(preventCancel); if (IsReadableStreamLocked(this) === true) { return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked ReadableStream')); } if (IsWritableStreamLocked(dest) === true) { return Promise.reject(new TypeError('ReadableStream.prototype.pipeTo cannot be used on a locked WritableStream')); } var reader = AcquireReadableStreamDefaultReader(this); var writer = AcquireWritableStreamDefaultWriter(dest); var shuttingDown = false; var currentWrite = Promise.resolve(); return new Promise(function (resolve, reject) { function pipeLoop() { currentWrite = Promise.resolve(); if (shuttingDown === true) { return Promise.resolve(); } return writer._readyPromise.then(function () { return ReadableStreamDefaultReaderRead(reader).then(function (_ref5) { var value = _ref5.value, done = _ref5.done; if (done === true) { return; } currentWrite = WritableStreamDefaultWriterWrite(writer, value).catch(function () {}); }); }).then(pipeLoop); } isOrBecomesErrored(_this, reader._closedPromise, function (storedError) { if (preventAbort === false) { shutdownWithAction(function () { return WritableStreamAbort(dest, storedError); }, true, storedError); } else { shutdown(true, storedError); } }); isOrBecomesErrored(dest, writer._closedPromise, function (storedError) { if (preventCancel === false) { shutdownWithAction(function () { return ReadableStreamCancel(_this, storedError); }, true, storedError); } else { shutdown(true, storedError); } }); isOrBecomesClosed(_this, reader._closedPromise, function () { if (preventClose === false) { shutdownWithAction(function () { return WritableStreamDefaultWriterCloseWithErrorPropagation(writer); }); } else { shutdown(); } }); if (WritableStreamCloseQueuedOrInFlight(dest) === true || dest._state === 'closed') { var destClosed = new TypeError('the destination writable stream closed before all data could be piped to it'); if (preventCancel === false) { shutdownWithAction(function () { return ReadableStreamCancel(_this, destClosed); }, true, destClosed); } else { shutdown(true, destClosed); } } pipeLoop().catch(function (err) { currentWrite = Promise.resolve(); rethrowAssertionErrorRejection(err); }); function waitForWritesToFinish() { var oldCurrentWrite = currentWrite; return currentWrite.then(function () { return oldCurrentWrite !== currentWrite ? waitForWritesToFinish() : undefined; }); } function isOrBecomesErrored(stream, promise, action) { if (stream._state === 'errored') { action(stream._storedError); } else { promise.catch(action).catch(rethrowAssertionErrorRejection); } } function isOrBecomesClosed(stream, promise, action) { if (stream._state === 'closed') { action(); } else { promise.then(action).catch(rethrowAssertionErrorRejection); } } function shutdownWithAction(action, originalIsError, originalError) { if (shuttingDown === true) { return; } shuttingDown = true; if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) { waitForWritesToFinish().then(doTheRest); } else { doTheRest(); } function doTheRest() { action().then(function () { return finalize(originalIsError, originalError); }, function (newError) { return finalize(true, newError); }).catch(rethrowAssertionErrorRejection); } } function shutdown(isError, error) { if (shuttingDown === true) { return; } shuttingDown = true; if (dest._state === 'writable' && WritableStreamCloseQueuedOrInFlight(dest) === false) { waitForWritesToFinish().then(function () { return finalize(isError, error); }).catch(rethrowAssertionErrorRejection); } else { finalize(isError, error); } } function finalize(isError, error) { WritableStreamDefaultWriterRelease(writer); ReadableStreamReaderGenericRelease(reader); if (isError) { reject(error); } else { resolve(undefined); } } }); } }, { key: 'tee', value: function tee() { if (IsReadableStream(this) === false) { throw streamBrandCheckException('tee'); } var branches = ReadableStreamTee(this, false); return createArrayFromList(branches); } }, { key: 'locked', get: function get() { if (IsReadableStream(this) === false) { throw streamBrandCheckException('locked'); } return IsReadableStreamLocked(this); } }]); return ReadableStream; }(); module.exports = { ReadableStream: ReadableStream, IsReadableStreamDisturbed: IsReadableStreamDisturbed, ReadableStreamDefaultControllerClose: ReadableStreamDefaultControllerClose, ReadableStreamDefaultControllerEnqueue: ReadableStreamDefaultControllerEnqueue, ReadableStreamDefaultControllerError: ReadableStreamDefaultControllerError, ReadableStreamDefaultControllerGetDesiredSize: ReadableStreamDefaultControllerGetDesiredSize }; function AcquireReadableStreamBYOBReader(stream) { return new ReadableStreamBYOBReader(stream); } function AcquireReadableStreamDefaultReader(stream) { return new ReadableStreamDefaultReader(stream); } function IsReadableStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readableStreamController')) { return false; } return true; } function IsReadableStreamDisturbed(stream) { assert(IsReadableStream(stream) === true, 'IsReadableStreamDisturbed should only be used on known readable streams'); return stream._disturbed; } function IsReadableStreamLocked(stream) { assert(IsReadableStream(stream) === true, 'IsReadableStreamLocked should only be used on known readable streams'); if (stream._reader === undefined) { return false; } return true; } function ReadableStreamTee(stream, cloneForBranch2) { assert(IsReadableStream(stream) === true); assert(typeof cloneForBranch2 === 'boolean'); var reader = AcquireReadableStreamDefaultReader(stream); var teeState = { closedOrErrored: false, canceled1: false, canceled2: false, reason1: undefined, reason2: undefined }; teeState.promise = new Promise(function (resolve) { teeState._resolve = resolve; }); var pull = create_ReadableStreamTeePullFunction(); pull._reader = reader; pull._teeState = teeState; pull._cloneForBranch2 = cloneForBranch2; var cancel1 = create_ReadableStreamTeeBranch1CancelFunction(); cancel1._stream = stream; cancel1._teeState = teeState; var cancel2 = create_ReadableStreamTeeBranch2CancelFunction(); cancel2._stream = stream; cancel2._teeState = teeState; var underlyingSource1 = Object.create(Object.prototype); createDataProperty(underlyingSource1, 'pull', pull); createDataProperty(underlyingSource1, 'cancel', cancel1); var branch1Stream = new ReadableStream(underlyingSource1); var underlyingSource2 = Object.create(Object.prototype); createDataProperty(underlyingSource2, 'pull', pull); createDataProperty(underlyingSource2, 'cancel', cancel2); var branch2Stream = new ReadableStream(underlyingSource2); pull._branch1 = branch1Stream._readableStreamController; pull._branch2 = branch2Stream._readableStreamController; reader._closedPromise.catch(function (r) { if (teeState.closedOrErrored === true) { return; } ReadableStreamDefaultControllerError(pull._branch1, r); ReadableStreamDefaultControllerError(pull._branch2, r); teeState.closedOrErrored = true; }); return [branch1Stream, branch2Stream]; } function create_ReadableStreamTeePullFunction() { function f() { var reader = f._reader, branch1 = f._branch1, branch2 = f._branch2, teeState = f._teeState; return ReadableStreamDefaultReaderRead(reader).then(function (result) { assert(typeIsObject(result)); var value = result.value; var done = result.done; assert(typeof done === 'boolean'); if (done === true && teeState.closedOrErrored === false) { if (teeState.canceled1 === false) { ReadableStreamDefaultControllerClose(branch1); } if (teeState.canceled2 === false) { ReadableStreamDefaultControllerClose(branch2); } teeState.closedOrErrored = true; } if (teeState.closedOrErrored === true) { return; } var value1 = value; var value2 = value; if (teeState.canceled1 === false) { ReadableStreamDefaultControllerEnqueue(branch1, value1); } if (teeState.canceled2 === false) { ReadableStreamDefaultControllerEnqueue(branch2, value2); } }); } return f; } function create_ReadableStreamTeeBranch1CancelFunction() { function f(reason) { var stream = f._stream, teeState = f._teeState; teeState.canceled1 = true; teeState.reason1 = reason; if (teeState.canceled2 === true) { var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]); var cancelResult = ReadableStreamCancel(stream, compositeReason); teeState._resolve(cancelResult); } return teeState.promise; } return f; } function create_ReadableStreamTeeBranch2CancelFunction() { function f(reason) { var stream = f._stream, teeState = f._teeState; teeState.canceled2 = true; teeState.reason2 = reason; if (teeState.canceled1 === true) { var compositeReason = createArrayFromList([teeState.reason1, teeState.reason2]); var cancelResult = ReadableStreamCancel(stream, compositeReason); teeState._resolve(cancelResult); } return teeState.promise; } return f; } function ReadableStreamAddReadIntoRequest(stream) { assert(IsReadableStreamBYOBReader(stream._reader) === true); assert(stream._state === 'readable' || stream._state === 'closed'); var promise = new Promise(function (resolve, reject) { var readIntoRequest = { _resolve: resolve, _reject: reject }; stream._reader._readIntoRequests.push(readIntoRequest); }); return promise; } function ReadableStreamAddReadRequest(stream) { assert(IsReadableStreamDefaultReader(stream._reader) === true); assert(stream._state === 'readable'); var promise = new Promise(function (resolve, reject) { var readRequest = { _resolve: resolve, _reject: reject }; stream._reader._readRequests.push(readRequest); }); return promise; } function ReadableStreamCancel(stream, reason) { stream._disturbed = true; if (stream._state === 'closed') { return Promise.resolve(undefined); } if (stream._state === 'errored') { return Promise.reject(stream._storedError); } ReadableStreamClose(stream); var sourceCancelPromise = stream._readableStreamController.__cancelSteps(reason); return sourceCancelPromise.then(function () { return undefined; }); } function ReadableStreamClose(stream) { assert(stream._state === 'readable'); stream._state = 'closed'; var reader = stream._reader; if (reader === undefined) { return undefined; } if (IsReadableStreamDefaultReader(reader) === true) { for (var i = 0; i < reader._readRequests.length; i++) { var _resolve = reader._readRequests[i]._resolve; _resolve(CreateIterResultObject(undefined, true)); } reader._readRequests = []; } defaultReaderClosedPromiseResolve(reader); return undefined; } function ReadableStreamError(stream, e) { assert(IsReadableStream(stream) === true, 'stream must be ReadableStream'); assert(stream._state === 'readable', 'state must be readable'); stream._state = 'errored'; stream._storedError = e; var reader = stream._reader; if (reader === undefined) { return undefined; } if (IsReadableStreamDefaultReader(reader) === true) { for (var i = 0; i < reader._readRequests.length; i++) { var readRequest = reader._readRequests[i]; readRequest._reject(e); } reader._readRequests = []; } else { assert(IsReadableStreamBYOBReader(reader), 'reader must be ReadableStreamBYOBReader'); for (var _i = 0; _i < reader._readIntoRequests.length; _i++) { var readIntoRequest = reader._readIntoRequests[_i]; readIntoRequest._reject(e); } reader._readIntoRequests = []; } defaultReaderClosedPromiseReject(reader, e); reader._closedPromise.catch(function () {}); } function ReadableStreamFulfillReadIntoRequest(stream, chunk, done) { var reader = stream._reader; assert(reader._readIntoRequests.length > 0); var readIntoRequest = reader._readIntoRequests.shift(); readIntoRequest._resolve(CreateIterResultObject(chunk, done)); } function ReadableStreamFulfillReadRequest(stream, chunk, done) { var reader = stream._reader; assert(reader._readRequests.length > 0); var readRequest = reader._readRequests.shift(); readRequest._resolve(CreateIterResultObject(chunk, done)); } function ReadableStreamGetNumReadIntoRequests(stream) { return stream._reader._readIntoRequests.length; } function ReadableStreamGetNumReadRequests(stream) { return stream._reader._readRequests.length; } function ReadableStreamHasBYOBReader(stream) { var reader = stream._reader; if (reader === undefined) { return false; } if (IsReadableStreamBYOBReader(reader) === false) { return false; } return true; } function ReadableStreamHasDefaultReader(stream) { var reader = stream._reader; if (reader === undefined) { return false; } if (IsReadableStreamDefaultReader(reader) === false) { return false; } return true; } var ReadableStreamDefaultReader = function () { function ReadableStreamDefaultReader(stream) { _classCallCheck(this, ReadableStreamDefaultReader); if (IsReadableStream(stream) === false) { throw new TypeError('ReadableStreamDefaultReader can only be constructed with a ReadableStream instance'); } if (IsReadableStreamLocked(stream) === true) { throw new TypeError('This stream has already been locked for exclusive reading by another reader'); } ReadableStreamReaderGenericInitialize(this, stream); this._readRequests = []; } _createClass(ReadableStreamDefaultReader, [{ key: 'cancel', value: function cancel(reason) { if (IsReadableStreamDefaultReader(this) === false) { return Promise.reject(defaultReaderBrandCheckException('cancel')); } if (this._ownerReadableStream === undefined) { return Promise.reject(readerLockException('cancel')); } return ReadableStreamReaderGenericCancel(this, reason); } }, { key: 'read', value: function read() { if (IsReadableStreamDefaultReader(this) === false) { return Promise.reject(defaultReaderBrandCheckException('read')); } if (this._ownerReadableStream === undefined) { return Promise.reject(readerLockException('read from')); } return ReadableStreamDefaultReaderRead(this); } }, { key: 'releaseLock', value: function releaseLock() { if (IsReadableStreamDefaultReader(this) === false) { throw defaultReaderBrandCheckException('releaseLock'); } if (this._ownerReadableStream === undefined) { return; } if (this._readRequests.length > 0) { throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); } ReadableStreamReaderGenericRelease(this); } }, { key: 'closed', get: function get() { if (IsReadableStreamDefaultReader(this) === false) { return Promise.reject(defaultReaderBrandCheckException('closed')); } return this._closedPromise; } }]); return ReadableStreamDefaultReader; }(); var ReadableStreamBYOBReader = function () { function ReadableStreamBYOBReader(stream) { _classCallCheck(this, ReadableStreamBYOBReader); if (!IsReadableStream(stream)) { throw new TypeError('ReadableStreamBYOBReader can only be constructed with a ReadableStream instance given a ' + 'byte source'); } if (IsReadableByteStreamController(stream._readableStreamController) === false) { throw new TypeError('Cannot construct a ReadableStreamBYOBReader for a stream not constructed with a byte ' + 'source'); } if (IsReadableStreamLocked(stream)) { throw new TypeError('This stream has already been locked for exclusive reading by another reader'); } ReadableStreamReaderGenericInitialize(this, stream); this._readIntoRequests = []; } _createClass(ReadableStreamBYOBReader, [{ key: 'cancel', value: function cancel(reason) { if (!IsReadableStreamBYOBReader(this)) { return Promise.reject(byobReaderBrandCheckException('cancel')); } if (this._ownerReadableStream === undefined) { return Promise.reject(readerLockException('cancel')); } return ReadableStreamReaderGenericCancel(this, reason); } }, { key: 'read', value: function read(view) { if (!IsReadableStreamBYOBReader(this)) { return Promise.reject(byobReaderBrandCheckException('read')); } if (this._ownerReadableStream === undefined) { return Promise.reject(readerLockException('read from')); } if (!ArrayBuffer.isView(view)) { return Promise.reject(new TypeError('view must be an array buffer view')); } if (view.byteLength === 0) { return Promise.reject(new TypeError('view must have non-zero byteLength')); } return ReadableStreamBYOBReaderRead(this, view); } }, { key: 'releaseLock', value: function releaseLock() { if (!IsReadableStreamBYOBReader(this)) { throw byobReaderBrandCheckException('releaseLock'); } if (this._ownerReadableStream === undefined) { return; } if (this._readIntoRequests.length > 0) { throw new TypeError('Tried to release a reader lock when that reader has pending read() calls un-settled'); } ReadableStreamReaderGenericRelease(this); } }, { key: 'closed', get: function get() { if (!IsReadableStreamBYOBReader(this)) { return Promise.reject(byobReaderBrandCheckException('closed')); } return this._closedPromise; } }]); return ReadableStreamBYOBReader; }(); function IsReadableStreamBYOBReader(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readIntoRequests')) { return false; } return true; } function IsReadableStreamDefaultReader(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_readRequests')) { return false; } return true; } function ReadableStreamReaderGenericInitialize(reader, stream) { reader._ownerReadableStream = stream; stream._reader = reader; if (stream._state === 'readable') { defaultReaderClosedPromiseInitialize(reader); } else if (stream._state === 'closed') { defaultReaderClosedPromiseInitializeAsResolved(reader); } else { assert(stream._state === 'errored', 'state must be errored'); defaultReaderClosedPromiseInitializeAsRejected(reader, stream._storedError); reader._closedPromise.catch(function () {}); } } function ReadableStreamReaderGenericCancel(reader, reason) { var stream = reader._ownerReadableStream; assert(stream !== undefined); return ReadableStreamCancel(stream, reason); } function ReadableStreamReaderGenericRelease(reader) { assert(reader._ownerReadableStream !== undefined); assert(reader._ownerReadableStream._reader === reader); if (reader._ownerReadableStream._state === 'readable') { defaultReaderClosedPromiseReject(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness')); } else { defaultReaderClosedPromiseResetToRejected(reader, new TypeError('Reader was released and can no longer be used to monitor the stream\'s closedness')); } reader._closedPromise.catch(function () {}); reader._ownerReadableStream._reader = undefined; reader._ownerReadableStream = undefined; } function ReadableStreamBYOBReaderRead(reader, view) { var stream = reader._ownerReadableStream; assert(stream !== undefined); stream._disturbed = true; if (stream._state === 'errored') { return Promise.reject(stream._storedError); } return ReadableByteStreamControllerPullInto(stream._readableStreamController, view); } function ReadableStreamDefaultReaderRead(reader) { var stream = reader._ownerReadableStream; assert(stream !== undefined); stream._disturbed = true; if (stream._state === 'closed') { return Promise.resolve(CreateIterResultObject(undefined, true)); } if (stream._state === 'errored') { return Promise.reject(stream._storedError); } assert(stream._state === 'readable'); return stream._readableStreamController.__pullSteps(); } var ReadableStreamDefaultController = function () { function ReadableStreamDefaultController(stream, underlyingSource, size, highWaterMark) { _classCallCheck(this, ReadableStreamDefaultController); if (IsReadableStream(stream) === false) { throw new TypeError('ReadableStreamDefaultController can only be constructed with a ReadableStream instance'); } if (stream._readableStreamController !== undefined) { throw new TypeError('ReadableStreamDefaultController instances can only be created by the ReadableStream constructor'); } this._controlledReadableStream = stream; this._underlyingSource = underlyingSource; this._queue = undefined; this._queueTotalSize = undefined; ResetQueue(this); this._started = false; this._closeRequested = false; this._pullAgain = false; this._pulling = false; var normalizedStrategy = ValidateAndNormalizeQueuingStrategy(size, highWaterMark); this._strategySize = normalizedStrategy.size; this._strategyHWM = normalizedStrategy.highWaterMark; var controller = this; var startResult = InvokeOrNoop(underlyingSource, 'start', [this]); Promise.resolve(startResult).then(function () { controller._started = true; assert(controller._pulling === false); assert(controller._pullAgain === false); ReadableStreamDefaultControllerCallPullIfNeeded(controller); }, function (r) { ReadableStreamDefaultControllerErrorIfNeeded(controller, r); }).catch(rethrowAssertionErrorRejection); } _createClass(ReadableStreamDefaultController, [{ key: 'close', value: function close() { if (IsReadableStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('close'); } if (this._closeRequested === true) { throw new TypeError('The stream has already been closed; do not close it again!'); } var state = this._controlledReadableStream._state; if (state !== 'readable') { throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed'); } ReadableStreamDefaultControllerClose(this); } }, { key: 'enqueue', value: function enqueue(chunk) { if (IsReadableStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('enqueue'); } if (this._closeRequested === true) { throw new TypeError('stream is closed or draining'); } var state = this._controlledReadableStream._state; if (state !== 'readable') { throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to'); } return ReadableStreamDefaultControllerEnqueue(this, chunk); } }, { key: 'error', value: function error(e) { if (IsReadableStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('error'); } var stream = this._controlledReadableStream; if (stream._state !== 'readable') { throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored'); } ReadableStreamDefaultControllerError(this, e); } }, { key: '__cancelSteps', value: function __cancelSteps(reason) { ResetQueue(this); return PromiseInvokeOrNoop(this._underlyingSource, 'cancel', [reason]); } }, { key: '__pullSteps', value: function __pullSteps() { var stream = this._controlledReadableStream; if (this._queue.length > 0) { var chunk = DequeueValue(this); if (this._closeRequested === true && this._queue.length === 0) { ReadableStreamClose(stream); } else { ReadableStreamDefaultControllerCallPullIfNeeded(this); } return Promise.resolve(CreateIterResultObject(chunk, false)); } var pendingPromise = ReadableStreamAddReadRequest(stream); ReadableStreamDefaultControllerCallPullIfNeeded(this); return pendingPromise; } }, { key: 'desiredSize', get: function get() { if (IsReadableStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('desiredSize'); } return ReadableStreamDefaultControllerGetDesiredSize(this); } }]); return ReadableStreamDefaultController; }(); function IsReadableStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_underlyingSource')) { return false; } return true; } function ReadableStreamDefaultControllerCallPullIfNeeded(controller) { var shouldPull = ReadableStreamDefaultControllerShouldCallPull(controller); if (shouldPull === false) { return undefined; } if (controller._pulling === true) { controller._pullAgain = true; return undefined; } assert(controller._pullAgain === false); controller._pulling = true; var pullPromise = PromiseInvokeOrNoop(controller._underlyingSource, 'pull', [controller]); pullPromise.then(function () { controller._pulling = false; if (controller._pullAgain === true) { controller._pullAgain = false; return ReadableStreamDefaultControllerCallPullIfNeeded(controller); } return undefined; }, function (e) { ReadableStreamDefaultControllerErrorIfNeeded(controller, e); }).catch(rethrowAssertionErrorRejection); return undefined; } function ReadableStreamDefaultControllerShouldCallPull(controller) { var stream = controller._controlledReadableStream; if (stream._state === 'closed' || stream._state === 'errored') { return false; } if (controller._closeRequested === true) { return false; } if (controller._started === false) { return false; } if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); if (desiredSize > 0) { return true; } return false; } function ReadableStreamDefaultControllerClose(controller) { var stream = controller._controlledReadableStream; assert(controller._closeRequested === false); assert(stream._state === 'readable'); controller._closeRequested = true; if (controller._queue.length === 0) { ReadableStreamClose(stream); } } function ReadableStreamDefaultControllerEnqueue(controller, chunk) { var stream = controller._controlledReadableStream; assert(controller._closeRequested === false); assert(stream._state === 'readable'); if (IsReadableStreamLocked(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { ReadableStreamFulfillReadRequest(stream, chunk, false); } else { var chunkSize = 1; if (controller._strategySize !== undefined) { var strategySize = controller._strategySize; try { chunkSize = strategySize(chunk); } catch (chunkSizeE) { ReadableStreamDefaultControllerErrorIfNeeded(controller, chunkSizeE); throw chunkSizeE; } } try { EnqueueValueWithSize(controller, chunk, chunkSize); } catch (enqueueE) { ReadableStreamDefaultControllerErrorIfNeeded(controller, enqueueE); throw enqueueE; } } ReadableStreamDefaultControllerCallPullIfNeeded(controller); return undefined; } function ReadableStreamDefaultControllerError(controller, e) { var stream = controller._controlledReadableStream; assert(stream._state === 'readable'); ResetQueue(controller); ReadableStreamError(stream, e); } function ReadableStreamDefaultControllerErrorIfNeeded(controller, e) { if (controller._controlledReadableStream._state === 'readable') { ReadableStreamDefaultControllerError(controller, e); } } function ReadableStreamDefaultControllerGetDesiredSize(controller) { var stream = controller._controlledReadableStream; var state = stream._state; if (state === 'errored') { return null; } if (state === 'closed') { return 0; } return controller._strategyHWM - controller._queueTotalSize; } var ReadableStreamBYOBRequest = function () { function ReadableStreamBYOBRequest(controller, view) { _classCallCheck(this, ReadableStreamBYOBRequest); this._associatedReadableByteStreamController = controller; this._view = view; } _createClass(ReadableStreamBYOBRequest, [{ key: 'respond', value: function respond(bytesWritten) { if (IsReadableStreamBYOBRequest(this) === false) { throw byobRequestBrandCheckException('respond'); } if (this._associatedReadableByteStreamController === undefined) { throw new TypeError('This BYOB request has been invalidated'); } ReadableByteStreamControllerRespond(this._associatedReadableByteStreamController, bytesWritten); } }, { key: 'respondWithNewView', value: function respondWithNewView(view) { if (IsReadableStreamBYOBRequest(this) === false) { throw byobRequestBrandCheckException('respond'); } if (this._associatedReadableByteStreamController === undefined) { throw new TypeError('This BYOB request has been invalidated'); } if (!ArrayBuffer.isView(view)) { throw new TypeError('You can only respond with array buffer views'); } ReadableByteStreamControllerRespondWithNewView(this._associatedReadableByteStreamController, view); } }, { key: 'view', get: function get() { return this._view; } }]); return ReadableStreamBYOBRequest; }(); var ReadableByteStreamController = function () { function ReadableByteStreamController(stream, underlyingByteSource, highWaterMark) { _classCallCheck(this, ReadableByteStreamController); if (IsReadableStream(stream) === false) { throw new TypeError('ReadableByteStreamController can only be constructed with a ReadableStream instance given ' + 'a byte source'); } if (stream._readableStreamController !== undefined) { throw new TypeError('ReadableByteStreamController instances can only be created by the ReadableStream constructor given a byte ' + 'source'); } this._controlledReadableStream = stream; this._underlyingByteSource = underlyingByteSource; this._pullAgain = false; this._pulling = false; ReadableByteStreamControllerClearPendingPullIntos(this); this._queue = this._queueTotalSize = undefined; ResetQueue(this); this._closeRequested = false; this._started = false; this._strategyHWM = ValidateAndNormalizeHighWaterMark(highWaterMark); var autoAllocateChunkSize = underlyingByteSource.autoAllocateChunkSize; if (autoAllocateChunkSize !== undefined) { if (Number.isInteger(autoAllocateChunkSize) === false || autoAllocateChunkSize <= 0) { throw new RangeError('autoAllocateChunkSize must be a positive integer'); } } this._autoAllocateChunkSize = autoAllocateChunkSize; this._pendingPullIntos = []; var controller = this; var startResult = InvokeOrNoop(underlyingByteSource, 'start', [this]); Promise.resolve(startResult).then(function () { controller._started = true; assert(controller._pulling === false); assert(controller._pullAgain === false); ReadableByteStreamControllerCallPullIfNeeded(controller); }, function (r) { if (stream._state === 'readable') { ReadableByteStreamControllerError(controller, r); } }).catch(rethrowAssertionErrorRejection); } _createClass(ReadableByteStreamController, [{ key: 'close', value: function close() { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('close'); } if (this._closeRequested === true) { throw new TypeError('The stream has already been closed; do not close it again!'); } var state = this._controlledReadableStream._state; if (state !== 'readable') { throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be closed'); } ReadableByteStreamControllerClose(this); } }, { key: 'enqueue', value: function enqueue(chunk) { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('enqueue'); } if (this._closeRequested === true) { throw new TypeError('stream is closed or draining'); } var state = this._controlledReadableStream._state; if (state !== 'readable') { throw new TypeError('The stream (in ' + state + ' state) is not in the readable state and cannot be enqueued to'); } if (!ArrayBuffer.isView(chunk)) { throw new TypeError('You can only enqueue array buffer views when using a ReadableByteStreamController'); } ReadableByteStreamControllerEnqueue(this, chunk); } }, { key: 'error', value: function error(e) { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('error'); } var stream = this._controlledReadableStream; if (stream._state !== 'readable') { throw new TypeError('The stream is ' + stream._state + ' and so cannot be errored'); } ReadableByteStreamControllerError(this, e); } }, { key: '__cancelSteps', value: function __cancelSteps(reason) { if (this._pendingPullIntos.length > 0) { var firstDescriptor = this._pendingPullIntos[0]; firstDescriptor.bytesFilled = 0; } ResetQueue(this); return PromiseInvokeOrNoop(this._underlyingByteSource, 'cancel', [reason]); } }, { key: '__pullSteps', value: function __pullSteps() { var stream = this._controlledReadableStream; assert(ReadableStreamHasDefaultReader(stream) === true); if (this._queueTotalSize > 0) { assert(ReadableStreamGetNumReadRequests(stream) === 0); var entry = this._queue.shift(); this._queueTotalSize -= entry.byteLength; ReadableByteStreamControllerHandleQueueDrain(this); var view = void 0; try { view = new Uint8Array(entry.buffer, entry.byteOffset, entry.byteLength); } catch (viewE) { return Promise.reject(viewE); } return Promise.resolve(CreateIterResultObject(view, false)); } var autoAllocateChunkSize = this._autoAllocateChunkSize; if (autoAllocateChunkSize !== undefined) { var buffer = void 0; try { buffer = new ArrayBuffer(autoAllocateChunkSize); } catch (bufferE) { return Promise.reject(bufferE); } var pullIntoDescriptor = { buffer: buffer, byteOffset: 0, byteLength: autoAllocateChunkSize, bytesFilled: 0, elementSize: 1, ctor: Uint8Array, readerType: 'default' }; this._pendingPullIntos.push(pullIntoDescriptor); } var promise = ReadableStreamAddReadRequest(stream); ReadableByteStreamControllerCallPullIfNeeded(this); return promise; } }, { key: 'byobRequest', get: function get() { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('byobRequest'); } if (this._byobRequest === undefined && this._pendingPullIntos.length > 0) { var firstDescriptor = this._pendingPullIntos[0]; var view = new Uint8Array(firstDescriptor.buffer, firstDescriptor.byteOffset + firstDescriptor.bytesFilled, firstDescriptor.byteLength - firstDescriptor.bytesFilled); this._byobRequest = new ReadableStreamBYOBRequest(this, view); } return this._byobRequest; } }, { key: 'desiredSize', get: function get() { if (IsReadableByteStreamController(this) === false) { throw byteStreamControllerBrandCheckException('desiredSize'); } return ReadableByteStreamControllerGetDesiredSize(this); } }]); return ReadableByteStreamController; }(); function IsReadableByteStreamController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_underlyingByteSource')) { return false; } return true; } function IsReadableStreamBYOBRequest(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_associatedReadableByteStreamController')) { return false; } return true; } function ReadableByteStreamControllerCallPullIfNeeded(controller) { var shouldPull = ReadableByteStreamControllerShouldCallPull(controller); if (shouldPull === false) { return undefined; } if (controller._pulling === true) { controller._pullAgain = true; return undefined; } assert(controller._pullAgain === false); controller._pulling = true; var pullPromise = PromiseInvokeOrNoop(controller._underlyingByteSource, 'pull', [controller]); pullPromise.then(function () { controller._pulling = false; if (controller._pullAgain === true) { controller._pullAgain = false; ReadableByteStreamControllerCallPullIfNeeded(controller); } }, function (e) { if (controller._controlledReadableStream._state === 'readable') { ReadableByteStreamControllerError(controller, e); } }).catch(rethrowAssertionErrorRejection); return undefined; } function ReadableByteStreamControllerClearPendingPullIntos(controller) { ReadableByteStreamControllerInvalidateBYOBRequest(controller); controller._pendingPullIntos = []; } function ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor) { assert(stream._state !== 'errored', 'state must not be errored'); var done = false; if (stream._state === 'closed') { assert(pullIntoDescriptor.bytesFilled === 0); done = true; } var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); if (pullIntoDescriptor.readerType === 'default') { ReadableStreamFulfillReadRequest(stream, filledView, done); } else { assert(pullIntoDescriptor.readerType === 'byob'); ReadableStreamFulfillReadIntoRequest(stream, filledView, done); } } function ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor) { var bytesFilled = pullIntoDescriptor.bytesFilled; var elementSize = pullIntoDescriptor.elementSize; assert(bytesFilled <= pullIntoDescriptor.byteLength); assert(bytesFilled % elementSize === 0); return new pullIntoDescriptor.ctor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, bytesFilled / elementSize); } function ReadableByteStreamControllerEnqueueChunkToQueue(controller, buffer, byteOffset, byteLength) { controller._queue.push({ buffer: buffer, byteOffset: byteOffset, byteLength: byteLength }); controller._queueTotalSize += byteLength; } function ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) { var elementSize = pullIntoDescriptor.elementSize; var currentAlignedBytes = pullIntoDescriptor.bytesFilled - pullIntoDescriptor.bytesFilled % elementSize; var maxBytesToCopy = Math.min(controller._queueTotalSize, pullIntoDescriptor.byteLength - pullIntoDescriptor.bytesFilled); var maxBytesFilled = pullIntoDescriptor.bytesFilled + maxBytesToCopy; var maxAlignedBytes = maxBytesFilled - maxBytesFilled % elementSize; var totalBytesToCopyRemaining = maxBytesToCopy; var ready = false; if (maxAlignedBytes > currentAlignedBytes) { totalBytesToCopyRemaining = maxAlignedBytes - pullIntoDescriptor.bytesFilled; ready = true; } var queue = controller._queue; while (totalBytesToCopyRemaining > 0) { var headOfQueue = queue[0]; var bytesToCopy = Math.min(totalBytesToCopyRemaining, headOfQueue.byteLength); var destStart = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; ArrayBufferCopy(pullIntoDescriptor.buffer, destStart, headOfQueue.buffer, headOfQueue.byteOffset, bytesToCopy); if (headOfQueue.byteLength === bytesToCopy) { queue.shift(); } else { headOfQueue.byteOffset += bytesToCopy; headOfQueue.byteLength -= bytesToCopy; } controller._queueTotalSize -= bytesToCopy; ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesToCopy, pullIntoDescriptor); totalBytesToCopyRemaining -= bytesToCopy; } if (ready === false) { assert(controller._queueTotalSize === 0, 'queue must be empty'); assert(pullIntoDescriptor.bytesFilled > 0); assert(pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize); } return ready; } function ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, size, pullIntoDescriptor) { assert(controller._pendingPullIntos.length === 0 || controller._pendingPullIntos[0] === pullIntoDescriptor); ReadableByteStreamControllerInvalidateBYOBRequest(controller); pullIntoDescriptor.bytesFilled += size; } function ReadableByteStreamControllerHandleQueueDrain(controller) { assert(controller._controlledReadableStream._state === 'readable'); if (controller._queueTotalSize === 0 && controller._closeRequested === true) { ReadableStreamClose(controller._controlledReadableStream); } else { ReadableByteStreamControllerCallPullIfNeeded(controller); } } function ReadableByteStreamControllerInvalidateBYOBRequest(controller) { if (controller._byobRequest === undefined) { return; } controller._byobRequest._associatedReadableByteStreamController = undefined; controller._byobRequest._view = undefined; controller._byobRequest = undefined; } function ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller) { assert(controller._closeRequested === false); while (controller._pendingPullIntos.length > 0) { if (controller._queueTotalSize === 0) { return; } var pullIntoDescriptor = controller._pendingPullIntos[0]; if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) { ReadableByteStreamControllerShiftPendingPullInto(controller); ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor); } } } function ReadableByteStreamControllerPullInto(controller, view) { var stream = controller._controlledReadableStream; var elementSize = 1; if (view.constructor !== DataView) { elementSize = view.constructor.BYTES_PER_ELEMENT; } var ctor = view.constructor; var pullIntoDescriptor = { buffer: view.buffer, byteOffset: view.byteOffset, byteLength: view.byteLength, bytesFilled: 0, elementSize: elementSize, ctor: ctor, readerType: 'byob' }; if (controller._pendingPullIntos.length > 0) { pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); controller._pendingPullIntos.push(pullIntoDescriptor); return ReadableStreamAddReadIntoRequest(stream); } if (stream._state === 'closed') { var emptyView = new view.constructor(pullIntoDescriptor.buffer, pullIntoDescriptor.byteOffset, 0); return Promise.resolve(CreateIterResultObject(emptyView, true)); } if (controller._queueTotalSize > 0) { if (ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(controller, pullIntoDescriptor) === true) { var filledView = ReadableByteStreamControllerConvertPullIntoDescriptor(pullIntoDescriptor); ReadableByteStreamControllerHandleQueueDrain(controller); return Promise.resolve(CreateIterResultObject(filledView, false)); } if (controller._closeRequested === true) { var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); ReadableByteStreamControllerError(controller, e); return Promise.reject(e); } } pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); controller._pendingPullIntos.push(pullIntoDescriptor); var promise = ReadableStreamAddReadIntoRequest(stream); ReadableByteStreamControllerCallPullIfNeeded(controller); return promise; } function ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor) { firstDescriptor.buffer = TransferArrayBuffer(firstDescriptor.buffer); assert(firstDescriptor.bytesFilled === 0, 'bytesFilled must be 0'); var stream = controller._controlledReadableStream; if (ReadableStreamHasBYOBReader(stream) === true) { while (ReadableStreamGetNumReadIntoRequests(stream) > 0) { var pullIntoDescriptor = ReadableByteStreamControllerShiftPendingPullInto(controller); ReadableByteStreamControllerCommitPullIntoDescriptor(stream, pullIntoDescriptor); } } } function ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, pullIntoDescriptor) { if (pullIntoDescriptor.bytesFilled + bytesWritten > pullIntoDescriptor.byteLength) { throw new RangeError('bytesWritten out of range'); } ReadableByteStreamControllerFillHeadPullIntoDescriptor(controller, bytesWritten, pullIntoDescriptor); if (pullIntoDescriptor.bytesFilled < pullIntoDescriptor.elementSize) { return; } ReadableByteStreamControllerShiftPendingPullInto(controller); var remainderSize = pullIntoDescriptor.bytesFilled % pullIntoDescriptor.elementSize; if (remainderSize > 0) { var end = pullIntoDescriptor.byteOffset + pullIntoDescriptor.bytesFilled; var remainder = pullIntoDescriptor.buffer.slice(end - remainderSize, end); ReadableByteStreamControllerEnqueueChunkToQueue(controller, remainder, 0, remainder.byteLength); } pullIntoDescriptor.buffer = TransferArrayBuffer(pullIntoDescriptor.buffer); pullIntoDescriptor.bytesFilled -= remainderSize; ReadableByteStreamControllerCommitPullIntoDescriptor(controller._controlledReadableStream, pullIntoDescriptor); ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); } function ReadableByteStreamControllerRespondInternal(controller, bytesWritten) { var firstDescriptor = controller._pendingPullIntos[0]; var stream = controller._controlledReadableStream; if (stream._state === 'closed') { if (bytesWritten !== 0) { throw new TypeError('bytesWritten must be 0 when calling respond() on a closed stream'); } ReadableByteStreamControllerRespondInClosedState(controller, firstDescriptor); } else { assert(stream._state === 'readable'); ReadableByteStreamControllerRespondInReadableState(controller, bytesWritten, firstDescriptor); } } function ReadableByteStreamControllerShiftPendingPullInto(controller) { var descriptor = controller._pendingPullIntos.shift(); ReadableByteStreamControllerInvalidateBYOBRequest(controller); return descriptor; } function ReadableByteStreamControllerShouldCallPull(controller) { var stream = controller._controlledReadableStream; if (stream._state !== 'readable') { return false; } if (controller._closeRequested === true) { return false; } if (controller._started === false) { return false; } if (ReadableStreamHasDefaultReader(stream) === true && ReadableStreamGetNumReadRequests(stream) > 0) { return true; } if (ReadableStreamHasBYOBReader(stream) === true && ReadableStreamGetNumReadIntoRequests(stream) > 0) { return true; } if (ReadableByteStreamControllerGetDesiredSize(controller) > 0) { return true; } return false; } function ReadableByteStreamControllerClose(controller) { var stream = controller._controlledReadableStream; assert(controller._closeRequested === false); assert(stream._state === 'readable'); if (controller._queueTotalSize > 0) { controller._closeRequested = true; return; } if (controller._pendingPullIntos.length > 0) { var firstPendingPullInto = controller._pendingPullIntos[0]; if (firstPendingPullInto.bytesFilled > 0) { var e = new TypeError('Insufficient bytes to fill elements in the given buffer'); ReadableByteStreamControllerError(controller, e); throw e; } } ReadableStreamClose(stream); } function ReadableByteStreamControllerEnqueue(controller, chunk) { var stream = controller._controlledReadableStream; assert(controller._closeRequested === false); assert(stream._state === 'readable'); var buffer = chunk.buffer; var byteOffset = chunk.byteOffset; var byteLength = chunk.byteLength; var transferredBuffer = TransferArrayBuffer(buffer); if (ReadableStreamHasDefaultReader(stream) === true) { if (ReadableStreamGetNumReadRequests(stream) === 0) { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); } else { assert(controller._queue.length === 0); var transferredView = new Uint8Array(transferredBuffer, byteOffset, byteLength); ReadableStreamFulfillReadRequest(stream, transferredView, false); } } else if (ReadableStreamHasBYOBReader(stream) === true) { ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(controller); } else { assert(IsReadableStreamLocked(stream) === false, 'stream must not be locked'); ReadableByteStreamControllerEnqueueChunkToQueue(controller, transferredBuffer, byteOffset, byteLength); } } function ReadableByteStreamControllerError(controller, e) { var stream = controller._controlledReadableStream; assert(stream._state === 'readable'); ReadableByteStreamControllerClearPendingPullIntos(controller); ResetQueue(controller); ReadableStreamError(stream, e); } function ReadableByteStreamControllerGetDesiredSize(controller) { var stream = controller._controlledReadableStream; var state = stream._state; if (state === 'errored') { return null; } if (state === 'closed') { return 0; } return controller._strategyHWM - controller._queueTotalSize; } function ReadableByteStreamControllerRespond(controller, bytesWritten) { bytesWritten = Number(bytesWritten); if (IsFiniteNonNegativeNumber(bytesWritten) === false) { throw new RangeError('bytesWritten must be a finite'); } assert(controller._pendingPullIntos.length > 0); ReadableByteStreamControllerRespondInternal(controller, bytesWritten); } function ReadableByteStreamControllerRespondWithNewView(controller, view) { assert(controller._pendingPullIntos.length > 0); var firstDescriptor = controller._pendingPullIntos[0]; if (firstDescriptor.byteOffset + firstDescriptor.bytesFilled !== view.byteOffset) { throw new RangeError('The region specified by view does not match byobRequest'); } if (firstDescriptor.byteLength !== view.byteLength) { throw new RangeError('The buffer of view has different capacity than byobRequest'); } firstDescriptor.buffer = view.buffer; ReadableByteStreamControllerRespondInternal(controller, view.byteLength); } function streamBrandCheckException(name) { return new TypeError('ReadableStream.prototype.' + name + ' can only be used on a ReadableStream'); } function readerLockException(name) { return new TypeError('Cannot ' + name + ' a stream using a released reader'); } function defaultReaderBrandCheckException(name) { return new TypeError('ReadableStreamDefaultReader.prototype.' + name + ' can only be used on a ReadableStreamDefaultReader'); } function defaultReaderClosedPromiseInitialize(reader) { reader._closedPromise = new Promise(function (resolve, reject) { reader._closedPromise_resolve = resolve; reader._closedPromise_reject = reject; }); } function defaultReaderClosedPromiseInitializeAsRejected(reader, reason) { reader._closedPromise = Promise.reject(reason); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function defaultReaderClosedPromiseInitializeAsResolved(reader) { reader._closedPromise = Promise.resolve(undefined); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function defaultReaderClosedPromiseReject(reader, reason) { assert(reader._closedPromise_resolve !== undefined); assert(reader._closedPromise_reject !== undefined); reader._closedPromise_reject(reason); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function defaultReaderClosedPromiseResetToRejected(reader, reason) { assert(reader._closedPromise_resolve === undefined); assert(reader._closedPromise_reject === undefined); reader._closedPromise = Promise.reject(reason); } function defaultReaderClosedPromiseResolve(reader) { assert(reader._closedPromise_resolve !== undefined); assert(reader._closedPromise_reject !== undefined); reader._closedPromise_resolve(undefined); reader._closedPromise_resolve = undefined; reader._closedPromise_reject = undefined; } function byobReaderBrandCheckException(name) { return new TypeError('ReadableStreamBYOBReader.prototype.' + name + ' can only be used on a ReadableStreamBYOBReader'); } function defaultControllerBrandCheckException(name) { return new TypeError('ReadableStreamDefaultController.prototype.' + name + ' can only be used on a ReadableStreamDefaultController'); } function byobRequestBrandCheckException(name) { return new TypeError('ReadableStreamBYOBRequest.prototype.' + name + ' can only be used on a ReadableStreamBYOBRequest'); } function byteStreamControllerBrandCheckException(name) { return new TypeError('ReadableByteStreamController.prototype.' + name + ' can only be used on a ReadableByteStreamController'); } function ifIsObjectAndHasAPromiseIsHandledInternalSlotSetPromiseIsHandledToTrue(promise) { try { Promise.prototype.then.call(promise, undefined, function () {}); } catch (e) {} } }, function (module, exports, __w_extracthighlights_require__) { var transformStream = __w_extracthighlights_require__(6); var readableStream = __w_extracthighlights_require__(4); var writableStream = __w_extracthighlights_require__(2); exports.TransformStream = transformStream.TransformStream; exports.ReadableStream = readableStream.ReadableStream; exports.IsReadableStreamDisturbed = readableStream.IsReadableStreamDisturbed; exports.ReadableStreamDefaultControllerClose = readableStream.ReadableStreamDefaultControllerClose; exports.ReadableStreamDefaultControllerEnqueue = readableStream.ReadableStreamDefaultControllerEnqueue; exports.ReadableStreamDefaultControllerError = readableStream.ReadableStreamDefaultControllerError; exports.ReadableStreamDefaultControllerGetDesiredSize = readableStream.ReadableStreamDefaultControllerGetDesiredSize; exports.AcquireWritableStreamDefaultWriter = writableStream.AcquireWritableStreamDefaultWriter; exports.IsWritableStream = writableStream.IsWritableStream; exports.IsWritableStreamLocked = writableStream.IsWritableStreamLocked; exports.WritableStream = writableStream.WritableStream; exports.WritableStreamAbort = writableStream.WritableStreamAbort; exports.WritableStreamDefaultControllerError = writableStream.WritableStreamDefaultControllerError; exports.WritableStreamDefaultWriterCloseWithErrorPropagation = writableStream.WritableStreamDefaultWriterCloseWithErrorPropagation; exports.WritableStreamDefaultWriterRelease = writableStream.WritableStreamDefaultWriterRelease; exports.WritableStreamDefaultWriterWrite = writableStream.WritableStreamDefaultWriterWrite; }, function (module, exports, __w_extracthighlights_require__) { var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var _require = __w_extracthighlights_require__(1), assert = _require.assert; var _require2 = __w_extracthighlights_require__(0), InvokeOrNoop = _require2.InvokeOrNoop, PromiseInvokeOrPerformFallback = _require2.PromiseInvokeOrPerformFallback, PromiseInvokeOrNoop = _require2.PromiseInvokeOrNoop, typeIsObject = _require2.typeIsObject; var _require3 = __w_extracthighlights_require__(4), ReadableStream = _require3.ReadableStream, ReadableStreamDefaultControllerClose = _require3.ReadableStreamDefaultControllerClose, ReadableStreamDefaultControllerEnqueue = _require3.ReadableStreamDefaultControllerEnqueue, ReadableStreamDefaultControllerError = _require3.ReadableStreamDefaultControllerError, ReadableStreamDefaultControllerGetDesiredSize = _require3.ReadableStreamDefaultControllerGetDesiredSize; var _require4 = __w_extracthighlights_require__(2), WritableStream = _require4.WritableStream, WritableStreamDefaultControllerError = _require4.WritableStreamDefaultControllerError; function TransformStreamCloseReadable(transformStream) { if (transformStream._errored === true) { throw new TypeError('TransformStream is already errored'); } if (transformStream._readableClosed === true) { throw new TypeError('Readable side is already closed'); } TransformStreamCloseReadableInternal(transformStream); } function TransformStreamEnqueueToReadable(transformStream, chunk) { if (transformStream._errored === true) { throw new TypeError('TransformStream is already errored'); } if (transformStream._readableClosed === true) { throw new TypeError('Readable side is already closed'); } var controller = transformStream._readableController; try { ReadableStreamDefaultControllerEnqueue(controller, chunk); } catch (e) { transformStream._readableClosed = true; TransformStreamErrorIfNeeded(transformStream, e); throw transformStream._storedError; } var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(controller); var maybeBackpressure = desiredSize <= 0; if (maybeBackpressure === true && transformStream._backpressure === false) { TransformStreamSetBackpressure(transformStream, true); } } function TransformStreamError(transformStream, e) { if (transformStream._errored === true) { throw new TypeError('TransformStream is already errored'); } TransformStreamErrorInternal(transformStream, e); } function TransformStreamCloseReadableInternal(transformStream) { assert(transformStream._errored === false); assert(transformStream._readableClosed === false); try { ReadableStreamDefaultControllerClose(transformStream._readableController); } catch (e) { assert(false); } transformStream._readableClosed = true; } function TransformStreamErrorIfNeeded(transformStream, e) { if (transformStream._errored === false) { TransformStreamErrorInternal(transformStream, e); } } function TransformStreamErrorInternal(transformStream, e) { assert(transformStream._errored === false); transformStream._errored = true; transformStream._storedError = e; if (transformStream._writableDone === false) { WritableStreamDefaultControllerError(transformStream._writableController, e); } if (transformStream._readableClosed === false) { ReadableStreamDefaultControllerError(transformStream._readableController, e); } } function TransformStreamReadableReadyPromise(transformStream) { assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); if (transformStream._backpressure === false) { return Promise.resolve(); } assert(transformStream._backpressure === true, '_backpressure should have been initialized'); return transformStream._backpressureChangePromise; } function TransformStreamSetBackpressure(transformStream, backpressure) { assert(transformStream._backpressure !== backpressure, 'TransformStreamSetBackpressure() should be called only when backpressure is changed'); if (transformStream._backpressureChangePromise !== undefined) { transformStream._backpressureChangePromise_resolve(backpressure); } transformStream._backpressureChangePromise = new Promise(function (resolve) { transformStream._backpressureChangePromise_resolve = resolve; }); transformStream._backpressureChangePromise.then(function (resolution) { assert(resolution !== backpressure, '_backpressureChangePromise should be fulfilled only when backpressure is changed'); }); transformStream._backpressure = backpressure; } function TransformStreamDefaultTransform(chunk, transformStreamController) { var transformStream = transformStreamController._controlledTransformStream; TransformStreamEnqueueToReadable(transformStream, chunk); return Promise.resolve(); } function TransformStreamTransform(transformStream, chunk) { assert(transformStream._errored === false); assert(transformStream._transforming === false); assert(transformStream._backpressure === false); transformStream._transforming = true; var transformer = transformStream._transformer; var controller = transformStream._transformStreamController; var transformPromise = PromiseInvokeOrPerformFallback(transformer, 'transform', [chunk, controller], TransformStreamDefaultTransform, [chunk, controller]); return transformPromise.then(function () { transformStream._transforming = false; return TransformStreamReadableReadyPromise(transformStream); }, function (e) { TransformStreamErrorIfNeeded(transformStream, e); return Promise.reject(e); }); } function IsTransformStreamDefaultController(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_controlledTransformStream')) { return false; } return true; } function IsTransformStream(x) { if (!typeIsObject(x)) { return false; } if (!Object.prototype.hasOwnProperty.call(x, '_transformStreamController')) { return false; } return true; } var TransformStreamSink = function () { function TransformStreamSink(transformStream, startPromise) { _classCallCheck(this, TransformStreamSink); this._transformStream = transformStream; this._startPromise = startPromise; } _createClass(TransformStreamSink, [{ key: 'start', value: function start(c) { var transformStream = this._transformStream; transformStream._writableController = c; return this._startPromise.then(function () { return TransformStreamReadableReadyPromise(transformStream); }); } }, { key: 'write', value: function write(chunk) { var transformStream = this._transformStream; return TransformStreamTransform(transformStream, chunk); } }, { key: 'abort', value: function abort() { var transformStream = this._transformStream; transformStream._writableDone = true; TransformStreamErrorInternal(transformStream, new TypeError('Writable side aborted')); } }, { key: 'close', value: function close() { var transformStream = this._transformStream; assert(transformStream._transforming === false); transformStream._writableDone = true; var flushPromise = PromiseInvokeOrNoop(transformStream._transformer, 'flush', [transformStream._transformStreamController]); return flushPromise.then(function () { if (transformStream._errored === true) { return Promise.reject(transformStream._storedError); } if (transformStream._readableClosed === false) { TransformStreamCloseReadableInternal(transformStream); } return Promise.resolve(); }).catch(function (r) { TransformStreamErrorIfNeeded(transformStream, r); return Promise.reject(transformStream._storedError); }); } }]); return TransformStreamSink; }(); var TransformStreamSource = function () { function TransformStreamSource(transformStream, startPromise) { _classCallCheck(this, TransformStreamSource); this._transformStream = transformStream; this._startPromise = startPromise; } _createClass(TransformStreamSource, [{ key: 'start', value: function start(c) { var transformStream = this._transformStream; transformStream._readableController = c; return this._startPromise.then(function () { assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); if (transformStream._backpressure === true) { return Promise.resolve(); } assert(transformStream._backpressure === false, '_backpressure should have been initialized'); return transformStream._backpressureChangePromise; }); } }, { key: 'pull', value: function pull() { var transformStream = this._transformStream; assert(transformStream._backpressure === true, 'pull() should be never called while _backpressure is false'); assert(transformStream._backpressureChangePromise !== undefined, '_backpressureChangePromise should have been initialized'); TransformStreamSetBackpressure(transformStream, false); return transformStream._backpressureChangePromise; } }, { key: 'cancel', value: function cancel() { var transformStream = this._transformStream; transformStream._readableClosed = true; TransformStreamErrorInternal(transformStream, new TypeError('Readable side canceled')); } }]); return TransformStreamSource; }(); var TransformStreamDefaultController = function () { function TransformStreamDefaultController(transformStream) { _classCallCheck(this, TransformStreamDefaultController); if (IsTransformStream(transformStream) === false) { throw new TypeError('TransformStreamDefaultController can only be ' + 'constructed with a TransformStream instance'); } if (transformStream._transformStreamController !== undefined) { throw new TypeError('TransformStreamDefaultController instances can ' + 'only be created by the TransformStream constructor'); } this._controlledTransformStream = transformStream; } _createClass(TransformStreamDefaultController, [{ key: 'enqueue', value: function enqueue(chunk) { if (IsTransformStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('enqueue'); } TransformStreamEnqueueToReadable(this._controlledTransformStream, chunk); } }, { key: 'close', value: function close() { if (IsTransformStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('close'); } TransformStreamCloseReadable(this._controlledTransformStream); } }, { key: 'error', value: function error(reason) { if (IsTransformStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('error'); } TransformStreamError(this._controlledTransformStream, reason); } }, { key: 'desiredSize', get: function get() { if (IsTransformStreamDefaultController(this) === false) { throw defaultControllerBrandCheckException('desiredSize'); } var transformStream = this._controlledTransformStream; var readableController = transformStream._readableController; return ReadableStreamDefaultControllerGetDesiredSize(readableController); } }]); return TransformStreamDefaultController; }(); var TransformStream = function () { function TransformStream() { var transformer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, TransformStream); this._transformer = transformer; var readableStrategy = transformer.readableStrategy, writableStrategy = transformer.writableStrategy; this._transforming = false; this._errored = false; this._storedError = undefined; this._writableController = undefined; this._readableController = undefined; this._transformStreamController = undefined; this._writableDone = false; this._readableClosed = false; this._backpressure = undefined; this._backpressureChangePromise = undefined; this._backpressureChangePromise_resolve = undefined; this._transformStreamController = new TransformStreamDefaultController(this); var startPromise_resolve = void 0; var startPromise = new Promise(function (resolve) { startPromise_resolve = resolve; }); var source = new TransformStreamSource(this, startPromise); this._readable = new ReadableStream(source, readableStrategy); var sink = new TransformStreamSink(this, startPromise); this._writable = new WritableStream(sink, writableStrategy); assert(this._writableController !== undefined); assert(this._readableController !== undefined); var desiredSize = ReadableStreamDefaultControllerGetDesiredSize(this._readableController); TransformStreamSetBackpressure(this, desiredSize <= 0); var transformStream = this; var startResult = InvokeOrNoop(transformer, 'start', [transformStream._transformStreamController]); startPromise_resolve(startResult); startPromise.catch(function (e) { if (transformStream._errored === false) { transformStream._errored = true; transformStream._storedError = e; } }); } _createClass(TransformStream, [{ key: 'readable', get: function get() { if (IsTransformStream(this) === false) { throw streamBrandCheckException('readable'); } return this._readable; } }, { key: 'writable', get: function get() { if (IsTransformStream(this) === false) { throw streamBrandCheckException('writable'); } return this._writable; } }]); return TransformStream; }(); module.exports = { TransformStream: TransformStream }; function defaultControllerBrandCheckException(name) { return new TypeError('TransformStreamDefaultController.prototype.' + name + ' can only be used on a TransformStreamDefaultController'); } function streamBrandCheckException(name) { return new TypeError('TransformStream.prototype.' + name + ' can only be used on a TransformStream'); } }, function (module, exports, __w_extracthighlights_require__) { module.exports = __w_extracthighlights_require__(5); }])); /***/ }), /* 144 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } { var isURLSupported = false; try { if (typeof URL === 'function' && _typeof(URL.prototype) === 'object' && 'origin' in URL.prototype) { var u = new URL('b', 'http://a'); u.pathname = 'c%20d'; isURLSupported = u.href === 'http://a/c%20d'; } } catch (ex) {} if (isURLSupported) { exports.URL = URL; } else { var PolyfillURL = __w_extracthighlights_require__(145).URL; var OriginalURL = __w_extracthighlights_require__(3).URL; if (OriginalURL) { PolyfillURL.createObjectURL = function (blob) { return OriginalURL.createObjectURL.apply(OriginalURL, arguments); }; PolyfillURL.revokeObjectURL = function (url) { OriginalURL.revokeObjectURL(url); }; } exports.URL = PolyfillURL; } } /***/ }), /* 145 */ /***/ (function(module, exports, __w_extracthighlights_require__) { (function URLConstructorClosure() { var relative = Object.create(null); relative['ftp'] = 21; relative['file'] = 0; relative['gopher'] = 70; relative['http'] = 80; relative['https'] = 443; relative['ws'] = 80; relative['wss'] = 443; var relativePathDotMapping = Object.create(null); relativePathDotMapping['%2e'] = '.'; relativePathDotMapping['.%2e'] = '..'; relativePathDotMapping['%2e.'] = '..'; relativePathDotMapping['%2e%2e'] = '..'; function isRelativeScheme(scheme) { return relative[scheme] !== undefined; } function invalid() { clear.call(this); this._isInvalid = true; } function IDNAToASCII(h) { if (h === '') { invalid.call(this); } return h.toLowerCase(); } function percentEscape(c) { var unicode = c.charCodeAt(0); if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x3F, 0x60].indexOf(unicode) === -1) { return c; } return encodeURIComponent(c); } function percentEscapeQuery(c) { var unicode = c.charCodeAt(0); if (unicode > 0x20 && unicode < 0x7F && [0x22, 0x23, 0x3C, 0x3E, 0x60].indexOf(unicode) === -1) { return c; } return encodeURIComponent(c); } var EOF, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; function parse(input, stateOverride, base) { var state = stateOverride || 'scheme start', cursor = 0, buffer = '', seenAt = false, seenBracket = false; loop: while ((input[cursor - 1] !== EOF || cursor === 0) && !this._isInvalid) { var c = input[cursor]; switch (state) { case 'scheme start': if (c && ALPHA.test(c)) { buffer += c.toLowerCase(); state = 'scheme'; } else if (!stateOverride) { buffer = ''; state = 'no scheme'; continue; } else { break loop; } break; case 'scheme': if (c && ALPHANUMERIC.test(c)) { buffer += c.toLowerCase(); } else if (c === ':') { this._scheme = buffer; buffer = ''; if (stateOverride) { break loop; } if (isRelativeScheme(this._scheme)) { this._isRelative = true; } if (this._scheme === 'file') { state = 'relative'; } else if (this._isRelative && base && base._scheme === this._scheme) { state = 'relative or authority'; } else if (this._isRelative) { state = 'authority first slash'; } else { state = 'scheme data'; } } else if (!stateOverride) { buffer = ''; cursor = 0; state = 'no scheme'; continue; } else if (c === EOF) { break loop; } else { break loop; } break; case 'scheme data': if (c === '?') { this._query = '?'; state = 'query'; } else if (c === '#') { this._fragment = '#'; state = 'fragment'; } else { if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { this._schemeData += percentEscape(c); } } break; case 'no scheme': if (!base || !isRelativeScheme(base._scheme)) { invalid.call(this); } else { state = 'relative'; continue; } break; case 'relative or authority': if (c === '/' && input[cursor + 1] === '/') { state = 'authority ignore slashes'; } else { state = 'relative'; continue; } break; case 'relative': this._isRelative = true; if (this._scheme !== 'file') { this._scheme = base._scheme; } if (c === EOF) { this._host = base._host; this._port = base._port; this._path = base._path.slice(); this._query = base._query; this._username = base._username; this._password = base._password; break loop; } else if (c === '/' || c === '\\') { state = 'relative slash'; } else if (c === '?') { this._host = base._host; this._port = base._port; this._path = base._path.slice(); this._query = '?'; this._username = base._username; this._password = base._password; state = 'query'; } else if (c === '#') { this._host = base._host; this._port = base._port; this._path = base._path.slice(); this._query = base._query; this._fragment = '#'; this._username = base._username; this._password = base._password; state = 'fragment'; } else { var nextC = input[cursor + 1]; var nextNextC = input[cursor + 2]; if (this._scheme !== 'file' || !ALPHA.test(c) || nextC !== ':' && nextC !== '|' || nextNextC !== EOF && nextNextC !== '/' && nextNextC !== '\\' && nextNextC !== '?' && nextNextC !== '#') { this._host = base._host; this._port = base._port; this._username = base._username; this._password = base._password; this._path = base._path.slice(); this._path.pop(); } state = 'relative path'; continue; } break; case 'relative slash': if (c === '/' || c === '\\') { if (this._scheme === 'file') { state = 'file host'; } else { state = 'authority ignore slashes'; } } else { if (this._scheme !== 'file') { this._host = base._host; this._port = base._port; this._username = base._username; this._password = base._password; } state = 'relative path'; continue; } break; case 'authority first slash': if (c === '/') { state = 'authority second slash'; } else { state = 'authority ignore slashes'; continue; } break; case 'authority second slash': state = 'authority ignore slashes'; if (c !== '/') { continue; } break; case 'authority ignore slashes': if (c !== '/' && c !== '\\') { state = 'authority'; continue; } break; case 'authority': if (c === '@') { if (seenAt) { buffer += '%40'; } seenAt = true; for (var i = 0; i < buffer.length; i++) { var cp = buffer[i]; if (cp === '\t' || cp === '\n' || cp === '\r') { continue; } if (cp === ':' && this._password === null) { this._password = ''; continue; } var tempC = percentEscape(cp); if (this._password !== null) { this._password += tempC; } else { this._username += tempC; } } buffer = ''; } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { cursor -= buffer.length; buffer = ''; state = 'host'; continue; } else { buffer += c; } break; case 'file host': if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { if (buffer.length === 2 && ALPHA.test(buffer[0]) && (buffer[1] === ':' || buffer[1] === '|')) { state = 'relative path'; } else if (buffer.length === 0) { state = 'relative path start'; } else { this._host = IDNAToASCII.call(this, buffer); buffer = ''; state = 'relative path start'; } continue; } else if (c === '\t' || c === '\n' || c === '\r') ; else { buffer += c; } break; case 'host': case 'hostname': if (c === ':' && !seenBracket) { this._host = IDNAToASCII.call(this, buffer); buffer = ''; state = 'port'; if (stateOverride === 'hostname') { break loop; } } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#') { this._host = IDNAToASCII.call(this, buffer); buffer = ''; state = 'relative path start'; if (stateOverride) { break loop; } continue; } else if (c !== '\t' && c !== '\n' && c !== '\r') { if (c === '[') { seenBracket = true; } else if (c === ']') { seenBracket = false; } buffer += c; } else ; break; case 'port': if (/[0-9]/.test(c)) { buffer += c; } else if (c === EOF || c === '/' || c === '\\' || c === '?' || c === '#' || stateOverride) { if (buffer !== '') { var temp = parseInt(buffer, 10); if (temp !== relative[this._scheme]) { this._port = temp + ''; } buffer = ''; } if (stateOverride) { break loop; } state = 'relative path start'; continue; } else if (c === '\t' || c === '\n' || c === '\r') ; else { invalid.call(this); } break; case 'relative path start': state = 'relative path'; if (c !== '/' && c !== '\\') { continue; } break; case 'relative path': if (c === EOF || c === '/' || c === '\\' || !stateOverride && (c === '?' || c === '#')) { var tmp; if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { buffer = tmp; } if (buffer === '..') { this._path.pop(); if (c !== '/' && c !== '\\') { this._path.push(''); } } else if (buffer === '.' && c !== '/' && c !== '\\') { this._path.push(''); } else if (buffer !== '.') { if (this._scheme === 'file' && this._path.length === 0 && buffer.length === 2 && ALPHA.test(buffer[0]) && buffer[1] === '|') { buffer = buffer[0] + ':'; } this._path.push(buffer); } buffer = ''; if (c === '?') { this._query = '?'; state = 'query'; } else if (c === '#') { this._fragment = '#'; state = 'fragment'; } } else if (c !== '\t' && c !== '\n' && c !== '\r') { buffer += percentEscape(c); } break; case 'query': if (!stateOverride && c === '#') { this._fragment = '#'; state = 'fragment'; } else if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { this._query += percentEscapeQuery(c); } break; case 'fragment': if (c !== EOF && c !== '\t' && c !== '\n' && c !== '\r') { this._fragment += c; } break; } cursor++; } } function clear() { this._scheme = ''; this._schemeData = ''; this._username = ''; this._password = null; this._host = ''; this._port = ''; this._path = []; this._query = ''; this._fragment = ''; this._isInvalid = false; this._isRelative = false; } function JURL(url, base) { if (base !== undefined && !(base instanceof JURL)) { base = new JURL(String(base)); } this._url = url; clear.call(this); var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ''); parse.call(this, input, null, base); } JURL.prototype = { toString: function toString() { return this.href; }, get href() { if (this._isInvalid) { return this._url; } var authority = ''; if (this._username !== '' || this._password !== null) { authority = this._username + (this._password !== null ? ':' + this._password : '') + '@'; } return this.protocol + (this._isRelative ? '//' + authority + this.host : '') + this.pathname + this._query + this._fragment; }, set href(value) { clear.call(this); parse.call(this, value); }, get protocol() { return this._scheme + ':'; }, set protocol(value) { if (this._isInvalid) { return; } parse.call(this, value + ':', 'scheme start'); }, get host() { return this._isInvalid ? '' : this._port ? this._host + ':' + this._port : this._host; }, set host(value) { if (this._isInvalid || !this._isRelative) { return; } parse.call(this, value, 'host'); }, get hostname() { return this._host; }, set hostname(value) { if (this._isInvalid || !this._isRelative) { return; } parse.call(this, value, 'hostname'); }, get port() { return this._port; }, set port(value) { if (this._isInvalid || !this._isRelative) { return; } parse.call(this, value, 'port'); }, get pathname() { return this._isInvalid ? '' : this._isRelative ? '/' + this._path.join('/') : this._schemeData; }, set pathname(value) { if (this._isInvalid || !this._isRelative) { return; } this._path = []; parse.call(this, value, 'relative path start'); }, get search() { return this._isInvalid || !this._query || this._query === '?' ? '' : this._query; }, set search(value) { if (this._isInvalid || !this._isRelative) { return; } this._query = '?'; if (value[0] === '?') { value = value.slice(1); } parse.call(this, value, 'query'); }, get hash() { return this._isInvalid || !this._fragment || this._fragment === '#' ? '' : this._fragment; }, set hash(value) { if (this._isInvalid) { return; } this._fragment = '#'; if (value[0] === '#') { value = value.slice(1); } parse.call(this, value, 'fragment'); }, get origin() { var host; if (this._isInvalid || !this._scheme) { return ''; } switch (this._scheme) { case 'data': case 'file': case 'javascript': case 'mailto': return 'null'; case 'blob': try { return new JURL(this._schemeData).origin || 'null'; } catch (_) {} return 'null'; } host = this.host; if (!host) { return ''; } return this._scheme + '://' + host; } }; exports.URL = JURL; })(); /***/ }), /* 146 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getDocument = getDocument; exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory; exports.build = exports.version = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFWorker = exports.PDFDataRangeTransport = exports.LoopbackPort = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); var _util = __w_extracthighlights_require__(1); var _dom_utils = __w_extracthighlights_require__(151); var _font_loader = __w_extracthighlights_require__(152); var _api_compatibility = __w_extracthighlights_require__(153); var _canvas = __w_extracthighlights_require__(154); var _global_scope = _interopRequireDefault(__w_extracthighlights_require__(3)); var _worker_options = __w_extracthighlights_require__(156); var _message_handler = __w_extracthighlights_require__(157); var _metadata = __w_extracthighlights_require__(158); var _transport_stream = __w_extracthighlights_require__(160); var _webgl = __w_extracthighlights_require__(161); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var DEFAULT_RANGE_CHUNK_SIZE = 65536; var isWorkerDisabled = false; var fallbackWorkerSrc; var fakeWorkerFilesLoader = null; { var useRequireEnsure = false; if (typeof window === 'undefined') { isWorkerDisabled = true; if (typeof commonjsRequire.ensure === 'undefined') { commonjsRequire.ensure = nodeEnsure; } useRequireEnsure = true; } else if (typeof commonjsRequire !== 'undefined' && typeof commonjsRequire.ensure === 'function') { useRequireEnsure = true; } if (typeof requirejs !== 'undefined' && requirejs.toUrl) { fallbackWorkerSrc = requirejs.toUrl('extracthighlights-dist/build/extracthighlights.worker.js'); } var dynamicLoaderSupported = typeof requirejs !== 'undefined' && requirejs.load; fakeWorkerFilesLoader = useRequireEnsure ? function () { return new Promise(function (resolve, reject) { commonjsRequire.ensure([], function () { try { var worker; worker = extracthighlights_worker; resolve(worker.WorkerMessageHandler); } catch (ex) { reject(ex); } }, reject, 'extracthighlightsWorker'); }); } : dynamicLoaderSupported ? function () { return new Promise(function (resolve, reject) { requirejs(['extracthighlights-dist/build/extracthighlights.worker'], function (worker) { try { resolve(worker.WorkerMessageHandler); } catch (ex) { reject(ex); } }, reject); }); } : null; if (!fallbackWorkerSrc && (typeof document === "undefined" ? "undefined" : _typeof(document)) === 'object' && 'currentScript' in document) { var extracthighlightsFilePath = document.currentScript && document.currentScript.src; if (extracthighlightsFilePath) { fallbackWorkerSrc = extracthighlightsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, '.worker$1$2'); } } } var createPDFNetworkStream; function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) { createPDFNetworkStream = pdfNetworkStreamFactory; } function getDocument(src) { var task = new PDFDocumentLoadingTask(); var source; if (typeof src === 'string') { 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 Uint8Array, string or a parameter object'); } if (!src.url && !src.data && !src.range) { throw new Error('Invalid parameter object: need either .data, .range or .url'); } source = src; } var params = Object.create(null); var rangeTransport = null, worker = null; for (var key in source) { if (key === 'url' && typeof window !== 'undefined') { params[key] = new _util.URL(source[key], window.location).href; continue; } else if (key === 'range') { rangeTransport = source[key]; continue; } else if (key === 'worker') { worker = source[key]; continue; } else if (key === 'data' && !(source[key] instanceof Uint8Array)) { var pdfBytes = source[key]; if (typeof pdfBytes === 'string') { params[key] = (0, _util.stringToBytes)(pdfBytes); } else if (_typeof(pdfBytes) === 'object' && pdfBytes !== null && !isNaN(pdfBytes.length)) { params[key] = new Uint8Array(pdfBytes); } else if ((0, _util.isArrayBuffer)(pdfBytes)) { params[key] = new Uint8Array(pdfBytes); } 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] = source[key]; } params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE; params.CMapReaderFactory = params.CMapReaderFactory || _dom_utils.DOMCMapReaderFactory; params.ignoreErrors = params.stopAtErrors !== true; params.pdfBug = params.pdfBug === true; var NativeImageDecoderValues = Object.values(_util.NativeImageDecoding); if (params.nativeImageDecoderSupport === undefined || !NativeImageDecoderValues.includes(params.nativeImageDecoderSupport)) { params.nativeImageDecoderSupport = _api_compatibility.apiCompatibilityParams.nativeImageDecoderSupport || _util.NativeImageDecoding.DECODE; } if (!Number.isInteger(params.maxImageSize)) { params.maxImageSize = -1; } if (typeof params.isEvalSupported !== 'boolean') { params.isEvalSupported = true; } if (typeof params.disableFontFace !== 'boolean') { params.disableFontFace = _api_compatibility.apiCompatibilityParams.disableFontFace || false; } if (typeof params.disableRange !== 'boolean') { params.disableRange = false; } if (typeof params.disableStream !== 'boolean') { params.disableStream = false; } if (typeof params.disableAutoFetch !== 'boolean') { params.disableAutoFetch = false; } if (typeof params.disableCreateObjectURL !== 'boolean') { params.disableCreateObjectURL = _api_compatibility.apiCompatibilityParams.disableCreateObjectURL || false; } (0, _util.setVerbosityLevel)(params.verbosity); if (!worker) { var workerParams = { postMessageTransfers: params.postMessageTransfers, verbosity: params.verbosity, port: _worker_options.GlobalWorkerOptions.workerPort }; worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams); task._worker = worker; } var docId = task.docId; worker.promise.then(function () { if (task.destroyed) { throw new Error('Loading aborted'); } return _fetchDocument(worker, params, rangeTransport, docId).then(function (workerId) { if (task.destroyed) { throw new Error('Loading aborted'); } var networkStream; if (rangeTransport) { networkStream = new _transport_stream.PDFDataTransportStream({ length: params.length, initialData: params.initialData, 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 }); } var messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port); messageHandler.postMessageTransfers = worker.postMessageTransfers; var transport = new WorkerTransport(messageHandler, task, networkStream, params); task._transport = transport; messageHandler.send('Ready', null); }); }).catch(task._capability.reject); return task; } function _fetchDocument(worker, source, pdfDataRangeTransport, docId) { if (worker.destroyed) { return Promise.reject(new Error('Worker was destroyed')); } if (pdfDataRangeTransport) { source.length = pdfDataRangeTransport.length; source.initialData = pdfDataRangeTransport.initialData; } return worker.messageHandler.sendWithPromise('GetDocRequest', { docId: docId, apiVersion: '2.1.266', 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, disableCreateObjectURL: source.disableCreateObjectURL, postMessageTransfers: worker.postMessageTransfers, docBaseUrl: source.docBaseUrl, nativeImageDecoderSupport: source.nativeImageDecoderSupport, ignoreErrors: source.ignoreErrors, isEvalSupported: source.isEvalSupported }).then(function (workerId) { if (worker.destroyed) { throw new Error('Worker was destroyed'); } return workerId; }); } var PDFDocumentLoadingTask = function PDFDocumentLoadingTaskClosure() { var nextDocumentId = 0; var PDFDocumentLoadingTask = /*#__PURE__*/ function () { function PDFDocumentLoadingTask() { _classCallCheck(this, PDFDocumentLoadingTask); this._capability = (0, _util.createPromiseCapability)(); this._transport = null; this._worker = null; this.docId = 'd' + nextDocumentId++; this.destroyed = false; this.onPassword = null; this.onProgress = null; this.onUnsupportedFeature = null; } _createClass(PDFDocumentLoadingTask, [{ key: "destroy", value: function destroy() { var _this = this; this.destroyed = true; var transportDestroyed = !this._transport ? Promise.resolve() : this._transport.destroy(); return transportDestroyed.then(function () { _this._transport = null; if (_this._worker) { _this._worker.destroy(); _this._worker = null; } }); } }, { key: "then", value: function then(onFulfilled, onRejected) { (0, _util.deprecated)('PDFDocumentLoadingTask.then method, ' + 'use the `promise` getter instead.'); return this.promise.then.apply(this.promise, arguments); } }, { key: "promise", get: function get() { return this._capability.promise; } }]); return PDFDocumentLoadingTask; }(); return PDFDocumentLoadingTask; }(); var PDFDataRangeTransport = /*#__PURE__*/ function () { function PDFDataRangeTransport(length, initialData) { _classCallCheck(this, PDFDataRangeTransport); this.length = length; this.initialData = initialData; this._rangeListeners = []; this._progressListeners = []; this._progressiveReadListeners = []; this._readyCapability = (0, _util.createPromiseCapability)(); } _createClass(PDFDataRangeTransport, [{ key: "addRangeListener", value: function addRangeListener(listener) { this._rangeListeners.push(listener); } }, { key: "addProgressListener", value: function addProgressListener(listener) { this._progressListeners.push(listener); } }, { key: "addProgressiveReadListener", value: function addProgressiveReadListener(listener) { this._progressiveReadListeners.push(listener); } }, { key: "onDataRange", value: function onDataRange(begin, chunk) { var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = this._rangeListeners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var listener = _step.value; listener(begin, chunk); } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return != null) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } } }, { key: "onDataProgress", value: function onDataProgress(loaded) { var _this2 = this; this._readyCapability.promise.then(function () { var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = _this2._progressListeners[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var listener = _step2.value; listener(loaded); } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2.return != null) { _iterator2.return(); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } }); } }, { key: "onDataProgressiveRead", value: function onDataProgressiveRead(chunk) { var _this3 = this; this._readyCapability.promise.then(function () { var _iteratorNormalCompletion3 = true; var _didIteratorError3 = false; var _iteratorError3 = undefined; try { for (var _iterator3 = _this3._progressiveReadListeners[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { var listener = _step3.value; listener(chunk); } } catch (err) { _didIteratorError3 = true; _iteratorError3 = err; } finally { try { if (!_iteratorNormalCompletion3 && _iterator3.return != null) { _iterator3.return(); } } finally { if (_didIteratorError3) { throw _iteratorError3; } } } }); } }, { key: "transportReady", value: function transportReady() { this._readyCapability.resolve(); } }, { key: "requestDataRange", value: function requestDataRange(begin, end) { (0, _util.unreachable)('Abstract method PDFDataRangeTransport.requestDataRange'); } }, { key: "abort", value: function abort() {} }]); return PDFDataRangeTransport; }(); exports.PDFDataRangeTransport = PDFDataRangeTransport; var PDFDocumentProxy = /*#__PURE__*/ function () { function PDFDocumentProxy(pdfInfo, transport, loadingTask) { _classCallCheck(this, PDFDocumentProxy); this.loadingTask = loadingTask; this._pdfInfo = pdfInfo; this._transport = transport; } _createClass(PDFDocumentProxy, [{ key: "getPage", value: function getPage(pageNumber) { return this._transport.getPage(pageNumber); } }, { key: "getPageIndex", value: function getPageIndex(ref) { return this._transport.getPageIndex(ref); } }, { key: "getDestinations", value: function getDestinations() { return this._transport.getDestinations(); } }, { key: "getDestination", value: function getDestination(id) { return this._transport.getDestination(id); } }, { key: "getPageLabels", value: function getPageLabels() { return this._transport.getPageLabels(); } }, { key: "getPageMode", value: function getPageMode() { return this._transport.getPageMode(); } }, { key: "getOpenActionDestination", value: function getOpenActionDestination() { return this._transport.getOpenActionDestination(); } }, { key: "getAttachments", value: function getAttachments() { return this._transport.getAttachments(); } }, { key: "getJavaScript", value: function getJavaScript() { return this._transport.getJavaScript(); } }, { key: "getOutline", value: function getOutline() { return this._transport.getOutline(); } }, { key: "getPermissions", value: function getPermissions() { return this._transport.getPermissions(); } }, { key: "getMetadata", value: function getMetadata() { return this._transport.getMetadata(); } }, { key: "getData", value: function getData() { return this._transport.getData(); } }, { key: "getDownloadInfo", value: function getDownloadInfo() { return this._transport.downloadInfoCapability.promise; } }, { key: "getStats", value: function getStats() { return this._transport.getStats(); } }, { key: "cleanup", value: function cleanup() { this._transport.startCleanup(); } }, { key: "destroy", value: function destroy() { return this.loadingTask.destroy(); } }, { key: "numPages", get: function get() { return this._pdfInfo.numPages; } }, { key: "fingerprint", get: function get() { return this._pdfInfo.fingerprint; } }, { key: "loadingParams", get: function get() { return this._transport.loadingParams; } }]); return PDFDocumentProxy; }(); exports.PDFDocumentProxy = PDFDocumentProxy; var PDFPageProxy = /*#__PURE__*/ function () { function PDFPageProxy(pageIndex, pageInfo, transport) { var pdfBug = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; _classCallCheck(this, PDFPageProxy); this.pageIndex = pageIndex; this._pageInfo = pageInfo; this._transport = transport; this._stats = pdfBug ? new _dom_utils.StatTimer() : _dom_utils.DummyStatTimer; this._pdfBug = pdfBug; this.commonObjs = transport.commonObjs; this.objs = new PDFObjects(); this.cleanupAfterRender = false; this.pendingCleanup = false; this.intentStates = Object.create(null); this.destroyed = false; } _createClass(PDFPageProxy, [{ key: "getViewport", value: function getViewport() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, scale = _ref.scale, _ref$rotation = _ref.rotation, rotation = _ref$rotation === void 0 ? this.rotate : _ref$rotation, _ref$dontFlip = _ref.dontFlip, dontFlip = _ref$dontFlip === void 0 ? false : _ref$dontFlip; if (arguments.length > 1 || typeof arguments[0] === 'number') { (0, _util.deprecated)('getViewport is called with obsolete arguments.'); scale = arguments[0]; rotation = typeof arguments[1] === 'number' ? arguments[1] : this.rotate; dontFlip = typeof arguments[2] === 'boolean' ? arguments[2] : false; } return new _dom_utils.PageViewport({ viewBox: this.view, scale: scale, rotation: rotation, dontFlip: dontFlip }); } }, { key: "getAnnotations", value: function getAnnotations() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref2$intent = _ref2.intent, intent = _ref2$intent === void 0 ? null : _ref2$intent; if (!this.annotationsPromise || this.annotationsIntent !== intent) { this.annotationsPromise = this._transport.getAnnotations(this.pageIndex, intent); this.annotationsIntent = intent; } return this.annotationsPromise; } }, { key: "render", value: function render(_ref3, annotations) { var _this4 = this; var canvasContext = _ref3.canvasContext, viewport = _ref3.viewport, _ref3$intent = _ref3.intent, intent = _ref3$intent === void 0 ? 'display' : _ref3$intent, _ref3$enableWebGL = _ref3.enableWebGL, enableWebGL = _ref3$enableWebGL === void 0 ? false : _ref3$enableWebGL, _ref3$renderInteracti = _ref3.renderInteractiveForms, renderInteractiveForms = _ref3$renderInteracti === void 0 ? false : _ref3$renderInteracti, _ref3$transform = _ref3.transform, transform = _ref3$transform === void 0 ? null : _ref3$transform, _ref3$imageLayer = _ref3.imageLayer, imageLayer = _ref3$imageLayer === void 0 ? null : _ref3$imageLayer, _ref3$canvasFactory = _ref3.canvasFactory, canvasFactory = _ref3$canvasFactory === void 0 ? null : _ref3$canvasFactory, _ref3$background = _ref3.background, background = _ref3$background === void 0 ? null : _ref3$background; var stats = this._stats; stats.time('Overall'); this.pendingCleanup = false; var renderingIntent = intent === 'print' ? 'print' : 'display'; var canvasFactoryInstance = canvasFactory || new _dom_utils.DOMCanvasFactory(); var webGLContext = new _webgl.WebGLContext({ enable: enableWebGL }); if (!this.intentStates[renderingIntent]) { this.intentStates[renderingIntent] = Object.create(null); } var intentState = this.intentStates[renderingIntent]; if (!intentState.displayReadyCapability) { intentState.receivingOperatorList = true; intentState.displayReadyCapability = (0, _util.createPromiseCapability)(); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false }; stats.time('Page Request'); this._transport.messageHandler.send('RenderPageRequest', { pageIndex: this.pageNumber - 1, intent: renderingIntent, renderInteractiveForms: renderInteractiveForms === true }); } var complete = function complete(error) { var i = intentState.renderTasks.indexOf(internalRenderTask); if (i >= 0) { intentState.renderTasks.splice(i, 1); } if (_this4.cleanupAfterRender) { _this4.pendingCleanup = true; } _this4._tryCleanup(); if (error) { internalRenderTask.capability.reject(error); } else { internalRenderTask.capability.resolve(); } stats.timeEnd('Rendering'); stats.timeEnd('Overall'); }; var internalRenderTask = new InternalRenderTask({ callback: complete, params: { canvasContext: canvasContext, viewport: viewport, transform: transform, imageLayer: imageLayer, background: background }, objs: this.objs, commonObjs: this.commonObjs, operatorList: intentState.operatorList, pageNumber: this.pageNumber, canvasFactory: canvasFactoryInstance, webGLContext: webGLContext, useRequestAnimationFrame: renderingIntent !== 'print', pdfBug: this._pdfBug, annotations }); if (!intentState.renderTasks) { intentState.renderTasks = []; } intentState.renderTasks.push(internalRenderTask); var renderTask = internalRenderTask.task; intentState.displayReadyCapability.promise.then(function (transparency) { if (_this4.pendingCleanup) { complete(); return; } stats.time('Rendering'); internalRenderTask.initializeGraphics(transparency); internalRenderTask.operatorListChanged(); }).catch(complete); return renderTask; } }, { key: "getOperatorList", value: function getOperatorList() { function operatorListChanged() { if (intentState.operatorList.lastChunk) { intentState.opListReadCapability.resolve(intentState.operatorList); var i = intentState.renderTasks.indexOf(opListTask); if (i >= 0) { intentState.renderTasks.splice(i, 1); } } } var renderingIntent = 'oplist'; if (!this.intentStates[renderingIntent]) { this.intentStates[renderingIntent] = Object.create(null); } var intentState = this.intentStates[renderingIntent]; var opListTask; if (!intentState.opListReadCapability) { opListTask = {}; opListTask.operatorListChanged = operatorListChanged; intentState.receivingOperatorList = true; intentState.opListReadCapability = (0, _util.createPromiseCapability)(); intentState.renderTasks = []; intentState.renderTasks.push(opListTask); intentState.operatorList = { fnArray: [], argsArray: [], lastChunk: false }; this._stats.time('Page Request'); this._transport.messageHandler.send('RenderPageRequest', { pageIndex: this.pageIndex, intent: renderingIntent }); } return intentState.opListReadCapability.promise; } }, { key: "streamTextContent", value: function streamTextContent() { var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref4$normalizeWhites = _ref4.normalizeWhitespace, normalizeWhitespace = _ref4$normalizeWhites === void 0 ? false : _ref4$normalizeWhites, _ref4$disableCombineT = _ref4.disableCombineTextItems, disableCombineTextItems = _ref4$disableCombineT === void 0 ? false : _ref4$disableCombineT; var TEXT_CONTENT_CHUNK_SIZE = 100; return this._transport.messageHandler.sendWithStream('GetTextContent', { pageIndex: this.pageNumber - 1, normalizeWhitespace: normalizeWhitespace === true, combineTextItems: disableCombineTextItems !== true }, { highWaterMark: TEXT_CONTENT_CHUNK_SIZE, size: function size(textContent) { return textContent.items.length; } }); } }, { key: "getTextContent", value: function getTextContent() { var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var readableStream = this.streamTextContent(params); return new Promise(function (resolve, reject) { function pump() { reader.read().then(function (_ref5) { var _textContent$items; var value = _ref5.value, done = _ref5.done; if (done) { resolve(textContent); return; } Object.assign(textContent.styles, value.styles); (_textContent$items = textContent.items).push.apply(_textContent$items, _toConsumableArray(value.items)); pump(); }, reject); } var reader = readableStream.getReader(); var textContent = { items: [], styles: Object.create(null) }; pump(); }); } }, { key: "_destroy", value: function _destroy() { this.destroyed = true; this._transport.pageCache[this.pageIndex] = null; var waitOn = []; Object.keys(this.intentStates).forEach(function (intent) { if (intent === 'oplist') { return; } var intentState = this.intentStates[intent]; intentState.renderTasks.forEach(function (renderTask) { var renderCompleted = renderTask.capability.promise.catch(function () {}); waitOn.push(renderCompleted); renderTask.cancel(); }); }, this); this.objs.clear(); this.annotationsPromise = null; this.pendingCleanup = false; return Promise.all(waitOn); } }, { key: "cleanup", value: function cleanup() { var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; this.pendingCleanup = true; this._tryCleanup(resetStats); } }, { key: "_tryCleanup", value: function _tryCleanup() { var resetStats = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (!this.pendingCleanup || Object.keys(this.intentStates).some(function (intent) { var intentState = this.intentStates[intent]; return intentState.renderTasks.length !== 0 || intentState.receivingOperatorList; }, this)) { return; } Object.keys(this.intentStates).forEach(function (intent) { delete this.intentStates[intent]; }, this); this.objs.clear(); this.annotationsPromise = null; if (resetStats && this._stats instanceof _dom_utils.StatTimer) { this._stats = new _dom_utils.StatTimer(); } this.pendingCleanup = false; } }, { key: "_startRenderPage", value: function _startRenderPage(transparency, intent) { var intentState = this.intentStates[intent]; if (intentState.displayReadyCapability) { intentState.displayReadyCapability.resolve(transparency); } } }, { key: "_renderPageChunk", value: function _renderPageChunk(operatorListChunk, intent) { var intentState = this.intentStates[intent]; for (var 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 (var _i = 0; _i < intentState.renderTasks.length; _i++) { intentState.renderTasks[_i].operatorListChanged(); } if (operatorListChunk.lastChunk) { intentState.receivingOperatorList = false; this._tryCleanup(); } } }, { key: "pageNumber", get: function get() { return this.pageIndex + 1; } }, { key: "rotate", get: function get() { return this._pageInfo.rotate; } }, { key: "ref", get: function get() { return this._pageInfo.ref; } }, { key: "userUnit", get: function get() { return this._pageInfo.userUnit; } }, { key: "view", get: function get() { return this._pageInfo.view; } }, { key: "stats", get: function get() { return this._stats instanceof _dom_utils.StatTimer ? this._stats : null; } }]); return PDFPageProxy; }(); exports.PDFPageProxy = PDFPageProxy; var LoopbackPort = /*#__PURE__*/ function () { function LoopbackPort() { var defer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; _classCallCheck(this, LoopbackPort); this._listeners = []; this._defer = defer; this._deferred = Promise.resolve(undefined); } _createClass(LoopbackPort, [{ key: "postMessage", value: function postMessage(obj, transfers) { var _this5 = this; function cloneValue(value) { if (_typeof(value) !== 'object' || value === null) { return value; } if (cloned.has(value)) { return cloned.get(value); } var buffer, result; if ((buffer = value.buffer) && (0, _util.isArrayBuffer)(buffer)) { var transferable = transfers && transfers.includes(buffer); if (value === buffer) { result = value; } else if (transferable) { result = new value.constructor(buffer, value.byteOffset, value.byteLength); } else { result = new value.constructor(value); } cloned.set(value, result); return result; } result = Array.isArray(value) ? [] : {}; cloned.set(value, result); for (var i in value) { var desc = void 0, p = value; while (!(desc = Object.getOwnPropertyDescriptor(p, i))) { p = Object.getPrototypeOf(p); } if (typeof desc.value === 'undefined' || typeof desc.value === 'function') { continue; } result[i] = cloneValue(desc.value); } return result; } if (!this._defer) { this._listeners.forEach(function (listener) { listener.call(this, { data: obj }); }, this); return; } var cloned = new WeakMap(); var e = { data: cloneValue(obj) }; this._deferred.then(function () { _this5._listeners.forEach(function (listener) { listener.call(this, e); }, _this5); }); } }, { key: "addEventListener", value: function addEventListener(name, listener) { this._listeners.push(listener); } }, { key: "removeEventListener", value: function removeEventListener(name, listener) { var i = this._listeners.indexOf(listener); this._listeners.splice(i, 1); } }, { key: "terminate", value: function terminate() { this._listeners = []; } }]); return LoopbackPort; }(); exports.LoopbackPort = LoopbackPort; var PDFWorker = function PDFWorkerClosure() { var pdfWorkerPorts = new WeakMap(); var nextFakeWorkerId = 0; var fakeWorkerFilesLoadedCapability; function _getWorkerSrc() { if (_worker_options.GlobalWorkerOptions.workerSrc) { return _worker_options.GlobalWorkerOptions.workerSrc; } if (typeof fallbackWorkerSrc !== 'undefined') { return fallbackWorkerSrc; } throw new Error('No "GlobalWorkerOptions.workerSrc" specified.'); } function getMainThreadWorkerMessageHandler() { try { if (typeof window !== 'undefined') { return window.extracthighlightsWorker && window.extracthighlightsWorker.WorkerMessageHandler; } } catch (ex) {} return null; } function setupFakeWorkerGlobal() { if (fakeWorkerFilesLoadedCapability) { return fakeWorkerFilesLoadedCapability.promise; } fakeWorkerFilesLoadedCapability = (0, _util.createPromiseCapability)(); var mainWorkerMessageHandler = getMainThreadWorkerMessageHandler(); if (mainWorkerMessageHandler) { fakeWorkerFilesLoadedCapability.resolve(mainWorkerMessageHandler); return fakeWorkerFilesLoadedCapability.promise; } var loader = fakeWorkerFilesLoader || function () { return (0, _dom_utils.loadScript)(_getWorkerSrc()).then(function () { return window.extracthighlightsWorker.WorkerMessageHandler; }); }; loader().then(fakeWorkerFilesLoadedCapability.resolve, fakeWorkerFilesLoadedCapability.reject); return fakeWorkerFilesLoadedCapability.promise; } function createCDNWrapper(url) { var wrapper = 'importScripts(\'' + url + '\');'; return _util.URL.createObjectURL(new Blob([wrapper])); } var PDFWorker = /*#__PURE__*/ function () { function PDFWorker() { var _ref6 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref6$name = _ref6.name, name = _ref6$name === void 0 ? null : _ref6$name, _ref6$port = _ref6.port, port = _ref6$port === void 0 ? null : _ref6$port, _ref6$postMessageTran = _ref6.postMessageTransfers, postMessageTransfers = _ref6$postMessageTran === void 0 ? true : _ref6$postMessageTran, _ref6$verbosity = _ref6.verbosity, verbosity = _ref6$verbosity === void 0 ? (0, _util.getVerbosityLevel)() : _ref6$verbosity; _classCallCheck(this, PDFWorker); if (port && pdfWorkerPorts.has(port)) { throw new Error('Cannot use more than one PDFWorker per port'); } this.name = name; this.destroyed = false; this.postMessageTransfers = postMessageTransfers !== false; this.verbosity = verbosity; this._readyCapability = (0, _util.createPromiseCapability)(); this._port = null; this._webWorker = null; this._messageHandler = null; if (port) { pdfWorkerPorts.set(port, this); this._initializeFromPort(port); return; } this._initialize(); } _createClass(PDFWorker, [{ key: "_initializeFromPort", value: function _initializeFromPort(port) { this._port = port; this._messageHandler = new _message_handler.MessageHandler('main', 'worker', port); this._messageHandler.on('ready', function () {}); this._readyCapability.resolve(); } }, { key: "_initialize", value: function _initialize() { var _this6 = this; if (typeof Worker !== 'undefined' && !isWorkerDisabled && !getMainThreadWorkerMessageHandler()) { var workerSrc = _getWorkerSrc(); try { if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) { workerSrc = createCDNWrapper(new _util.URL(workerSrc, window.location).href); } var worker = new Worker(workerSrc); var messageHandler = new _message_handler.MessageHandler('main', 'worker', worker); var terminateEarly = function terminateEarly() { worker.removeEventListener('error', onWorkerError); messageHandler.destroy(); worker.terminate(); if (_this6.destroyed) { _this6._readyCapability.reject(new Error('Worker was destroyed')); } else { _this6._setupFakeWorker(); } }; var onWorkerError = function onWorkerError() { if (!_this6._webWorker) { terminateEarly(); } }; worker.addEventListener('error', onWorkerError); messageHandler.on('test', function (data) { worker.removeEventListener('error', onWorkerError); if (_this6.destroyed) { terminateEarly(); return; } if (data && data.supportTypedArray) { _this6._messageHandler = messageHandler; _this6._port = worker; _this6._webWorker = worker; if (!data.supportTransfers) { _this6.postMessageTransfers = false; } _this6._readyCapability.resolve(); messageHandler.send('configure', { verbosity: _this6.verbosity }); } else { _this6._setupFakeWorker(); messageHandler.destroy(); worker.terminate(); } }); messageHandler.on('ready', function (data) { worker.removeEventListener('error', onWorkerError); if (_this6.destroyed) { terminateEarly(); return; } try { sendTest(); } catch (e) { _this6._setupFakeWorker(); } }); var sendTest = function sendTest() { var testObj = new Uint8Array([_this6.postMessageTransfers ? 255 : 0]); try { messageHandler.send('test', testObj, [testObj.buffer]); } catch (ex) { (0, _util.info)('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(); } }, { key: "_setupFakeWorker", value: function _setupFakeWorker() { var _this7 = this; if (!isWorkerDisabled) { (0, _util.warn)('Setting up fake worker.'); isWorkerDisabled = true; } setupFakeWorkerGlobal().then(function (WorkerMessageHandler) { if (_this7.destroyed) { _this7._readyCapability.reject(new Error('Worker was destroyed')); return; } var port = new LoopbackPort(); _this7._port = port; var id = 'fake' + nextFakeWorkerId++; var workerHandler = new _message_handler.MessageHandler(id + '_worker', id, port); WorkerMessageHandler.setup(workerHandler, port); var messageHandler = new _message_handler.MessageHandler(id, id + '_worker', port); _this7._messageHandler = messageHandler; _this7._readyCapability.resolve(); }).catch(function (reason) { _this7._readyCapability.reject(new Error("Setting up fake worker failed: \"".concat(reason.message, "\"."))); }); } }, { key: "destroy", value: function destroy() { this.destroyed = true; if (this._webWorker) { this._webWorker.terminate(); this._webWorker = null; } pdfWorkerPorts.delete(this._port); this._port = null; if (this._messageHandler) { this._messageHandler.destroy(); this._messageHandler = null; } } }, { key: "promise", get: function get() { return this._readyCapability.promise; } }, { key: "port", get: function get() { return this._port; } }, { key: "messageHandler", get: function get() { return this._messageHandler; } }], [{ key: "fromPort", value: function fromPort(params) { if (!params || !params.port) { throw new Error('PDFWorker.fromPort - invalid method signature.'); } if (pdfWorkerPorts.has(params.port)) { return pdfWorkerPorts.get(params.port); } return new PDFWorker(params); } }, { key: "getWorkerSrc", value: function getWorkerSrc() { return _getWorkerSrc(); } }]); return PDFWorker; }(); return PDFWorker; }(); exports.PDFWorker = PDFWorker; var WorkerTransport = /*#__PURE__*/ function () { function WorkerTransport(messageHandler, loadingTask, networkStream, params) { _classCallCheck(this, WorkerTransport); this.messageHandler = messageHandler; this.loadingTask = loadingTask; this.commonObjs = new PDFObjects(); this.fontLoader = new _font_loader.FontLoader({ docId: loadingTask.docId, onUnsupportedFeature: this._onUnsupportedFeature.bind(this) }); this._params = params; this.CMapReaderFactory = new params.CMapReaderFactory({ baseUrl: params.cMapUrl, isCompressed: params.cMapPacked }); this.destroyed = false; this.destroyCapability = null; this._passwordCapability = null; this._networkStream = networkStream; this._fullReader = null; this._lastProgress = null; this.pageCache = []; this.pagePromises = []; this.downloadInfoCapability = (0, _util.createPromiseCapability)(); this.setupMessageHandler(); } _createClass(WorkerTransport, [{ key: "destroy", value: function destroy() { var _this8 = this; 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')); } var waitOn = []; this.pageCache.forEach(function (page) { if (page) { waitOn.push(page._destroy()); } }); this.pageCache = []; this.pagePromises = []; var terminated = this.messageHandler.sendWithPromise('Terminate', null); waitOn.push(terminated); Promise.all(waitOn).then(function () { _this8.fontLoader.clear(); if (_this8._networkStream) { _this8._networkStream.cancelAllRequests(); } if (_this8.messageHandler) { _this8.messageHandler.destroy(); _this8.messageHandler = null; } _this8.destroyCapability.resolve(); }, this.destroyCapability.reject); return this.destroyCapability.promise; } }, { key: "setupMessageHandler", value: function setupMessageHandler() { var messageHandler = this.messageHandler, loadingTask = this.loadingTask; messageHandler.on('GetReader', function (data, sink) { var _this9 = this; (0, _util.assert)(this._networkStream); this._fullReader = this._networkStream.getFullReader(); this._fullReader.onProgress = function (evt) { _this9._lastProgress = { loaded: evt.loaded, total: evt.total }; }; sink.onPull = function () { _this9._fullReader.read().then(function (_ref7) { var value = _ref7.value, done = _ref7.done; if (done) { sink.close(); return; } (0, _util.assert)((0, _util.isArrayBuffer)(value)); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch(function (reason) { sink.error(reason); }); }; sink.onCancel = function (reason) { _this9._fullReader.cancel(reason); }; }, this); messageHandler.on('ReaderHeadersReady', function (data) { var _this10 = this; var headersCapability = (0, _util.createPromiseCapability)(); var fullReader = this._fullReader; fullReader.headersReady.then(function () { if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) { if (_this10._lastProgress && loadingTask.onProgress) { loadingTask.onProgress(_this10._lastProgress); } fullReader.onProgress = function (evt) { if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: evt.loaded, total: evt.total }); } }; } headersCapability.resolve({ isStreamingSupported: fullReader.isStreamingSupported, isRangeSupported: fullReader.isRangeSupported, contentLength: fullReader.contentLength }); }, headersCapability.reject); return headersCapability.promise; }, this); messageHandler.on('GetRangeReader', function (data, sink) { (0, _util.assert)(this._networkStream); var rangeReader = this._networkStream.getRangeReader(data.begin, data.end); sink.onPull = function () { rangeReader.read().then(function (_ref8) { var value = _ref8.value, done = _ref8.done; if (done) { sink.close(); return; } (0, _util.assert)((0, _util.isArrayBuffer)(value)); sink.enqueue(new Uint8Array(value), 1, [value]); }).catch(function (reason) { sink.error(reason); }); }; sink.onCancel = function (reason) { rangeReader.cancel(reason); }; }, this); messageHandler.on('GetDoc', function (_ref9) { var pdfInfo = _ref9.pdfInfo; this.numPages = pdfInfo.numPages; this.pdfDocument = new PDFDocumentProxy(pdfInfo, this, loadingTask); loadingTask._capability.resolve(this.pdfDocument); }, this); messageHandler.on('PasswordRequest', function (exception) { var _this11 = this; this._passwordCapability = (0, _util.createPromiseCapability)(); if (loadingTask.onPassword) { var updatePassword = function updatePassword(password) { _this11._passwordCapability.resolve({ password: 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; }, this); messageHandler.on('PasswordException', function (exception) { loadingTask._capability.reject(new _util.PasswordException(exception.message, exception.code)); }, this); messageHandler.on('InvalidPDF', function (exception) { loadingTask._capability.reject(new _util.InvalidPDFException(exception.message)); }, this); messageHandler.on('MissingPDF', function (exception) { loadingTask._capability.reject(new _util.MissingPDFException(exception.message)); }, this); messageHandler.on('UnexpectedResponse', function (exception) { loadingTask._capability.reject(new _util.UnexpectedResponseException(exception.message, exception.status)); }, this); messageHandler.on('UnknownError', function (exception) { loadingTask._capability.reject(new _util.UnknownErrorException(exception.message, exception.details)); }, this); messageHandler.on('DataLoaded', function (data) { if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: data.length, total: data.length }); } this.downloadInfoCapability.resolve(data); }, this); messageHandler.on('StartRenderPage', function (data) { if (this.destroyed) { return; } var page = this.pageCache[data.pageIndex]; page._stats.timeEnd('Page Request'); page._startRenderPage(data.transparency, data.intent); }, this); messageHandler.on('RenderPageChunk', function (data) { if (this.destroyed) { return; } var page = this.pageCache[data.pageIndex]; page._renderPageChunk(data.operatorList, data.intent); }, this); messageHandler.on('commonobj', function (data) { var _this12 = this; if (this.destroyed) { return; } var _data = _slicedToArray(data, 3), id = _data[0], type = _data[1], exportedData = _data[2]; if (this.commonObjs.has(id)) { return; } switch (type) { case 'Font': var params = this._params; if ('error' in exportedData) { var exportedError = exportedData.error; (0, _util.warn)("Error during font loading: ".concat(exportedError)); this.commonObjs.resolve(id, exportedError); break; } var fontRegistry = null; if (params.pdfBug && _global_scope.default.FontInspector && _global_scope.default.FontInspector.enabled) { fontRegistry = { registerFont: function registerFont(font, url) { _global_scope.default['FontInspector'].fontAdded(font, url); } }; } var font = new _font_loader.FontFaceObject(exportedData, { isEvalSupported: params.isEvalSupported, disableFontFace: params.disableFontFace, ignoreErrors: params.ignoreErrors, onUnsupportedFeature: this._onUnsupportedFeature.bind(this), fontRegistry: fontRegistry }); this.fontLoader.bind(font).then(function () { _this12.commonObjs.resolve(id, font); }, function (reason) { messageHandler.sendWithPromise('FontFallback', { id: id }).finally(function () { _this12.commonObjs.resolve(id, font); }); }); break; case 'FontPath': this.commonObjs.resolve(id, exportedData); break; default: throw new Error("Got unknown common object type ".concat(type)); } }, this); messageHandler.on('obj', function (data) { if (this.destroyed) { return; } var _data2 = _slicedToArray(data, 4), id = _data2[0], pageIndex = _data2[1], type = _data2[2], imageData = _data2[3]; var pageProxy = this.pageCache[pageIndex]; if (pageProxy.objs.has(id)) { return; } switch (type) { case 'JpegStream': return new Promise(function (resolve, reject) { var img = new Image(); img.onload = function () { resolve(img); }; img.onerror = function () { reject(new Error('Error during JPEG image loading')); }; img.src = imageData; }).then(function (img) { pageProxy.objs.resolve(id, img); }); case 'Image': pageProxy.objs.resolve(id, imageData); var MAX_IMAGE_SIZE_TO_STORE = 8000000; if (imageData && 'data' in imageData && imageData.data.length > MAX_IMAGE_SIZE_TO_STORE) { pageProxy.cleanupAfterRender = true; } break; default: throw new Error("Got unknown object type ".concat(type)); } }, this); messageHandler.on('DocProgress', function (data) { if (this.destroyed) { return; } if (loadingTask.onProgress) { loadingTask.onProgress({ loaded: data.loaded, total: data.total }); } }, this); messageHandler.on('PageError', function (data) { if (this.destroyed) { return; } var page = this.pageCache[data.pageNum - 1]; var intentState = page.intentStates[data.intent]; if (intentState.displayReadyCapability) { intentState.displayReadyCapability.reject(data.error); } else { throw new Error(data.error); } if (intentState.operatorList) { intentState.operatorList.lastChunk = true; for (var i = 0; i < intentState.renderTasks.length; i++) { intentState.renderTasks[i].operatorListChanged(); } } }, this); messageHandler.on('UnsupportedFeature', this._onUnsupportedFeature, this); messageHandler.on('JpegDecode', function (data) { if (this.destroyed) { return Promise.reject(new Error('Worker was destroyed')); } if (typeof document === 'undefined') { return Promise.reject(new Error('"document" is not defined.')); } var _data3 = _slicedToArray(data, 2), imageUrl = _data3[0], components = _data3[1]; if (components !== 3 && components !== 1) { return Promise.reject(new Error('Only 3 components or 1 component can be returned')); } return new Promise(function (resolve, reject) { var img = new Image(); img.onload = function () { var width = img.width; var height = img.height; var size = width * height; var rgbaLength = size * 4; var buf = new Uint8ClampedArray(size * components); var tmpCanvas = document.createElement('canvas'); tmpCanvas.width = width; tmpCanvas.height = height; var tmpCtx = tmpCanvas.getContext('2d'); tmpCtx.drawImage(img, 0, 0); var data = tmpCtx.getImageData(0, 0, width, height).data; if (components === 3) { for (var i = 0, j = 0; i < rgbaLength; i += 4, j += 3) { buf[j] = data[i]; buf[j + 1] = data[i + 1]; buf[j + 2] = data[i + 2]; } } else if (components === 1) { for (var _i2 = 0, _j = 0; _i2 < rgbaLength; _i2 += 4, _j++) { buf[_j] = data[_i2]; } } resolve({ data: buf, width: width, height: height }); }; img.onerror = function () { reject(new Error('JpegDecode failed to load image')); }; img.src = imageUrl; }); }, this); messageHandler.on('FetchBuiltInCMap', function (data) { if (this.destroyed) { return Promise.reject(new Error('Worker was destroyed')); } return this.CMapReaderFactory.fetch({ name: data.name }); }, this); } }, { key: "_onUnsupportedFeature", value: function _onUnsupportedFeature(_ref10) { var featureId = _ref10.featureId; if (this.destroyed) { return; } if (this.loadingTask.onUnsupportedFeature) { this.loadingTask.onUnsupportedFeature(featureId); } } }, { key: "getData", value: function getData() { return this.messageHandler.sendWithPromise('GetData', null); } }, { key: "getPage", value: function getPage(pageNumber) { var _this13 = this; if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this.numPages) { return Promise.reject(new Error('Invalid page request')); } var pageIndex = pageNumber - 1; if (pageIndex in this.pagePromises) { return this.pagePromises[pageIndex]; } var promise = this.messageHandler.sendWithPromise('GetPage', { pageIndex: pageIndex }).then(function (pageInfo) { if (_this13.destroyed) { throw new Error('Transport destroyed'); } var page = new PDFPageProxy(pageIndex, pageInfo, _this13, _this13._params.pdfBug); _this13.pageCache[pageIndex] = page; return page; }); this.pagePromises[pageIndex] = promise; return promise; } }, { key: "getPageIndex", value: function getPageIndex(ref) { return this.messageHandler.sendWithPromise('GetPageIndex', { ref: ref }).catch(function (reason) { return Promise.reject(new Error(reason)); }); } }, { key: "getAnnotations", value: function getAnnotations(pageIndex, intent) { return this.messageHandler.sendWithPromise('GetAnnotations', { pageIndex: pageIndex, intent: intent }); } }, { key: "getDestinations", value: function getDestinations() { return this.messageHandler.sendWithPromise('GetDestinations', null); } }, { key: "getDestination", value: function getDestination(id) { if (typeof id !== 'string') { return Promise.reject(new Error('Invalid destination request.')); } return this.messageHandler.sendWithPromise('GetDestination', { id: id }); } }, { key: "getPageLabels", value: function getPageLabels() { return this.messageHandler.sendWithPromise('GetPageLabels', null); } }, { key: "getPageMode", value: function getPageMode() { return this.messageHandler.sendWithPromise('GetPageMode', null); } }, { key: "getOpenActionDestination", value: function getOpenActionDestination() { return this.messageHandler.sendWithPromise('getOpenActionDestination', null); } }, { key: "getAttachments", value: function getAttachments() { return this.messageHandler.sendWithPromise('GetAttachments', null); } }, { key: "getJavaScript", value: function getJavaScript() { return this.messageHandler.sendWithPromise('GetJavaScript', null); } }, { key: "getOutline", value: function getOutline() { return this.messageHandler.sendWithPromise('GetOutline', null); } }, { key: "getPermissions", value: function getPermissions() { return this.messageHandler.sendWithPromise('GetPermissions', null); } }, { key: "getMetadata", value: function getMetadata() { var _this14 = this; return this.messageHandler.sendWithPromise('GetMetadata', null).then(function (results) { return { info: results[0], metadata: results[1] ? new _metadata.Metadata(results[1]) : null, contentDispositionFilename: _this14._fullReader ? _this14._fullReader.filename : null }; }); } }, { key: "getStats", value: function getStats() { return this.messageHandler.sendWithPromise('GetStats', null); } }, { key: "startCleanup", value: function startCleanup() { var _this15 = this; this.messageHandler.sendWithPromise('Cleanup', null).then(function () { for (var i = 0, ii = _this15.pageCache.length; i < ii; i++) { var page = _this15.pageCache[i]; if (page) { page.cleanup(); } } _this15.commonObjs.clear(); _this15.fontLoader.clear(); }); } }, { key: "loadingParams", get: function get() { var params = this._params; return (0, _util.shadow)(this, 'loadingParams', { disableAutoFetch: params.disableAutoFetch, disableCreateObjectURL: params.disableCreateObjectURL, disableFontFace: params.disableFontFace, nativeImageDecoderSupport: params.nativeImageDecoderSupport }); } }]); return WorkerTransport; }(); var PDFObjects = /*#__PURE__*/ function () { function PDFObjects() { _classCallCheck(this, PDFObjects); this._objs = Object.create(null); } _createClass(PDFObjects, [{ key: "_ensureObj", value: function _ensureObj(objId) { if (this._objs[objId]) { return this._objs[objId]; } return this._objs[objId] = { capability: (0, _util.createPromiseCapability)(), data: null, resolved: false }; } }, { key: "get", value: function get(objId) { var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; if (callback) { this._ensureObj(objId).capability.promise.then(callback); return null; } var obj = this._objs[objId]; if (!obj || !obj.resolved) { throw new Error("Requesting object that isn't resolved yet ".concat(objId, ".")); } return obj.data; } }, { key: "has", value: function has(objId) { var obj = this._objs[objId]; return obj ? obj.resolved : false; } }, { key: "resolve", value: function resolve(objId, data) { var obj = this._ensureObj(objId); obj.resolved = true; obj.data = data; obj.capability.resolve(data); } }, { key: "clear", value: function clear() { this._objs = Object.create(null); } }]); return PDFObjects; }(); var RenderTask = /*#__PURE__*/ function () { function RenderTask(internalRenderTask) { _classCallCheck(this, RenderTask); this._internalRenderTask = internalRenderTask; this.onContinue = null; } _createClass(RenderTask, [{ key: "cancel", value: function cancel() { this._internalRenderTask.cancel(); } }, { key: "then", value: function then(onFulfilled, onRejected) { (0, _util.deprecated)('RenderTask.then method, use the `promise` getter instead.'); return this.promise.then.apply(this.promise, arguments); } }, { key: "promise", get: function get() { return this._internalRenderTask.capability.promise; } }]); return RenderTask; }(); var InternalRenderTask = function InternalRenderTaskClosure() { var canvasInRendering = new WeakSet(); var InternalRenderTask = /*#__PURE__*/ function () { function InternalRenderTask(_ref11) { var callback = _ref11.callback, params = _ref11.params, objs = _ref11.objs, commonObjs = _ref11.commonObjs, operatorList = _ref11.operatorList, pageNumber = _ref11.pageNumber, canvasFactory = _ref11.canvasFactory, webGLContext = _ref11.webGLContext, _ref11$useRequestAnim = _ref11.useRequestAnimationFrame, useRequestAnimationFrame = _ref11$useRequestAnim === void 0 ? false : _ref11$useRequestAnim, _ref11$pdfBug = _ref11.pdfBug, pdfBug = _ref11$pdfBug === void 0 ? false : _ref11$pdfBug, annotations = _ref11.annotations; _classCallCheck(this, InternalRenderTask); this.callback = callback; this.params = params; this.objs = objs; this.commonObjs = commonObjs; this.operatorListIdx = null; this.operatorList = operatorList; this.pageNumber = pageNumber; this.canvasFactory = canvasFactory; this.webGLContext = webGLContext; 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._continueBound = this._continue.bind(this); this._scheduleNextBound = this._scheduleNext.bind(this); this._nextBound = this._next.bind(this); this._canvas = params.canvasContext.canvas; this.annotations = annotations; } _createClass(InternalRenderTask, [{ key: "initializeGraphics", value: function initializeGraphics() { var transparency = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (this.cancelled) { return; } if (this._canvas) { if (canvasInRendering.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.'); } canvasInRendering.add(this._canvas); } if (this._pdfBug && _global_scope.default.StepperManager && _global_scope.default.StepperManager.enabled) { this.stepper = _global_scope.default.StepperManager.create(this.pageNumber - 1); this.stepper.init(this.operatorList); this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint(); } var _this$params = this.params, canvasContext = _this$params.canvasContext, viewport = _this$params.viewport, transform = _this$params.transform, imageLayer = _this$params.imageLayer, background = _this$params.background; this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, this.webGLContext, imageLayer, this.annotations); this.gfx.beginDrawing({ transform: transform, viewport: viewport, transparency: transparency, background: background }); this.operatorListIdx = 0; this.graphicsReady = true; if (this.graphicsReadyCallback) { this.graphicsReadyCallback(); } } }, { key: "cancel", value: function cancel() { var error = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; this.running = false; this.cancelled = true; if (this.gfx) { this.gfx.endDrawing(); } if (this._canvas) { canvasInRendering.delete(this._canvas); } this.callback(error || new _dom_utils.RenderingCancelledException("Rendering cancelled, page ".concat(this.pageNumber), 'canvas')); } }, { key: "operatorListChanged", value: function 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(); } }, { key: "_continue", value: function _continue() { this.running = true; if (this.cancelled) { return; } if (this.task.onContinue) { this.task.onContinue(this._scheduleNextBound); } else { this._scheduleNext(); } } }, { key: "_scheduleNext", value: function _scheduleNext() { var _this16 = this; if (this._useRequestAnimationFrame) { window.requestAnimationFrame(function () { _this16._nextBound().catch(_this16.cancel.bind(_this16)); }); } else { Promise.resolve().then(this._nextBound).catch(this.cancel.bind(this)); } } }, { key: "_next", value: function () { var _next2 = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee() { return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!this.cancelled) { _context.next = 2; break; } return _context.abrupt("return"); case 2: 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) { canvasInRendering.delete(this._canvas); } this.callback(); } } case 4: case "end": return _context.stop(); } } }, _callee, this); })); function _next() { return _next2.apply(this, arguments); } return _next; }() }]); return InternalRenderTask; }(); return InternalRenderTask; }(); var version = '2.1.266'; exports.version = version; var build = '81f5835c'; exports.build = build; /***/ }), /* 147 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = __w_extracthighlights_require__(148); /***/ }), /* 148 */ /***/ (function(module, exports, __w_extracthighlights_require__) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } var g = function () { return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; }() || Function("return this")(); var hadRuntime = g.regeneratorRuntime && Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0; var oldRuntime = hadRuntime && g.regeneratorRuntime; g.regeneratorRuntime = undefined; module.exports = __w_extracthighlights_require__(149); if (hadRuntime) { g.regeneratorRuntime = oldRuntime; } else { try { delete g.regeneratorRuntime; } catch (e) { g.regeneratorRuntime = undefined; } } /***/ }), /* 149 */ /***/ (function(module, exports, __w_extracthighlights_require__) { /* WEBPACK VAR INJECTION */(function(module) { function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } !function (global) { var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; var undefined$1; var $Symbol = typeof Symbol === "function" ? Symbol : {}; var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; var inModule = ( _typeof(module)) === "object"; var runtime = global.regeneratorRuntime; if (runtime) { if (inModule) { module.exports = runtime; } return; } runtime = global.regeneratorRuntime = inModule ? module.exports : {}; function wrap(innerFn, outerFn, self, tryLocsList) { var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator; var generator = Object.create(protoGenerator.prototype); var context = new Context(tryLocsList || []); generator._invoke = makeInvokeMethod(innerFn, self, context); return generator; } runtime.wrap = wrap; function tryCatch(fn, obj, arg) { try { return { type: "normal", arg: fn.call(obj, arg) }; } catch (err) { return { type: "throw", arg: err }; } } var GenStateSuspendedStart = "suspendedStart"; var GenStateSuspendedYield = "suspendedYield"; var GenStateExecuting = "executing"; var GenStateCompleted = "completed"; var ContinueSentinel = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var IteratorPrototype = {}; IteratorPrototype[iteratorSymbol] = function () { return this; }; var getProto = Object.getPrototypeOf; var NativeIteratorPrototype = getProto && getProto(getProto(values([]))); if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) { IteratorPrototype = NativeIteratorPrototype; } var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype); GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype; GeneratorFunctionPrototype.constructor = GeneratorFunction; GeneratorFunctionPrototype[toStringTagSymbol] = GeneratorFunction.displayName = "GeneratorFunction"; function defineIteratorMethods(prototype) { ["next", "throw", "return"].forEach(function (method) { prototype[method] = function (arg) { return this._invoke(method, arg); }; }); } runtime.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; runtime.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { genFun.__proto__ = GeneratorFunctionPrototype; if (!(toStringTagSymbol in genFun)) { genFun[toStringTagSymbol] = "GeneratorFunction"; } } genFun.prototype = Object.create(Gp); return genFun; }; runtime.awrap = function (arg) { return { __await: arg }; }; function AsyncIterator(generator) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); if (record.type === "throw") { reject(record.arg); } else { var result = record.arg; var value = result.value; if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { return Promise.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } return Promise.resolve(value).then(function (unwrapped) { result.value = unwrapped; resolve(result); }, function (error) { return invoke("throw", error, resolve, reject); }); } } var previousPromise; function enqueue(method, arg) { function callInvokeWithMethodAndArg() { return new Promise(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } this._invoke = enqueue; } defineIteratorMethods(AsyncIterator.prototype); AsyncIterator.prototype[asyncIteratorSymbol] = function () { return this; }; runtime.AsyncIterator = AsyncIterator; runtime.async = function (innerFn, outerFn, self, tryLocsList) { var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); return runtime.isGeneratorFunction(outerFn) ? iter : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); }; function makeInvokeMethod(innerFn, self, context) { var state = GenStateSuspendedStart; return function invoke(method, arg) { if (state === GenStateExecuting) { throw new Error("Generator is already running"); } if (state === GenStateCompleted) { if (method === "throw") { throw arg; } return doneResult(); } context.method = method; context.arg = arg; while (true) { var delegate = context.delegate; if (delegate) { var delegateResult = maybeInvokeDelegate(delegate, context); if (delegateResult) { if (delegateResult === ContinueSentinel) continue; return delegateResult; } } if (context.method === "next") { context.sent = context._sent = context.arg; } else if (context.method === "throw") { if (state === GenStateSuspendedStart) { state = GenStateCompleted; throw context.arg; } context.dispatchException(context.arg); } else if (context.method === "return") { context.abrupt("return", context.arg); } state = GenStateExecuting; var record = tryCatch(innerFn, self, context); if (record.type === "normal") { state = context.done ? GenStateCompleted : GenStateSuspendedYield; if (record.arg === ContinueSentinel) { continue; } return { value: record.arg, done: context.done }; } else if (record.type === "throw") { state = GenStateCompleted; context.method = "throw"; context.arg = record.arg; } } }; } function maybeInvokeDelegate(delegate, context) { var method = delegate.iterator[context.method]; if (method === undefined$1) { context.delegate = null; if (context.method === "throw") { if (delegate.iterator.return) { context.method = "return"; context.arg = undefined$1; maybeInvokeDelegate(delegate, context); if (context.method === "throw") { return ContinueSentinel; } } context.method = "throw"; context.arg = new TypeError("The iterator does not provide a 'throw' method"); } return ContinueSentinel; } var record = tryCatch(method, delegate.iterator, context.arg); if (record.type === "throw") { context.method = "throw"; context.arg = record.arg; context.delegate = null; return ContinueSentinel; } var info = record.arg; if (!info) { context.method = "throw"; context.arg = new TypeError("iterator result is not an object"); context.delegate = null; return ContinueSentinel; } if (info.done) { context[delegate.resultName] = info.value; context.next = delegate.nextLoc; if (context.method !== "return") { context.method = "next"; context.arg = undefined$1; } } else { return info; } context.delegate = null; return ContinueSentinel; } defineIteratorMethods(Gp); Gp[toStringTagSymbol] = "Generator"; Gp[iteratorSymbol] = function () { return this; }; Gp.toString = function () { return "[object Generator]"; }; function pushTryEntry(locs) { var entry = { tryLoc: locs[0] }; if (1 in locs) { entry.catchLoc = locs[1]; } if (2 in locs) { entry.finallyLoc = locs[2]; entry.afterLoc = locs[3]; } this.tryEntries.push(entry); } function resetTryEntry(entry) { var record = entry.completion || {}; record.type = "normal"; delete record.arg; entry.completion = record; } function Context(tryLocsList) { this.tryEntries = [{ tryLoc: "root" }]; tryLocsList.forEach(pushTryEntry, this); this.reset(true); } runtime.keys = function (object) { var keys = []; for (var key in object) { keys.push(key); } keys.reverse(); return function next() { while (keys.length) { var key = keys.pop(); if (key in object) { next.value = key; next.done = false; return next; } } next.done = true; return next; }; }; function values(iterable) { if (iterable) { var iteratorMethod = iterable[iteratorSymbol]; if (iteratorMethod) { return iteratorMethod.call(iterable); } if (typeof iterable.next === "function") { return iterable; } if (!isNaN(iterable.length)) { var i = -1, next = function next() { while (++i < iterable.length) { if (hasOwn.call(iterable, i)) { next.value = iterable[i]; next.done = false; return next; } } next.value = undefined$1; next.done = true; return next; }; return next.next = next; } } return { next: doneResult }; } runtime.values = values; function doneResult() { return { value: undefined$1, done: true }; } Context.prototype = { constructor: Context, reset: function reset(skipTempReset) { this.prev = 0; this.next = 0; this.sent = this._sent = undefined$1; this.done = false; this.delegate = null; this.method = "next"; this.arg = undefined$1; this.tryEntries.forEach(resetTryEntry); if (!skipTempReset) { for (var name in this) { if (name.charAt(0) === "t" && hasOwn.call(this, name) && !isNaN(+name.slice(1))) { this[name] = undefined$1; } } } }, stop: function stop() { this.done = true; var rootEntry = this.tryEntries[0]; var rootRecord = rootEntry.completion; if (rootRecord.type === "throw") { throw rootRecord.arg; } return this.rval; }, dispatchException: function dispatchException(exception) { if (this.done) { throw exception; } var context = this; function handle(loc, caught) { record.type = "throw"; record.arg = exception; context.next = loc; if (caught) { context.method = "next"; context.arg = undefined$1; } return !!caught; } for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; var record = entry.completion; if (entry.tryLoc === "root") { return handle("end"); } if (entry.tryLoc <= this.prev) { var hasCatch = hasOwn.call(entry, "catchLoc"); var hasFinally = hasOwn.call(entry, "finallyLoc"); if (hasCatch && hasFinally) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } else if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else if (hasCatch) { if (this.prev < entry.catchLoc) { return handle(entry.catchLoc, true); } } else if (hasFinally) { if (this.prev < entry.finallyLoc) { return handle(entry.finallyLoc); } } else { throw new Error("try statement without catch or finally"); } } } }, abrupt: function abrupt(type, arg) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc <= this.prev && hasOwn.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) { var finallyEntry = entry; break; } } if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) { finallyEntry = null; } var record = finallyEntry ? finallyEntry.completion : {}; record.type = type; record.arg = arg; if (finallyEntry) { this.method = "next"; this.next = finallyEntry.finallyLoc; return ContinueSentinel; } return this.complete(record); }, complete: function complete(record, afterLoc) { if (record.type === "throw") { throw record.arg; } if (record.type === "break" || record.type === "continue") { this.next = record.arg; } else if (record.type === "return") { this.rval = this.arg = record.arg; this.method = "return"; this.next = "end"; } else if (record.type === "normal" && afterLoc) { this.next = afterLoc; } return ContinueSentinel; }, finish: function finish(finallyLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.finallyLoc === finallyLoc) { this.complete(entry.completion, entry.afterLoc); resetTryEntry(entry); return ContinueSentinel; } } }, "catch": function _catch(tryLoc) { for (var i = this.tryEntries.length - 1; i >= 0; --i) { var entry = this.tryEntries[i]; if (entry.tryLoc === tryLoc) { var record = entry.completion; if (record.type === "throw") { var thrown = record.arg; resetTryEntry(entry); } return thrown; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(iterable, resultName, nextLoc) { this.delegate = { iterator: values(iterable), resultName: resultName, nextLoc: nextLoc }; if (this.method === "next") { this.arg = undefined$1; } return ContinueSentinel; } }; }(function () { return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; }() || Function("return this")()); /* WEBPACK VAR INJECTION */}.call(this, __w_extracthighlights_require__(150)(module))); /***/ }), /* 150 */ /***/ (function(module, exports, __w_extracthighlights_require__) { module.exports = function (module) { if (!module.webpackPolyfill) { module.deprecate = function () {}; module.paths = []; if (!module.children) module.children = []; Object.defineProperty(module, "loaded", { enumerable: true, get: function get() { return module.l; } }); Object.defineProperty(module, "id", { enumerable: true, get: function get() { return module.i; } }); module.webpackPolyfill = 1; } return module; }; /***/ }), /* 151 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.addLinkAttributes = addLinkAttributes; exports.getFilenameFromUrl = getFilenameFromUrl; exports.loadScript = loadScript; exports.DummyStatTimer = exports.StatTimer = exports.DOMSVGFactory = exports.DOMCMapReaderFactory = exports.DOMCanvasFactory = exports.DEFAULT_LINK_REL = exports.LinkTarget = exports.RenderingCancelledException = exports.PageViewport = void 0; var _util = __w_extracthighlights_require__(1); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var DEFAULT_LINK_REL = 'noopener noreferrer nofollow'; exports.DEFAULT_LINK_REL = DEFAULT_LINK_REL; var SVG_NS = 'http://www.w3.org/2000/svg'; var DOMCanvasFactory = /*#__PURE__*/ function () { function DOMCanvasFactory() { _classCallCheck(this, DOMCanvasFactory); } _createClass(DOMCanvasFactory, [{ key: "create", value: function create(width, height) { if (width <= 0 || height <= 0) { throw new Error('invalid canvas size'); } var canvas = document.createElement('canvas'); var context = canvas.getContext('2d'); canvas.width = width; canvas.height = height; return { canvas: canvas, context: context }; } }, { key: "reset", value: function 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; } }, { key: "destroy", value: function 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; } }]); return DOMCanvasFactory; }(); exports.DOMCanvasFactory = DOMCanvasFactory; var DOMCMapReaderFactory = /*#__PURE__*/ function () { function DOMCMapReaderFactory(_ref) { var _ref$baseUrl = _ref.baseUrl, baseUrl = _ref$baseUrl === void 0 ? null : _ref$baseUrl, _ref$isCompressed = _ref.isCompressed, isCompressed = _ref$isCompressed === void 0 ? false : _ref$isCompressed; _classCallCheck(this, DOMCMapReaderFactory); this.baseUrl = baseUrl; this.isCompressed = isCompressed; } _createClass(DOMCMapReaderFactory, [{ key: "fetch", value: function fetch(_ref2) { var _this = this; var name = _ref2.name; if (!this.baseUrl) { return Promise.reject(new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.')); } if (!name) { return Promise.reject(new Error('CMap name must be specified.')); } return new Promise(function (resolve, reject) { var url = _this.baseUrl + name + (_this.isCompressed ? '.bcmap' : ''); var request = new XMLHttpRequest(); request.open('GET', url, true); if (_this.isCompressed) { request.responseType = 'arraybuffer'; } request.onreadystatechange = function () { if (request.readyState !== XMLHttpRequest.DONE) { return; } if (request.status === 200 || request.status === 0) { var data; if (_this.isCompressed && request.response) { data = new Uint8Array(request.response); } else if (!_this.isCompressed && request.responseText) { data = (0, _util.stringToBytes)(request.responseText); } if (data) { resolve({ cMapData: data, compressionType: _this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE }); return; } } reject(new Error('Unable to load ' + (_this.isCompressed ? 'binary ' : '') + 'CMap at: ' + url)); }; request.send(null); }); } }]); return DOMCMapReaderFactory; }(); exports.DOMCMapReaderFactory = DOMCMapReaderFactory; var DOMSVGFactory = /*#__PURE__*/ function () { function DOMSVGFactory() { _classCallCheck(this, DOMSVGFactory); } _createClass(DOMSVGFactory, [{ key: "create", value: function create(width, height) { (0, _util.assert)(width > 0 && height > 0, 'Invalid SVG dimensions'); var svg = document.createElementNS(SVG_NS, '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; } }, { key: "createElement", value: function createElement(type) { (0, _util.assert)(typeof type === 'string', 'Invalid SVG element type'); return document.createElementNS(SVG_NS, type); } }]); return DOMSVGFactory; }(); exports.DOMSVGFactory = DOMSVGFactory; var PageViewport = /*#__PURE__*/ function () { function PageViewport(_ref3) { var viewBox = _ref3.viewBox, scale = _ref3.scale, rotation = _ref3.rotation, _ref3$offsetX = _ref3.offsetX, offsetX = _ref3$offsetX === void 0 ? 0 : _ref3$offsetX, _ref3$offsetY = _ref3.offsetY, offsetY = _ref3$offsetY === void 0 ? 0 : _ref3$offsetY, _ref3$dontFlip = _ref3.dontFlip, dontFlip = _ref3$dontFlip === void 0 ? false : _ref3$dontFlip; _classCallCheck(this, PageViewport); this.viewBox = viewBox; this.scale = scale; this.rotation = rotation; this.offsetX = offsetX; this.offsetY = offsetY; var centerX = (viewBox[2] + viewBox[0]) / 2; var centerY = (viewBox[3] + viewBox[1]) / 2; var rotateA, rotateB, rotateC, rotateD; rotation = rotation % 360; rotation = rotation < 0 ? rotation + 360 : rotation; 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; default: rotateA = 1; rotateB = 0; rotateC = 0; rotateD = -1; break; } if (dontFlip) { rotateC = -rotateC; rotateD = -rotateD; } var offsetCanvasX, offsetCanvasY; var 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; } _createClass(PageViewport, [{ key: "clone", value: function clone() { var _ref4 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref4$scale = _ref4.scale, scale = _ref4$scale === void 0 ? this.scale : _ref4$scale, _ref4$rotation = _ref4.rotation, rotation = _ref4$rotation === void 0 ? this.rotation : _ref4$rotation, _ref4$dontFlip = _ref4.dontFlip, dontFlip = _ref4$dontFlip === void 0 ? false : _ref4$dontFlip; return new PageViewport({ viewBox: this.viewBox.slice(), scale: scale, rotation: rotation, offsetX: this.offsetX, offsetY: this.offsetY, dontFlip: dontFlip }); } }, { key: "convertToViewportPoint", value: function convertToViewportPoint(x, y) { return _util.Util.applyTransform([x, y], this.transform); } }, { key: "convertToViewportRectangle", value: function convertToViewportRectangle(rect) { var tl = _util.Util.applyTransform([rect[0], rect[1]], this.transform); var br = _util.Util.applyTransform([rect[2], rect[3]], this.transform); return [tl[0], tl[1], br[0], br[1]]; } }, { key: "convertToPdfPoint", value: function convertToPdfPoint(x, y) { return _util.Util.applyInverseTransform([x, y], this.transform); } }]); return PageViewport; }(); exports.PageViewport = PageViewport; var RenderingCancelledException = function RenderingCancelledException() { function RenderingCancelledException(msg, type) { this.message = msg; this.type = type; } RenderingCancelledException.prototype = new Error(); RenderingCancelledException.prototype.name = 'RenderingCancelledException'; RenderingCancelledException.constructor = RenderingCancelledException; return RenderingCancelledException; }(); exports.RenderingCancelledException = RenderingCancelledException; var LinkTarget = { NONE: 0, SELF: 1, BLANK: 2, PARENT: 3, TOP: 4 }; exports.LinkTarget = LinkTarget; var LinkTargetStringMap = ['', '_self', '_blank', '_parent', '_top']; function addLinkAttributes(link) { var _ref5 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, url = _ref5.url, target = _ref5.target, rel = _ref5.rel; link.href = link.title = url ? (0, _util.removeNullCharacters)(url) : ''; if (url) { var LinkTargetValues = Object.values(LinkTarget); var targetIndex = LinkTargetValues.includes(target) ? target : LinkTarget.NONE; link.target = LinkTargetStringMap[targetIndex]; link.rel = typeof rel === 'string' ? rel : DEFAULT_LINK_REL; } } function getFilenameFromUrl(url) { var anchor = url.indexOf('#'); var query = url.indexOf('?'); var end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length); return url.substring(url.lastIndexOf('/', end) + 1, end); } var StatTimer = /*#__PURE__*/ function () { function StatTimer() { var enable = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; _classCallCheck(this, StatTimer); this.enabled = !!enable; this.started = Object.create(null); this.times = []; } _createClass(StatTimer, [{ key: "time", value: function time(name) { if (!this.enabled) { return; } if (name in this.started) { (0, _util.warn)('Timer is already running for ' + name); } this.started[name] = Date.now(); } }, { key: "timeEnd", value: function timeEnd(name) { if (!this.enabled) { return; } if (!(name in this.started)) { (0, _util.warn)('Timer has not been started for ' + name); } this.times.push({ 'name': name, 'start': this.started[name], 'end': Date.now() }); delete this.started[name]; } }, { key: "toString", value: function toString() { var times = this.times; var out = '', longest = 0; for (var i = 0, ii = times.length; i < ii; ++i) { var name = times[i]['name']; if (name.length > longest) { longest = name.length; } } for (var _i = 0, _ii = times.length; _i < _ii; ++_i) { var span = times[_i]; var duration = span.end - span.start; out += "".concat(span['name'].padEnd(longest), " ").concat(duration, "ms\n"); } return out; } }]); return StatTimer; }(); exports.StatTimer = StatTimer; var DummyStatTimer = /*#__PURE__*/ function () { function DummyStatTimer() { _classCallCheck(this, DummyStatTimer); (0, _util.unreachable)('Cannot initialize DummyStatTimer.'); } _createClass(DummyStatTimer, null, [{ key: "time", value: function time(name) {} }, { key: "timeEnd", value: function timeEnd(name) {} }, { key: "toString", value: function toString() { return ''; } }]); return DummyStatTimer; }(); exports.DummyStatTimer = DummyStatTimer; function loadScript(src) { return new Promise(function (resolve, reject) { var script = document.createElement('script'); script.src = src; script.onload = resolve; script.onerror = function () { reject(new Error("Cannot load script at: ".concat(script.src))); }; (document.head || document.documentElement).appendChild(script); }); } /***/ }), /* 152 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.FontLoader = exports.FontFaceObject = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); var _util = __w_extracthighlights_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var BaseFontLoader = /*#__PURE__*/ function () { function BaseFontLoader(_ref) { var docId = _ref.docId, onUnsupportedFeature = _ref.onUnsupportedFeature; _classCallCheck(this, BaseFontLoader); if (this.constructor === BaseFontLoader) { (0, _util.unreachable)('Cannot initialize BaseFontLoader.'); } this.docId = docId; this._onUnsupportedFeature = onUnsupportedFeature; this.nativeFontFaces = []; this.styleElement = null; } _createClass(BaseFontLoader, [{ key: "addNativeFontFace", value: function addNativeFontFace(nativeFontFace) { this.nativeFontFaces.push(nativeFontFace); document.fonts.add(nativeFontFace); } }, { key: "insertRule", value: function insertRule(rule) { var styleElement = this.styleElement; if (!styleElement) { styleElement = this.styleElement = document.createElement('style'); styleElement.id = "extracthighlights_FONT_STYLE_TAG_".concat(this.docId); document.documentElement.getElementsByTagName('head')[0].appendChild(styleElement); } var styleSheet = styleElement.sheet; styleSheet.insertRule(rule, styleSheet.cssRules.length); } }, { key: "clear", value: function clear() { this.nativeFontFaces.forEach(function (nativeFontFace) { document.fonts.delete(nativeFontFace); }); this.nativeFontFaces.length = 0; if (this.styleElement) { this.styleElement.remove(); this.styleElement = null; } } }, { key: "bind", value: function () { var _bind = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee(font) { var _this = this; var nativeFontFace, rule; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(font.attached || font.missingFile)) { _context.next = 2; break; } return _context.abrupt("return"); case 2: font.attached = true; if (!this.isFontLoadingAPISupported) { _context.next = 19; break; } nativeFontFace = font.createNativeFontFace(); if (!nativeFontFace) { _context.next = 18; break; } this.addNativeFontFace(nativeFontFace); _context.prev = 7; _context.next = 10; return nativeFontFace.loaded; case 10: _context.next = 18; break; case 12: _context.prev = 12; _context.t0 = _context["catch"](7); this._onUnsupportedFeature({ featureId: _util.UNSUPPORTED_FEATURES.font }); (0, _util.warn)("Failed to load font '".concat(nativeFontFace.family, "': '").concat(_context.t0, "'.")); font.disableFontFace = true; throw _context.t0; case 18: return _context.abrupt("return"); case 19: rule = font.createFontFaceRule(); if (!rule) { _context.next = 25; break; } this.insertRule(rule); if (!this.isSyncFontLoadingSupported) { _context.next = 24; break; } return _context.abrupt("return"); case 24: return _context.abrupt("return", new Promise(function (resolve) { var request = _this._queueLoadingCallback(resolve); _this._prepareFontLoadEvent([rule], [font], request); })); case 25: case "end": return _context.stop(); } } }, _callee, this, [[7, 12]]); })); function bind(_x) { return _bind.apply(this, arguments); } return bind; }() }, { key: "_queueLoadingCallback", value: function _queueLoadingCallback(callback) { (0, _util.unreachable)('Abstract method `_queueLoadingCallback`.'); } }, { key: "_prepareFontLoadEvent", value: function _prepareFontLoadEvent(rules, fontsToLoad, request) { (0, _util.unreachable)('Abstract method `_prepareFontLoadEvent`.'); } }, { key: "isFontLoadingAPISupported", get: function get() { (0, _util.unreachable)('Abstract method `isFontLoadingAPISupported`.'); } }, { key: "isSyncFontLoadingSupported", get: function get() { (0, _util.unreachable)('Abstract method `isSyncFontLoadingSupported`.'); } }, { key: "_loadTestFont", get: function get() { (0, _util.unreachable)('Abstract method `_loadTestFont`.'); } }]); return BaseFontLoader; }(); var FontLoader; exports.FontLoader = FontLoader; { exports.FontLoader = FontLoader = /*#__PURE__*/ function (_BaseFontLoader) { _inherits(GenericFontLoader, _BaseFontLoader); function GenericFontLoader(docId) { var _this2; _classCallCheck(this, GenericFontLoader); _this2 = _possibleConstructorReturn(this, _getPrototypeOf(GenericFontLoader).call(this, docId)); _this2.loadingContext = { requests: [], nextRequestId: 0 }; _this2.loadTestFontId = 0; return _this2; } _createClass(GenericFontLoader, [{ key: "_queueLoadingCallback", value: function _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) { var otherRequest = context.requests.shift(); setTimeout(otherRequest.callback, 0); } } var context = this.loadingContext; var request = { id: "extracthighlights-font-loading-".concat(context.nextRequestId++), done: false, complete: completeRequest, callback: callback }; context.requests.push(request); return request; } }, { key: "_prepareFontLoadEvent", value: function _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) { var chunk1 = s.substring(0, offset); var chunk2 = s.substring(offset + remove); return chunk1 + insert + chunk2; } var i, ii; var canvas = document.createElement('canvas'); canvas.width = 1; canvas.height = 1; var ctx = canvas.getContext('2d'); var 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); var imageData = ctx.getImageData(0, 0, 1, 1); if (imageData.data[3] > 0) { callback(); return; } setTimeout(isFontReady.bind(null, name, callback)); } var loadTestFontId = "lt".concat(Date.now()).concat(this.loadTestFontId++); var data = this._loadTestFont; var COMMENT_OFFSET = 976; data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId); var CFF_CHECKSUM_OFFSET = 16; var XXXX_VALUE = 0x58585858; var 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)); var url = "url(data:font/opentype;base64,".concat(btoa(data), ");"); var rule = "@font-face {font-family:\"".concat(loadTestFontId, "\";src:").concat(url, "}"); this.insertRule(rule); var names = []; for (i = 0, ii = fonts.length; i < ii; i++) { names.push(fonts[i].loadedName); } names.push(loadTestFontId); var div = document.createElement('div'); div.setAttribute('style', 'visibility: hidden;' + 'width: 10px; height: 10px;' + 'position: absolute; top: 0px; left: 0px;'); for (i = 0, ii = names.length; i < ii; ++i) { var span = document.createElement('span'); span.textContent = 'Hi'; span.style.fontFamily = names[i]; div.appendChild(span); } document.body.appendChild(div); isFontReady(loadTestFontId, function () { document.body.removeChild(div); request.complete(); }); } }, { key: "isFontLoadingAPISupported", get: function get() { var supported = typeof document !== 'undefined' && !!document.fonts; if (supported && typeof navigator !== 'undefined') { var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); if (m && m[1] < 63) { supported = false; } } return (0, _util.shadow)(this, 'isFontLoadingAPISupported', supported); } }, { key: "isSyncFontLoadingSupported", get: function get() { var supported = false; if (typeof navigator === 'undefined') { supported = true; } else { var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent); if (m && m[1] >= 14) { supported = true; } } return (0, _util.shadow)(this, 'isSyncFontLoadingSupported', supported); } }, { key: "_loadTestFont", get: function get() { var getLoadTestFont = function getLoadTestFont() { 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()); } }]); return GenericFontLoader; }(BaseFontLoader); } var IsEvalSupportedCached = { get value() { return (0, _util.shadow)(this, 'value', (0, _util.isEvalSupported)()); } }; var FontFaceObject = /*#__PURE__*/ function () { function FontFaceObject(translatedData, _ref2) { var _ref2$isEvalSupported = _ref2.isEvalSupported, isEvalSupported = _ref2$isEvalSupported === void 0 ? true : _ref2$isEvalSupported, _ref2$disableFontFace = _ref2.disableFontFace, disableFontFace = _ref2$disableFontFace === void 0 ? false : _ref2$disableFontFace, _ref2$ignoreErrors = _ref2.ignoreErrors, ignoreErrors = _ref2$ignoreErrors === void 0 ? false : _ref2$ignoreErrors, _ref2$onUnsupportedFe = _ref2.onUnsupportedFeature, onUnsupportedFeature = _ref2$onUnsupportedFe === void 0 ? null : _ref2$onUnsupportedFe, _ref2$fontRegistry = _ref2.fontRegistry, fontRegistry = _ref2$fontRegistry === void 0 ? null : _ref2$fontRegistry; _classCallCheck(this, FontFaceObject); this.compiledGlyphs = Object.create(null); for (var 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; } _createClass(FontFaceObject, [{ key: "createNativeFontFace", value: function createNativeFontFace() { if (!this.data || this.disableFontFace) { return null; } var nativeFontFace = new FontFace(this.loadedName, this.data, {}); if (this.fontRegistry) { this.fontRegistry.registerFont(this); } return nativeFontFace; } }, { key: "createFontFaceRule", value: function createFontFaceRule() { if (!this.data || this.disableFontFace) { return null; } var data = (0, _util.bytesToString)(new Uint8Array(this.data)); var url = "url(data:".concat(this.mimetype, ";base64,").concat(btoa(data), ");"); var rule = "@font-face {font-family:\"".concat(this.loadedName, "\";src:").concat(url, "}"); if (this.fontRegistry) { this.fontRegistry.registerFont(this, url); } return rule; } }, { key: "getPathGenerator", value: function getPathGenerator(objs, character) { if (this.compiledGlyphs[character] !== undefined) { return this.compiledGlyphs[character]; } var cmds, current; try { cmds = objs.get(this.loadedName + '_path_' + character); } catch (ex) { if (!this.ignoreErrors) { throw ex; } if (this._onUnsupportedFeature) { this._onUnsupportedFeature({ featureId: _util.UNSUPPORTED_FEATURES.font }); } (0, _util.warn)("getPathGenerator - ignoring character: \"".concat(ex, "\".")); return this.compiledGlyphs[character] = function (c, size) {}; } if (this.isEvalSupported && IsEvalSupportedCached.value) { var args, js = ''; for (var i = 0, ii = cmds.length; i < ii; i++) { current = cmds[i]; if (current.args !== undefined) { args = current.args.join(','); } else { args = ''; } js += 'c.' + current.cmd + '(' + args + ');\n'; } return this.compiledGlyphs[character] = new Function('c', 'size', js); } return this.compiledGlyphs[character] = function (c, size) { for (var _i = 0, _ii = cmds.length; _i < _ii; _i++) { current = cmds[_i]; if (current.cmd === 'scale') { current.args = [size, -size]; } c[current.cmd].apply(c, current.args); } }; } }]); return FontFaceObject; }(); exports.FontFaceObject = FontFaceObject; /***/ }), /* 153 */ /***/ (function(module, exports, __w_extracthighlights_require__) { var compatibilityParams = Object.create(null); { var isNodeJS = __w_extracthighlights_require__(4); var userAgent = typeof navigator !== 'undefined' && navigator.userAgent || ''; var isIE = /Trident/.test(userAgent); var isIOSChrome = /CriOS/.test(userAgent); (function checkOnBlobSupport() { if (isIE || isIOSChrome) { compatibilityParams.disableCreateObjectURL = true; } })(); (function checkFontFaceAndImage() { if (isNodeJS()) { compatibilityParams.disableFontFace = true; compatibilityParams.nativeImageDecoderSupport = 'none'; } })(); } exports.apiCompatibilityParams = Object.freeze(compatibilityParams); /***/ }), /* 154 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.CanvasGraphics = void 0; var _util = __w_extracthighlights_require__(1); var _pattern_helper = __w_extracthighlights_require__(155); var MIN_FONT_SIZE = 16; var MAX_FONT_SIZE = 100; var MAX_GROUP_SIZE = 4096; var MIN_WIDTH_FACTOR = 0.65; var MAX_SIZE_TO_COMPILE = 1000; var FULL_CHUNK_HEIGHT = 16; var IsLittleEndianCached = { get value() { return (0, _util.shadow)(IsLittleEndianCached, 'value', (0, _util.isLittleEndian)()); } }; function addContextCurrentTransform(ctx) { if (!ctx.mozCurrentTransform) { 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._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0]; ctx._transformStack = []; Object.defineProperty(ctx, 'mozCurrentTransform', { get: function getCurrentTransform() { return this._transformMatrix; } }); Object.defineProperty(ctx, 'mozCurrentTransformInverse', { get: function getCurrentTransformInverse() { var m = this._transformMatrix; var a = m[0], b = m[1], c = m[2], d = m[3], e = m[4], f = m[5]; var ad_bc = a * d - b * c; var 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() { var old = this._transformMatrix; this._transformStack.push(old); this._transformMatrix = old.slice(0, 6); this._originalSave(); }; ctx.restore = function ctxRestore() { var prev = this._transformStack.pop(); if (prev) { this._transformMatrix = prev; this._originalRestore(); } }; ctx.translate = function ctxTranslate(x, y) { var 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) { var m = this._transformMatrix; m[0] = m[0] * x; m[1] = m[1] * x; m[2] = m[2] * y; m[3] = m[3] * y; this._originalScale(x, y); }; ctx.transform = function ctxTransform(a, b, c, d, e, f) { var 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.rotate = function ctxRotate(angle) { var cosValue = Math.cos(angle); var sinValue = Math.sin(angle); var 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); }; } } var CachedCanvases = function CachedCanvasesClosure() { function CachedCanvases(canvasFactory) { this.canvasFactory = canvasFactory; this.cache = Object.create(null); } CachedCanvases.prototype = { getCanvas: function CachedCanvases_getCanvas(id, width, height, trackTransform) { var 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: function clear() { for (var id in this.cache) { var canvasEntry = this.cache[id]; this.canvasFactory.destroy(canvasEntry); delete this.cache[id]; } } }; return CachedCanvases; }(); function compileType3Glyph(imgData) { var POINT_TO_PROCESS_LIMIT = 1000; var width = imgData.width, height = imgData.height; var i, j, j0, width1 = width + 1; var points = new Uint8Array(width1 * (height + 1)); var POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]); var lineSize = width + 7 & ~7, data0 = imgData.data; var data = new Uint8Array(lineSize * height), pos = 0, ii; for (i = 0, ii = data0.length; i < ii; i++) { var mask = 128, elem = data0[i]; while (mask > 0) { data[pos++] = elem & mask ? 0 : 255; mask >>= 1; } } var 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; } var 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; } var steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]); var outlines = []; for (i = 0; count && i <= height; i++) { var p = i * width1; var end = p + width; while (p < end && !points[p]) { p++; } if (p === end) { continue; } var coords = [p % width1, i]; var type = points[p], p0 = p, pp; do { var step = steps[type]; do { p += step; } while (!points[p]); 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); coords.push(p / width1 | 0); --count; } while (p0 !== p); outlines.push(coords); --i; } var drawOutline = function drawOutline(c) { c.save(); c.scale(1 / width, -1 / height); c.translate(0, -height); c.beginPath(); for (var i = 0, ii = outlines.length; i < ii; i++) { var o = outlines[i]; c.moveTo(o[0], o[1]); for (var j = 2, jj = o.length; j < jj; j += 2) { c.lineTo(o[j], o[j + 1]); } } c.fill(); c.beginPath(); c.restore(); }; return drawOutline; } var CanvasExtraState = function CanvasExtraStateClosure() { function CanvasExtraState() { 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.resumeSMaskCtx = null; } CanvasExtraState.prototype = { clone: function CanvasExtraState_clone() { return Object.create(this); }, setCurrentPoint: function CanvasExtraState_setCurrentPoint(x, y) { this.x = x; this.y = y; } }; return CanvasExtraState; }(); var CanvasGraphics = function CanvasGraphicsClosure() { var EXECUTION_TIME = 15; var EXECUTION_STEPS = 10; function CanvasGraphics(canvasCtx, commonObjs, objs, canvasFactory, webGLContext, imageLayer, annotations) { this.ctx = canvasCtx; this.current = new CanvasExtraState(); this.stateStack = []; this.pendingClip = null; this.pendingEOFill = false; this.res = null; this.xobjs = null; this.commonObjs = commonObjs; this.objs = objs; this.canvasFactory = canvasFactory; this.webGLContext = webGLContext; 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.cachedCanvases = new CachedCanvases(this.canvasFactory); this.annotations = annotations; if (canvasCtx) { addContextCurrentTransform(canvasCtx); } this._cachedGetSinglePixelWidth = null; } function putBinaryImageData(ctx, imgData) { if (typeof ImageData !== 'undefined' && imgData instanceof ImageData) { ctx.putImageData(imgData, 0, 0); return; } var height = imgData.height, width = imgData.width; var partialChunkHeight = height % FULL_CHUNK_HEIGHT; var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); var srcPos = 0, destPos; var src = imgData.data; var dest = chunkImgData.data; var i, j, thisChunkHeight, elemsInThisChunk; if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) { var srcLength = src.byteLength; var dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2); var dest32DataLength = dest32.length; var fullSrcDiff = width + 7 >> 3; var white = 0xFFFFFFFF; var black = IsLittleEndianCached.value ? 0xFF000000 : 0x000000FF; for (i = 0; i < totalChunks; i++) { thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; destPos = 0; for (j = 0; j < thisChunkHeight; j++) { var srcDiff = srcLength - srcPos; var k = 0; var kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7; var kEndUnrolled = kEnd & ~7; var mask = 0; var 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) { j = 0; elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4; for (i = 0; i < fullChunks; i++) { dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); srcPos += elemsInThisChunk; ctx.putImageData(chunkImgData, 0, j); j += FULL_CHUNK_HEIGHT; } if (i < totalChunks) { elemsInThisChunk = width * partialChunkHeight * 4; dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk)); ctx.putImageData(chunkImgData, 0, j); } } else if (imgData.kind === _util.ImageKind.RGB_24BPP) { 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; } ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT); } } else { throw new Error("bad image kind: ".concat(imgData.kind)); } } function putBinaryImageMask(ctx, imgData) { var height = imgData.height, width = imgData.width; var partialChunkHeight = height % FULL_CHUNK_HEIGHT; var fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT; var totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1; var chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT); var srcPos = 0; var src = imgData.data; var dest = chunkImgData.data; for (var i = 0; i < totalChunks; i++) { var thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight; var destPos = 3; for (var j = 0; j < thisChunkHeight; j++) { var mask = 0; for (var k = 0; k < width; k++) { if (!mask) { var 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) { var properties = ['strokeStyle', 'fillStyle', 'fillRule', 'globalAlpha', 'lineWidth', 'lineCap', 'lineJoin', 'miterLimit', 'globalCompositeOperation', 'font']; for (var i = 0, ii = properties.length; i < ii; i++) { var 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) { var length = bytes.length; for (var i = 3; i < length; i += 4) { var alpha = bytes[i]; if (alpha === 0) { bytes[i - 3] = r0; bytes[i - 2] = g0; bytes[i - 1] = b0; } else if (alpha < 255) { var 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) { var length = maskData.length; var scale = 1 / 255; for (var i = 3; i < length; i += 4) { var alpha = transferMap ? transferMap[maskData[i]] : maskData[i]; layerData[i] = layerData[i] * alpha * scale | 0; } } function composeSMaskLuminosity(maskData, layerData, transferMap) { var length = maskData.length; for (var i = 3; i < length; i += 4) { var 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) { var hasBackdrop = !!backdrop; var r0 = hasBackdrop ? backdrop[0] : 0; var g0 = hasBackdrop ? backdrop[1] : 0; var b0 = hasBackdrop ? backdrop[2] : 0; var composeFn; if (subtype === 'Luminosity') { composeFn = composeSMaskLuminosity; } else { composeFn = composeSMaskAlpha; } var PIXELS_TO_PROCESS = 1048576; var chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width)); for (var row = 0; row < height; row += chunkSize) { var chunkHeight = Math.min(chunkSize, height - row); var maskData = maskCtx.getImageData(0, row, width, chunkHeight); var layerData = layerCtx.getImageData(0, row, width, chunkHeight); if (hasBackdrop) { composeSMaskBackdrop(maskData.data, r0, g0, b0); } composeFn(maskData.data, layerData.data, transferMap); maskCtx.putImageData(layerData, 0, row); } } function composeSMask(ctx, smask, layerCtx, webGLContext) { var mask = smask.canvas; var maskCtx = smask.context; ctx.setTransform(smask.scaleX, 0, 0, smask.scaleY, smask.offsetX, smask.offsetY); var backdrop = smask.backdrop || null; if (!smask.transferMap && webGLContext.isEnabled) { var composed = webGLContext.composeSMask({ layer: layerCtx.canvas, mask: mask, properties: { subtype: smask.subtype, backdrop: backdrop } }); ctx.setTransform(1, 0, 0, 1, 0, 0); ctx.drawImage(composed, smask.offsetX, smask.offsetY); return; } genericComposeSMask(maskCtx, layerCtx, mask.width, mask.height, smask.subtype, backdrop, smask.transferMap); ctx.drawImage(mask, 0, 0); } var LINE_CAP_STYLES = ['butt', 'round', 'square']; var LINE_JOIN_STYLES = ['miter', 'round', 'bevel']; var NORMAL_CLIP = {}; var EO_CLIP = {}; CanvasGraphics.prototype = { beginDrawing: function beginDrawing(_ref) { var transform = _ref.transform, viewport = _ref.viewport, _ref$transparency = _ref.transparency, transparency = _ref$transparency === void 0 ? false : _ref$transparency, _ref$background = _ref.background, background = _ref$background === void 0 ? null : _ref$background; var width = this.ctx.canvas.width; var 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) { var 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.ctx.transform.apply(this.ctx, viewport.transform); this.baseTransform = this.ctx.mozCurrentTransform.slice(); this.makeAnnoDims(this.annotations, this.baseTransform); if (this.imageLayer) { this.imageLayer.beginLayout(); } }, executeOperatorList: function CanvasGraphics_executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) { var argsArray = operatorList.argsArray; var fnArray = operatorList.fnArray; var i = executionStartIdx || 0; var argsArrayLen = argsArray.length; if (argsArrayLen === i) { return i; } var chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === 'function'; var endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0; var steps = 0; var commonObjs = this.commonObjs; var objs = this.objs; var 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 { var deps = argsArray[i]; for (var n = 0, nn = deps.length; n < nn; n++) { var depObjId = deps[n]; var common = depObjId[0] === 'g' && depObjId[1] === '_'; var objsPool = common ? 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: function CanvasGraphics_endDrawing() { if (this.current.activeSMask !== null) { this.endSMaskGroup(); } 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.webGLContext.clear(); if (this.imageLayer) { this.imageLayer.endLayout(); } }, setLineWidth: function CanvasGraphics_setLineWidth(width) { this.current.lineWidth = width; this.ctx.lineWidth = width; }, setLineCap: function CanvasGraphics_setLineCap(style) { this.ctx.lineCap = LINE_CAP_STYLES[style]; }, setLineJoin: function CanvasGraphics_setLineJoin(style) { this.ctx.lineJoin = LINE_JOIN_STYLES[style]; }, setMiterLimit: function CanvasGraphics_setMiterLimit(limit) { this.ctx.miterLimit = limit; }, setDash: function CanvasGraphics_setDash(dashArray, dashPhase) { var ctx = this.ctx; if (ctx.setLineDash !== undefined) { ctx.setLineDash(dashArray); ctx.lineDashOffset = dashPhase; } }, setRenderingIntent: function CanvasGraphics_setRenderingIntent(intent) {}, setFlatness: function CanvasGraphics_setFlatness(flatness) {}, setGState: function CanvasGraphics_setGState(states) { for (var i = 0, ii = states.length; i < ii; i++) { var state = states[i]; var key = state[0]; var 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': if (this.current.activeSMask) { if (this.stateStack.length > 0 && this.stateStack[this.stateStack.length - 1].activeSMask === this.current.activeSMask) { this.suspendSMaskGroup(); } else { this.endSMaskGroup(); } } this.current.activeSMask = value ? this.tempSMask : null; if (this.current.activeSMask) { this.beginSMaskGroup(); } this.tempSMask = null; break; } } }, beginSMaskGroup: function CanvasGraphics_beginSMaskGroup() { var activeSMask = this.current.activeSMask; var drawnWidth = activeSMask.canvas.width; var drawnHeight = activeSMask.canvas.height; var cacheId = 'smaskGroupAt' + this.groupLevel; var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); var currentCtx = this.ctx; var currentTransform = currentCtx.mozCurrentTransform; this.ctx.save(); var groupCtx = scratchCanvas.context; groupCtx.scale(1 / activeSMask.scaleX, 1 / activeSMask.scaleY); groupCtx.translate(-activeSMask.offsetX, -activeSMask.offsetY); groupCtx.transform.apply(groupCtx, currentTransform); activeSMask.startTransformInverse = groupCtx.mozCurrentTransformInverse; copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([['BM', 'source-over'], ['ca', 1], ['CA', 1]]); this.groupStack.push(currentCtx); this.groupLevel++; }, suspendSMaskGroup: function CanvasGraphics_endSMaskGroup() { var groupCtx = this.ctx; this.groupLevel--; this.ctx = this.groupStack.pop(); composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); this.ctx.restore(); this.ctx.save(); copyCtxState(groupCtx, this.ctx); this.current.resumeSMaskCtx = groupCtx; var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); this.ctx.transform.apply(this.ctx, deltaTransform); groupCtx.save(); groupCtx.setTransform(1, 0, 0, 1, 0, 0); groupCtx.clearRect(0, 0, groupCtx.canvas.width, groupCtx.canvas.height); groupCtx.restore(); }, resumeSMaskGroup: function CanvasGraphics_endSMaskGroup() { var groupCtx = this.current.resumeSMaskCtx; var currentCtx = this.ctx; this.ctx = groupCtx; this.groupStack.push(currentCtx); this.groupLevel++; }, endSMaskGroup: function CanvasGraphics_endSMaskGroup() { var groupCtx = this.ctx; this.groupLevel--; this.ctx = this.groupStack.pop(); composeSMask(this.ctx, this.current.activeSMask, groupCtx, this.webGLContext); this.ctx.restore(); copyCtxState(groupCtx, this.ctx); var deltaTransform = _util.Util.transform(this.current.activeSMask.startTransformInverse, groupCtx.mozCurrentTransform); this.ctx.transform.apply(this.ctx, deltaTransform); }, save: function CanvasGraphics_save() { this.ctx.save(); var old = this.current; this.stateStack.push(old); this.current = old.clone(); this.current.resumeSMaskCtx = null; }, restore: function CanvasGraphics_restore() { if (this.current.resumeSMaskCtx) { this.resumeSMaskGroup(); } if (this.current.activeSMask !== null && (this.stateStack.length === 0 || this.stateStack[this.stateStack.length - 1].activeSMask !== this.current.activeSMask)) { this.endSMaskGroup(); } if (this.stateStack.length !== 0) { this.current = this.stateStack.pop(); this.ctx.restore(); this.pendingClip = null; this._cachedGetSinglePixelWidth = null; } }, transform: function CanvasGraphics_transform(a, b, c, d, e, f) { this.ctx.transform(a, b, c, d, e, f); this._cachedGetSinglePixelWidth = null; }, constructPath: function CanvasGraphics_constructPath(ops, args) { var ctx = this.ctx; var current = this.current; var x = current.x, y = current.y; for (var i = 0, j = 0, ii = ops.length; i < ii; i++) { switch (ops[i] | 0) { case _util.OPS.rectangle: x = args[j++]; y = args[j++]; var width = args[j++]; var height = args[j++]; if (width === 0) { width = this.getSinglePixelWidth(); } if (height === 0) { height = this.getSinglePixelWidth(); } var xw = x + width; var yh = y + height; this.ctx.moveTo(x, y); this.ctx.lineTo(xw, y); this.ctx.lineTo(xw, yh); this.ctx.lineTo(x, yh); this.ctx.lineTo(x, y); this.ctx.closePath(); break; case _util.OPS.moveTo: x = args[j++]; y = args[j++]; ctx.moveTo(x, y); break; case _util.OPS.lineTo: x = args[j++]; y = args[j++]; ctx.lineTo(x, y); break; case _util.OPS.curveTo: x = args[j + 4]; y = args[j + 5]; ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y); j += 6; break; case _util.OPS.curveTo2: ctx.bezierCurveTo(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: x = args[j + 2]; y = args[j + 3]; ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y); j += 4; break; case _util.OPS.closePath: ctx.closePath(); break; } } current.setCurrentPoint(x, y); }, closePath: function CanvasGraphics_closePath() { this.ctx.closePath(); }, stroke: function CanvasGraphics_stroke(consumePath) { consumePath = typeof consumePath !== 'undefined' ? consumePath : true; var ctx = this.ctx; var strokeColor = this.current.strokeColor; ctx.lineWidth = Math.max(this.getSinglePixelWidth() * MIN_WIDTH_FACTOR, this.current.lineWidth); ctx.globalAlpha = this.current.strokeAlpha; if (strokeColor && strokeColor.hasOwnProperty('type') && strokeColor.type === 'Pattern') { ctx.save(); ctx.strokeStyle = strokeColor.getPattern(ctx, this); ctx.stroke(); ctx.restore(); } else { ctx.stroke(); } if (consumePath) { this.consumePath(); } ctx.globalAlpha = this.current.fillAlpha; }, closeStroke: function CanvasGraphics_closeStroke() { this.closePath(); this.stroke(); }, fill: function CanvasGraphics_fill(consumePath) { consumePath = typeof consumePath !== 'undefined' ? consumePath : true; var ctx = this.ctx; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var needRestore = false; if (isPatternFill) { ctx.save(); if (this.baseTransform) { ctx.setTransform.apply(ctx, this.baseTransform); } ctx.fillStyle = fillColor.getPattern(ctx, this); needRestore = true; } if (this.pendingEOFill) { ctx.fill('evenodd'); this.pendingEOFill = false; } else { ctx.fill(); } if (needRestore) { ctx.restore(); } if (consumePath) { this.consumePath(); } }, eoFill: function CanvasGraphics_eoFill() { this.pendingEOFill = true; this.fill(); }, fillStroke: function CanvasGraphics_fillStroke() { this.fill(false); this.stroke(false); this.consumePath(); }, eoFillStroke: function CanvasGraphics_eoFillStroke() { this.pendingEOFill = true; this.fillStroke(); }, closeFillStroke: function CanvasGraphics_closeFillStroke() { this.closePath(); this.fillStroke(); }, closeEOFillStroke: function CanvasGraphics_closeEOFillStroke() { this.pendingEOFill = true; this.closePath(); this.fillStroke(); }, endPath: function CanvasGraphics_endPath() { this.consumePath(); }, clip: function CanvasGraphics_clip() { this.pendingClip = NORMAL_CLIP; }, eoClip: function CanvasGraphics_eoClip() { this.pendingClip = EO_CLIP; }, beginText: function CanvasGraphics_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: function CanvasGraphics_endText() { var paths = this.pendingTextPaths; var ctx = this.ctx; if (paths === undefined) { ctx.beginPath(); return; } ctx.save(); ctx.beginPath(); for (var i = 0; i < paths.length; i++) { var 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: function CanvasGraphics_setCharSpacing(spacing) { this.current.charSpacing = spacing; }, setWordSpacing: function CanvasGraphics_setWordSpacing(spacing) { this.current.wordSpacing = spacing; }, setHScale: function CanvasGraphics_setHScale(scale) { this.current.textHScale = scale / 100; }, setLeading: function CanvasGraphics_setLeading(leading) { this.current.leading = -leading; }, setFont: function CanvasGraphics_setFont(fontRefName, size) { var fontObj = this.commonObjs.get(fontRefName); var current = this.current; if (!fontObj) { throw new Error("Can't find font for ".concat(fontRefName)); } current.fontMatrix = fontObj.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; } var name = fontObj.loadedName || 'sans-serif'; var bold = fontObj.black ? '900' : fontObj.bold ? 'bold' : 'normal'; var italic = fontObj.italic ? 'italic' : 'normal'; var typeface = "\"".concat(name, "\", ").concat(fontObj.fallbackName); var browserFontSize = size < MIN_FONT_SIZE ? MIN_FONT_SIZE : size > MAX_FONT_SIZE ? MAX_FONT_SIZE : size; this.current.fontSizeScale = size / browserFontSize; this.ctx.font = "".concat(italic, " ").concat(bold, " ").concat(browserFontSize, "px ").concat(typeface); }, setTextRenderingMode: function CanvasGraphics_setTextRenderingMode(mode) { this.current.textRenderingMode = mode; }, setTextRise: function CanvasGraphics_setTextRise(rise) { this.current.textRise = rise; }, moveText: function CanvasGraphics_moveText(x, y) { this.current.x = this.current.lineX += x; this.current.y = this.current.lineY += y; }, setLeadingMoveText: function CanvasGraphics_setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); }, setTextMatrix: function CanvasGraphics_setTextMatrix(a, b, c, d, e, f) { this.current.textMatrix = [a, b, c, d, e, f]; this.current.textMatrixScale = Math.sqrt(a * a + b * b); this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; }, nextLine: function CanvasGraphics_nextLine() { this.moveText(0, this.current.leading); }, /** Compute the coordinates and width of the character given its width and * x-offset in font space, a font object, and a matrix used for transforming * from font space to device space. Returns an object with the character's * x, y, and width properties, and the width of a space in the given font, * all in device space. */ makeCharDims: function canvasMakeCharDims(charWidth, xOffset, spaceWidth, font2dev) { var applyTransform = function(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; }; var applyTransformX = function(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; return xt; }; var xy = applyTransform([xOffset, 0], font2dev); var w = applyTransformX([xOffset + charWidth, 0], font2dev); var dims = {x: xy[0], y: xy[1]}; dims.width = Math.abs(xy[0] - w); dims.spaceWidth = spaceWidth; dims.xPlusHalfWidth = dims.x + (0.5 * dims.width); return dims; }, /** Compute the coordinates of the quadpoints given its the annotations * and a matrix used for transforming from font space to device space. */ makeAnnoDims: function canvasMakeAnnoDims(annotations, user2dev) { for (var j = 0; j < annotations.length; j++) { var annot = annotations[j]; if (!annot.subtype || (annot.subtype != 'Highlight' && annot.subtype != 'Underline')) continue; for (var i = 0; i < annot.quadPoints.length; i++) { var applyTransform = function (p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; }; var quad = annot.quadPoints[i]; var qxy0 = applyTransform([quad.x, quad.y], user2dev); var quadOtherCorner = [quad.x + quad.width, quad.y + quad.height]; var qxy1 = applyTransform(quadOtherCorner, user2dev); annot.quadPoints[i].dims = { 'minX': Math.min(qxy0[0], qxy1[0]), 'maxX': Math.max(qxy0[0], qxy1[0]), 'minY': Math.min(qxy0[1], qxy1[1]), 'maxY': Math.max(qxy0[1], qxy1[1]) }; } } }, /** Determines if character, with the given dimensions, falls within the * bounds of annotation annot. If so, returns the 0-based index of the quad * region within which the character falls. If the character is outside the * annotation, returns -1. */ charInAnnot: function canvasCharInAnnot(annot, cdims) { if (!annot.subtype || (annot.subtype != 'Highlight' && annot.subtype != 'Underline')) return -1; if(typeof annot.quadPoints == 'undefined') return -1; for (var i = 0; i < annot.quadPoints.length; i++) { var qdims = annot.quadPoints[i].dims; // only grab characters where 50% of the character's // width lies within the annotation if (cdims.xPlusHalfWidth >= qdims.minX && cdims.xPlusHalfWidth <= qdims.maxX && cdims.y >=qdims.minY && cdims.y <= qdims.maxY) { return i; } } return -1; }, /** get last char (a-z or digits) */ getLastAZChar: function canvasGraphicsGetLastAZChar (annot) { var lastChar, ch; for (var c = annot.chars.length-1; c >= 0; c--) { ch = annot.chars[c]; if(/^[\w]*$/.test(ch.character)) { lastChar = ch; break; } } if (!lastChar) lastChar = annot.chars.slice(-1)[0]; return lastChar; }, /** Update the markup array for annot, placing the given character into the * string associated with the given quad. */ updateMarkup: function canvasGraphicsUpdateMarkup(annot, quad, glyph, charDims, isSpace) { if (quad < 0) return; var character = glyph.str, charInfo = {}, lastChar, markupEnd, lastCharSpace; if(character===undefined || (!annot.markup && character==' ')) { return; } else { console.log(character); } // char details for debugging charInfo.glyph = glyph; charInfo.charDims = charDims; charInfo.isSpace = isSpace; // add to annotation object if (!annot.markup) { annot.markup = []; annot.markupGeom = []; annot.chars = []; annot.spaces = {'n':0, 'sumWidth':0}; } if (!annot.markup[quad]) { // annot.markupGeom[quad].brx ensures that only characters are added that are right of the first one in annotation annot.markupGeom[quad] = {brx: charDims.x + charDims.width}; annot.markup[quad] = character; charInfo.character = character; annot.chars.push(charInfo); } else { markupEnd = annot.markup[quad].length - 1; lastCharSpace = (annot.markup[quad].charAt(markupEnd) == ' '); // exclude double spaces if (isSpace && lastCharSpace) return; // exclude previous space if it is further right then current character lastChar = annot.chars.slice(-1)[0]; if(annot.chars.length > 1 && !isSpace && lastCharSpace && typeof lastChar.charDims.x !== 'undefined' && lastChar.charDims.x/*-charDims.spaceWidth*/>charDims.x+charDims.spaceWidth) { if(lastChar.isSpace) annot.markup[quad] = annot.markup[quad].substring(0, markupEnd); annot.chars = annot.chars.splice(0,annot.chars.length-1); lastChar = annot.chars.slice(-2)[0]; annot.markupGeom[quad].brx = lastChar.charDims.x + lastChar.charDims.width; // reset markupEnd and lastCharSpace markupEnd = annot.markup[quad].length - 1; lastCharSpace = (annot.markup[quad].charAt(markupEnd) == ' '); } // insert space if ... // var spaceWidth = charDims.spaceWidth; var spaceWidth = annot.spaces.n>0 ? annot.spaces.sumWidth/annot.spaces.n : charDims.spaceWidth*0.85; if (!isSpace && !lastCharSpace && (charDims.spaceWidth !== 0 || /^[\u201C\(]*$/.test(character) ) && charDims.x > annot.markupGeom[quad].brx + spaceWidth) { // last char (a-z or digits) lastChar = this.getLastAZChar(annot); // do not add 'mini' or comparatively small spaces var width = charDims.x - annot.markupGeom[quad].brx, relativeSize = width/lastChar.charDims.width, miniSpace = relativeSize<0.1, smallSpace = annot.spaces.n>0 ? width/(annot.spaces.sumWidth/annot.spaces.n)<0.3 : false; if(!miniSpace && !smallSpace) { annot.markup[quad] += ' '; charInfo.character = ' '; annot.chars.push(charInfo); } } // add current character // if (!isSpace && annot.markupGeom[quad].brx < charDims.x + charDims.width) { if (!isSpace && ((annot.markupGeom[quad].brx < charDims.x + charDims.width) || (character==' ' && annot.markupGeom[quad].brx < charDims.x + lastChar.charDims.width))) { annot.markupGeom[quad].brx = charDims.x + charDims.width; // annot.markupGeom[quad].brx = (character===' ' || isSpace) ? (charDims.x + charDims.spaceWidth) : (charDims.x + charDims.width); annot.markup[quad] += character; charInfo.character = character; annot.chars.push(charInfo); if(character===' ') { annot.spaces.sumWidth = annot.spaces.sumWidth + charDims.width; annot.spaces.n++; } } // add space but exclude mini spaces if (isSpace && (annot.markupGeom[quad].brx < charDims.x + lastChar.charDims.width)) { charInfo.character = character; // last char (a-z or digits) lastChar = this.getLastAZChar(annot); // do not add 'mini' spaces that are between to characters of one word var relativeSize = charDims.width/lastChar.charDims.width; if(relativeSize<0.2) return; // exclude spaces that are small compred to others if (annot.spaces.n>0) { var avg = annot.spaces.sumWidth/annot.spaces.n; if(charDims.width/avg<0.3) return; } annot.spaces.sumWidth = annot.spaces.sumWidth + charDims.width; annot.spaces.n++; // add space annot.markupGeom[quad].brx = charDims.x + charDims.width; annot.markup[quad] += character; annot.chars.push(charInfo); } } }, paintChar: function paintChar(character, x, y, patternTransform) { var ctx = this.ctx; var current = this.current; var font = current.font; var textRenderingMode = current.textRenderingMode; var fontSize = current.fontSize / current.fontSizeScale; var fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; var isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG); var patternFill = current.patternFill && font.data; var 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) { 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) { ctx.strokeText(character, x, y); } } if (isAddToPathSet) { var paths = this.pendingTextPaths || (this.pendingTextPaths = []); paths.push({ transform: ctx.mozCurrentTransform, x: x, y: y, fontSize: fontSize, addToPath: addToPath }); } }, get isFontSubpixelAAEnabled() { var ctx = this.canvasFactory.create(10, 10).context; ctx.scale(1.5, 1); ctx.fillText('I', 0, 10); var data = ctx.getImageData(0, 0, 10, 10).data; var enabled = false; for (var 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: function CanvasGraphics_showText(glyphs) { var current = this.current; var font = current.font; if (font.isType3Font) { return this.showType3Text(glyphs); } var fontSize = current.fontSize; if (fontSize === 0) { return; } var ctx = this.ctx; var fontSizeScale = current.fontSizeScale; var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var spaceWidth = font.coded ? font.spaceWidth : font.spaceWidth * 0.001; var fontDirection = current.fontDirection; var textHScale = current.textHScale * fontDirection; var glyphsLength = glyphs.length; var vertical = font.vertical; var spacingDir = vertical ? 1 : -1; var defaultVMetrics = font.defaultVMetrics; var widthAdvanceScale = fontSize * current.fontMatrix[0]; var simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill; ctx.save(); var patternTransform; var sw, spaceWidthProj, font2dev = []; if (current.patternFill) { ctx.save(); var pattern = current.fillColor.getPattern(ctx, this); patternTransform = ctx.mozCurrentTransform; ctx.restore(); ctx.fillStyle = pattern; } ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y + current.textRise); font2dev = ctx.mozCurrentTransform.slice(0); var applyTransformX = function(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; return xt; }; // projected spaceWidth sw = applyTransformX([spaceWidth,0], font2dev); // TODO: why 2.0? I changed it to 3 // dims.spaceWidth = (sw[0] - font2dev[4]) / 2.0; spaceWidthProj = (sw - font2dev[4]) / 3.0; if (fontDirection > 0) { ctx.scale(textHScale, -1); } else { ctx.scale(textHScale, 1); } var lineWidth = current.lineWidth; var scale = current.textMatrixScale; if (scale === 0 || lineWidth === 0) { var fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK; if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) { this._cachedGetSinglePixelWidth = null; lineWidth = this.getSinglePixelWidth() * MIN_WIDTH_FACTOR; } } else { lineWidth /= scale; } if (fontSizeScale !== 1.0) { ctx.scale(fontSizeScale, fontSizeScale); lineWidth /= fontSizeScale; } ctx.lineWidth = lineWidth; var x = 0, i; for (i = 0; i < glyphsLength; ++i) { var glyph = glyphs[i]; if ((0, _util.isNum)(glyph)) { x += spacingDir * glyph * fontSize / 1000; continue; } var restoreNeeded = false; var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; var character = glyph.fontChar; var accent = glyph.accent; var scaledX, scaledY, scaledAccentX, scaledAccentY; var width = glyph.width; if (vertical) { var vmetric, vx, vy; vmetric = glyph.vmetric || defaultVMetrics; vx = glyph.vmetric ? vmetric[1] : width * 0.5; vx = -vx * widthAdvanceScale; 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) { var measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale; if (width < measuredWidth && this.isFontSubpixelAAEnabled) { var 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.annotations) { // check if glyph is within an annotation var charDims = this.makeCharDims(width * fontSize * current.fontMatrix[0], x, spaceWidthProj, font2dev); glyph.print = false; for (var j = 0; j < this.annotations.length; j++) { var annot = this.annotations[j]; var quad = this.charInAnnot(annot, charDims); if(quad >= 0) { this.annotations[j].highlightedText += glyph.unicode; } this.updateMarkup(annot, quad, glyph, charDims, false); } } if (glyph.isInFont || font.missingFile) { if (simpleFillText && !accent) { ctx.fillText(character, scaledX, scaledY); } else { this.paintChar(character, scaledX, scaledY, patternTransform); if (accent) { scaledAccentX = scaledX + accent.offset.x / fontSizeScale; scaledAccentY = scaledY - accent.offset.y / fontSizeScale; this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform); } } } var charWidth = width * widthAdvanceScale + spacing * fontDirection; x += charWidth; if (restoreNeeded) { ctx.restore(); } } if (vertical) { current.y -= x * textHScale; } else { current.x += x * textHScale; } ctx.restore(); }, showType3Text: function CanvasGraphics_showType3Text(glyphs) { var ctx = this.ctx; var current = this.current; var font = current.font; var fontSize = current.fontSize; var fontDirection = current.fontDirection; var spacingDir = font.vertical ? 1 : -1; var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var textHScale = current.textHScale * fontDirection; var fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX; var glyphsLength = glyphs.length; var isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE; var i, glyph, width, spacingLength; var sw, spaceWidthProj, font2dev = []; if (isTextInvisible || fontSize === 0) { return; } this._cachedGetSinglePixelWidth = null; ctx.save(); ctx.transform.apply(ctx, current.textMatrix); ctx.translate(current.x, current.y); font2dev = ctx.mozCurrentTransform.slice(0); // projected spaceWidth var applyTransformX = function(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; return xt; }; sw = applyTransformX([spaceWidth,0], font2dev); // TODO: why 2.0? I changed it to 3 // dims.spaceWidth = (sw[0] - font2dev[4]) / 2.0; spaceWidthProj = (sw - font2dev[4]) / 3.0; 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; } var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; var operatorList = font.charProcOperatorList[glyph.operatorListId]; if (!operatorList) { (0, _util.warn)("Type3 character \"".concat(glyph.operatorListId, "\" is not available.")); continue; } this.processingType3 = glyph; this.save(); ctx.scale(fontSize, fontSize); ctx.transform.apply(ctx, fontMatrix); this.executeOperatorList(operatorList); this.restore(); var applyTransform = function (p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; }; var transformed = applyTransform([glyph.width, 0], fontMatrix); width = transformed[0] * fontSize + spacing; ctx.translate(width, 0); current.x += width * textHScale; if (this.annotations) { // check if glyph is within an annotation var chDims = this.makeCharDims(transformed * fontSize, width, spaceWidthProj, font2dev); for (var j = 0; j < this.annotations.length; j++) { var annot = this.annotations[j]; var quad = this.charInAnnot(annot, chDims); this.updateMarkup(annot, quad, glyph, chDims, false); } } } ctx.restore(); this.processingType3 = null; }, setCharWidth: function CanvasGraphics_setCharWidth(xWidth, yWidth) {}, setCharWidthAndBounds: function CanvasGraphics_setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) { this.ctx.rect(llx, lly, urx - llx, ury - lly); this.clip(); this.endPath(); }, getColorN_Pattern: function CanvasGraphics_getColorN_Pattern(IR) { var _this = this; var pattern; if (IR[0] === 'TilingPattern') { var color = IR[1]; var baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice(); var canvasGraphicsFactory = { createCanvasGraphics: function createCanvasGraphics(ctx) { return new CanvasGraphics(ctx, _this.commonObjs, _this.objs, _this.canvasFactory, _this.webGLContext); } }; pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform); } else { pattern = (0, _pattern_helper.getShadingPatternFromIR)(IR); } return pattern; }, setStrokeColorN: function CanvasGraphics_setStrokeColorN() { this.current.strokeColor = this.getColorN_Pattern(arguments); }, setFillColorN: function CanvasGraphics_setFillColorN() { this.current.fillColor = this.getColorN_Pattern(arguments); this.current.patternFill = true; }, setStrokeRGBColor: function CanvasGraphics_setStrokeRGBColor(r, g, b) { var color = _util.Util.makeCssRgb(r, g, b); this.ctx.strokeStyle = color; this.current.strokeColor = color; }, setFillRGBColor: function CanvasGraphics_setFillRGBColor(r, g, b) { var color = _util.Util.makeCssRgb(r, g, b); this.ctx.fillStyle = color; this.current.fillColor = color; this.current.patternFill = false; }, shadingFill: function CanvasGraphics_shadingFill(patternIR) { var ctx = this.ctx; this.save(); var pattern = (0, _pattern_helper.getShadingPatternFromIR)(patternIR); ctx.fillStyle = pattern.getPattern(ctx, this, true); var inv = ctx.mozCurrentTransformInverse; if (inv) { var canvas = ctx.canvas; var width = canvas.width; var height = canvas.height; var applyTransform = function(p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; }; var bl = applyTransform([0, 0], inv); var br = applyTransform([0, height], inv); var ul = applyTransform([width, 0], inv); var ur = applyTransform([width, height], inv); var x0 = Math.min(bl[0], br[0], ul[0], ur[0]); var y0 = Math.min(bl[1], br[1], ul[1], ur[1]); var x1 = Math.max(bl[0], br[0], ul[0], ur[0]); var 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.restore(); }, beginInlineImage: function CanvasGraphics_beginInlineImage() { (0, _util.unreachable)('Should not call beginInlineImage'); }, beginImageData: function CanvasGraphics_beginImageData() { (0, _util.unreachable)('Should not call beginImageData'); }, paintFormXObjectBegin: function CanvasGraphics_paintFormXObjectBegin(matrix, bbox) { this.save(); this.baseTransformStack.push(this.baseTransform); if (Array.isArray(matrix) && matrix.length === 6) { this.transform.apply(this, matrix); } this.baseTransform = this.ctx.mozCurrentTransform; this.makeAnnoDims(this.annotations, this.baseTransform); if (bbox) { var width = bbox[2] - bbox[0]; var height = bbox[3] - bbox[1]; this.ctx.rect(bbox[0], bbox[1], width, height); this.clip(); this.endPath(); } }, paintFormXObjectEnd: function CanvasGraphics_paintFormXObjectEnd() { this.restore(); this.baseTransform = this.baseTransformStack.pop(); this.makeAnnoDims(this.annotations, this.baseTransform); }, beginGroup: function CanvasGraphics_beginGroup(group) { this.save(); var currentCtx = this.ctx; if (!group.isolated) { (0, _util.info)('TODO: Support non-isolated groups.'); } if (group.knockout) { (0, _util.warn)('Knockout groups not supported.'); } var currentTransform = currentCtx.mozCurrentTransform; if (group.matrix) { currentCtx.transform.apply(currentCtx, group.matrix); } if (!group.bbox) { throw new Error('Bounding box is required.'); } var bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform); var canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height]; bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0]; var offsetX = Math.floor(bounds[0]); var offsetY = Math.floor(bounds[1]); var drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1); var drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1); var 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; } var cacheId = 'groupAt' + this.groupLevel; if (group.smask) { cacheId += '_smask_' + this.smaskCounter++ % 2; } var scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true); var 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: offsetX, offsetY: offsetY, scaleX: scaleX, scaleY: 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); } copyCtxState(currentCtx, groupCtx); this.ctx = groupCtx; this.setGState([['BM', 'source-over'], ['ca', 1], ['CA', 1]]); this.groupStack.push(currentCtx); this.groupLevel++; this.current.activeSMask = null; }, endGroup: function CanvasGraphics_endGroup(group) { this.groupLevel--; var groupCtx = this.ctx; this.ctx = this.groupStack.pop(); if (this.ctx.imageSmoothingEnabled !== undefined) { this.ctx.imageSmoothingEnabled = false; } else { this.ctx.mozImageSmoothingEnabled = false; } if (group.smask) { this.tempSMask = this.smaskStack.pop(); } else { this.ctx.drawImage(groupCtx.canvas, 0, 0); } this.restore(); }, beginAnnotations: function CanvasGraphics_beginAnnotations() { this.save(); if (this.baseTransform) { this.ctx.setTransform.apply(this.ctx, this.baseTransform); } }, endAnnotations: function CanvasGraphics_endAnnotations() { this.restore(); }, beginAnnotation: function CanvasGraphics_beginAnnotation(rect, transform, matrix) { this.save(); resetCtxToDefault(this.ctx); this.current = new CanvasExtraState(); if (Array.isArray(rect) && rect.length === 4) { var width = rect[2] - rect[0]; var height = rect[3] - rect[1]; this.ctx.rect(rect[0], rect[1], width, height); this.clip(); this.endPath(); } this.transform.apply(this, transform); this.transform.apply(this, matrix); }, endAnnotation: function CanvasGraphics_endAnnotation() { this.restore(); }, paintJpegXObject: function CanvasGraphics_paintJpegXObject(objId, w, h) { var domImage = this.objs.get(objId); if (!domImage) { (0, _util.warn)('Dependent image isn\'t ready yet'); return; } this.save(); var ctx = this.ctx; ctx.scale(1 / w, -1 / h); ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height, 0, -h, w, h); if (this.imageLayer) { var currentTransform = ctx.mozCurrentTransformInverse; var position = this.getCanvasPosition(0, 0); this.imageLayer.appendImage({ objId: objId, left: position[0], top: position[1], width: w / currentTransform[0], height: h / currentTransform[3] }); } this.restore(); }, paintImageMaskXObject: function CanvasGraphics_paintImageMaskXObject(img) { var ctx = this.ctx; var width = img.width, height = img.height; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var 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: width, height: height }); } else { glyph.compiled = null; } } if (glyph && glyph.compiled) { glyph.compiled(ctx); return; } var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, img); maskCtx.globalCompositeOperation = 'source-in'; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); this.paintInlineImageXObject(maskCanvas.canvas); }, paintImageMaskXObjectRepeat: function CanvasGraphics_paintImageMaskXObjectRepeat(imgData, scaleX, scaleY, positions) { var width = imgData.width; var height = imgData.height; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, imgData); maskCtx.globalCompositeOperation = 'source-in'; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : fillColor; maskCtx.fillRect(0, 0, width, height); maskCtx.restore(); var ctx = this.ctx; for (var i = 0, ii = positions.length; i < ii; i += 2) { ctx.save(); ctx.transform(scaleX, 0, 0, scaleY, positions[i], positions[i + 1]); ctx.scale(1, -1); ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1); ctx.restore(); } }, paintImageMaskXObjectGroup: function CanvasGraphics_paintImageMaskXObjectGroup(images) { var ctx = this.ctx; var fillColor = this.current.fillColor; var isPatternFill = this.current.patternFill; for (var i = 0, ii = images.length; i < ii; i++) { var image = images[i]; var width = image.width, height = image.height; var maskCanvas = this.cachedCanvases.getCanvas('maskCanvas', width, height); var maskCtx = maskCanvas.context; maskCtx.save(); putBinaryImageMask(maskCtx, image); maskCtx.globalCompositeOperation = 'source-in'; maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this) : 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(); } }, paintImageXObject: function CanvasGraphics_paintImageXObject(objId) { var imgData = this.objs.get(objId); if (!imgData) { (0, _util.warn)('Dependent image isn\'t ready yet'); return; } this.paintInlineImageXObject(imgData); }, paintImageXObjectRepeat: function CanvasGraphics_paintImageXObjectRepeat(objId, scaleX, scaleY, positions) { var imgData = this.objs.get(objId); if (!imgData) { (0, _util.warn)('Dependent image isn\'t ready yet'); return; } var width = imgData.width; var height = imgData.height; var map = []; for (var 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: function CanvasGraphics_paintInlineImageXObject(imgData) { var width = imgData.width; var height = imgData.height; var ctx = this.ctx; this.save(); ctx.scale(1 / width, -1 / height); var currentTransform = ctx.mozCurrentTransformInverse; var a = currentTransform[0], b = currentTransform[1]; var widthScale = Math.max(Math.sqrt(a * a + b * b), 1); var c = currentTransform[2], d = currentTransform[3]; var heightScale = Math.max(Math.sqrt(c * c + d * d), 1); var imgToPaint, tmpCanvas; if (typeof HTMLElement === 'function' && imgData instanceof HTMLElement || !imgData.data) { imgToPaint = imgData; } else { tmpCanvas = this.cachedCanvases.getCanvas('inlineImage', width, height); var tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData); imgToPaint = tmpCanvas.canvas; } var paintWidth = width, paintHeight = height; var tmpCanvasId = 'prescale1'; while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) { var 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(imgToPaint, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight); imgToPaint = tmpCanvas.canvas; paintWidth = newWidth; paintHeight = newHeight; tmpCanvasId = tmpCanvasId === 'prescale1' ? 'prescale2' : 'prescale1'; } ctx.drawImage(imgToPaint, 0, 0, paintWidth, paintHeight, 0, -height, width, height); if (this.imageLayer) { var position = this.getCanvasPosition(0, -height); this.imageLayer.appendImage({ imgData: imgData, left: position[0], top: position[1], width: width / currentTransform[0], height: height / currentTransform[3] }); } this.restore(); }, paintInlineImageXObjectGroup: function CanvasGraphics_paintInlineImageXObjectGroup(imgData, map) { var ctx = this.ctx; var w = imgData.width; var h = imgData.height; var tmpCanvas = this.cachedCanvases.getCanvas('inlineImage', w, h); var tmpCtx = tmpCanvas.context; putBinaryImageData(tmpCtx, imgData); for (var i = 0, ii = map.length; i < ii; i++) { var 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) { var position = this.getCanvasPosition(entry.x, entry.y); this.imageLayer.appendImage({ imgData: imgData, left: position[0], top: position[1], width: w, height: h }); } ctx.restore(); } }, paintSolidColorImageMask: function CanvasGraphics_paintSolidColorImageMask() { this.ctx.fillRect(0, 0, 1, 1); }, paintXObject: function CanvasGraphics_paintXObject() { (0, _util.warn)('Unsupported \'paintXObject\' command.'); }, markPoint: function CanvasGraphics_markPoint(tag) {}, markPointProps: function CanvasGraphics_markPointProps(tag, properties) {}, beginMarkedContent: function CanvasGraphics_beginMarkedContent(tag) {}, beginMarkedContentProps: function CanvasGraphics_beginMarkedContentProps(tag, properties) {}, endMarkedContent: function CanvasGraphics_endMarkedContent() {}, beginCompat: function CanvasGraphics_beginCompat() {}, endCompat: function CanvasGraphics_endCompat() {}, consumePath: function CanvasGraphics_consumePath() { var ctx = this.ctx; if (this.pendingClip) { if (this.pendingClip === EO_CLIP) { ctx.clip('evenodd'); } else { ctx.clip(); } this.pendingClip = null; } ctx.beginPath(); }, getSinglePixelWidth: function getSinglePixelWidth(scale) { if (this._cachedGetSinglePixelWidth === null) { var inverse = this.ctx.mozCurrentTransformInverse; this._cachedGetSinglePixelWidth = Math.sqrt(Math.max(inverse[0] * inverse[0] + inverse[1] * inverse[1], inverse[2] * inverse[2] + inverse[3] * inverse[3])); } return this._cachedGetSinglePixelWidth; }, getCanvasPosition: function CanvasGraphics_getCanvasPosition(x, y) { var transform = this.ctx.mozCurrentTransform; return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]]; } }; for (var op in _util.OPS) { CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op]; } return CanvasGraphics; }(); exports.CanvasGraphics = CanvasGraphics; /***/ }), /* 155 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getShadingPatternFromIR = getShadingPatternFromIR; exports.TilingPattern = void 0; var _util = __w_extracthighlights_require__(1); var ShadingIRs = {}; ShadingIRs.RadialAxial = { fromIR: function RadialAxial_fromIR(raw) { var type = raw[1]; var colorStops = raw[2]; var p0 = raw[3]; var p1 = raw[4]; var r0 = raw[5]; var r1 = raw[6]; return { type: 'Pattern', getPattern: function RadialAxial_getPattern(ctx) { var grad; if (type === 'axial') { grad = ctx.createLinearGradient(p0[0], p0[1], p1[0], p1[1]); } else if (type === 'radial') { grad = ctx.createRadialGradient(p0[0], p0[1], r0, p1[0], p1[1], r1); } for (var i = 0, ii = colorStops.length; i < ii; ++i) { var c = colorStops[i]; grad.addColorStop(c[0], c[1]); } return grad; } }; } }; var createMeshCanvas = function createMeshCanvasClosure() { function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) { var coords = context.coords, colors = context.colors; var bytes = data.data, rowSize = data.width * 4; var 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; } var x1 = (coords[p1] + context.offsetX) * context.scaleX; var y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY; var x2 = (coords[p2] + context.offsetX) * context.scaleX; var y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY; var x3 = (coords[p3] + context.offsetX) * context.scaleX; var y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY; if (y1 >= y3) { return; } var c1r = colors[c1], c1g = colors[c1 + 1], c1b = colors[c1 + 2]; var c2r = colors[c2], c2g = colors[c2 + 1], c2b = colors[c2 + 2]; var c3r = colors[c3], c3g = colors[c3 + 1], c3b = colors[c3 + 2]; var minY = Math.round(y1), maxY = Math.round(y3); var xa, car, cag, cab; var xb, cbr, cbg, cbb; var k; for (var y = minY; y <= maxY; y++) { if (y < y2) { k = y < y1 ? 0 : y1 === y2 ? 1 : (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 { k = y > y3 ? 1 : y2 === y3 ? 0 : (y2 - y) / (y2 - y3); xa = x2 - (x2 - x3) * k; car = c2r - (c2r - c3r) * k; cag = c2g - (c2g - c3g) * k; cab = c2b - (c2b - c3b) * k; } k = y < y1 ? 0 : y > y3 ? 1 : (y1 - y) / (y1 - y3); xb = x1 - (x1 - x3) * k; cbr = c1r - (c1r - c3r) * k; cbg = c1g - (c1g - c3g) * k; cbb = c1b - (c1b - c3b) * k; var x1_ = Math.round(Math.min(xa, xb)); var x2_ = Math.round(Math.max(xa, xb)); var j = rowSize * y + x1_ * 4; for (var x = x1_; x <= x2_; x++) { k = (xa - x) / (xa - xb); k = k < 0 ? 0 : k > 1 ? 1 : k; 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) { var ps = figure.coords; var cs = figure.colors; var i, ii; switch (figure.type) { case 'lattice': var verticesPerRow = figure.verticesPerRow; var rows = Math.floor(ps.length / verticesPerRow) - 1; var cols = verticesPerRow - 1; for (i = 0; i < rows; i++) { var q = i * verticesPerRow; for (var 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'); } } function createMeshCanvas(bounds, combinesScale, coords, colors, figures, backgroundColor, cachedCanvases, webGLContext) { var EXPECTED_SCALE = 1.1; var MAX_PATTERN_SIZE = 3000; var BORDER_SIZE = 2; var offsetX = Math.floor(bounds[0]); var offsetY = Math.floor(bounds[1]); var boundsWidth = Math.ceil(bounds[2]) - offsetX; var boundsHeight = Math.ceil(bounds[3]) - offsetY; var width = Math.min(Math.ceil(Math.abs(boundsWidth * combinesScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); var height = Math.min(Math.ceil(Math.abs(boundsHeight * combinesScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE); var scaleX = boundsWidth / width; var scaleY = boundsHeight / height; var context = { coords: coords, colors: colors, offsetX: -offsetX, offsetY: -offsetY, scaleX: 1 / scaleX, scaleY: 1 / scaleY }; var paddedWidth = width + BORDER_SIZE * 2; var paddedHeight = height + BORDER_SIZE * 2; var canvas, tmpCanvas, i, ii; if (webGLContext.isEnabled) { canvas = webGLContext.drawFigures({ width: width, height: height, backgroundColor: backgroundColor, figures: figures, context: context }); tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false); tmpCanvas.context.drawImage(canvas, BORDER_SIZE, BORDER_SIZE); canvas = tmpCanvas.canvas; } else { tmpCanvas = cachedCanvases.getCanvas('mesh', paddedWidth, paddedHeight, false); var tmpCtx = tmpCanvas.context; var data = tmpCtx.createImageData(width, height); if (backgroundColor) { var bytes = data.data; for (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 (i = 0; i < figures.length; i++) { drawFigure(data, figures[i], context); } tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE); canvas = tmpCanvas.canvas; } return { canvas: canvas, offsetX: offsetX - BORDER_SIZE * scaleX, offsetY: offsetY - BORDER_SIZE * scaleY, scaleX: scaleX, scaleY: scaleY }; } return createMeshCanvas; }(); ShadingIRs.Mesh = { fromIR: function Mesh_fromIR(raw) { var coords = raw[2]; var colors = raw[3]; var figures = raw[4]; var bounds = raw[5]; var matrix = raw[6]; var background = raw[8]; return { type: 'Pattern', getPattern: function Mesh_getPattern(ctx, owner, shadingFill) { var scale; if (shadingFill) { scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform); } else { scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform); if (matrix) { var matrixScale = _util.Util.singularValueDecompose2dScale(matrix); scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]]; } } var temporaryPatternCanvas = createMeshCanvas(bounds, scale, coords, colors, figures, shadingFill ? null : background, owner.cachedCanvases, owner.webGLContext); if (!shadingFill) { ctx.setTransform.apply(ctx, owner.baseTransform); if (matrix) { ctx.transform.apply(ctx, matrix); } } ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY); ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY); return ctx.createPattern(temporaryPatternCanvas.canvas, 'no-repeat'); } }; } }; ShadingIRs.Dummy = { fromIR: function Dummy_fromIR() { return { type: 'Pattern', getPattern: function Dummy_fromIR_getPattern() { return 'hotpink'; } }; } }; function getShadingPatternFromIR(raw) { var shadingIR = ShadingIRs[raw[0]]; if (!shadingIR) { throw new Error("Unknown IR type: ".concat(raw[0])); } return shadingIR.fromIR(raw); } var TilingPattern = function TilingPatternClosure() { var PaintType = { COLORED: 1, UNCOLORED: 2 }; var MAX_PATTERN_SIZE = 3000; function TilingPattern(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.canvasGraphicsFactory = canvasGraphicsFactory; this.baseTransform = baseTransform; this.type = 'Pattern'; this.ctx = ctx; } TilingPattern.prototype = { createPatternCanvas: function TilinPattern_createPatternCanvas(owner) { var operatorList = this.operatorList; var bbox = this.bbox; var xstep = this.xstep; var ystep = this.ystep; var paintType = this.paintType; var tilingType = this.tilingType; var color = this.color; var canvasGraphicsFactory = this.canvasGraphicsFactory; (0, _util.info)('TilingType: ' + tilingType); var x0 = bbox[0], y0 = bbox[1], x1 = bbox[2], y1 = bbox[3]; var topLeft = [x0, y0]; var botRight = [x0 + xstep, y0 + ystep]; var width = botRight[0] - topLeft[0]; var height = botRight[1] - topLeft[1]; var matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix); var curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform); var combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]]; width = Math.min(Math.ceil(Math.abs(width * combinedScale[0])), MAX_PATTERN_SIZE); height = Math.min(Math.ceil(Math.abs(height * combinedScale[1])), MAX_PATTERN_SIZE); var tmpCanvas = owner.cachedCanvases.getCanvas('pattern', width, height, true); var tmpCtx = tmpCanvas.context; var graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx); graphics.groupLevel = owner.groupLevel; this.setFillAndStrokeStyleToContext(graphics, paintType, color); this.setScale(width, height, xstep, ystep); this.transformToScale(graphics); var tmpTranslate = [1, 0, 0, 1, -topLeft[0], -topLeft[1]]; graphics.transform.apply(graphics, tmpTranslate); this.clipBbox(graphics, bbox, x0, y0, x1, y1); graphics.executeOperatorList(operatorList); return tmpCanvas.canvas; }, setScale: function TilingPattern_setScale(width, height, xstep, ystep) { this.scale = [width / xstep, height / ystep]; }, transformToScale: function TilingPattern_transformToScale(graphics) { var scale = this.scale; var tmpScale = [scale[0], 0, 0, scale[1], 0, 0]; graphics.transform.apply(graphics, tmpScale); }, scaleToContext: function TilingPattern_scaleToContext() { var scale = this.scale; this.ctx.scale(1 / scale[0], 1 / scale[1]); }, clipBbox: function clipBbox(graphics, bbox, x0, y0, x1, y1) { if (Array.isArray(bbox) && bbox.length === 4) { var bboxWidth = x1 - x0; var bboxHeight = y1 - y0; graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight); graphics.clip(); graphics.endPath(); } }, setFillAndStrokeStyleToContext: function setFillAndStrokeStyleToContext(graphics, paintType, color) { var context = graphics.ctx, current = graphics.current; switch (paintType) { case PaintType.COLORED: var ctx = this.ctx; context.fillStyle = ctx.fillStyle; context.strokeStyle = ctx.strokeStyle; current.fillColor = ctx.fillStyle; current.strokeColor = ctx.strokeStyle; break; case PaintType.UNCOLORED: var cssColor = _util.Util.makeCssRgb(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: ".concat(paintType)); } }, getPattern: function TilingPattern_getPattern(ctx, owner) { var temporaryPatternCanvas = this.createPatternCanvas(owner); ctx = this.ctx; ctx.setTransform.apply(ctx, this.baseTransform); ctx.transform.apply(ctx, this.matrix); this.scaleToContext(); return ctx.createPattern(temporaryPatternCanvas, 'repeat'); } }; return TilingPattern; }(); exports.TilingPattern = TilingPattern; /***/ }), /* 156 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.GlobalWorkerOptions = void 0; var GlobalWorkerOptions = Object.create(null); exports.GlobalWorkerOptions = GlobalWorkerOptions; GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort; GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? '' : GlobalWorkerOptions.workerSrc; /***/ }), /* 157 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageHandler = MessageHandler; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); var _util = __w_extracthighlights_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function resolveCall(_x, _x2) { return _resolveCall.apply(this, arguments); } function _resolveCall() { _resolveCall = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee(fn, args) { var thisArg, _args = arguments; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: thisArg = _args.length > 2 && _args[2] !== undefined ? _args[2] : null; if (fn) { _context.next = 3; break; } return _context.abrupt("return"); case 3: return _context.abrupt("return", fn.apply(thisArg, args)); case 4: case "end": return _context.stop(); } } }, _callee, this); })); return _resolveCall.apply(this, arguments); } function wrapReason(reason) { if (_typeof(reason) !== 'object') { return reason; } switch (reason.name) { case 'AbortException': return new _util.AbortException(reason.message); case 'MissingPDFException': return new _util.MissingPDFException(reason.message); case 'UnexpectedResponseException': return new _util.UnexpectedResponseException(reason.message, reason.status); default: return new _util.UnknownErrorException(reason.message, reason.details); } } function makeReasonSerializable(reason) { if (!(reason instanceof Error) || reason instanceof _util.AbortException || reason instanceof _util.MissingPDFException || reason instanceof _util.UnexpectedResponseException || reason instanceof _util.UnknownErrorException) { return reason; } return new _util.UnknownErrorException(reason.message, reason.toString()); } function resolveOrReject(capability, success, reason) { if (success) { capability.resolve(); } else { capability.reject(reason); } } function finalize(promise) { return Promise.resolve(promise).catch(function () {}); } function MessageHandler(sourceName, targetName, comObj) { var _this = this; this.sourceName = sourceName; this.targetName = targetName; this.comObj = comObj; this.callbackId = 1; this.streamId = 1; this.postMessageTransfers = true; this.streamSinks = Object.create(null); this.streamControllers = Object.create(null); var callbacksCapabilities = this.callbacksCapabilities = Object.create(null); var ah = this.actionHandler = Object.create(null); this._onComObjOnMessage = function (event) { var data = event.data; if (data.targetName !== _this.sourceName) { return; } if (data.stream) { _this._processStreamMessage(data); } else if (data.isReply) { var callbackId = data.callbackId; if (data.callbackId in callbacksCapabilities) { var callback = callbacksCapabilities[callbackId]; delete callbacksCapabilities[callbackId]; if ('error' in data) { callback.reject(wrapReason(data.error)); } else { callback.resolve(data.data); } } else { throw new Error("Cannot resolve callback ".concat(callbackId)); } } else if (data.action in ah) { var action = ah[data.action]; if (data.callbackId) { var _sourceName = _this.sourceName; var _targetName = data.sourceName; Promise.resolve().then(function () { return action[0].call(action[1], data.data); }).then(function (result) { comObj.postMessage({ sourceName: _sourceName, targetName: _targetName, isReply: true, callbackId: data.callbackId, data: result }); }, function (reason) { comObj.postMessage({ sourceName: _sourceName, targetName: _targetName, isReply: true, callbackId: data.callbackId, error: makeReasonSerializable(reason) }); }); } else if (data.streamId) { _this._createStreamSink(data); } else { action[0].call(action[1], data.data); } } else { throw new Error("Unknown action from worker: ".concat(data.action)); } }; comObj.addEventListener('message', this._onComObjOnMessage); } MessageHandler.prototype = { on: function on(actionName, handler, scope) { var ah = this.actionHandler; if (ah[actionName]) { throw new Error("There is already an actionName called \"".concat(actionName, "\"")); } ah[actionName] = [handler, scope]; }, send: function send(actionName, data, transfers) { var message = { sourceName: this.sourceName, targetName: this.targetName, action: actionName, data: data }; this.postMessage(message, transfers); }, sendWithPromise: function sendWithPromise(actionName, data, transfers) { var callbackId = this.callbackId++; var message = { sourceName: this.sourceName, targetName: this.targetName, action: actionName, data: data, callbackId: callbackId }; var capability = (0, _util.createPromiseCapability)(); this.callbacksCapabilities[callbackId] = capability; try { this.postMessage(message, transfers); } catch (e) { capability.reject(e); } return capability.promise; }, sendWithStream: function sendWithStream(actionName, data, queueingStrategy, transfers) { var _this2 = this; var streamId = this.streamId++; var sourceName = this.sourceName; var targetName = this.targetName; return new _util.ReadableStream({ start: function start(controller) { var startCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId] = { controller: controller, startCall: startCapability, isClosed: false }; _this2.postMessage({ sourceName: sourceName, targetName: targetName, action: actionName, streamId: streamId, data: data, desiredSize: controller.desiredSize }); return startCapability.promise; }, pull: function pull(controller) { var pullCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId].pullCall = pullCapability; _this2.postMessage({ sourceName: sourceName, targetName: targetName, stream: 'pull', streamId: streamId, desiredSize: controller.desiredSize }); return pullCapability.promise; }, cancel: function cancel(reason) { var cancelCapability = (0, _util.createPromiseCapability)(); _this2.streamControllers[streamId].cancelCall = cancelCapability; _this2.streamControllers[streamId].isClosed = true; _this2.postMessage({ sourceName: sourceName, targetName: targetName, stream: 'cancel', reason: reason, streamId: streamId }); return cancelCapability.promise; } }, queueingStrategy); }, _createStreamSink: function _createStreamSink(data) { var _this3 = this; var self = this; var action = this.actionHandler[data.action]; var streamId = data.streamId; var desiredSize = data.desiredSize; var sourceName = this.sourceName; var targetName = data.sourceName; var capability = (0, _util.createPromiseCapability)(); var sendStreamRequest = function sendStreamRequest(_ref) { var stream = _ref.stream, chunk = _ref.chunk, transfers = _ref.transfers, success = _ref.success, reason = _ref.reason; _this3.postMessage({ sourceName: sourceName, targetName: targetName, stream: stream, streamId: streamId, chunk: chunk, success: success, reason: reason }, transfers); }; var streamSink = { enqueue: function enqueue(chunk) { var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; var transfers = arguments.length > 2 ? arguments[2] : undefined; if (this.isCancelled) { return; } var lastDesiredSize = this.desiredSize; this.desiredSize -= size; if (lastDesiredSize > 0 && this.desiredSize <= 0) { this.sinkCapability = (0, _util.createPromiseCapability)(); this.ready = this.sinkCapability.promise; } sendStreamRequest({ stream: 'enqueue', chunk: chunk, transfers: transfers }); }, close: function close() { if (this.isCancelled) { return; } this.isCancelled = true; sendStreamRequest({ stream: 'close' }); delete self.streamSinks[streamId]; }, error: function error(reason) { if (this.isCancelled) { return; } this.isCancelled = true; sendStreamRequest({ stream: 'error', reason: reason }); }, sinkCapability: capability, onPull: null, onCancel: null, isCancelled: false, desiredSize: desiredSize, ready: null }; streamSink.sinkCapability.resolve(); streamSink.ready = streamSink.sinkCapability.promise; this.streamSinks[streamId] = streamSink; resolveCall(action[0], [data.data, streamSink], action[1]).then(function () { sendStreamRequest({ stream: 'start_complete', success: true }); }, function (reason) { sendStreamRequest({ stream: 'start_complete', success: false, reason: reason }); }); }, _processStreamMessage: function _processStreamMessage(data) { var _this4 = this; var sourceName = this.sourceName; var targetName = data.sourceName; var streamId = data.streamId; var sendStreamResponse = function sendStreamResponse(_ref2) { var stream = _ref2.stream, success = _ref2.success, reason = _ref2.reason; _this4.comObj.postMessage({ sourceName: sourceName, targetName: targetName, stream: stream, success: success, streamId: streamId, reason: reason }); }; var deleteStreamController = function deleteStreamController() { Promise.all([_this4.streamControllers[data.streamId].startCall, _this4.streamControllers[data.streamId].pullCall, _this4.streamControllers[data.streamId].cancelCall].map(function (capability) { return capability && finalize(capability.promise); })).then(function () { delete _this4.streamControllers[data.streamId]; }); }; switch (data.stream) { case 'start_complete': resolveOrReject(this.streamControllers[data.streamId].startCall, data.success, wrapReason(data.reason)); break; case 'pull_complete': resolveOrReject(this.streamControllers[data.streamId].pullCall, data.success, wrapReason(data.reason)); break; case 'pull': if (!this.streamSinks[data.streamId]) { sendStreamResponse({ stream: 'pull_complete', success: true }); break; } if (this.streamSinks[data.streamId].desiredSize <= 0 && data.desiredSize > 0) { this.streamSinks[data.streamId].sinkCapability.resolve(); } this.streamSinks[data.streamId].desiredSize = data.desiredSize; resolveCall(this.streamSinks[data.streamId].onPull).then(function () { sendStreamResponse({ stream: 'pull_complete', success: true }); }, function (reason) { sendStreamResponse({ stream: 'pull_complete', success: false, reason: reason }); }); break; case 'enqueue': (0, _util.assert)(this.streamControllers[data.streamId], 'enqueue should have stream controller'); if (!this.streamControllers[data.streamId].isClosed) { this.streamControllers[data.streamId].controller.enqueue(data.chunk); } break; case 'close': (0, _util.assert)(this.streamControllers[data.streamId], 'close should have stream controller'); if (this.streamControllers[data.streamId].isClosed) { break; } this.streamControllers[data.streamId].isClosed = true; this.streamControllers[data.streamId].controller.close(); deleteStreamController(); break; case 'error': (0, _util.assert)(this.streamControllers[data.streamId], 'error should have stream controller'); this.streamControllers[data.streamId].controller.error(wrapReason(data.reason)); deleteStreamController(); break; case 'cancel_complete': resolveOrReject(this.streamControllers[data.streamId].cancelCall, data.success, wrapReason(data.reason)); deleteStreamController(); break; case 'cancel': if (!this.streamSinks[data.streamId]) { break; } resolveCall(this.streamSinks[data.streamId].onCancel, [wrapReason(data.reason)]).then(function () { sendStreamResponse({ stream: 'cancel_complete', success: true }); }, function (reason) { sendStreamResponse({ stream: 'cancel_complete', success: false, reason: reason }); }); this.streamSinks[data.streamId].sinkCapability.reject(wrapReason(data.reason)); this.streamSinks[data.streamId].isCancelled = true; delete this.streamSinks[data.streamId]; break; default: throw new Error('Unexpected stream case'); } }, postMessage: function postMessage(message, transfers) { if (transfers && this.postMessageTransfers) { this.comObj.postMessage(message, transfers); } else { this.comObj.postMessage(message); } }, destroy: function destroy() { this.comObj.removeEventListener('message', this._onComObjOnMessage); } }; /***/ }), /* 158 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.Metadata = void 0; var _util = __w_extracthighlights_require__(1); var _xml_parser = __w_extracthighlights_require__(159); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var Metadata = /*#__PURE__*/ function () { function Metadata(data) { _classCallCheck(this, Metadata); (0, _util.assert)(typeof data === 'string', 'Metadata: input is not a string'); data = this._repair(data); var parser = new _xml_parser.SimpleXMLParser(); var xmlDocument = parser.parseFromString(data); this._metadata = Object.create(null); if (xmlDocument) { this._parse(xmlDocument); } } _createClass(Metadata, [{ key: "_repair", value: function _repair(data) { return data.replace(/^([^<]+)/, '').replace(/>\\376\\377([^<]+)/g, function (all, codes) { var 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: ".concat(name, " isn't defined.")); }); var chars = ''; for (var i = 0, ii = bytes.length; i < ii; i += 2) { var code = bytes.charCodeAt(i) * 256 + bytes.charCodeAt(i + 1); if (code >= 32 && code < 127 && code !== 60 && code !== 62 && code !== 38) { chars += String.fromCharCode(code); } else { chars += '&#x' + (0x10000 + code).toString(16).substring(1) + ';'; } } return '>' + chars; }); } }, { key: "_parse", value: function _parse(xmlDocument) { var rdf = xmlDocument.documentElement; if (rdf.nodeName.toLowerCase() !== 'rdf:rdf') { rdf = rdf.firstChild; while (rdf && rdf.nodeName.toLowerCase() !== 'rdf:rdf') { rdf = rdf.nextSibling; } } var nodeName = rdf ? rdf.nodeName.toLowerCase() : null; if (!rdf || nodeName !== 'rdf:rdf' || !rdf.hasChildNodes()) { return; } var children = rdf.childNodes; for (var i = 0, ii = children.length; i < ii; i++) { var desc = children[i]; if (desc.nodeName.toLowerCase() !== 'rdf:description') { continue; } for (var j = 0, jj = desc.childNodes.length; j < jj; j++) { if (desc.childNodes[j].nodeName.toLowerCase() !== '#text') { var entry = desc.childNodes[j]; var name = entry.nodeName.toLowerCase(); this._metadata[name] = entry.textContent.trim(); } } } } }, { key: "get", value: function get(name) { var data = this._metadata[name]; return typeof data !== 'undefined' ? data : null; } }, { key: "getAll", value: function getAll() { return this._metadata; } }, { key: "has", value: function has(name) { return typeof this._metadata[name] !== 'undefined'; } }]); return Metadata; }(); exports.Metadata = Metadata; /***/ }), /* 159 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.SimpleXMLParser = void 0; function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var XMLParserErrorCode = { NoError: 0, EndOfDocument: -1, UnterminatedCdat: -2, UnterminatedXmlDeclaration: -3, UnterminatedDoctypeDeclaration: -4, UnterminatedComment: -5, MalformedElement: -6, OutOfMemory: -7, UnterminatedAttributeValue: -8, UnterminatedElement: -9, ElementNeverBegun: -10 }; function isWhitespace(s, index) { var ch = s[index]; return ch === ' ' || ch === '\n' || ch === '\r' || ch === '\t'; } function isWhitespaceString(s) { for (var i = 0, ii = s.length; i < ii; i++) { if (!isWhitespace(s, i)) { return false; } } return true; } var XMLParserBase = /*#__PURE__*/ function () { function XMLParserBase() { _classCallCheck(this, XMLParserBase); } _createClass(XMLParserBase, [{ key: "_resolveEntities", value: function _resolveEntities(s) { var _this = this; return s.replace(/&([^;]+);/g, function (all, entity) { if (entity.substring(0, 2) === '#x') { return String.fromCharCode(parseInt(entity.substring(2), 16)); } else if (entity.substring(0, 1) === '#') { return String.fromCharCode(parseInt(entity.substring(1), 10)); } switch (entity) { case 'lt': return '<'; case 'gt': return '>'; case 'amp': return '&'; case 'quot': return '\"'; } return _this.onResolveEntity(entity); }); } }, { key: "_parseContent", value: function _parseContent(s, start) { var pos = start, name, attributes = []; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '>' && s[pos] !== '/') { ++pos; } name = s.substring(start, pos); skipWs(); while (pos < s.length && s[pos] !== '>' && s[pos] !== '/' && s[pos] !== '?') { skipWs(); var attrName = '', attrValue = ''; while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '=') { attrName += s[pos]; ++pos; } skipWs(); if (s[pos] !== '=') { return null; } ++pos; skipWs(); var attrEndChar = s[pos]; if (attrEndChar !== '\"' && attrEndChar !== '\'') { return null; } var 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: name, attributes: attributes, parsed: pos - start }; } }, { key: "_parseProcessingInstruction", value: function _parseProcessingInstruction(s, start) { var pos = start, name, value; function skipWs() { while (pos < s.length && isWhitespace(s, pos)) { ++pos; } } while (pos < s.length && !isWhitespace(s, pos) && s[pos] !== '>' && s[pos] !== '/') { ++pos; } name = s.substring(start, pos); skipWs(); var attrStart = pos; while (pos < s.length && (s[pos] !== '?' || s[pos + 1] !== '>')) { ++pos; } value = s.substring(attrStart, pos); return { name: name, value: value, parsed: pos - start }; } }, { key: "parseXml", value: function parseXml(s) { var i = 0; while (i < s.length) { var ch = s[i]; var j = i; if (ch === '<') { ++j; var ch2 = s[j]; var q = void 0; 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; var 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') { var q2 = s.indexOf('[', j + 8); var 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; } var 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: var content = this._parseContent(s, j); if (content === null) { this.onError(XMLParserErrorCode.MalformedElement); return; } var 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++; } var text = s.substring(i, j); this.onText(this._resolveEntities(text)); } i = j; } } }, { key: "onResolveEntity", value: function onResolveEntity(name) { return "&".concat(name, ";"); } }, { key: "onPi", value: function onPi(name, value) {} }, { key: "onComment", value: function onComment(text) {} }, { key: "onCdata", value: function onCdata(text) {} }, { key: "onDoctype", value: function onDoctype(doctypeContent) {} }, { key: "onText", value: function onText(text) {} }, { key: "onBeginElement", value: function onBeginElement(name, attributes, isEmpty) {} }, { key: "onEndElement", value: function onEndElement(name) {} }, { key: "onError", value: function onError(code) {} }]); return XMLParserBase; }(); var SimpleDOMNode = /*#__PURE__*/ function () { function SimpleDOMNode(nodeName, nodeValue) { _classCallCheck(this, SimpleDOMNode); this.nodeName = nodeName; this.nodeValue = nodeValue; Object.defineProperty(this, 'parentNode', { value: null, writable: true }); } _createClass(SimpleDOMNode, [{ key: "hasChildNodes", value: function hasChildNodes() { return this.childNodes && this.childNodes.length > 0; } }, { key: "firstChild", get: function get() { return this.childNodes && this.childNodes[0]; } }, { key: "nextSibling", get: function get() { var childNodes = this.parentNode.childNodes; if (!childNodes) { return undefined; } var index = childNodes.indexOf(this); if (index === -1) { return undefined; } return childNodes[index + 1]; } }, { key: "textContent", get: function get() { if (!this.childNodes) { return this.nodeValue || ''; } return this.childNodes.map(function (child) { return child.textContent; }).join(''); } }]); return SimpleDOMNode; }(); var SimpleXMLParser = /*#__PURE__*/ function (_XMLParserBase) { _inherits(SimpleXMLParser, _XMLParserBase); function SimpleXMLParser() { var _this2; _classCallCheck(this, SimpleXMLParser); _this2 = _possibleConstructorReturn(this, _getPrototypeOf(SimpleXMLParser).call(this)); _this2._currentFragment = null; _this2._stack = null; _this2._errorCode = XMLParserErrorCode.NoError; return _this2; } _createClass(SimpleXMLParser, [{ key: "parseFromString", value: function parseFromString(data) { this._currentFragment = []; this._stack = []; this._errorCode = XMLParserErrorCode.NoError; this.parseXml(data); if (this._errorCode !== XMLParserErrorCode.NoError) { return undefined; } var _this$_currentFragmen = _slicedToArray(this._currentFragment, 1), documentElement = _this$_currentFragmen[0]; if (!documentElement) { return undefined; } return { documentElement: documentElement }; } }, { key: "onResolveEntity", value: function onResolveEntity(name) { switch (name) { case 'apos': return '\''; } return _get(_getPrototypeOf(SimpleXMLParser.prototype), "onResolveEntity", this).call(this, name); } }, { key: "onText", value: function onText(text) { if (isWhitespaceString(text)) { return; } var node = new SimpleDOMNode('#text', text); this._currentFragment.push(node); } }, { key: "onCdata", value: function onCdata(text) { var node = new SimpleDOMNode('#text', text); this._currentFragment.push(node); } }, { key: "onBeginElement", value: function onBeginElement(name, attributes, isEmpty) { var node = new SimpleDOMNode(name); node.childNodes = []; this._currentFragment.push(node); if (isEmpty) { return; } this._stack.push(this._currentFragment); this._currentFragment = node.childNodes; } }, { key: "onEndElement", value: function onEndElement(name) { this._currentFragment = this._stack.pop() || []; var lastElement = this._currentFragment[this._currentFragment.length - 1]; if (!lastElement) { return; } for (var i = 0, ii = lastElement.childNodes.length; i < ii; i++) { lastElement.childNodes[i].parentNode = lastElement; } } }, { key: "onError", value: function onError(code) { this._errorCode = code; } }]); return SimpleXMLParser; }(XMLParserBase); exports.SimpleXMLParser = SimpleXMLParser; /***/ }), /* 160 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFDataTransportStream = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); var _util = __w_extracthighlights_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var PDFDataTransportStream = function PDFDataTransportStreamClosure() { function PDFDataTransportStream(params, pdfDataRangeTransport) { var _this = this; (0, _util.assert)(pdfDataRangeTransport); this._queuedChunks = []; var initialData = params.initialData; if (initialData && initialData.length > 0) { var 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(function (begin, chunk) { _this._onReceiveData({ begin: begin, chunk: chunk }); }); this._pdfDataRangeTransport.addProgressListener(function (loaded) { _this._onProgress({ loaded: loaded }); }); this._pdfDataRangeTransport.addProgressiveReadListener(function (chunk) { _this._onReceiveData({ chunk: chunk }); }); this._pdfDataRangeTransport.transportReady(); } PDFDataTransportStream.prototype = { _onReceiveData: function PDFDataTransportStream_onReceiveData(args) { var buffer = new Uint8Array(args.chunk).buffer; if (args.begin === undefined) { if (this._fullRequestReader) { this._fullRequestReader._enqueue(buffer); } else { this._queuedChunks.push(buffer); } } else { var found = this._rangeReaders.some(function (rangeReader) { if (rangeReader._begin !== args.begin) { return false; } rangeReader._enqueue(buffer); return true; }); (0, _util.assert)(found); } }, _onProgress: function PDFDataTransportStream_onDataProgress(evt) { if (this._rangeReaders.length > 0) { var firstReader = this._rangeReaders[0]; if (firstReader.onProgress) { firstReader.onProgress({ loaded: evt.loaded }); } } }, _removeRangeReader: function PDFDataTransportStream_removeRangeReader(reader) { var i = this._rangeReaders.indexOf(reader); if (i >= 0) { this._rangeReaders.splice(i, 1); } }, getFullReader: function PDFDataTransportStream_getFullReader() { (0, _util.assert)(!this._fullRequestReader); var queuedChunks = this._queuedChunks; this._queuedChunks = null; return new PDFDataTransportStreamReader(this, queuedChunks); }, getRangeReader: function PDFDataTransportStream_getRangeReader(begin, end) { var reader = new PDFDataTransportStreamRangeReader(this, begin, end); this._pdfDataRangeTransport.requestDataRange(begin, end); this._rangeReaders.push(reader); return reader; }, cancelAllRequests: function PDFDataTransportStream_cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeReaders.slice(0); readers.forEach(function (rangeReader) { rangeReader.cancel(reason); }); this._pdfDataRangeTransport.abort(); } }; function PDFDataTransportStreamReader(stream, queuedChunks) { this._stream = stream; this._done = false; this._filename = null; this._queuedChunks = queuedChunks || []; this._requests = []; this._headersReady = Promise.resolve(); stream._fullRequestReader = this; this.onProgress = null; } PDFDataTransportStreamReader.prototype = { _enqueue: function PDFDataTransportStreamReader_enqueue(chunk) { if (this._done) { return; } if (this._requests.length > 0) { var requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); return; } this._queuedChunks.push(chunk); }, 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; }, read: function () { var _read = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee() { var chunk, requestCapability; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(this._queuedChunks.length > 0)) { _context.next = 3; break; } chunk = this._queuedChunks.shift(); return _context.abrupt("return", { value: chunk, done: false }); case 3: if (!this._done) { _context.next = 5; break; } return _context.abrupt("return", { value: undefined, done: true }); case 5: requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return _context.abrupt("return", requestCapability.promise); case 8: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }(), cancel: function PDFDataTransportStreamReader_cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; } }; function PDFDataTransportStreamRangeReader(stream, begin, end) { this._stream = stream; this._begin = begin; this._end = end; this._queuedChunk = null; this._requests = []; this._done = false; this.onProgress = null; } PDFDataTransportStreamRangeReader.prototype = { _enqueue: function PDFDataTransportStreamRangeReader_enqueue(chunk) { if (this._done) { return; } if (this._requests.length === 0) { this._queuedChunk = chunk; } else { var requestsCapability = this._requests.shift(); requestsCapability.resolve({ value: chunk, done: false }); this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; } this._done = true; this._stream._removeRangeReader(this); }, get isStreamingSupported() { return false; }, read: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee2() { var chunk, requestCapability; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!this._queuedChunk) { _context2.next = 4; break; } chunk = this._queuedChunk; this._queuedChunk = null; return _context2.abrupt("return", { value: chunk, done: false }); case 4: if (!this._done) { _context2.next = 6; break; } return _context2.abrupt("return", { value: undefined, done: true }); case 6: requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return _context2.abrupt("return", requestCapability.promise); case 9: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }(), cancel: function PDFDataTransportStreamRangeReader_cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; this._stream._removeRangeReader(this); } }; return PDFDataTransportStream; }(); exports.PDFDataTransportStream = PDFDataTransportStream; /***/ }), /* 161 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.WebGLContext = void 0; var _util = __w_extracthighlights_require__(1); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var WebGLContext = /*#__PURE__*/ function () { function WebGLContext(_ref) { var _ref$enable = _ref.enable, enable = _ref$enable === void 0 ? false : _ref$enable; _classCallCheck(this, WebGLContext); this._enabled = enable === true; } _createClass(WebGLContext, [{ key: "composeSMask", value: function composeSMask(_ref2) { var layer = _ref2.layer, mask = _ref2.mask, properties = _ref2.properties; return WebGLUtils.composeSMask(layer, mask, properties); } }, { key: "drawFigures", value: function drawFigures(_ref3) { var width = _ref3.width, height = _ref3.height, backgroundColor = _ref3.backgroundColor, figures = _ref3.figures, context = _ref3.context; return WebGLUtils.drawFigures(width, height, backgroundColor, figures, context); } }, { key: "clear", value: function clear() { WebGLUtils.cleanup(); } }, { key: "isEnabled", get: function get() { var enabled = this._enabled; if (enabled) { enabled = WebGLUtils.tryInitGL(); } return (0, _util.shadow)(this, 'isEnabled', enabled); } }]); return WebGLContext; }(); exports.WebGLContext = WebGLContext; var WebGLUtils = function WebGLUtilsClosure() { function loadShader(gl, code, shaderType) { var shader = gl.createShader(shaderType); gl.shaderSource(shader, code); gl.compileShader(shader); var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS); if (!compiled) { var errorMsg = gl.getShaderInfoLog(shader); throw new Error('Error during shader compilation: ' + errorMsg); } return shader; } function createVertexShader(gl, code) { return loadShader(gl, code, gl.VERTEX_SHADER); } function createFragmentShader(gl, code) { return loadShader(gl, code, gl.FRAGMENT_SHADER); } function createProgram(gl, shaders) { var program = gl.createProgram(); for (var i = 0, ii = shaders.length; i < ii; ++i) { gl.attachShader(program, shaders[i]); } gl.linkProgram(program); var linked = gl.getProgramParameter(program, gl.LINK_STATUS); if (!linked) { var errorMsg = gl.getProgramInfoLog(program); throw new Error('Error during program linking: ' + errorMsg); } return program; } function createTexture(gl, image, textureId) { gl.activeTexture(textureId); var texture = gl.createTexture(); gl.bindTexture(gl.TEXTURE_2D, texture); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST); gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST); gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image); return texture; } var currentGL, currentCanvas; function generateGL() { if (currentGL) { return; } currentCanvas = document.createElement('canvas'); currentGL = currentCanvas.getContext('webgl', { premultipliedalpha: false }); } var smaskVertexShaderCode = '\ attribute vec2 a_position; \ attribute vec2 a_texCoord; \ \ uniform vec2 u_resolution; \ \ varying vec2 v_texCoord; \ \ void main() { \ vec2 clipSpace = (a_position / u_resolution) * 2.0 - 1.0; \ gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ \ v_texCoord = a_texCoord; \ } '; var smaskFragmentShaderCode = '\ precision mediump float; \ \ uniform vec4 u_backdrop; \ uniform int u_subtype; \ uniform sampler2D u_image; \ uniform sampler2D u_mask; \ \ varying vec2 v_texCoord; \ \ void main() { \ vec4 imageColor = texture2D(u_image, v_texCoord); \ vec4 maskColor = texture2D(u_mask, v_texCoord); \ if (u_backdrop.a > 0.0) { \ maskColor.rgb = maskColor.rgb * maskColor.a + \ u_backdrop.rgb * (1.0 - maskColor.a); \ } \ float lum; \ if (u_subtype == 0) { \ lum = maskColor.a; \ } else { \ lum = maskColor.r * 0.3 + maskColor.g * 0.59 + \ maskColor.b * 0.11; \ } \ imageColor.a *= lum; \ imageColor.rgb *= imageColor.a; \ gl_FragColor = imageColor; \ } '; var smaskCache = null; function initSmaskGL() { var canvas, gl; generateGL(); canvas = currentCanvas; currentCanvas = null; gl = currentGL; currentGL = null; var vertexShader = createVertexShader(gl, smaskVertexShaderCode); var fragmentShader = createFragmentShader(gl, smaskFragmentShaderCode); var program = createProgram(gl, [vertexShader, fragmentShader]); gl.useProgram(program); var cache = {}; cache.gl = gl; cache.canvas = canvas; cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution'); cache.positionLocation = gl.getAttribLocation(program, 'a_position'); cache.backdropLocation = gl.getUniformLocation(program, 'u_backdrop'); cache.subtypeLocation = gl.getUniformLocation(program, 'u_subtype'); var texCoordLocation = gl.getAttribLocation(program, 'a_texCoord'); var texLayerLocation = gl.getUniformLocation(program, 'u_image'); var texMaskLocation = gl.getUniformLocation(program, 'u_mask'); var texCoordBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]), gl.STATIC_DRAW); gl.enableVertexAttribArray(texCoordLocation); gl.vertexAttribPointer(texCoordLocation, 2, gl.FLOAT, false, 0, 0); gl.uniform1i(texLayerLocation, 0); gl.uniform1i(texMaskLocation, 1); smaskCache = cache; } function composeSMask(layer, mask, properties) { var width = layer.width, height = layer.height; if (!smaskCache) { initSmaskGL(); } var cache = smaskCache, canvas = cache.canvas, gl = cache.gl; canvas.width = width; canvas.height = height; gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); gl.uniform2f(cache.resolutionLocation, width, height); if (properties.backdrop) { gl.uniform4f(cache.resolutionLocation, properties.backdrop[0], properties.backdrop[1], properties.backdrop[2], 1); } else { gl.uniform4f(cache.resolutionLocation, 0, 0, 0, 0); } gl.uniform1i(cache.subtypeLocation, properties.subtype === 'Luminosity' ? 1 : 0); var texture = createTexture(gl, layer, gl.TEXTURE0); var maskTexture = createTexture(gl, mask, gl.TEXTURE1); var buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, buffer); gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0, 0, width, 0, 0, height, 0, height, width, 0, width, height]), gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.positionLocation); gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); gl.clearColor(0, 0, 0, 0); gl.enable(gl.BLEND); gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA); gl.clear(gl.COLOR_BUFFER_BIT); gl.drawArrays(gl.TRIANGLES, 0, 6); gl.flush(); gl.deleteTexture(texture); gl.deleteTexture(maskTexture); gl.deleteBuffer(buffer); return canvas; } var figuresVertexShaderCode = '\ attribute vec2 a_position; \ attribute vec3 a_color; \ \ uniform vec2 u_resolution; \ uniform vec2 u_scale; \ uniform vec2 u_offset; \ \ varying vec4 v_color; \ \ void main() { \ vec2 position = (a_position + u_offset) * u_scale; \ vec2 clipSpace = (position / u_resolution) * 2.0 - 1.0; \ gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1); \ \ v_color = vec4(a_color / 255.0, 1.0); \ } '; var figuresFragmentShaderCode = '\ precision mediump float; \ \ varying vec4 v_color; \ \ void main() { \ gl_FragColor = v_color; \ } '; var figuresCache = null; function initFiguresGL() { var canvas, gl; generateGL(); canvas = currentCanvas; currentCanvas = null; gl = currentGL; currentGL = null; var vertexShader = createVertexShader(gl, figuresVertexShaderCode); var fragmentShader = createFragmentShader(gl, figuresFragmentShaderCode); var program = createProgram(gl, [vertexShader, fragmentShader]); gl.useProgram(program); var cache = {}; cache.gl = gl; cache.canvas = canvas; cache.resolutionLocation = gl.getUniformLocation(program, 'u_resolution'); cache.scaleLocation = gl.getUniformLocation(program, 'u_scale'); cache.offsetLocation = gl.getUniformLocation(program, 'u_offset'); cache.positionLocation = gl.getAttribLocation(program, 'a_position'); cache.colorLocation = gl.getAttribLocation(program, 'a_color'); figuresCache = cache; } function drawFigures(width, height, backgroundColor, figures, context) { if (!figuresCache) { initFiguresGL(); } var cache = figuresCache, canvas = cache.canvas, gl = cache.gl; canvas.width = width; canvas.height = height; gl.viewport(0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight); gl.uniform2f(cache.resolutionLocation, width, height); var count = 0; var i, ii, rows; for (i = 0, ii = figures.length; i < ii; i++) { switch (figures[i].type) { case 'lattice': rows = figures[i].coords.length / figures[i].verticesPerRow | 0; count += (rows - 1) * (figures[i].verticesPerRow - 1) * 6; break; case 'triangles': count += figures[i].coords.length; break; } } var coords = new Float32Array(count * 2); var colors = new Uint8Array(count * 3); var coordsMap = context.coords, colorsMap = context.colors; var pIndex = 0, cIndex = 0; for (i = 0, ii = figures.length; i < ii; i++) { var figure = figures[i], ps = figure.coords, cs = figure.colors; switch (figure.type) { case 'lattice': var cols = figure.verticesPerRow; rows = ps.length / cols | 0; for (var row = 1; row < rows; row++) { var offset = row * cols + 1; for (var col = 1; col < cols; col++, offset++) { coords[pIndex] = coordsMap[ps[offset - cols - 1]]; coords[pIndex + 1] = coordsMap[ps[offset - cols - 1] + 1]; coords[pIndex + 2] = coordsMap[ps[offset - cols]]; coords[pIndex + 3] = coordsMap[ps[offset - cols] + 1]; coords[pIndex + 4] = coordsMap[ps[offset - 1]]; coords[pIndex + 5] = coordsMap[ps[offset - 1] + 1]; colors[cIndex] = colorsMap[cs[offset - cols - 1]]; colors[cIndex + 1] = colorsMap[cs[offset - cols - 1] + 1]; colors[cIndex + 2] = colorsMap[cs[offset - cols - 1] + 2]; colors[cIndex + 3] = colorsMap[cs[offset - cols]]; colors[cIndex + 4] = colorsMap[cs[offset - cols] + 1]; colors[cIndex + 5] = colorsMap[cs[offset - cols] + 2]; colors[cIndex + 6] = colorsMap[cs[offset - 1]]; colors[cIndex + 7] = colorsMap[cs[offset - 1] + 1]; colors[cIndex + 8] = colorsMap[cs[offset - 1] + 2]; coords[pIndex + 6] = coords[pIndex + 2]; coords[pIndex + 7] = coords[pIndex + 3]; coords[pIndex + 8] = coords[pIndex + 4]; coords[pIndex + 9] = coords[pIndex + 5]; coords[pIndex + 10] = coordsMap[ps[offset]]; coords[pIndex + 11] = coordsMap[ps[offset] + 1]; colors[cIndex + 9] = colors[cIndex + 3]; colors[cIndex + 10] = colors[cIndex + 4]; colors[cIndex + 11] = colors[cIndex + 5]; colors[cIndex + 12] = colors[cIndex + 6]; colors[cIndex + 13] = colors[cIndex + 7]; colors[cIndex + 14] = colors[cIndex + 8]; colors[cIndex + 15] = colorsMap[cs[offset]]; colors[cIndex + 16] = colorsMap[cs[offset] + 1]; colors[cIndex + 17] = colorsMap[cs[offset] + 2]; pIndex += 12; cIndex += 18; } } break; case 'triangles': for (var j = 0, jj = ps.length; j < jj; j++) { coords[pIndex] = coordsMap[ps[j]]; coords[pIndex + 1] = coordsMap[ps[j] + 1]; colors[cIndex] = colorsMap[cs[j]]; colors[cIndex + 1] = colorsMap[cs[j] + 1]; colors[cIndex + 2] = colorsMap[cs[j] + 2]; pIndex += 2; cIndex += 3; } break; } } if (backgroundColor) { gl.clearColor(backgroundColor[0] / 255, backgroundColor[1] / 255, backgroundColor[2] / 255, 1.0); } else { gl.clearColor(0, 0, 0, 0); } gl.clear(gl.COLOR_BUFFER_BIT); var coordsBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, coordsBuffer); gl.bufferData(gl.ARRAY_BUFFER, coords, gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.positionLocation); gl.vertexAttribPointer(cache.positionLocation, 2, gl.FLOAT, false, 0, 0); var colorsBuffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, colorsBuffer); gl.bufferData(gl.ARRAY_BUFFER, colors, gl.STATIC_DRAW); gl.enableVertexAttribArray(cache.colorLocation); gl.vertexAttribPointer(cache.colorLocation, 3, gl.UNSIGNED_BYTE, false, 0, 0); gl.uniform2f(cache.scaleLocation, context.scaleX, context.scaleY); gl.uniform2f(cache.offsetLocation, context.offsetX, context.offsetY); gl.drawArrays(gl.TRIANGLES, 0, count); gl.flush(); gl.deleteBuffer(coordsBuffer); gl.deleteBuffer(colorsBuffer); return canvas; } return { tryInitGL: function tryInitGL() { try { generateGL(); return !!currentGL; } catch (ex) {} return false; }, composeSMask: composeSMask, drawFigures: drawFigures, cleanup: function cleanup() { if (smaskCache && smaskCache.canvas) { smaskCache.canvas.width = 0; smaskCache.canvas.height = 0; } if (figuresCache && figuresCache.canvas) { figuresCache.canvas.width = 0; figuresCache.canvas.height = 0; } smaskCache = null; figuresCache = null; } }; }(); /***/ }), /* 162 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.renderTextLayer = void 0; var _util = __w_extracthighlights_require__(1); var _global_scope = _interopRequireDefault(__w_extracthighlights_require__(3)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var renderTextLayer = function renderTextLayerClosure() { var MAX_TEXT_DIVS_TO_RENDER = 100000; var NonWhitespaceRegexp = /\S/; function isAllWhitespace(str) { return !NonWhitespaceRegexp.test(str); } var styleBuf = ['left: ', 0, 'px; top: ', 0, 'px; font-size: ', 0, 'px; font-family: ', '', ';']; function appendText(task, geom, styles) { var textDiv = document.createElement('span'); var textDivProperties = { style: null, angle: 0, canvasWidth: 0, isWhitespace: false, originalTransform: null, paddingBottom: 0, paddingLeft: 0, paddingRight: 0, paddingTop: 0, scale: 1 }; task._textDivs.push(textDiv); if (isAllWhitespace(geom.str)) { textDivProperties.isWhitespace = true; task._textDivProperties.set(textDiv, textDivProperties); return; } var tx = _util.Util.transform(task._viewport.transform, geom.transform); var angle = Math.atan2(tx[1], tx[0]); var style = styles[geom.fontName]; if (style.vertical) { angle += Math.PI / 2; } var fontHeight = Math.sqrt(tx[2] * tx[2] + tx[3] * tx[3]); var fontAscent = fontHeight; if (style.ascent) { fontAscent = style.ascent * fontAscent; } else if (style.descent) { fontAscent = (1 + style.descent) * fontAscent; } var left; var 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); } styleBuf[1] = left; styleBuf[3] = top; styleBuf[5] = fontHeight; styleBuf[7] = style.fontFamily; textDivProperties.style = styleBuf.join(''); textDiv.setAttribute('style', textDivProperties.style); textDiv.textContent = geom.str; if (task._fontInspectorEnabled) { textDiv.dataset.fontName = geom.fontName; } if (angle !== 0) { textDivProperties.angle = angle * (180 / Math.PI); } if (geom.str.length > 1) { 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) { var angleCos = 1, angleSin = 0; if (angle !== 0) { angleCos = Math.cos(angle); angleSin = Math.sin(angle); } var divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale; var divHeight = fontHeight; var 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: m }); } } function render(task) { if (task._canceled) { return; } var textDivs = task._textDivs; var capability = task._capability; var textDivsLength = textDivs.length; if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) { task._renderingDone = true; capability.resolve(); return; } if (!task._textContentStream) { for (var i = 0; i < textDivsLength; i++) { task._layoutText(textDivs[i]); } } task._renderingDone = true; capability.resolve(); } function expand(task) { var bounds = task._bounds; var viewport = task._viewport; var expanded = expandBounds(viewport.width, viewport.height, bounds); for (var i = 0; i < expanded.length; i++) { var div = bounds[i].div; var 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; } var e = expanded[i], b = bounds[i]; var m = b.m, c = m[0], s = m[1]; var points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size]; var ts = new Float64Array(64); points.forEach(function (p, i) { var t = function (p, m) { var xt = p[0] * m[0] + p[1] * m[2] + m[4]; var yt = p[0] * m[1] + p[1] * m[3] + m[5]; return [xt, yt]; }; ts[i + 0] = c && (e.left - t[0]) / c; ts[i + 4] = s && (e.top - t[1]) / s; ts[i + 8] = c && (e.right - t[0]) / c; ts[i + 12] = s && (e.bottom - t[1]) / s; ts[i + 16] = s && (e.left - t[0]) / -s; ts[i + 20] = c && (e.top - t[1]) / c; ts[i + 24] = s && (e.right - t[0]) / -s; ts[i + 28] = c && (e.bottom - t[1]) / c; ts[i + 32] = c && (e.left - t[0]) / -c; ts[i + 36] = s && (e.top - t[1]) / -s; ts[i + 40] = c && (e.right - t[0]) / -c; ts[i + 44] = s && (e.bottom - t[1]) / -s; ts[i + 48] = s && (e.left - t[0]) / s; ts[i + 52] = c && (e.top - t[1]) / -c; ts[i + 56] = s && (e.right - t[0]) / s; ts[i + 60] = c && (e.bottom - t[1]) / -c; }); var findPositiveMin = function findPositiveMin(ts, offset, count) { var result = 0; for (var i = 0; i < count; i++) { var t = ts[offset++]; if (t > 0) { result = result ? Math.min(t, result) : t; } } return result; }; var 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) { var 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); var expanded = new Array(boxes.length); bounds.forEach(function (b) { var i = b.index; expanded[i] = { left: b.x1New, top: 0, right: b.x2New, bottom: 0 }; }); boxes.map(function (box, i) { var 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); bounds.forEach(function (b) { var 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; }); var fakeBoundary = { x1: -Infinity, y1: -Infinity, x2: 0, y2: Infinity, index: -1, x1New: 0, x2New: 0 }; var horizon = [{ start: -Infinity, end: Infinity, boundary: fakeBoundary }]; bounds.forEach(function (boundary) { var i = 0; while (i < horizon.length && horizon[i].end <= boundary.y1) { i++; } var j = horizon.length - 1; while (j >= 0 && horizon[j].start >= boundary.y2) { j--; } var horizonPart, affectedBoundary; var q, k, maxXNew = -Infinity; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; var 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); } } var changedHorizon = [], lastBoundary = null; for (q = i; q <= j; q++) { horizonPart = horizon[q]; affectedBoundary = horizonPart.boundary; var 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; } var 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)); }); horizon.forEach(function (horizonPart) { var affectedBoundary = horizonPart.boundary; if (affectedBoundary.x2New === undefined) { affectedBoundary.x2New = Math.max(width, affectedBoundary.x2); } }); } function TextLayerRenderTask(_ref) { var textContent = _ref.textContent, textContentStream = _ref.textContentStream, container = _ref.container, viewport = _ref.viewport, textDivs = _ref.textDivs, textContentItemsStr = _ref.textContentItemsStr, enhanceTextSelection = _ref.enhanceTextSelection; this._textContent = textContent; this._textContentStream = textContentStream; this._container = container; this._viewport = viewport; this._textDivs = textDivs || []; this._textContentItemsStr = textContentItemsStr || []; this._enhanceTextSelection = !!enhanceTextSelection; this._fontInspectorEnabled = !!(_global_scope.default.FontInspector && _global_scope.default.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 = []; } TextLayerRenderTask.prototype = { get promise() { return this._capability.promise; }, cancel: function TextLayer_cancel() { if (this._reader) { this._reader.cancel(new _util.AbortException('text layer task cancelled')); this._reader = null; } this._canceled = true; if (this._renderTimer !== null) { clearTimeout(this._renderTimer); this._renderTimer = null; } this._capability.reject('canceled'); }, _processItems: function _processItems(items, styleCache) { for (var i = 0, len = items.length; i < len; i++) { this._textContentItemsStr.push(items[i].str); appendText(this, items[i], styleCache); } }, _layoutText: function _layoutText(textDiv) { var textLayerFrag = this._container; var textDivProperties = this._textDivProperties.get(textDiv); if (textDivProperties.isWhitespace) { return; } var fontSize = textDiv.style.fontSize; var fontFamily = textDiv.style.fontFamily; if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) { this._layoutTextCtx.font = fontSize + ' ' + fontFamily; this._layoutTextLastFontSize = fontSize; this._layoutTextLastFontFamily = fontFamily; } var width = this._layoutTextCtx.measureText(textDiv.textContent).width; var transform = ''; if (textDivProperties.canvasWidth !== 0 && width > 0) { textDivProperties.scale = textDivProperties.canvasWidth / width; transform = "scaleX(".concat(textDivProperties.scale, ")"); } if (textDivProperties.angle !== 0) { transform = "rotate(".concat(textDivProperties.angle, "deg) ").concat(transform); } if (transform.length > 0) { textDivProperties.originalTransform = transform; textDiv.style.transform = transform; } this._textDivProperties.set(textDiv, textDivProperties); textLayerFrag.appendChild(textDiv); }, _render: function TextLayer_render(timeout) { var _this = this; var capability = (0, _util.createPromiseCapability)(); var styleCache = Object.create(null); var canvas = document.createElement('canvas'); canvas.mozOpaque = true; this._layoutTextCtx = canvas.getContext('2d', { alpha: false }); if (this._textContent) { var textItems = this._textContent.items; var textStyles = this._textContent.styles; this._processItems(textItems, textStyles); capability.resolve(); } else if (this._textContentStream) { var pump = function pump() { _this._reader.read().then(function (_ref2) { var value = _ref2.value, done = _ref2.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(function () { styleCache = null; if (!timeout) { render(_this); } else { _this._renderTimer = setTimeout(function () { render(_this); _this._renderTimer = null; }, timeout); } }, this._capability.reject); }, expandTextDivs: function TextLayer_expandTextDivs(expandDivs) { if (!this._enhanceTextSelection || !this._renderingDone) { return; } if (this._bounds !== null) { expand(this); this._bounds = null; } for (var i = 0, ii = this._textDivs.length; i < ii; i++) { var div = this._textDivs[i]; var divProperties = this._textDivProperties.get(div); if (divProperties.isWhitespace) { continue; } if (expandDivs) { var transform = '', padding = ''; if (divProperties.scale !== 1) { transform = 'scaleX(' + divProperties.scale + ')'; } if (divProperties.angle !== 0) { transform = 'rotate(' + divProperties.angle + 'deg) ' + transform; } if (divProperties.paddingLeft !== 0) { padding += ' padding-left: ' + divProperties.paddingLeft / divProperties.scale + 'px;'; transform += ' translateX(' + -divProperties.paddingLeft / divProperties.scale + 'px)'; } if (divProperties.paddingTop !== 0) { padding += ' padding-top: ' + divProperties.paddingTop + 'px;'; transform += ' translateY(' + -divProperties.paddingTop + 'px)'; } if (divProperties.paddingRight !== 0) { padding += ' padding-right: ' + divProperties.paddingRight / divProperties.scale + 'px;'; } if (divProperties.paddingBottom !== 0) { padding += ' padding-bottom: ' + divProperties.paddingBottom + 'px;'; } if (padding !== '') { div.setAttribute('style', divProperties.style + padding); } if (transform !== '') { div.style.transform = transform; } } else { div.style.padding = 0; div.style.transform = divProperties.originalTransform || ''; } } } }; function renderTextLayer(renderParameters) { var 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; } return renderTextLayer; }(); exports.renderTextLayer = renderTextLayer; /***/ }), /* 163 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.AnnotationLayer = void 0; var _dom_utils = __w_extracthighlights_require__(151); var _util = __w_extracthighlights_require__(1); function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var AnnotationElementFactory = /*#__PURE__*/ function () { function AnnotationElementFactory() { _classCallCheck(this, AnnotationElementFactory); } _createClass(AnnotationElementFactory, null, [{ key: "create", value: function create(parameters) { var 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: var 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.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.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); } } }]); return AnnotationElementFactory; }(); var AnnotationElement = /*#__PURE__*/ function () { function AnnotationElement(parameters) { var isRenderable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var ignoreBorder = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; _classCallCheck(this, AnnotationElement); 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.renderInteractiveForms = parameters.renderInteractiveForms; this.svgFactory = parameters.svgFactory; if (isRenderable) { this.container = this._createContainer(ignoreBorder); } } _createClass(AnnotationElement, [{ key: "_createContainer", value: function _createContainer() { var ignoreBorder = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; var data = this.data, page = this.page, viewport = this.viewport; var container = document.createElement('section'); var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; container.setAttribute('data-annotation-id', data.id); var 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]]); 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 = width - 2 * data.borderStyle.width; height = height - 2 * data.borderStyle.width; } var horizontalRadius = data.borderStyle.horizontalCornerRadius; var verticalRadius = data.borderStyle.verticalCornerRadius; if (horizontalRadius > 0 || verticalRadius > 0) { var 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; } if (data.color) { container.style.borderColor = _util.Util.makeCssRgb(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'; container.style.width = width + 'px'; container.style.height = height + 'px'; return container; } }, { key: "_createPopup", value: function _createPopup(container, trigger, data) { if (!trigger) { trigger = document.createElement('div'); trigger.style.height = container.style.height; trigger.style.width = container.style.width; container.appendChild(trigger); } var popupElement = new PopupElement({ container: container, trigger: trigger, color: data.color, title: data.title, contents: data.contents, hideWrapper: true }); var popup = popupElement.render(); popup.style.left = container.style.width; container.appendChild(popup); } }, { key: "render", value: function render() { (0, _util.unreachable)('Abstract method `AnnotationElement.render` called'); } }]); return AnnotationElement; }(); var LinkAnnotationElement = /*#__PURE__*/ function (_AnnotationElement) { _inherits(LinkAnnotationElement, _AnnotationElement); function LinkAnnotationElement(parameters) { _classCallCheck(this, LinkAnnotationElement); var isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action); return _possibleConstructorReturn(this, _getPrototypeOf(LinkAnnotationElement).call(this, parameters, isRenderable)); } _createClass(LinkAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'linkAnnotation'; var data = this.data, linkService = this.linkService; var link = document.createElement('a'); (0, _dom_utils.addLinkAttributes)(link, { url: data.url, target: data.newWindow ? _dom_utils.LinkTarget.BLANK : linkService.externalLinkTarget, rel: linkService.externalLinkRel }); if (!data.url) { if (data.action) { this._bindNamedAction(link, data.action); } else { this._bindLink(link, data.dest); } } this.container.appendChild(link); return this.container; } }, { key: "_bindLink", value: function _bindLink(link, destination) { var _this = this; link.href = this.linkService.getDestinationHash(destination); link.onclick = function () { if (destination) { _this.linkService.navigateTo(destination); } return false; }; if (destination) { link.className = 'internalLink'; } } }, { key: "_bindNamedAction", value: function _bindNamedAction(link, action) { var _this2 = this; link.href = this.linkService.getAnchorUrl(''); link.onclick = function () { _this2.linkService.executeNamedAction(action); return false; }; link.className = 'internalLink'; } }]); return LinkAnnotationElement; }(AnnotationElement); var TextAnnotationElement = /*#__PURE__*/ function (_AnnotationElement2) { _inherits(TextAnnotationElement, _AnnotationElement2); function TextAnnotationElement(parameters) { _classCallCheck(this, TextAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(TextAnnotationElement).call(this, parameters, isRenderable)); } _createClass(TextAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'textAnnotation'; var 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(this.container, image, this.data); } this.container.appendChild(image); return this.container; } }]); return TextAnnotationElement; }(AnnotationElement); var WidgetAnnotationElement = /*#__PURE__*/ function (_AnnotationElement3) { _inherits(WidgetAnnotationElement, _AnnotationElement3); function WidgetAnnotationElement() { _classCallCheck(this, WidgetAnnotationElement); return _possibleConstructorReturn(this, _getPrototypeOf(WidgetAnnotationElement).apply(this, arguments)); } _createClass(WidgetAnnotationElement, [{ key: "render", value: function render() { return this.container; } }]); return WidgetAnnotationElement; }(AnnotationElement); var TextWidgetAnnotationElement = /*#__PURE__*/ function (_WidgetAnnotationElem) { _inherits(TextWidgetAnnotationElement, _WidgetAnnotationElem); function TextWidgetAnnotationElement(parameters) { _classCallCheck(this, TextWidgetAnnotationElement); var isRenderable = parameters.renderInteractiveForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue; return _possibleConstructorReturn(this, _getPrototypeOf(TextWidgetAnnotationElement).call(this, parameters, isRenderable)); } _createClass(TextWidgetAnnotationElement, [{ key: "render", value: function render() { var TEXT_ALIGNMENT = ['left', 'center', 'right']; this.container.className = 'textWidgetAnnotation'; var element = null; if (this.renderInteractiveForms) { if (this.data.multiLine) { element = document.createElement('textarea'); element.textContent = this.data.fieldValue; } else { element = document.createElement('input'); element.type = 'text'; element.setAttribute('value', this.data.fieldValue); } element.disabled = this.data.readOnly; if (this.data.maxLen !== null) { element.maxLength = this.data.maxLen; } if (this.data.comb) { var fieldWidth = this.data.rect[2] - this.data.rect[0]; var 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'; var font = null; if (this.data.fontRefName && this.page.commonObjs.has(this.data.fontRefName)) { font = this.page.commonObjs.get(this.data.fontRefName); } this._setTextStyle(element, font); } if (this.data.textAlignment !== null) { element.style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment]; } this.container.appendChild(element); return this.container; } }, { key: "_setTextStyle", value: function _setTextStyle(element, font) { var style = element.style; style.fontSize = this.data.fontSize + 'px'; style.direction = this.data.fontDirection < 0 ? 'rtl' : 'ltr'; if (!font) { return; } style.fontWeight = font.black ? font.bold ? '900' : 'bold' : font.bold ? 'bold' : 'normal'; style.fontStyle = font.italic ? 'italic' : 'normal'; var fontFamily = font.loadedName ? '"' + font.loadedName + '", ' : ''; var fallbackName = font.fallbackName || 'Helvetica, sans-serif'; style.fontFamily = fontFamily + fallbackName; } }]); return TextWidgetAnnotationElement; }(WidgetAnnotationElement); var CheckboxWidgetAnnotationElement = /*#__PURE__*/ function (_WidgetAnnotationElem2) { _inherits(CheckboxWidgetAnnotationElement, _WidgetAnnotationElem2); function CheckboxWidgetAnnotationElement(parameters) { _classCallCheck(this, CheckboxWidgetAnnotationElement); return _possibleConstructorReturn(this, _getPrototypeOf(CheckboxWidgetAnnotationElement).call(this, parameters, parameters.renderInteractiveForms)); } _createClass(CheckboxWidgetAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'buttonWidgetAnnotation checkBox'; var element = document.createElement('input'); element.disabled = this.data.readOnly; element.type = 'checkbox'; if (this.data.fieldValue && this.data.fieldValue !== 'Off') { element.setAttribute('checked', true); } this.container.appendChild(element); return this.container; } }]); return CheckboxWidgetAnnotationElement; }(WidgetAnnotationElement); var RadioButtonWidgetAnnotationElement = /*#__PURE__*/ function (_WidgetAnnotationElem3) { _inherits(RadioButtonWidgetAnnotationElement, _WidgetAnnotationElem3); function RadioButtonWidgetAnnotationElement(parameters) { _classCallCheck(this, RadioButtonWidgetAnnotationElement); return _possibleConstructorReturn(this, _getPrototypeOf(RadioButtonWidgetAnnotationElement).call(this, parameters, parameters.renderInteractiveForms)); } _createClass(RadioButtonWidgetAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'buttonWidgetAnnotation radioButton'; var element = document.createElement('input'); element.disabled = this.data.readOnly; element.type = 'radio'; element.name = this.data.fieldName; if (this.data.fieldValue === this.data.buttonValue) { element.setAttribute('checked', true); } this.container.appendChild(element); return this.container; } }]); return RadioButtonWidgetAnnotationElement; }(WidgetAnnotationElement); var PushButtonWidgetAnnotationElement = /*#__PURE__*/ function (_LinkAnnotationElemen) { _inherits(PushButtonWidgetAnnotationElement, _LinkAnnotationElemen); function PushButtonWidgetAnnotationElement() { _classCallCheck(this, PushButtonWidgetAnnotationElement); return _possibleConstructorReturn(this, _getPrototypeOf(PushButtonWidgetAnnotationElement).apply(this, arguments)); } _createClass(PushButtonWidgetAnnotationElement, [{ key: "render", value: function render() { var container = _get(_getPrototypeOf(PushButtonWidgetAnnotationElement.prototype), "render", this).call(this); container.className = 'buttonWidgetAnnotation pushButton'; return container; } }]); return PushButtonWidgetAnnotationElement; }(LinkAnnotationElement); var ChoiceWidgetAnnotationElement = /*#__PURE__*/ function (_WidgetAnnotationElem4) { _inherits(ChoiceWidgetAnnotationElement, _WidgetAnnotationElem4); function ChoiceWidgetAnnotationElement(parameters) { _classCallCheck(this, ChoiceWidgetAnnotationElement); return _possibleConstructorReturn(this, _getPrototypeOf(ChoiceWidgetAnnotationElement).call(this, parameters, parameters.renderInteractiveForms)); } _createClass(ChoiceWidgetAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'choiceWidgetAnnotation'; var selectElement = document.createElement('select'); selectElement.disabled = this.data.readOnly; if (!this.data.combo) { selectElement.size = this.data.options.length; if (this.data.multiSelect) { selectElement.multiple = true; } } for (var i = 0, ii = this.data.options.length; i < ii; i++) { var option = this.data.options[i]; var optionElement = document.createElement('option'); optionElement.textContent = option.displayValue; optionElement.value = option.exportValue; if (this.data.fieldValue.includes(option.displayValue)) { optionElement.setAttribute('selected', true); } selectElement.appendChild(optionElement); } this.container.appendChild(selectElement); return this.container; } }]); return ChoiceWidgetAnnotationElement; }(WidgetAnnotationElement); var PopupAnnotationElement = /*#__PURE__*/ function (_AnnotationElement4) { _inherits(PopupAnnotationElement, _AnnotationElement4); function PopupAnnotationElement(parameters) { _classCallCheck(this, PopupAnnotationElement); var isRenderable = !!(parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(PopupAnnotationElement).call(this, parameters, isRenderable)); } _createClass(PopupAnnotationElement, [{ key: "render", value: function render() { var IGNORE_TYPES = ['Line', 'Square', 'Circle', 'PolyLine', 'Polygon', 'Ink']; this.container.className = 'popupAnnotation'; if (IGNORE_TYPES.includes(this.data.parentType)) { return this.container; } var selector = '[data-annotation-id="' + this.data.parentId + '"]'; var parentElement = this.layer.querySelector(selector); if (!parentElement) { return this.container; } var popup = new PopupElement({ container: this.container, trigger: parentElement, color: this.data.color, title: this.data.title, contents: this.data.contents }); var parentLeft = parseFloat(parentElement.style.left); var parentWidth = parseFloat(parentElement.style.width); this.container.style.transformOrigin = -(parentLeft + parentWidth) + 'px -' + parentElement.style.top; this.container.style.left = parentLeft + parentWidth + 'px'; this.container.appendChild(popup.render()); return this.container; } }]); return PopupAnnotationElement; }(AnnotationElement); var PopupElement = /*#__PURE__*/ function () { function PopupElement(parameters) { _classCallCheck(this, PopupElement); this.container = parameters.container; this.trigger = parameters.trigger; this.color = parameters.color; this.title = parameters.title; this.contents = parameters.contents; this.hideWrapper = parameters.hideWrapper || false; this.pinned = false; } _createClass(PopupElement, [{ key: "render", value: function render() { var BACKGROUND_ENLIGHT = 0.7; var wrapper = document.createElement('div'); wrapper.className = 'popupWrapper'; this.hideElement = this.hideWrapper ? wrapper : this.container; this.hideElement.setAttribute('hidden', true); var popup = document.createElement('div'); popup.className = 'popup'; var color = this.color; if (color) { var r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0]; var g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1]; var b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2]; popup.style.backgroundColor = _util.Util.makeCssRgb(r | 0, g | 0, b | 0); } var contents = this._formatContents(this.contents); var title = document.createElement('h1'); title.textContent = this.title; this.trigger.addEventListener('click', this._toggle.bind(this)); this.trigger.addEventListener('mouseover', this._show.bind(this, false)); this.trigger.addEventListener('mouseout', this._hide.bind(this, false)); popup.addEventListener('click', this._hide.bind(this, true)); popup.appendChild(title); popup.appendChild(contents); wrapper.appendChild(popup); return wrapper; } }, { key: "_formatContents", value: function _formatContents(contents) { var p = document.createElement('p'); var lines = contents.split(/(?:\r\n?|\n)/); for (var i = 0, ii = lines.length; i < ii; ++i) { var line = lines[i]; p.appendChild(document.createTextNode(line)); if (i < ii - 1) { p.appendChild(document.createElement('br')); } } return p; } }, { key: "_toggle", value: function _toggle() { if (this.pinned) { this._hide(true); } else { this._show(true); } } }, { key: "_show", value: function _show() { var pin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; if (pin) { this.pinned = true; } if (this.hideElement.hasAttribute('hidden')) { this.hideElement.removeAttribute('hidden'); this.container.style.zIndex += 1; } } }, { key: "_hide", value: function _hide() { var unpin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; if (unpin) { this.pinned = false; } if (!this.hideElement.hasAttribute('hidden') && !this.pinned) { this.hideElement.setAttribute('hidden', true); this.container.style.zIndex -= 1; } } }]); return PopupElement; }(); var LineAnnotationElement = /*#__PURE__*/ function (_AnnotationElement5) { _inherits(LineAnnotationElement, _AnnotationElement5); function LineAnnotationElement(parameters) { _classCallCheck(this, LineAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(LineAnnotationElement).call(this, parameters, isRenderable, true)); } _createClass(LineAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'lineAnnotation'; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var 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); line.setAttribute('stroke', 'transparent'); svg.appendChild(line); this.container.append(svg); this._createPopup(this.container, line, data); return this.container; } }]); return LineAnnotationElement; }(AnnotationElement); var SquareAnnotationElement = /*#__PURE__*/ function (_AnnotationElement6) { _inherits(SquareAnnotationElement, _AnnotationElement6); function SquareAnnotationElement(parameters) { _classCallCheck(this, SquareAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(SquareAnnotationElement).call(this, parameters, isRenderable, true)); } _createClass(SquareAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'squareAnnotation'; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var borderWidth = data.borderStyle.width; var 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); square.setAttribute('stroke', 'transparent'); square.setAttribute('fill', 'none'); svg.appendChild(square); this.container.append(svg); this._createPopup(this.container, square, data); return this.container; } }]); return SquareAnnotationElement; }(AnnotationElement); var CircleAnnotationElement = /*#__PURE__*/ function (_AnnotationElement7) { _inherits(CircleAnnotationElement, _AnnotationElement7); function CircleAnnotationElement(parameters) { _classCallCheck(this, CircleAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(CircleAnnotationElement).call(this, parameters, isRenderable, true)); } _createClass(CircleAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'circleAnnotation'; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var borderWidth = data.borderStyle.width; var 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); circle.setAttribute('stroke', 'transparent'); circle.setAttribute('fill', 'none'); svg.appendChild(circle); this.container.append(svg); this._createPopup(this.container, circle, data); return this.container; } }]); return CircleAnnotationElement; }(AnnotationElement); var PolylineAnnotationElement = /*#__PURE__*/ function (_AnnotationElement8) { _inherits(PolylineAnnotationElement, _AnnotationElement8); function PolylineAnnotationElement(parameters) { var _this3; _classCallCheck(this, PolylineAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); _this3 = _possibleConstructorReturn(this, _getPrototypeOf(PolylineAnnotationElement).call(this, parameters, isRenderable, true)); _this3.containerClassName = 'polylineAnnotation'; _this3.svgElementName = 'svg:polyline'; return _this3; } _createClass(PolylineAnnotationElement, [{ key: "render", value: function render() { this.container.className = this.containerClassName; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var vertices = data.vertices; var points = []; for (var i = 0, ii = vertices.length; i < ii; i++) { var x = vertices[i].x - data.rect[0]; var y = data.rect[3] - vertices[i].y; points.push(x + ',' + y); } points = points.join(' '); var borderWidth = data.borderStyle.width; var polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute('points', points); polyline.setAttribute('stroke-width', borderWidth); polyline.setAttribute('stroke', 'transparent'); polyline.setAttribute('fill', 'none'); svg.appendChild(polyline); this.container.append(svg); this._createPopup(this.container, polyline, data); return this.container; } }]); return PolylineAnnotationElement; }(AnnotationElement); var PolygonAnnotationElement = /*#__PURE__*/ function (_PolylineAnnotationEl) { _inherits(PolygonAnnotationElement, _PolylineAnnotationEl); function PolygonAnnotationElement(parameters) { var _this4; _classCallCheck(this, PolygonAnnotationElement); _this4 = _possibleConstructorReturn(this, _getPrototypeOf(PolygonAnnotationElement).call(this, parameters)); _this4.containerClassName = 'polygonAnnotation'; _this4.svgElementName = 'svg:polygon'; return _this4; } return PolygonAnnotationElement; }(PolylineAnnotationElement); var InkAnnotationElement = /*#__PURE__*/ function (_AnnotationElement9) { _inherits(InkAnnotationElement, _AnnotationElement9); function InkAnnotationElement(parameters) { var _this5; _classCallCheck(this, InkAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); _this5 = _possibleConstructorReturn(this, _getPrototypeOf(InkAnnotationElement).call(this, parameters, isRenderable, true)); _this5.containerClassName = 'inkAnnotation'; _this5.svgElementName = 'svg:polyline'; return _this5; } _createClass(InkAnnotationElement, [{ key: "render", value: function render() { this.container.className = this.containerClassName; var data = this.data; var width = data.rect[2] - data.rect[0]; var height = data.rect[3] - data.rect[1]; var svg = this.svgFactory.create(width, height); var inkLists = data.inkLists; for (var i = 0, ii = inkLists.length; i < ii; i++) { var inkList = inkLists[i]; var points = []; for (var j = 0, jj = inkList.length; j < jj; j++) { var x = inkList[j].x - data.rect[0]; var y = data.rect[3] - inkList[j].y; points.push(x + ',' + y); } points = points.join(' '); var borderWidth = data.borderStyle.width; var polyline = this.svgFactory.createElement(this.svgElementName); polyline.setAttribute('points', points); polyline.setAttribute('stroke-width', borderWidth); polyline.setAttribute('stroke', 'transparent'); polyline.setAttribute('fill', 'none'); this._createPopup(this.container, polyline, data); svg.appendChild(polyline); } this.container.append(svg); return this.container; } }]); return InkAnnotationElement; }(AnnotationElement); var HighlightAnnotationElement = /*#__PURE__*/ function (_AnnotationElement10) { _inherits(HighlightAnnotationElement, _AnnotationElement10); function HighlightAnnotationElement(parameters) { _classCallCheck(this, HighlightAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(HighlightAnnotationElement).call(this, parameters, isRenderable, true)); } _createClass(HighlightAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'highlightAnnotation'; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } }]); return HighlightAnnotationElement; }(AnnotationElement); var UnderlineAnnotationElement = /*#__PURE__*/ function (_AnnotationElement11) { _inherits(UnderlineAnnotationElement, _AnnotationElement11); function UnderlineAnnotationElement(parameters) { _classCallCheck(this, UnderlineAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(UnderlineAnnotationElement).call(this, parameters, isRenderable, true)); } _createClass(UnderlineAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'underlineAnnotation'; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } }]); return UnderlineAnnotationElement; }(AnnotationElement); var SquigglyAnnotationElement = /*#__PURE__*/ function (_AnnotationElement12) { _inherits(SquigglyAnnotationElement, _AnnotationElement12); function SquigglyAnnotationElement(parameters) { _classCallCheck(this, SquigglyAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(SquigglyAnnotationElement).call(this, parameters, isRenderable, true)); } _createClass(SquigglyAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'squigglyAnnotation'; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } }]); return SquigglyAnnotationElement; }(AnnotationElement); var StrikeOutAnnotationElement = /*#__PURE__*/ function (_AnnotationElement13) { _inherits(StrikeOutAnnotationElement, _AnnotationElement13); function StrikeOutAnnotationElement(parameters) { _classCallCheck(this, StrikeOutAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(StrikeOutAnnotationElement).call(this, parameters, isRenderable, true)); } _createClass(StrikeOutAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'strikeoutAnnotation'; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } }]); return StrikeOutAnnotationElement; }(AnnotationElement); var StampAnnotationElement = /*#__PURE__*/ function (_AnnotationElement14) { _inherits(StampAnnotationElement, _AnnotationElement14); function StampAnnotationElement(parameters) { _classCallCheck(this, StampAnnotationElement); var isRenderable = !!(parameters.data.hasPopup || parameters.data.title || parameters.data.contents); return _possibleConstructorReturn(this, _getPrototypeOf(StampAnnotationElement).call(this, parameters, isRenderable, true)); } _createClass(StampAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'stampAnnotation'; if (!this.data.hasPopup) { this._createPopup(this.container, null, this.data); } return this.container; } }]); return StampAnnotationElement; }(AnnotationElement); var FileAttachmentAnnotationElement = /*#__PURE__*/ function (_AnnotationElement15) { _inherits(FileAttachmentAnnotationElement, _AnnotationElement15); function FileAttachmentAnnotationElement(parameters) { var _this6; _classCallCheck(this, FileAttachmentAnnotationElement); _this6 = _possibleConstructorReturn(this, _getPrototypeOf(FileAttachmentAnnotationElement).call(this, parameters, true)); var _this6$data$file = _this6.data.file, filename = _this6$data$file.filename, content = _this6$data$file.content; _this6.filename = (0, _dom_utils.getFilenameFromUrl)(filename); _this6.content = content; if (_this6.linkService.eventBus) { _this6.linkService.eventBus.dispatch('fileattachmentannotation', { source: _assertThisInitialized(_assertThisInitialized(_this6)), id: (0, _util.stringToPDFString)(filename), filename: filename, content: content }); } return _this6; } _createClass(FileAttachmentAnnotationElement, [{ key: "render", value: function render() { this.container.className = 'fileAttachmentAnnotation'; var 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.title || this.data.contents)) { this._createPopup(this.container, trigger, this.data); } this.container.appendChild(trigger); return this.container; } }, { key: "_download", value: function _download() { if (!this.downloadManager) { (0, _util.warn)('Download cannot be started due to unavailable download manager'); return; } this.downloadManager.downloadData(this.content, this.filename, ''); } }]); return FileAttachmentAnnotationElement; }(AnnotationElement); var AnnotationLayer = /*#__PURE__*/ function () { function AnnotationLayer() { _classCallCheck(this, AnnotationLayer); } _createClass(AnnotationLayer, null, [{ key: "render", value: function render(parameters) { for (var i = 0, ii = parameters.annotations.length; i < ii; i++) { var data = parameters.annotations[i]; if (!data) { continue; } var element = AnnotationElementFactory.create({ data: data, layer: parameters.div, page: parameters.page, viewport: parameters.viewport, linkService: parameters.linkService, downloadManager: parameters.downloadManager, imageResourcesPath: parameters.imageResourcesPath || '', renderInteractiveForms: parameters.renderInteractiveForms || false, svgFactory: new _dom_utils.DOMSVGFactory() }); if (element.isRenderable) { parameters.div.appendChild(element.render()); } } } }, { key: "update", value: function update(parameters) { for (var i = 0, ii = parameters.annotations.length; i < ii; i++) { var data = parameters.annotations[i]; var element = parameters.div.querySelector('[data-annotation-id="' + data.id + '"]'); if (element) { element.style.transform = 'matrix(' + parameters.viewport.transform.join(',') + ')'; } } parameters.div.removeAttribute('hidden'); } }]); return AnnotationLayer; }(); exports.AnnotationLayer = AnnotationLayer; /***/ }), /* 164 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.SVGGraphics = void 0; var _util = __w_extracthighlights_require__(1); var _dom_utils = __w_extracthighlights_require__(151); var _is_node = _interopRequireDefault(__w_extracthighlights_require__(4)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var SVGGraphics = function SVGGraphics() { throw new Error('Not implemented: SVGGraphics'); }; exports.SVGGraphics = SVGGraphics; { var SVG_DEFAULTS = { fontStyle: 'normal', fontWeight: 'normal', fillColor: '#000000' }; var convertImgDataToPng = function convertImgDataToPngClosure() { var PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]); var CHUNK_WRAPPER_SIZE = 12; var crcTable = new Int32Array(256); for (var i = 0; i < 256; i++) { var c = i; for (var 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) { var crc = -1; for (var i = start; i < end; i++) { var a = (crc ^ data[i]) & 0xff; var b = crcTable[a]; crc = crc >>> 8 ^ b; } return crc ^ -1; } function writePngChunk(type, body, data, offset) { var p = offset; var 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; var 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) { var a = 1; var b = 0; for (var i = start; i < end; ++i) { a = (a + (data[i] & 0xff)) % 65521; b = (b + a) % 65521; } return b << 16 | a; } function deflateSync(literals) { if (!(0, _is_node.default)()) { return deflateSyncUncompressed(literals); } try { var input; if (parseInt(process.versions.node) >= 8) { input = literals; } else { input = new Buffer(literals); } var output = require$$2__default['default'].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) { var len = literals.length; var maxBlockLength = 0xFFFF; var deflateBlocks = Math.ceil(len / maxBlockLength); var idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4); var pi = 0; idat[pi++] = 0x78; idat[pi++] = 0x9c; var 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; var 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) { var width = imgData.width; var height = imgData.height; var bitDepth, colorType, lineSize; var 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'); } var literals = new Uint8Array((1 + lineSize) * height); var offsetLiterals = 0, offsetBytes = 0; var y, i; for (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 (y = 0; y < height; y++) { offsetLiterals++; for (i = 0; i < lineSize; i++) { literals[offsetLiterals++] ^= 0xFF; } } } var 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]); var idat = deflateSync(literals); var pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length; var data = new Uint8Array(pngLength); var 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) { var kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind; return encode(imgData, kind, forceDataSchema, isMask); }; }(); var SVGExtraState = function SVGExtraStateClosure() { function SVGExtraState() { 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.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 = ''; } SVGExtraState.prototype = { clone: function SVGExtraState_clone() { return Object.create(this); }, setCurrentPoint: function SVGExtraState_setCurrentPoint(x, y) { this.x = x; this.y = y; } }; return SVGExtraState; }(); exports.SVGGraphics = SVGGraphics = function SVGGraphicsClosure() { function opListToTree(opList) { var opTree = []; var tmp = []; var opListLen = opList.length; for (var x = 0; x < opListLen; x++) { if (opList[x].fn === 'save') { opTree.push({ 'fnId': 92, 'fn': 'group', 'items': [] }); tmp.push(opTree); opTree = opTree[opTree.length - 1].items; continue; } if (opList[x].fn === 'restore') { opTree = tmp.pop(); } else { opTree.push(opList[x]); } } return opTree; } function pf(value) { if (Number.isInteger(value)) { return value.toString(); } var s = value.toFixed(10); var 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]) { var 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]) + ')'; } function SVGGraphics(commonObjs, objs, forceDataSchema) { this.svgFactory = new _dom_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; } var XML_NS = 'http://www.w3.org/XML/1998/namespace'; var XLINK_NS = 'http://www.w3.org/1999/xlink'; var LINE_CAP_STYLES = ['butt', 'round', 'square']; var LINE_JOIN_STYLES = ['miter', 'round', 'bevel']; var clipCount = 0; var maskCount = 0; SVGGraphics.prototype = { save: function SVGGraphics_save() { this.transformStack.push(this.transformMatrix); var old = this.current; this.extraStack.push(old); this.current = old.clone(); }, restore: function SVGGraphics_restore() { this.transformMatrix = this.transformStack.pop(); this.current = this.extraStack.pop(); this.pendingClip = null; this.tgrp = null; }, group: function SVGGraphics_group(items) { this.save(); this.executeOpTree(items); this.restore(); }, loadDependencies: function SVGGraphics_loadDependencies(operatorList) { var _this = this; var fnArray = operatorList.fnArray; var fnArrayLen = fnArray.length; var argsArray = operatorList.argsArray; for (var i = 0; i < fnArrayLen; i++) { if (_util.OPS.dependency === fnArray[i]) { var deps = argsArray[i]; for (var n = 0, nn = deps.length; n < nn; n++) { var obj = deps[n]; var common = obj.substring(0, 2) === 'g_'; var promise; if (common) { promise = new Promise(function (resolve) { _this.commonObjs.get(obj, resolve); }); } else { promise = new Promise(function (resolve) { _this.objs.get(obj, resolve); }); } this.current.dependencies.push(promise); } } } return Promise.all(this.current.dependencies); }, transform: function SVGGraphics_transform(a, b, c, d, e, f) { var transformMatrix = [a, b, c, d, e, f]; this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix); this.tgrp = null; }, getSVG: function SVGGraphics_getSVG(operatorList, viewport) { var _this2 = this; this.viewport = viewport; var svgElement = this._initialize(viewport); return this.loadDependencies(operatorList).then(function () { _this2.transformMatrix = _util.IDENTITY_MATRIX; var opTree = _this2.convertOpList(operatorList); _this2.executeOpTree(opTree); return svgElement; }); }, convertOpList: function SVGGraphics_convertOpList(operatorList) { var argsArray = operatorList.argsArray; var fnArray = operatorList.fnArray; var fnArrayLen = fnArray.length; var REVOPS = []; var opList = []; for (var op in _util.OPS) { REVOPS[_util.OPS[op]] = op; } for (var x = 0; x < fnArrayLen; x++) { var fnId = fnArray[x]; opList.push({ 'fnId': fnId, 'fn': REVOPS[fnId], 'args': argsArray[x] }); } return opListToTree(opList); }, executeOpTree: function SVGGraphics_executeOpTree(opTree) { var opTreeLen = opTree.length; for (var x = 0; x < opTreeLen; x++) { var fn = opTree[x].fn; var fnId = opTree[x].fnId; var args = opTree[x].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.setDash: this.setDash(args[0], args[1]); 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.paintJpegXObject: this.paintJpegXObject(args[0], args[1], args[2]); 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(opTree[x].items); break; default: (0, _util.warn)('Unimplemented operator ' + fn); break; } } }, setWordSpacing: function SVGGraphics_setWordSpacing(wordSpacing) { this.current.wordSpacing = wordSpacing; }, setCharSpacing: function SVGGraphics_setCharSpacing(charSpacing) { this.current.charSpacing = charSpacing; }, nextLine: function SVGGraphics_nextLine() { this.moveText(0, this.current.leading); }, setTextMatrix: function SVGGraphics_setTextMatrix(a, b, c, d, e, f) { var current = this.current; this.current.textMatrix = this.current.lineMatrix = [a, b, c, d, e, f]; this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; current.xcoords = []; 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: function SVGGraphics_beginText() { this.current.x = this.current.lineX = 0; this.current.y = this.current.lineY = 0; this.current.textMatrix = _util.IDENTITY_MATRIX; this.current.lineMatrix = _util.IDENTITY_MATRIX; this.current.tspan = this.svgFactory.createElement('svg:tspan'); this.current.txtElement = this.svgFactory.createElement('svg:text'); this.current.txtgrp = this.svgFactory.createElement('svg:g'); this.current.xcoords = []; }, moveText: function SVGGraphics_moveText(x, y) { var current = this.current; this.current.x = this.current.lineX += x; this.current.y = this.current.lineY += y; current.xcoords = []; 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: function SVGGraphics_showText(glyphs) { var current = this.current; var font = current.font; var fontSize = current.fontSize; if (fontSize === 0) { return; } var charSpacing = current.charSpacing; var wordSpacing = current.wordSpacing; var fontDirection = current.fontDirection; var textHScale = current.textHScale * fontDirection; var glyphsLength = glyphs.length; var vertical = font.vertical; var widthAdvanceScale = fontSize * current.fontMatrix[0]; var x = 0, i; for (i = 0; i < glyphsLength; ++i) { var glyph = glyphs[i]; if (glyph === null) { x += fontDirection * wordSpacing; continue; } else if ((0, _util.isNum)(glyph)) { x += -glyph * fontSize * 0.001; continue; } var width = glyph.width; var character = glyph.fontChar; var spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing; var charWidth = width * widthAdvanceScale + spacing * fontDirection; if (!glyph.isInFont && !font.missingFile) { x += charWidth; continue; } current.xcoords.push(current.x + x * textHScale); current.tspan.textContent += character; x += charWidth; } if (vertical) { current.y -= x * textHScale; } else { current.x += x * textHScale; } current.tspan.setAttributeNS(null, 'x', current.xcoords.map(pf).join(' ')); current.tspan.setAttributeNS(null, 'y', pf(-current.y)); 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); } var 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) { this._setStrokeAttributes(current.tspan); } var textMatrix = current.textMatrix; if (current.textRise !== 0) { textMatrix = textMatrix.slice(); textMatrix[5] += current.textRise; } current.txtElement.setAttributeNS(null, 'transform', pm(textMatrix) + ' scale(1, -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: function SVGGraphics_setLeadingMoveText(x, y) { this.setLeading(-y); this.moveText(x, y); }, addFontStyle: function SVGGraphics_addFontStyle(fontObj) { if (!this.cssStyle) { this.cssStyle = this.svgFactory.createElement('svg:style'); this.cssStyle.setAttributeNS(null, 'type', 'text/css'); this.defs.appendChild(this.cssStyle); } var url = (0, _util.createObjectURL)(fontObj.data, fontObj.mimetype, this.forceDataSchema); this.cssStyle.textContent += '@font-face { font-family: "' + fontObj.loadedName + '";' + ' src: url(' + url + '); }\n'; }, setFont: function SVGGraphics_setFont(details) { var current = this.current; var fontObj = this.commonObjs.get(details[0]); var size = details[1]; this.current.font = fontObj; if (this.embedFonts && fontObj.data && !this.embeddedFonts[fontObj.loadedName]) { this.addFontStyle(fontObj); this.embeddedFonts[fontObj.loadedName] = fontObj; } current.fontMatrix = fontObj.fontMatrix ? fontObj.fontMatrix : _util.FONT_IDENTITY_MATRIX; var bold = fontObj.black ? fontObj.bold ? 'bolder' : 'bold' : fontObj.bold ? 'bold' : 'normal'; var 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 = []; }, endText: function endText() { var current = this.current; if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement && current.txtElement.hasChildNodes()) { current.element = current.txtElement; this.clip('nonzero'); this.endPath(); } }, setLineWidth: function SVGGraphics_setLineWidth(width) { if (width > 0) { this.current.lineWidth = width; } }, setLineCap: function SVGGraphics_setLineCap(style) { this.current.lineCap = LINE_CAP_STYLES[style]; }, setLineJoin: function SVGGraphics_setLineJoin(style) { this.current.lineJoin = LINE_JOIN_STYLES[style]; }, setMiterLimit: function SVGGraphics_setMiterLimit(limit) { this.current.miterLimit = limit; }, setStrokeAlpha: function SVGGraphics_setStrokeAlpha(strokeAlpha) { this.current.strokeAlpha = strokeAlpha; }, setStrokeRGBColor: function SVGGraphics_setStrokeRGBColor(r, g, b) { var color = _util.Util.makeCssRgb(r, g, b); this.current.strokeColor = color; }, setFillAlpha: function SVGGraphics_setFillAlpha(fillAlpha) { this.current.fillAlpha = fillAlpha; }, setFillRGBColor: function SVGGraphics_setFillRGBColor(r, g, b) { var color = _util.Util.makeCssRgb(r, g, b); this.current.fillColor = color; this.current.tspan = this.svgFactory.createElement('svg:tspan'); this.current.xcoords = []; }, setDash: function SVGGraphics_setDash(dashArray, dashPhase) { this.current.dashArray = dashArray; this.current.dashPhase = dashPhase; }, constructPath: function SVGGraphics_constructPath(ops, args) { var current = this.current; var x = current.x, y = current.y; current.path = this.svgFactory.createElement('svg:path'); var d = []; var opLength = ops.length; for (var i = 0, j = 0; i < opLength; i++) { switch (ops[i] | 0) { case _util.OPS.rectangle: x = args[j++]; y = args[j++]; var width = args[j++]; var height = args[j++]; var xw = x + width; var 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: x = args[j + 2]; y = args[j + 3]; d.push('C', pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(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; } } current.path.setAttributeNS(null, 'd', d.join(' ')); current.path.setAttributeNS(null, 'fill', 'none'); this._ensureTransformGroup().appendChild(current.path); current.element = current.path; current.setCurrentPoint(x, y); }, endPath: function SVGGraphics_endPath() { if (!this.pendingClip) { return; } var current = this.current; var clipId = 'clippath' + clipCount; clipCount++; var clipPath = this.svgFactory.createElement('svg:clipPath'); clipPath.setAttributeNS(null, 'id', clipId); clipPath.setAttributeNS(null, 'transform', pm(this.transformMatrix)); var 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; this.extraStack.forEach(function (prev) { prev.clipGroup = null; }); clipPath.setAttributeNS(null, 'clip-path', current.activeClipUrl); } current.activeClipUrl = 'url(#' + clipId + ')'; this.tgrp = null; }, clip: function SVGGraphics_clip(type) { this.pendingClip = type; }, closePath: function SVGGraphics_closePath() { var current = this.current; if (current.path) { var d = current.path.getAttributeNS(null, 'd'); d += 'Z'; current.path.setAttributeNS(null, 'd', d); } }, setLeading: function SVGGraphics_setLeading(leading) { this.current.leading = -leading; }, setTextRise: function SVGGraphics_setTextRise(textRise) { this.current.textRise = textRise; }, setTextRenderingMode: function setTextRenderingMode(textRenderingMode) { this.current.textRenderingMode = textRenderingMode; }, setHScale: function SVGGraphics_setHScale(scale) { this.current.textHScale = scale / 100; }, setGState: function SVGGraphics_setGState(states) { for (var i = 0, ii = states.length; i < ii; i++) { var state = states[i]; var key = state[0]; var 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 'Font': this.setFont(value); break; case 'CA': this.setStrokeAlpha(value); break; case 'ca': this.setFillAlpha(value); break; default: (0, _util.warn)('Unimplemented graphic state ' + key); break; } } }, fill: function SVGGraphics_fill() { var current = this.current; if (current.element) { current.element.setAttributeNS(null, 'fill', current.fillColor); current.element.setAttributeNS(null, 'fill-opacity', current.fillAlpha); this.endPath(); } }, stroke: function SVGGraphics_stroke() { var current = this.current; if (current.element) { this._setStrokeAttributes(current.element); current.element.setAttributeNS(null, 'fill', 'none'); this.endPath(); } }, _setStrokeAttributes: function _setStrokeAttributes(element) { var current = this.current; 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(current.lineWidth) + 'px'); element.setAttributeNS(null, 'stroke-dasharray', current.dashArray.map(pf).join(' ')); element.setAttributeNS(null, 'stroke-dashoffset', pf(current.dashPhase) + 'px'); }, eoFill: function SVGGraphics_eoFill() { if (this.current.element) { this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd'); } this.fill(); }, fillStroke: function SVGGraphics_fillStroke() { this.stroke(); this.fill(); }, eoFillStroke: function SVGGraphics_eoFillStroke() { if (this.current.element) { this.current.element.setAttributeNS(null, 'fill-rule', 'evenodd'); } this.fillStroke(); }, closeStroke: function SVGGraphics_closeStroke() { this.closePath(); this.stroke(); }, closeFillStroke: function SVGGraphics_closeFillStroke() { this.closePath(); this.fillStroke(); }, closeEOFillStroke: function closeEOFillStroke() { this.closePath(); this.eoFillStroke(); }, paintSolidColorImageMask: function SVGGraphics_paintSolidColorImageMask() { var current = this.current; var 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', current.fillColor); this._ensureTransformGroup().appendChild(rect); }, paintJpegXObject: function SVGGraphics_paintJpegXObject(objId, w, h) { var imgObj = this.objs.get(objId); var imgEl = this.svgFactory.createElement('svg:image'); imgEl.setAttributeNS(XLINK_NS, 'xlink:href', imgObj.src); imgEl.setAttributeNS(null, 'width', pf(w)); imgEl.setAttributeNS(null, 'height', pf(h)); imgEl.setAttributeNS(null, 'x', '0'); imgEl.setAttributeNS(null, 'y', pf(-h)); imgEl.setAttributeNS(null, 'transform', 'scale(' + pf(1 / w) + ' ' + pf(-1 / h) + ')'); this._ensureTransformGroup().appendChild(imgEl); }, paintImageXObject: function SVGGraphics_paintImageXObject(objId) { var imgData = this.objs.get(objId); if (!imgData) { (0, _util.warn)('Dependent image isn\'t ready yet'); return; } this.paintInlineImageXObject(imgData); }, paintInlineImageXObject: function SVGGraphics_paintInlineImageXObject(imgData, mask) { var width = imgData.width; var height = imgData.height; var imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask); var 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'); var 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: function SVGGraphics_paintImageMaskXObject(imgData) { var current = this.current; var width = imgData.width; var height = imgData.height; var fillColor = current.fillColor; current.maskId = 'mask' + maskCount++; var mask = this.svgFactory.createElement('svg:mask'); mask.setAttributeNS(null, 'id', current.maskId); var 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: function SVGGraphics_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) { var width = bbox[2] - bbox[0]; var height = bbox[3] - bbox[1]; var 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: function SVGGraphics_paintFormXObjectEnd() {}, _initialize: function _initialize(viewport) { var svg = this.svgFactory.create(viewport.width, viewport.height); var definitions = this.svgFactory.createElement('svg:defs'); svg.appendChild(definitions); this.defs = definitions; var rootGroup = this.svgFactory.createElement('svg:g'); rootGroup.setAttributeNS(null, 'transform', pm(viewport.transform)); svg.appendChild(rootGroup); this.svg = rootGroup; return svg; }, _ensureClipGroup: function SVGGraphics_ensureClipGroup() { if (!this.current.clipGroup) { var 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: function SVGGraphics_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; } }; return SVGGraphics; }(); } /***/ }), /* 165 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFNodeStream = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); var _util = __w_extracthighlights_require__(1); var _network_utils = __w_extracthighlights_require__(166); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var fs = require$$3__default['default']; var http = require$$4__default['default']; var https = require$$5__default['default']; var url = require$$6__default['default']; var fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//; function parseUrl(sourceUrl) { var parsedUrl = url.parse(sourceUrl); if (parsedUrl.protocol === 'file:' || parsedUrl.host) { return parsedUrl; } if (/^[a-z]:[/\\]/i.test(sourceUrl)) { return url.parse("file:///".concat(sourceUrl)); } if (!parsedUrl.host) { parsedUrl.protocol = 'file:'; } return parsedUrl; } var PDFNodeStream = /*#__PURE__*/ function () { function PDFNodeStream(source) { _classCallCheck(this, PDFNodeStream); 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._fullRequest = null; this._rangeRequestReaders = []; } _createClass(PDFNodeStream, [{ key: "getFullReader", value: function getFullReader() { (0, _util.assert)(!this._fullRequest); this._fullRequest = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this); return this._fullRequest; } }, { key: "getRangeReader", value: function getRangeReader(start, end) { var rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end); this._rangeRequestReaders.push(rangeReader); return rangeReader; } }, { key: "cancelAllRequests", value: function cancelAllRequests(reason) { if (this._fullRequest) { this._fullRequest.cancel(reason); } var readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } }]); return PDFNodeStream; }(); exports.PDFNodeStream = PDFNodeStream; var BaseFullReader = /*#__PURE__*/ function () { function BaseFullReader(stream) { _classCallCheck(this, BaseFullReader); this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; var 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)(); } _createClass(BaseFullReader, [{ key: "read", value: function () { var _read = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee() { var chunk, buffer; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this._readCapability.promise; case 2: if (!this._done) { _context.next = 4; break; } return _context.abrupt("return", { value: undefined, done: true }); case 4: if (!this._storedError) { _context.next = 6; break; } throw this._storedError; case 6: chunk = this._readableStream.read(); if (!(chunk === null)) { _context.next = 10; break; } this._readCapability = (0, _util.createPromiseCapability)(); return _context.abrupt("return", this.read()); case 10: this._loaded += chunk.length; if (this.onProgress) { this.onProgress({ loaded: this._loaded, total: this._contentLength }); } buffer = new Uint8Array(chunk).buffer; return _context.abrupt("return", { value: buffer, done: false }); case 14: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } }, { key: "_error", value: function _error(reason) { this._storedError = reason; this._readCapability.resolve(); } }, { key: "_setReadableStream", value: function _setReadableStream(readableStream) { var _this = this; this._readableStream = readableStream; readableStream.on('readable', function () { _this._readCapability.resolve(); }); readableStream.on('end', function () { readableStream.destroy(); _this._done = true; _this._readCapability.resolve(); }); readableStream.on('error', function (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); } } }, { key: "headersReady", get: function get() { return this._headersCapability.promise; } }, { key: "filename", get: function get() { return this._filename; } }, { key: "contentLength", get: function get() { return this._contentLength; } }, { key: "isRangeSupported", get: function get() { return this._isRangeSupported; } }, { key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }]); return BaseFullReader; }(); var BaseRangeReader = /*#__PURE__*/ function () { function BaseRangeReader(stream) { _classCallCheck(this, BaseRangeReader); this._url = stream.url; this._done = false; this._storedError = null; this.onProgress = null; this._loaded = 0; this._readableStream = null; this._readCapability = (0, _util.createPromiseCapability)(); var source = stream.source; this._isStreamingSupported = !source.disableStream; } _createClass(BaseRangeReader, [{ key: "read", value: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee2() { var chunk, buffer; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this._readCapability.promise; case 2: if (!this._done) { _context2.next = 4; break; } return _context2.abrupt("return", { value: undefined, done: true }); case 4: if (!this._storedError) { _context2.next = 6; break; } throw this._storedError; case 6: chunk = this._readableStream.read(); if (!(chunk === null)) { _context2.next = 10; break; } this._readCapability = (0, _util.createPromiseCapability)(); return _context2.abrupt("return", this.read()); case 10: this._loaded += chunk.length; if (this.onProgress) { this.onProgress({ loaded: this._loaded }); } buffer = new Uint8Array(chunk).buffer; return _context2.abrupt("return", { value: buffer, done: false }); case 14: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { if (!this._readableStream) { this._error(reason); return; } this._readableStream.destroy(reason); } }, { key: "_error", value: function _error(reason) { this._storedError = reason; this._readCapability.resolve(); } }, { key: "_setReadableStream", value: function _setReadableStream(readableStream) { var _this2 = this; this._readableStream = readableStream; readableStream.on('readable', function () { _this2._readCapability.resolve(); }); readableStream.on('end', function () { readableStream.destroy(); _this2._done = true; _this2._readCapability.resolve(); }); readableStream.on('error', function (reason) { _this2._error(reason); }); if (this._storedError) { this._readableStream.destroy(this._storedError); } } }, { key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }]); return BaseRangeReader; }(); function createRequestOptions(url, headers) { return { protocol: url.protocol, auth: url.auth, host: url.hostname, port: url.port, path: url.path, method: 'GET', headers: headers }; } var PDFNodeStreamFullReader = /*#__PURE__*/ function (_BaseFullReader) { _inherits(PDFNodeStreamFullReader, _BaseFullReader); function PDFNodeStreamFullReader(stream) { var _this3; _classCallCheck(this, PDFNodeStreamFullReader); _this3 = _possibleConstructorReturn(this, _getPrototypeOf(PDFNodeStreamFullReader).call(this, stream)); var handleResponse = function handleResponse(response) { if (response.statusCode === 404) { var error = new _util.MissingPDFException("Missing PDF \"".concat(_this3._url, "\".")); _this3._storedError = error; _this3._headersCapability.reject(error); return; } _this3._headersCapability.resolve(); _this3._setReadableStream(response); var getResponseHeader = function getResponseHeader(name) { return _this3._readableStream.headers[name.toLowerCase()]; }; var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader: getResponseHeader, isHttp: stream.isHttp, rangeChunkSize: _this3._rangeChunkSize, disableRange: _this3._disableRange }), allowRangeRequests = _validateRangeRequest.allowRangeRequests, suggestedLength = _validateRangeRequest.suggestedLength; _this3._isRangeSupported = allowRangeRequests; _this3._contentLength = suggestedLength || _this3._contentLength; _this3._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); }; _this3._request = null; if (_this3._url.protocol === 'http:') { _this3._request = http.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse); } else { _this3._request = https.request(createRequestOptions(_this3._url, stream.httpHeaders), handleResponse); } _this3._request.on('error', function (reason) { _this3._storedError = reason; _this3._headersCapability.reject(reason); }); _this3._request.end(); return _this3; } return PDFNodeStreamFullReader; }(BaseFullReader); var PDFNodeStreamRangeReader = /*#__PURE__*/ function (_BaseRangeReader) { _inherits(PDFNodeStreamRangeReader, _BaseRangeReader); function PDFNodeStreamRangeReader(stream, start, end) { var _this4; _classCallCheck(this, PDFNodeStreamRangeReader); _this4 = _possibleConstructorReturn(this, _getPrototypeOf(PDFNodeStreamRangeReader).call(this, stream)); _this4._httpHeaders = {}; for (var property in stream.httpHeaders) { var value = stream.httpHeaders[property]; if (typeof value === 'undefined') { continue; } _this4._httpHeaders[property] = value; } _this4._httpHeaders['Range'] = "bytes=".concat(start, "-").concat(end - 1); var handleResponse = function handleResponse(response) { if (response.statusCode === 404) { var error = new _util.MissingPDFException("Missing PDF \"".concat(_this4._url, "\".")); _this4._storedError = error; return; } _this4._setReadableStream(response); }; _this4._request = null; if (_this4._url.protocol === 'http:') { _this4._request = http.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse); } else { _this4._request = https.request(createRequestOptions(_this4._url, _this4._httpHeaders), handleResponse); } _this4._request.on('error', function (reason) { _this4._storedError = reason; }); _this4._request.end(); return _this4; } return PDFNodeStreamRangeReader; }(BaseRangeReader); var PDFNodeStreamFsFullReader = /*#__PURE__*/ function (_BaseFullReader2) { _inherits(PDFNodeStreamFsFullReader, _BaseFullReader2); function PDFNodeStreamFsFullReader(stream) { var _this5; _classCallCheck(this, PDFNodeStreamFsFullReader); _this5 = _possibleConstructorReturn(this, _getPrototypeOf(PDFNodeStreamFsFullReader).call(this, stream)); var path = decodeURIComponent(_this5._url.path); if (fileUriRegex.test(_this5._url.href)) { path = path.replace(/^\//, ''); } fs.lstat(path, function (error, stat) { if (error) { if (error.code === 'ENOENT') { error = new _util.MissingPDFException("Missing PDF \"".concat(path, "\".")); } _this5._storedError = error; _this5._headersCapability.reject(error); return; } _this5._contentLength = stat.size; _this5._setReadableStream(fs.createReadStream(path)); _this5._headersCapability.resolve(); }); return _this5; } return PDFNodeStreamFsFullReader; }(BaseFullReader); var PDFNodeStreamFsRangeReader = /*#__PURE__*/ function (_BaseRangeReader2) { _inherits(PDFNodeStreamFsRangeReader, _BaseRangeReader2); function PDFNodeStreamFsRangeReader(stream, start, end) { var _this6; _classCallCheck(this, PDFNodeStreamFsRangeReader); _this6 = _possibleConstructorReturn(this, _getPrototypeOf(PDFNodeStreamFsRangeReader).call(this, stream)); var path = decodeURIComponent(_this6._url.path); if (fileUriRegex.test(_this6._url.href)) { path = path.replace(/^\//, ''); } _this6._setReadableStream(fs.createReadStream(path, { start: start, end: end - 1 })); return _this6; } return PDFNodeStreamFsRangeReader; }(BaseRangeReader); /***/ }), /* 166 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.createResponseStatusError = createResponseStatusError; exports.extractFilenameFromHeader = extractFilenameFromHeader; exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities; exports.validateResponseStatus = validateResponseStatus; var _util = __w_extracthighlights_require__(1); var _content_disposition = __w_extracthighlights_require__(167); function validateRangeRequestCapabilities(_ref) { var getResponseHeader = _ref.getResponseHeader, isHttp = _ref.isHttp, rangeChunkSize = _ref.rangeChunkSize, disableRange = _ref.disableRange; (0, _util.assert)(rangeChunkSize > 0, 'Range chunk size must be larger than zero'); var returnValues = { allowRangeRequests: false, suggestedLength: undefined }; var 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; } var contentEncoding = getResponseHeader('Content-Encoding') || 'identity'; if (contentEncoding !== 'identity') { return returnValues; } returnValues.allowRangeRequests = true; return returnValues; } function extractFilenameFromHeader(getResponseHeader) { var contentDisposition = getResponseHeader('Content-Disposition'); if (contentDisposition) { var filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition); if (/\.pdf$/i.test(filename)) { return filename; } } return null; } function createResponseStatusError(status, url) { if (status === 404 || status === 0 && /^file:/.test(url)) { 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; } /***/ }), /* 167 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader; function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function getFilenameFromContentDispositionHeader(contentDisposition) { var needsEncodingFixup = true; var tmp = toParamRegExp('filename\\*', 'i').exec(contentDisposition); if (tmp) { tmp = tmp[1]; var filename = rfc2616unquote(tmp); filename = unescape(filename); filename = rfc5987decode(filename); filename = rfc2047decode(filename); return fixupEncoding(filename); } tmp = rfc2231getparam(contentDisposition); if (tmp) { var _filename = rfc2047decode(tmp); return fixupEncoding(_filename); } tmp = toParamRegExp('filename', 'i').exec(contentDisposition); if (tmp) { tmp = tmp[1]; var _filename2 = rfc2616unquote(tmp); _filename2 = rfc2047decode(_filename2); return fixupEncoding(_filename2); } 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 { var decoder = new TextDecoder(encoding, { fatal: true }); var bytes = Array.from(value, function (ch) { return ch.charCodeAt(0) & 0xFF; }); value = decoder.decode(new Uint8Array(bytes)); 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(contentDisposition) { var matches = [], match; var iter = toParamRegExp('filename\\*((?!0\\d)\\d+)(\\*?)', 'ig'); while ((match = iter.exec(contentDisposition)) !== null) { var _match = match, _match2 = _slicedToArray(_match, 4), n = _match2[1], quot = _match2[2], part = _match2[3]; n = parseInt(n, 10); if (n in matches) { if (n === 0) { break; } continue; } matches[n] = [quot, part]; } var parts = []; for (var n = 0; n < matches.length; ++n) { if (!(n in matches)) { break; } var _matches$n = _slicedToArray(matches[n], 2), quot = _matches$n[0], part = _matches$n[1]; 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('"')) { var parts = value.slice(1).split('\\"'); for (var i = 0; i < parts.length; ++i) { var 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) { var encodingend = extvalue.indexOf('\''); if (encodingend === -1) { return extvalue; } var encoding = extvalue.slice(0, encodingend); var langvalue = extvalue.slice(encodingend + 1); var 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 (_, charset, encoding, text) { if (encoding === 'q' || encoding === 'Q') { text = text.replace(/_/g, ' '); text = text.replace(/=([0-9a-fA-F]{2})/g, function (_, hex) { return String.fromCharCode(parseInt(hex, 16)); }); return textdecode(charset, text); } try { text = atob(text); } catch (e) {} return textdecode(charset, text); }); } return ''; } /***/ }), /* 168 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFFetchStream = void 0; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); var _util = __w_extracthighlights_require__(1); var _network_utils = __w_extracthighlights_require__(166); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function createFetchOptions(headers, withCredentials, abortController) { return { method: 'GET', headers: headers, signal: abortController && abortController.signal, mode: 'cors', credentials: withCredentials ? 'include' : 'same-origin', redirect: 'follow' }; } var PDFFetchStream = /*#__PURE__*/ function () { function PDFFetchStream(source) { _classCallCheck(this, PDFFetchStream); this.source = source; this.isHttp = /^https?:/i.test(source.url); this.httpHeaders = this.isHttp && source.httpHeaders || {}; this._fullRequestReader = null; this._rangeRequestReaders = []; } _createClass(PDFFetchStream, [{ key: "getFullReader", value: function getFullReader() { (0, _util.assert)(!this._fullRequestReader); this._fullRequestReader = new PDFFetchStreamReader(this); return this._fullRequestReader; } }, { key: "getRangeReader", value: function getRangeReader(begin, end) { var reader = new PDFFetchStreamRangeReader(this, begin, end); this._rangeRequestReaders.push(reader); return reader; } }, { key: "cancelAllRequests", value: function cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } }]); return PDFFetchStream; }(); exports.PDFFetchStream = PDFFetchStream; var PDFFetchStreamReader = /*#__PURE__*/ function () { function PDFFetchStreamReader(stream) { var _this = this; _classCallCheck(this, PDFFetchStreamReader); this._stream = stream; this._reader = null; this._loaded = 0; this._filename = null; var source = stream.source; this._withCredentials = source.withCredentials; 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 = new Headers(); for (var property in this._stream.httpHeaders) { var value = this._stream.httpHeaders[property]; if (typeof value === 'undefined') { continue; } this._headers.append(property, value); } var url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) { if (!(0, _network_utils.validateResponseStatus)(response.status)) { throw (0, _network_utils.createResponseStatusError)(response.status, url); } _this._reader = response.body.getReader(); _this._headersCapability.resolve(); var getResponseHeader = function getResponseHeader(name) { return response.headers.get(name); }; var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader: getResponseHeader, isHttp: _this._stream.isHttp, rangeChunkSize: _this._rangeChunkSize, disableRange: _this._disableRange }), allowRangeRequests = _validateRangeRequest.allowRangeRequests, suggestedLength = _validateRangeRequest.suggestedLength; _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; } _createClass(PDFFetchStreamReader, [{ key: "read", value: function () { var _read = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee() { var _ref, value, done, buffer; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return this._headersCapability.promise; case 2: _context.next = 4; return this._reader.read(); case 4: _ref = _context.sent; value = _ref.value; done = _ref.done; if (!done) { _context.next = 9; break; } return _context.abrupt("return", { value: value, done: done }); case 9: this._loaded += value.byteLength; if (this.onProgress) { this.onProgress({ loaded: this._loaded, total: this._contentLength }); } buffer = new Uint8Array(value).buffer; return _context.abrupt("return", { value: buffer, done: false }); case 13: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { if (this._reader) { this._reader.cancel(reason); } if (this._abortController) { this._abortController.abort(); } } }, { key: "headersReady", get: function get() { return this._headersCapability.promise; } }, { key: "filename", get: function get() { return this._filename; } }, { key: "contentLength", get: function get() { return this._contentLength; } }, { key: "isRangeSupported", get: function get() { return this._isRangeSupported; } }, { key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }]); return PDFFetchStreamReader; }(); var PDFFetchStreamRangeReader = /*#__PURE__*/ function () { function PDFFetchStreamRangeReader(stream, begin, end) { var _this2 = this; _classCallCheck(this, PDFFetchStreamRangeReader); this._stream = stream; this._reader = null; this._loaded = 0; var source = stream.source; this._withCredentials = source.withCredentials; this._readCapability = (0, _util.createPromiseCapability)(); this._isStreamingSupported = !source.disableStream; if (typeof AbortController !== 'undefined') { this._abortController = new AbortController(); } this._headers = new Headers(); for (var property in this._stream.httpHeaders) { var value = this._stream.httpHeaders[property]; if (typeof value === 'undefined') { continue; } this._headers.append(property, value); } var rangeStr = begin + '-' + (end - 1); this._headers.append('Range', 'bytes=' + rangeStr); var url = source.url; fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(function (response) { if (!(0, _network_utils.validateResponseStatus)(response.status)) { throw (0, _network_utils.createResponseStatusError)(response.status, url); } _this2._readCapability.resolve(); _this2._reader = response.body.getReader(); }); this.onProgress = null; } _createClass(PDFFetchStreamRangeReader, [{ key: "read", value: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee2() { var _ref2, value, done, buffer; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.next = 2; return this._readCapability.promise; case 2: _context2.next = 4; return this._reader.read(); case 4: _ref2 = _context2.sent; value = _ref2.value; done = _ref2.done; if (!done) { _context2.next = 9; break; } return _context2.abrupt("return", { value: value, done: done }); case 9: this._loaded += value.byteLength; if (this.onProgress) { this.onProgress({ loaded: this._loaded }); } buffer = new Uint8Array(value).buffer; return _context2.abrupt("return", { value: buffer, done: false }); case 13: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }() }, { key: "cancel", value: function cancel(reason) { if (this._reader) { this._reader.cancel(reason); } if (this._abortController) { this._abortController.abort(); } } }, { key: "isStreamingSupported", get: function get() { return this._isStreamingSupported; } }]); return PDFFetchStreamRangeReader; }(); /***/ }), /* 169 */ /***/ (function(module, exports, __w_extracthighlights_require__) { Object.defineProperty(exports, "__esModule", { value: true }); exports.PDFNetworkStream = PDFNetworkStream; exports.NetworkManager = NetworkManager; var _regenerator = _interopRequireDefault(__w_extracthighlights_require__(147)); var _util = __w_extracthighlights_require__(1); var _network_utils = __w_extracthighlights_require__(166); var _global_scope = _interopRequireDefault(__w_extracthighlights_require__(3)); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } var OK_RESPONSE = 200; var PARTIAL_CONTENT_RESPONSE = 206; function NetworkManager(url, args) { this.url = url; args = args || {}; this.isHttp = /^https?:/i.test(url); this.httpHeaders = this.isHttp && args.httpHeaders || {}; this.withCredentials = args.withCredentials || false; this.getXhr = args.getXhr || function NetworkManager_getXhr() { return new XMLHttpRequest(); }; this.currXhrId = 0; this.pendingRequests = Object.create(null); this.loadedRequests = Object.create(null); } function getArrayBuffer(xhr) { var data = xhr.response; if (typeof data !== 'string') { return data; } var array = (0, _util.stringToBytes)(data); return array.buffer; } var supportsMozChunked = function supportsMozChunkedClosure() { try { var x = new XMLHttpRequest(); x.open('GET', _global_scope.default.location.href); x.responseType = 'moz-chunked-arraybuffer'; return x.responseType === 'moz-chunked-arraybuffer'; } catch (e) { return false; } }(); NetworkManager.prototype = { requestRange: function NetworkManager_requestRange(begin, end, listeners) { var args = { begin: begin, end: end }; for (var prop in listeners) { args[prop] = listeners[prop]; } return this.request(args); }, requestFull: function NetworkManager_requestFull(listeners) { return this.request(listeners); }, request: function NetworkManager_request(args) { var xhr = this.getXhr(); var xhrId = this.currXhrId++; var pendingRequest = this.pendingRequests[xhrId] = { xhr: xhr }; xhr.open('GET', this.url); xhr.withCredentials = this.withCredentials; for (var property in this.httpHeaders) { var value = this.httpHeaders[property]; if (typeof value === 'undefined') { continue; } xhr.setRequestHeader(property, value); } if (this.isHttp && 'begin' in args && 'end' in args) { var rangeStr = args.begin + '-' + (args.end - 1); xhr.setRequestHeader('Range', 'bytes=' + rangeStr); pendingRequest.expectedStatus = 206; } else { pendingRequest.expectedStatus = 200; } var useMozChunkedLoading = supportsMozChunked && !!args.onProgressiveData; if (useMozChunkedLoading) { xhr.responseType = 'moz-chunked-arraybuffer'; pendingRequest.onProgressiveData = args.onProgressiveData; pendingRequest.mozChunked = true; } else { 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: function NetworkManager_onProgress(xhrId, evt) { var pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } if (pendingRequest.mozChunked) { var chunk = getArrayBuffer(pendingRequest.xhr); pendingRequest.onProgressiveData(chunk); } var onProgress = pendingRequest.onProgress; if (onProgress) { onProgress(evt); } }, onStateChange: function NetworkManager_onStateChange(xhrId, evt) { var pendingRequest = this.pendingRequests[xhrId]; if (!pendingRequest) { return; } var 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) { if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } return; } var xhrStatus = xhr.status || OK_RESPONSE; var ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE; if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) { if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } return; } this.loadedRequests[xhrId] = true; var chunk = getArrayBuffer(xhr); if (xhrStatus === PARTIAL_CONTENT_RESPONSE) { var rangeHeader = xhr.getResponseHeader('Content-Range'); var matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader); var begin = parseInt(matches[1], 10); pendingRequest.onDone({ begin: begin, chunk: chunk }); } else if (pendingRequest.onProgressiveData) { pendingRequest.onDone(null); } else if (chunk) { pendingRequest.onDone({ begin: 0, chunk: chunk }); } else if (pendingRequest.onError) { pendingRequest.onError(xhr.status); } }, hasPendingRequests: function NetworkManager_hasPendingRequests() { for (var xhrId in this.pendingRequests) { return true; } return false; }, getRequestXhr: function NetworkManager_getXhr(xhrId) { return this.pendingRequests[xhrId].xhr; }, isStreamingRequest: function NetworkManager_isStreamingRequest(xhrId) { return !!this.pendingRequests[xhrId].onProgressiveData; }, isPendingRequest: function NetworkManager_isPendingRequest(xhrId) { return xhrId in this.pendingRequests; }, isLoadedRequest: function NetworkManager_isLoadedRequest(xhrId) { return xhrId in this.loadedRequests; }, abortAllRequests: function NetworkManager_abortAllRequests() { for (var xhrId in this.pendingRequests) { this.abortRequest(xhrId | 0); } }, abortRequest: function NetworkManager_abortRequest(xhrId) { var xhr = this.pendingRequests[xhrId].xhr; delete this.pendingRequests[xhrId]; xhr.abort(); } }; function PDFNetworkStream(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 = []; } PDFNetworkStream.prototype = { _onRangeRequestReaderClosed: function PDFNetworkStream_onRangeRequestReaderClosed(reader) { var i = this._rangeRequestReaders.indexOf(reader); if (i >= 0) { this._rangeRequestReaders.splice(i, 1); } }, getFullReader: function PDFNetworkStream_getFullReader() { (0, _util.assert)(!this._fullRequestReader); this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source); return this._fullRequestReader; }, getRangeReader: function PDFNetworkStream_getRangeReader(begin, end) { var reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end); reader.onClosed = this._onRangeRequestReaderClosed.bind(this); this._rangeRequestReaders.push(reader); return reader; }, cancelAllRequests: function PDFNetworkStream_cancelAllRequests(reason) { if (this._fullRequestReader) { this._fullRequestReader.cancel(reason); } var readers = this._rangeRequestReaders.slice(0); readers.forEach(function (reader) { reader.cancel(reason); }); } }; function PDFNetworkStreamFullRequestReader(manager, source) { this._manager = manager; var args = { onHeadersReceived: this._onHeadersReceived.bind(this), onProgressiveData: source.disableStream ? null : this._onProgressiveData.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; } PDFNetworkStreamFullRequestReader.prototype = { _onHeadersReceived: function PDFNetworkStreamFullRequestReader_onHeadersReceived() { var fullRequestXhrId = this._fullRequestId; var fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId); var getResponseHeader = function getResponseHeader(name) { return fullRequestXhr.getResponseHeader(name); }; var _validateRangeRequest = (0, _network_utils.validateRangeRequestCapabilities)({ getResponseHeader: getResponseHeader, isHttp: this._manager.isHttp, rangeChunkSize: this._rangeChunkSize, disableRange: this._disableRange }), allowRangeRequests = _validateRangeRequest.allowRangeRequests, suggestedLength = _validateRangeRequest.suggestedLength; if (allowRangeRequests) { this._isRangeSupported = true; } this._contentLength = suggestedLength || this._contentLength; this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader); var networkManager = this._manager; if (networkManager.isStreamingRequest(fullRequestXhrId)) { this._isStreamingSupported = true; } else if (this._isRangeSupported) { networkManager.abortRequest(fullRequestXhrId); } this._headersReceivedCapability.resolve(); }, _onProgressiveData: function PDFNetworkStreamFullRequestReader_onProgressiveData(chunk) { if (this._requests.length > 0) { var requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._cachedChunks.push(chunk); } }, _onDone: function PDFNetworkStreamFullRequestReader_onDone(args) { if (args) { this._onProgressiveData(args.chunk); } this._done = true; if (this._cachedChunks.length > 0) { return; } this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; }, _onError: function PDFNetworkStreamFullRequestReader_onError(status) { var url = this._url; var exception = (0, _network_utils.createResponseStatusError)(status, url); this._storedError = exception; this._headersReceivedCapability.reject(exception); this._requests.forEach(function (requestCapability) { requestCapability.reject(exception); }); this._requests = []; this._cachedChunks = []; }, _onProgress: function PDFNetworkStreamFullRequestReader_onProgress(data) { if (this.onProgress) { this.onProgress({ loaded: data.loaded, total: data.lengthComputable ? data.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; }, read: function () { var _read = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee() { var chunk, requestCapability; return _regenerator.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!this._storedError) { _context.next = 2; break; } throw this._storedError; case 2: if (!(this._cachedChunks.length > 0)) { _context.next = 5; break; } chunk = this._cachedChunks.shift(); return _context.abrupt("return", { value: chunk, done: false }); case 5: if (!this._done) { _context.next = 7; break; } return _context.abrupt("return", { value: undefined, done: true }); case 7: requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return _context.abrupt("return", requestCapability.promise); case 10: case "end": return _context.stop(); } } }, _callee, this); })); function read() { return _read.apply(this, arguments); } return read; }(), cancel: function PDFNetworkStreamFullRequestReader_cancel(reason) { this._done = true; this._headersReceivedCapability.reject(reason); this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; if (this._manager.isPendingRequest(this._fullRequestId)) { this._manager.abortRequest(this._fullRequestId); } this._fullRequestReader = null; } }; function PDFNetworkStreamRangeRequestReader(manager, begin, end) { this._manager = manager; var args = { onDone: this._onDone.bind(this), onProgress: this._onProgress.bind(this) }; this._requestId = manager.requestRange(begin, end, args); this._requests = []; this._queuedChunk = null; this._done = false; this.onProgress = null; this.onClosed = null; } PDFNetworkStreamRangeRequestReader.prototype = { _close: function PDFNetworkStreamRangeRequestReader_close() { if (this.onClosed) { this.onClosed(this); } }, _onDone: function PDFNetworkStreamRangeRequestReader_onDone(data) { var chunk = data.chunk; if (this._requests.length > 0) { var requestCapability = this._requests.shift(); requestCapability.resolve({ value: chunk, done: false }); } else { this._queuedChunk = chunk; } this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; this._close(); }, _onProgress: function PDFNetworkStreamRangeRequestReader_onProgress(evt) { if (!this.isStreamingSupported && this.onProgress) { this.onProgress({ loaded: evt.loaded }); } }, get isStreamingSupported() { return false; }, read: function () { var _read2 = _asyncToGenerator( /*#__PURE__*/ _regenerator.default.mark(function _callee2() { var chunk, requestCapability; return _regenerator.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!(this._queuedChunk !== null)) { _context2.next = 4; break; } chunk = this._queuedChunk; this._queuedChunk = null; return _context2.abrupt("return", { value: chunk, done: false }); case 4: if (!this._done) { _context2.next = 6; break; } return _context2.abrupt("return", { value: undefined, done: true }); case 6: requestCapability = (0, _util.createPromiseCapability)(); this._requests.push(requestCapability); return _context2.abrupt("return", requestCapability.promise); case 9: case "end": return _context2.stop(); } } }, _callee2, this); })); function read() { return _read2.apply(this, arguments); } return read; }(), cancel: function PDFNetworkStreamRangeRequestReader_cancel(reason) { this._done = true; this._requests.forEach(function (requestCapability) { requestCapability.resolve({ value: undefined, done: true }); }); this._requests = []; if (this._manager.isPendingRequest(this._requestId)) { this._manager.abortRequest(this._requestId); } this._close(); } }; /***/ }) /******/ ]); }); }); /* Copyright 2020 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 : {} ).extracthighlightsWorker = extracthighlights_worker; var extracthighlights_worker_entry = { }; var extracthighlightsWorker = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.assign(/*#__PURE__*/Object.create(null), extracthighlights_worker_entry, { 'default': extracthighlights_worker_entry })); var finalHighlightsAnnotations = new Array(); var PDFAnnotationsManager = /** @class */ (function () { function PDFAnnotationsManager() { } PDFAnnotationsManager.prototype.fetchRawAnnotationsFromPDF = function (arrayBuffer) { return __awaiter(this, void 0, void 0, function () { var SUPPORTED_ANNOTS, loadingTask; return __generator(this, function (_a) { switch (_a.label) { case 0: extracthighlights.GlobalWorkerOptions.workerSrcHighlights = extracthighlightsWorker; finalHighlightsAnnotations = new Array(); SUPPORTED_ANNOTS = ['Text', 'Highlight', 'Underline']; loadingTask = extracthighlights.getDocument(arrayBuffer); return [4 /*yield*/, loadingTask.promise .then(function (doc) { var numPages = doc.numPages; var lastPromise; // will be used to chain promises lastPromise = doc.getMetadata().then(function (data) { }); var loadPage = function (pageNum) { return doc.getPage(pageNum).then(function (page) { return __awaiter(this, void 0, void 0, function () { var scale, viewport, canvas, context, renderContext, annotations; return __generator(this, function (_a) { switch (_a.label) { case 0: scale = 1; viewport = page.getViewport(scale); canvas = document.createElement('canvas'); context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; renderContext = { canvasContext: context, viewport: viewport }; return [4 /*yield*/, page.getAnnotations()]; case 1: annotations = _a.sent(); annotations = annotations .map(function (anno) { if (anno.subtype === undefined) anno.subtype = anno.type; return anno; }) .filter(function (anno) { return SUPPORTED_ANNOTS.indexOf(anno.subtype) >= 0; }); return [4 /*yield*/, page.render(renderContext, annotations)]; case 2: _a.sent(); annotations.map(function (anno) { anno.pageNumber = pageNum; finalHighlightsAnnotations.push(anno); }); canvas = null; return [2 /*return*/, page]; } }); }); }); }; // Loading of the first page will wait on metadata and subsequent loadings // will wait on the previous pages. for (var i = 1; i <= numPages; i++) { lastPromise = lastPromise.then(loadPage.bind(null, i)); } return lastPromise; }) .then(function () { return finalHighlightsAnnotations; }, function (err) { console.error("Error: " + err); })]; case 1: return [2 /*return*/, _a.sent()]; } }); }); }; PDFAnnotationsManager.prototype.flattenAnnotationsByPosition = function (sortedAnnotationsByPositionGroupedByPage) { var flattenedAnnotationsByPosition = new Array(); for (var key in sortedAnnotationsByPositionGroupedByPage) { for (var i = 0; i < sortedAnnotationsByPositionGroupedByPage[key].length; i++) { flattenedAnnotationsByPosition.push(sortedAnnotationsByPositionGroupedByPage[key][i]); } } return flattenedAnnotationsByPosition; }; PDFAnnotationsManager.prototype.sortAnnotationsByPosition = function (groupedAnnotationsByPageMap) { var newMap = {}; for (var key in groupedAnnotationsByPageMap) { newMap[key] = groupedAnnotationsByPageMap[key].sort(function (left, right) { if (left.quadPoints[0].dims.minY < right.quadPoints[0].dims.minY) { return -1; } if (left.quadPoints[0].dims.minY > right.quadPoints[0].dims.minY) { return 1; } return 0; }); } return newMap; }; PDFAnnotationsManager.prototype.groupAnnotationsByPage = function (filteredAnnotations) { var groupBy = function (xs, key) { return xs.reduce(function (rv, x) { (rv[x[key]] = rv[x[key]] || []).push(x); return rv; }, {}); }; return groupBy(filteredAnnotations, 'pageNumber'); }; PDFAnnotationsManager.prototype.filterRawAnnotations = function (rawAnnotationsFromPDF) { var filteredAnnotations = rawAnnotationsFromPDF.filter(function (anno) { if (typeof anno.highlightedText == 'undefined' || anno.highlightedText == "") { return false; } else { return true; } }); return filteredAnnotations; }; return PDFAnnotationsManager; }()); var ExtractPDFHighlightsPlugin = /** @class */ (function (_super) { __extends(ExtractPDFHighlightsPlugin, _super); function ExtractPDFHighlightsPlugin() { return _super !== null && _super.apply(this, arguments) || this; } ExtractPDFHighlightsPlugin.prototype.onload = function () { return __awaiter(this, void 0, void 0, function () { var _this = this; return __generator(this, function (_a) { this.loadSettings(); this.addSettingTab(new ExtractPDFHighlightsPluginSettingsTab(this.app, this)); this.addRibbonIcon('pdf-file', 'PDF Highlights', function () { _this.processPDFHighlights(); }); return [2 /*return*/]; }); }); }; ExtractPDFHighlightsPlugin.prototype.onunload = function () { }; ExtractPDFHighlightsPlugin.prototype.processPDFHighlights = function () { return __awaiter(this, void 0, void 0, function () { var file, arrayBuffer, pdfAnnotationsManager, rawAnnotationsFromPDF, filteredAnnotations, groupedAnnotationsByPageMap, sortedAnnotationsByPositionGroupedByPage, flattenedAnnotationsByPosition, finalMarkdown, filePath; return __generator(this, function (_a) { switch (_a.label) { case 0: this.modal = new ProgressModal(this.app); file = this.app.workspace.getActiveFile(); if (file === null) return [2 /*return*/]; if (file.extension !== 'pdf') return [2 /*return*/]; return [4 /*yield*/, this.app.vault.readBinary(file)]; case 1: arrayBuffer = _a.sent(); pdfAnnotationsManager = new PDFAnnotationsManager(); return [4 /*yield*/, pdfAnnotationsManager.fetchRawAnnotationsFromPDF(arrayBuffer)]; case 2: rawAnnotationsFromPDF = _a.sent(); filteredAnnotations = pdfAnnotationsManager.filterRawAnnotations(rawAnnotationsFromPDF); groupedAnnotationsByPageMap = pdfAnnotationsManager.groupAnnotationsByPage(filteredAnnotations); sortedAnnotationsByPositionGroupedByPage = pdfAnnotationsManager.sortAnnotationsByPosition(groupedAnnotationsByPageMap); flattenedAnnotationsByPosition = pdfAnnotationsManager.flattenAnnotationsByPosition(sortedAnnotationsByPositionGroupedByPage); finalMarkdown = this.generateFinalMarkdown(flattenedAnnotationsByPosition, file.name); filePath = file.name.replace(".pdf", ".md"); filePath = "Highlights for " + filePath; return [4 /*yield*/, this.saveHighlightsToFile(filePath, finalMarkdown)]; case 3: _a.sent(); return [4 /*yield*/, this.app.workspace.openLinkText(filePath, '', true)]; case 4: _a.sent(); return [2 /*return*/]; } }); }); }; ExtractPDFHighlightsPlugin.prototype.generateFinalMarkdown = function (annotations, fileName) { var mdString = ""; for (var _i = 0, annotations_1 = annotations; _i < annotations_1.length; _i++) { var anno = annotations_1[_i]; var text = anno.highlightedText; if (this.settings.includePageNumber) { text = text + " (Page " + anno.pageNumber + ")"; } if (this.settings.includeHighlightColor) { text = text + " " + this.getColorTagForAnnotation(anno); } if (this.settings.createLinks) { text = "[[" + text + "]]"; } text = "- " + text; text += "\n"; mdString += text; } mdString += "\n## Source\n[[" + fileName + "]]"; return mdString; }; ExtractPDFHighlightsPlugin.prototype.saveHighlightsToFile = function (filePath, mdString) { return __awaiter(this, void 0, void 0, function () { var fileExists; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.app.vault.adapter.exists(filePath)]; case 1: fileExists = _a.sent(); if (!fileExists) return [3 /*break*/, 3]; return [4 /*yield*/, this.appendHighlightsToFile(filePath, mdString)]; case 2: _a.sent(); return [3 /*break*/, 5]; case 3: return [4 /*yield*/, this.app.vault.create(filePath, mdString)]; case 4: _a.sent(); _a.label = 5; case 5: return [2 /*return*/]; } }); }); }; ExtractPDFHighlightsPlugin.prototype.appendHighlightsToFile = function (filePath, note) { return __awaiter(this, void 0, void 0, function () { var existingContent; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.app.vault.adapter.read(filePath)]; case 1: existingContent = _a.sent(); if (existingContent.length > 0) { existingContent = existingContent + '\r\r'; } return [4 /*yield*/, this.app.vault.adapter.write(filePath, existingContent + note)]; case 2: _a.sent(); return [2 /*return*/]; } }); }); }; ExtractPDFHighlightsPlugin.prototype.loadSettings = function () { var _this = this; this.settings = new ExtractPDFHighlightsPluginSettings(); (function () { return __awaiter(_this, void 0, void 0, function () { var loadedSettings; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.loadData()]; case 1: loadedSettings = _a.sent(); if (!loadedSettings) return [3 /*break*/, 2]; this.settings.includePageNumber = loadedSettings.includePageNumber; this.settings.includeHighlightColor = loadedSettings.includeHighlightColor; this.settings.createLinks = loadedSettings.createLinks; return [3 /*break*/, 4]; case 2: return [4 /*yield*/, this.saveData(this.settings)]; case 3: _a.sent(); _a.label = 4; case 4: return [2 /*return*/]; } }); }); })(); }; ExtractPDFHighlightsPlugin.prototype.getColorTagForAnnotation = function (anno) { var colorArray = anno.color; var red = colorArray[0]; var green = colorArray[1]; var blue = colorArray[2]; if (red == 250 && green == 205 && blue == 90) { return "🟡"; } if (red == 124 && green == 200 && blue == 104) { return "🟢"; } if (red == 105 && green == 176 && blue == 241) { return "🔵"; } if (red == 251 && green == 92 && blue == 137) { return "🔴"; } if (red == 200 && green == 133 && blue == 218) { return "🟣"; } return ""; }; return ExtractPDFHighlightsPlugin; }(obsidian.Plugin)); var ProgressModal = /** @class */ (function (_super) { __extends(ProgressModal, _super); function ProgressModal(app) { return _super.call(this, app) || this; } ProgressModal.prototype.onOpen = function () { var contentEl = this.contentEl; contentEl.createEl("h2", { text: "Extract PDF Highlights" }); contentEl.createEl("p", { text: "I'm sorry but due to an unexpected incompatibility with Obsidian Core PDF handling as of v0.10.8 this plugin is currently disabled. In the meantime, you can use Zotero + Zotfile to extract PDF highlights and annotations. I'm sorry for the inconvenience and working on fixing this issue. If you have any questions, please email me at alexis.rondeau@gmail.com! Thank you for your patience, Alexis :)" }); }; ProgressModal.prototype.onClose = function () { var contentEl = this.contentEl; contentEl.empty(); }; return ProgressModal; }(obsidian.Modal)); module.exports = ExtractPDFHighlightsPlugin; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9FeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpblNldHRpbmdzLnRzIiwic3JjL0V4dHJhY3RQREZIaWdobGlnaHRzUGx1Z2luU2V0dGluZ3NUYWIudHMiLCJub2RlX21vZHVsZXMvbm9kZS1lbnN1cmUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0cy53b3JrZXIuanMiLCJub2RlX21vZHVsZXMvZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0cy5qcyIsIm5vZGVfbW9kdWxlcy9leHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlci5lbnRyeS5qcyIsInNyYy9QREZBbm5vdGF0aW9uc01hbmFnZXIudHMiLCJzcmMvbWFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSkge1xyXG4gICAgZm9yICh2YXIgaSA9IDAsIGlsID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPCBpbDsgaSsrLCBqKyspXHJcbiAgICAgICAgdG9bal0gPSBmcm9tW2ldO1xyXG4gICAgcmV0dXJuIHRvO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHByaXZhdGVNYXAuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHByaXZhdGVNYXAsIHZhbHVlKSB7XHJcbiAgICBpZiAoIXByaXZhdGVNYXAuaGFzKHJlY2VpdmVyKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZU1hcC5zZXQocmVjZWl2ZXIsIHZhbHVlKTtcclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpblNldHRpbmdzIHtcbiAgICBwdWJsaWMgaW5jbHVkZVBhZ2VOdW1iZXI6IGJvb2xlYW47XG4gICAgcHVibGljIGluY2x1ZGVIaWdobGlnaHRDb2xvcjogYm9vbGVhbjtcbiAgICBwdWJsaWMgY3JlYXRlTGlua3M6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5pbmNsdWRlUGFnZU51bWJlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluY2x1ZGVIaWdobGlnaHRDb2xvciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZUxpbmtzID0gZmFsc2U7XG4gICAgfVxufSIsImltcG9ydCB7QXBwLCBQbHVnaW5TZXR0aW5nVGFiLCBTZXR0aW5nfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCBFeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpbiBmcm9tIFwiLi9tYWluXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4dHJhY3RQREZIaWdobGlnaHRzUGx1Z2luU2V0dGluZ3NUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgICBwbHVnaW46IEV4dHJhY3RQREZIaWdobGlnaHRzUGx1Z2luO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW4pIHtcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICB9XG5cbiAgICBkaXNwbGF5KCk6IHZvaWQge1xuICAgICAgICBsZXQge2NvbnRhaW5lckVsfSA9IHRoaXM7XG5cbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgICAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7dGV4dDogJ0V4dHJhY3QgUERGIEhpZ2hsaWdodHMuJ30pO1xuXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuICAgICAgICAgICAgLnNldE5hbWUoJ0luY2x1ZGUgcGFnZSBudW1iZXInKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIGFkZHMgYSBgKFBhZ2UgWClgIHRvIGVhY2ggaGlnaGxpZ2h0LicsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKCh0b2dnbGUpID0+XG4gICAgICAgICAgICAgICAgdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmluY2x1ZGVQYWdlTnVtYmVyKS5vbkNoYW5nZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaW5jbHVkZVBhZ2VOdW1iZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdJbmNsdWRlIGhpZ2hsaWdodGVyIGNvbG9yJylcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgICdJZiBlbmFibGVkLCBhZGRzIGEgY29sb3IgdGFnIHRvIGVhY2ggaGlnaGxpZ2h0IGJhc2VkIG9uIHRoZSBoaWdobGlnaHRlciBjb2xvciB1c2VkIGluIHRoZSBQREYnLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRvZ2dsZSgodG9nZ2xlKSA9PlxuICAgICAgICAgICAgICAgIHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbmNsdWRlSGlnaGxpZ2h0Q29sb3IpLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbmNsdWRlSGlnaGxpZ2h0Q29sb3IgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKCdDcmVhdGUgbGlua3MnKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgJ0lmIGVuYWJsZWQsIHR1cm5zIGVhY2ggbGlzdCBpdGVtIGludG8gYSBtYXJrZG93biBsaW5rJyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUb2dnbGUoKHRvZ2dsZSkgPT5cbiAgICAgICAgICAgICAgICB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY3JlYXRlTGlua3MpLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5jcmVhdGVMaW5rcyA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsIi8qKlxuICogIEp1c3QgcnVuIHRoZSBjYWxsYmFjayB0aHJvdWdoIHNldEltbWVkaWF0ZSwgc28gdGhhdCBpdCBhcHBlYXJzXG4gKiAgYXN5bmNocm9ub3VzLCBldmVuIHdoZW4gdW5uZWNlc3NhcnkuXG4gKi9cblxuZnVuY3Rpb24gZW5zdXJlKG1vZHVsZXMsIGNhbGxiYWNrKSB7XG4gIHNldEltbWVkaWF0ZShjYWxsYmFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZW5zdXJlO1xuIiwiLyoqXG4gKiBAbGljc3RhcnQgVGhlIGZvbGxvd2luZyBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAxOCBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogQGxpY2VuZCBUaGUgYWJvdmUgaXMgdGhlIGVudGlyZSBsaWNlbnNlIG5vdGljZSBmb3IgdGhlXG4gKiBKYXZhc2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlXG4gKi9cblxuKGZ1bmN0aW9uIHdlYnBhY2tVbml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uKHJvb3QsIGZhY3RvcnkpIHtcbiAgICBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuICAgICAgICBkZWZpbmUoXCJleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlclwiLCBbXSwgZmFjdG9yeSk7XG4gICAgZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG4gICAgICAgIGV4cG9ydHNbXCJleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlclwiXSA9IGZhY3RvcnkoKTtcbiAgICBlbHNlXG4gICAgICAgIHJvb3RbXCJleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlclwiXSA9IHJvb3QuZXh0cmFjdGhpZ2hsaWdodHNXb3JrZXIgPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gLyoqKioqKi8gKGZ1bmN0aW9uKG1vZHVsZXMpIHsgLy8gd2VicGFja0Jvb3RzdHJhcFxuICAgICAgICAvKioqKioqLyBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiAgICAgICAgLyoqKioqKi8gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gICAgICAgIC8qKioqKiovIFx0ZnVuY3Rpb24gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuICAgICAgICAgICAgLyoqKioqKi9cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHR9XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0aTogbW9kdWxlSWQsXG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0bDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0ZXhwb3J0czoge31cbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0fTtcbiAgICAgICAgICAgIC8qKioqKiovXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyk7XG4gICAgICAgICAgICAvKioqKioqL1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRtb2R1bGUubCA9IHRydWU7XG4gICAgICAgICAgICAvKioqKioqL1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuICAgICAgICAgICAgLyoqKioqKi8gXHR9XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZighX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdH1cbiAgICAgICAgICAgIC8qKioqKiovIFx0fTtcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHR9XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0fTtcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiAgICAgICAgLyoqKioqKi8gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiAgICAgICAgLyoqKioqKi8gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiAgICAgICAgLyoqKioqKi8gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiAgICAgICAgLyoqKioqKi8gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKHZhbHVlKTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLnIobnMpO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0cmV0dXJuIG5zO1xuICAgICAgICAgICAgLyoqKioqKi8gXHR9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRyZXR1cm4gZ2V0dGVyO1xuICAgICAgICAgICAgLyoqKioqKi8gXHR9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuICAgICAgICAvKioqKioqLyBcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuICAgICAgICAvKioqKioqLyBcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ucCA9IFwiXCI7XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gICAgICAgIC8qKioqKiovIFx0cmV0dXJuIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5zID0gMCk7XG4gICAgICAgIC8qKioqKiovIH0pXG4gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gICAgICAgIC8qKioqKiovIChbXG4gICAgICAgICAgICAvKiAwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzVmVyc2lvbiA9ICcyLjEuMjY2JztcbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFjdGhpZ2hsaWdodHNCdWlsZCA9ICc4MWY1ODM1Yyc7XG5cbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFjdGhpZ2hsaWdodHNDb3JlV29ya2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBleHRyYWN0aGlnaGxpZ2h0c0NvcmVXb3JrZXIuV29ya2VyTWVzc2FnZUhhbmRsZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gZXhwb3J0cy5Xb3JrZXJUYXNrID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9yZWdlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wZGZfbWFuYWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfaXNfbm9kZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX21lc3NhZ2VfaGFuZGxlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTg5KTtcblxuICAgICAgICAgICAgICAgIHZhciBfcHJpbWl0aXZlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU1KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuICAgICAgICAgICAgICAgIHZhciBXb3JrZXJUYXNrID0gZnVuY3Rpb24gV29ya2VyVGFza0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdvcmtlclRhc2sobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGVybWluYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFdvcmtlclRhc2sucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGZpbmlzaGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGU6IGZ1bmN0aW9uIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQ6IGZ1bmN0aW9uIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGVybWluYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dvcmtlciB0YXNrIHdhcyB0ZXJtaW5hdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gV29ya2VyVGFzaztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLldvcmtlclRhc2sgPSBXb3JrZXJUYXNrO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERldvcmtlclN0cmVhbSA9IGZ1bmN0aW9uIFBERldvcmtlclN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERldvcmtlclN0cmVhbShtc2dIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tc2dIYW5kbGVyID0gbXNnSGFuZGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUERGV29ya2VyU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZ1bGxSZWFkZXI6IGZ1bmN0aW9uIGdldEZ1bGxSZWFkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZXb3JrZXJTdHJlYW1SZWFkZXIodGhpcy5fbXNnSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFJhbmdlUmVhZGVyOiBmdW5jdGlvbiBnZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBQREZXb3JrZXJTdHJlYW1SYW5nZVJlYWRlcihiZWdpbiwgZW5kLCB0aGlzLl9tc2dIYW5kbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxBbGxSZXF1ZXN0czogZnVuY3Rpb24gY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXJzID0gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZXb3JrZXJTdHJlYW1SZWFkZXIobXNnSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZVN0cmVhbSA9IHRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oJ0dldFJlYWRlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlYWRlcnNSZWFkeSA9IHRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdSZWFkZXJIZWFkZXJzUmVhZHknKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZGF0YS5pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGRhdGEuaXNSYW5nZVN1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY29udGVudExlbmd0aCA9IGRhdGEuY29udGVudExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUERGV29ya2VyU3RyZWFtUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBoZWFkZXJzUmVhZHkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBjb250ZW50TGVuZ3RoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gX3JlZi5kb25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCwgbXNnSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbXNnSGFuZGxlciA9IG1zZ0hhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGFibGVTdHJlYW0gPSB0aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCdHZXRSYW5nZVJlYWRlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbjogYmVnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFBERldvcmtlclN0cmVhbVJhbmdlUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWYyLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IF9yZWYyLmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERldvcmtlclN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgV29ya2VyTWVzc2FnZUhhbmRsZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbiBzZXR1cChoYW5kbGVyLCBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdE1lc3NhZ2VQcm9jZXNzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ3Rlc3QnLCBmdW5jdGlvbiB3cGhTZXR1cFRlc3QoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXN0TWVzc2FnZVByb2Nlc3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE1lc3NhZ2VQcm9jZXNzZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgndGVzdCcsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0VHJhbnNmZXJzID0gZGF0YVswXSA9PT0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSBzdXBwb3J0VHJhbnNmZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2VFeGlzdHMgPSAncmVzcG9uc2UnIGluIHhocjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5yZXNwb25zZVR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZUV4aXN0cyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzcG9uc2VFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCd0ZXN0JywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCd0ZXN0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0VHlwZWRBcnJheTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydFRyYW5zZmVyczogc3VwcG9ydFRyYW5zZmVyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdjb25maWd1cmUnLCBmdW5jdGlvbiB3cGhDb25maWd1cmUoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5zZXRWZXJib3NpdHlMZXZlbCkoZGF0YS52ZXJib3NpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXREb2NSZXF1ZXN0JywgZnVuY3Rpb24gd3BoU2V0dXBEb2MoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXb3JrZXJNZXNzYWdlSGFuZGxlci5jcmVhdGVEb2N1bWVudEhhbmRsZXIoZGF0YSwgcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlRG9jdW1lbnRIYW5kbGVyOiBmdW5jdGlvbiBjcmVhdGVEb2N1bWVudEhhbmRsZXIoZG9jUGFyYW1zLCBwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuY2VsWEhScyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgV29ya2VyVGFza3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcGlWZXJzaW9uID0gZG9jUGFyYW1zLmFwaVZlcnNpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29ya2VyVmVyc2lvbiA9ICcyLjEuMjY2JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwaVZlcnNpb24gIT09IHdvcmtlclZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgQVBJIHZlcnNpb24gXFxcIlwiLmNvbmNhdChhcGlWZXJzaW9uLCBcIlxcXCIgZG9lcyBub3QgbWF0Y2ggXCIpICsgXCJ0aGUgV29ya2VyIHZlcnNpb24gXFxcIlwiLmNvbmNhdCh3b3JrZXJWZXJzaW9uLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0lkID0gZG9jUGFyYW1zLmRvY0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0Jhc2VVcmwgPSBkb2NQYXJhbXMuZG9jQmFzZVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3b3JrZXJIYW5kbGVyTmFtZSA9IGRvY1BhcmFtcy5kb2NJZCArICdfd29ya2VyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIod29ya2VySGFuZGxlck5hbWUsIGRvY0lkLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSBkb2NQYXJhbXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm1pbmF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgd2FzIHRlcm1pbmF0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0YXJ0V29ya2VyVGFzayh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya2VyVGFza3MucHVzaCh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluaXNoV29ya2VyVGFzayh0YXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5maW5pc2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IFdvcmtlclRhc2tzLmluZGV4T2YodGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya2VyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2FkRG9jdW1lbnQoX3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2xvYWREb2N1bWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfbG9hZERvY3VtZW50KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9sb2FkRG9jdW1lbnQgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUocmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjYsIF9yZWY3LCBudW1QYWdlcywgZmluZ2VycHJpbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZURvYygnY2hlY2tIZWFkZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZURvYygncGFyc2VTdGFydFhSZWYnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZURvYygncGFyc2UnLCBbcmVjb3ZlcnlNb2RlXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVEb2MoJ2NoZWNrRmlyc3RQYWdlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtwZGZNYW5hZ2VyLmVuc3VyZURvYygnbnVtUGFnZXMnKSwgcGRmTWFuYWdlci5lbnN1cmVEb2MoJ2ZpbmdlcnByaW50JyldKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNiA9IF9jb250ZXh0LnNlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjcgPSBfc2xpY2VkVG9BcnJheShfcmVmNiwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtUGFnZXMgPSBfcmVmN1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCA9IF9yZWY3WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1QYWdlczogbnVtUGFnZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50OiBmaW5nZXJwcmludFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbG9hZERvY3VtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFBkZk1hbmFnZXIoZGF0YSwgZXZhbHVhdG9yT3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZNYW5hZ2VyQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gZGF0YS5zb3VyY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIgPSBuZXcgX3BkZl9tYW5hZ2VyLkxvY2FsUGRmTWFuYWdlcihkb2NJZCwgc291cmNlLmRhdGEsIHNvdXJjZS5wYXNzd29yZCwgZXZhbHVhdG9yT3B0aW9ucywgZG9jQmFzZVVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKHBkZk1hbmFnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlckNhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENodW5rcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmU3RyZWFtID0gbmV3IFBERldvcmtlclN0cmVhbShoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QoZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlckNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbFJlcXVlc3QgPSBwZGZTdHJlYW0uZ2V0RnVsbFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxSZXF1ZXN0LmhlYWRlcnNSZWFkeS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdWxsUmVxdWVzdC5pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZUF1dG9GZXRjaCA9IHNvdXJjZS5kaXNhYmxlQXV0b0ZldGNoIHx8IGZ1bGxSZXF1ZXN0LmlzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyID0gbmV3IF9wZGZfbWFuYWdlci5OZXR3b3JrUGRmTWFuYWdlcihkb2NJZCwgcGRmU3RyZWFtLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dIYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHNvdXJjZS5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogZnVsbFJlcXVlc3QuY29udGVudExlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IGRpc2FibGVBdXRvRmV0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUNodW5rU2l6ZTogc291cmNlLnJhbmdlQ2h1bmtTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGV2YWx1YXRvck9wdGlvbnMsIGRvY0Jhc2VVcmwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2FjaGVkQ2h1bmtzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLnNlbmRQcm9ncmVzc2l2ZURhdGEoY2FjaGVkQ2h1bmtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZENodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZXNvbHZlKHBkZk1hbmFnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZGVkID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbHVzaENodW5rcyA9IGZ1bmN0aW9uIGZsdXNoQ2h1bmtzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmRmlsZSA9ICgwLCBfdXRpbC5hcnJheXNUb0J5dGVzKShjYWNoZWRDaHVua3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UubGVuZ3RoICYmIHBkZkZpbGUubGVuZ3RoICE9PSBzb3VyY2UubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ3JlcG9ydGVkIEhUVFAgbGVuZ3RoIGlzIGRpZmZlcmVudCBmcm9tIGFjdHVhbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIgPSBuZXcgX3BkZl9tYW5hZ2VyLkxvY2FsUGRmTWFuYWdlcihkb2NJZCwgcGRmRmlsZSwgc291cmNlLnBhc3N3b3JkLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnJlc29sdmUocGRmTWFuYWdlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QoZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVkQ2h1bmtzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRDaHVuayA9IGZ1bmN0aW9uIHJlYWRDaHVuayhjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVOb3RUZXJtaW5hdGVkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2h1bmsuZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBkZk1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoQ2h1bmtzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxYSFJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gY2h1bmsudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkICs9ICgwLCBfdXRpbC5hcnJheUJ5dGVMZW5ndGgpKGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmdWxsUmVxdWVzdC5pc1N0cmVhbWluZ1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ0RvY1Byb2dyZXNzJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiBsb2FkZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogTWF0aC5tYXgobG9hZGVkLCBmdWxsUmVxdWVzdC5jb250ZW50TGVuZ3RoIHx8IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIuc2VuZFByb2dyZXNzaXZlRGF0YShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWRDaHVua3MucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUmVxdWVzdC5yZWFkKCkudGhlbihyZWFkQ2h1bmssIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxSZXF1ZXN0LnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyQ2FwYWJpbGl0eS5yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFhIUnMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsWEhScyA9IGZ1bmN0aW9uIGNhbmNlbFhIUnMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZlN0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cygnYWJvcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXJDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwRG9jKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvblN1Y2Nlc3MoZG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdHZXREb2MnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZJbmZvOiBkb2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb25GYWlsdXJlKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gbmV3IFdvcmtlclRhc2soJ1Bhc3N3b3JkRXhjZXB0aW9uOiByZXNwb25zZSAnICsgZS5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0V29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdQYXNzd29yZFJlcXVlc3QnLCBlKS50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLnVwZGF0ZVBhc3N3b3JkKGRhdGEucGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXJSZWFkeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGJvdW5kRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ1Bhc3N3b3JkRXhjZXB0aW9uJywgYm91bmRFeGNlcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKG51bGwsIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlIGluc3RhbmNlb2YgX3V0aWwuSW52YWxpZFBERkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdJbnZhbGlkUERGJywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZSBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnTWlzc2luZ1BERicsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUgaW5zdGFuY2VvZiBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnVW5leHBlY3RlZFJlc3BvbnNlJywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ1Vua25vd25FcnJvcicsIG5ldyBfdXRpbC5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLCBlLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBkZk1hbmFnZXJSZWFkeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkRG9jdW1lbnQoZmFsc2UpLnRoZW4ob25TdWNjZXNzLCBmdW5jdGlvbiBsb2FkRmFpbHVyZShleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShleCBpbnN0YW5jZW9mIF91dGlsLlhSZWZQYXJzZUV4Y2VwdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZhaWx1cmUoZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWREb2N1bWVudCh0cnVlKS50aGVuKG9uU3VjY2Vzcywgb25GYWlsdXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBvbkZhaWx1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZhbHVhdG9yT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VEYXRhU2NoZW1hOiBkYXRhLmRpc2FibGVDcmVhdGVPYmplY3RVUkwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEltYWdlU2l6ZTogZGF0YS5tYXhJbWFnZVNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogZGF0YS5kaXNhYmxlRm9udEZhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6IGRhdGEubmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlRXJyb3JzOiBkYXRhLmlnbm9yZUVycm9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBkYXRhLmlzRXZhbFN1cHBvcnRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UGRmTWFuYWdlcihkYXRhLCBldmFsdWF0b3JPcHRpb25zKS50aGVuKGZ1bmN0aW9uIChuZXdQZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQZGZNYW5hZ2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgd2FzIHRlcm1pbmF0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIgPSBuZXdQZGZNYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCkudGhlbihmdW5jdGlvbiAoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ0RhdGFMb2FkZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBzdHJlYW0uYnl0ZXMuYnl0ZUxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4ocGRmTWFuYWdlclJlYWR5LCBvbkZhaWx1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRQYWdlJywgZnVuY3Rpb24gd3BoU2V0dXBHZXRQYWdlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKGRhdGEucGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmUocGFnZSwgJ3JvdGF0ZScpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCAncmVmJyksIHBkZk1hbmFnZXIuZW5zdXJlKHBhZ2UsICd1c2VyVW5pdCcpLCBwZGZNYW5hZ2VyLmVuc3VyZShwYWdlLCAndmlldycpXSkudGhlbihmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmNCA9IF9zbGljZWRUb0FycmF5KF9yZWYzLCA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSBfcmVmNFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSBfcmVmNFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyVW5pdCA9IF9yZWY0WzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSBfcmVmNFszXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGU6IHJvdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWY6IHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyVW5pdDogdXNlclVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldzogdmlld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldFBhZ2VJbmRleCcsIGZ1bmN0aW9uIHdwaFNldHVwR2V0UGFnZUluZGV4KGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmID0gbmV3IF9wcmltaXRpdmVzLlJlZihkYXRhLnJlZi5udW0sIGRhdGEucmVmLmdlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdGFsb2cgPSBwZGZNYW5hZ2VyLnBkZkRvY3VtZW50LmNhdGFsb2c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhdGFsb2cuZ2V0UGFnZUluZGV4KHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldERlc3RpbmF0aW9ucycsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGVzdGluYXRpb25zKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCdkZXN0aW5hdGlvbnMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0RGVzdGluYXRpb24nLCBmdW5jdGlvbiB3cGhTZXR1cEdldERlc3RpbmF0aW9uKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCdnZXREZXN0aW5hdGlvbicsIFtkYXRhLmlkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldFBhZ2VMYWJlbHMnLCBmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VMYWJlbHMoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ3BhZ2VMYWJlbHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0UGFnZU1vZGUnLCBmdW5jdGlvbiB3cGhTZXR1cEdldFBhZ2VNb2RlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCdwYWdlTW9kZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdnZXRPcGVuQWN0aW9uRGVzdGluYXRpb24nLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ29wZW5BY3Rpb25EZXN0aW5hdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRBdHRhY2htZW50cycsIGZ1bmN0aW9uIHdwaFNldHVwR2V0QXR0YWNobWVudHMoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ2F0dGFjaG1lbnRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldEphdmFTY3JpcHQnLCBmdW5jdGlvbiB3cGhTZXR1cEdldEphdmFTY3JpcHQoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ2phdmFTY3JpcHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0T3V0bGluZScsIGZ1bmN0aW9uIHdwaFNldHVwR2V0T3V0bGluZShkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygnZG9jdW1lbnRPdXRsaW5lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIub24oJ0dldFBlcm1pc3Npb25zJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCdwZXJtaXNzaW9ucycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRNZXRhZGF0YScsIGZ1bmN0aW9uIHdwaFNldHVwR2V0TWV0YWRhdGEoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbcGRmTWFuYWdlci5lbnN1cmVEb2MoJ2RvY3VtZW50SW5mbycpLCBwZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coJ21ldGFkYXRhJyldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0RGF0YScsIGZ1bmN0aW9uIHdwaFNldHVwR2V0RGF0YShkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBkZk1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKS50aGVuKGZ1bmN0aW9uIChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5ieXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignR2V0U3RhdHMnLCBmdW5jdGlvbiB3cGhTZXR1cEdldFN0YXRzKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5wZGZEb2N1bWVudC54cmVmLnN0YXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRBbm5vdGF0aW9ucycsIGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlSW5kZXggPSBfcmVmNS5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudCA9IF9yZWY1LmludGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5nZXRQYWdlKHBhZ2VJbmRleCkudGhlbihmdW5jdGlvbiAocGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZS5nZXRBbm5vdGF0aW9uc0RhdGEoaW50ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignUmVuZGVyUGFnZVJlcXVlc3QnLCBmdW5jdGlvbiB3cGhTZXR1cFJlbmRlclBhZ2UoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlSW5kZXggPSBkYXRhLnBhZ2VJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gbmV3IFdvcmtlclRhc2soJ1JlbmRlclBhZ2VSZXF1ZXN0OiBwYWdlICcgKyBwYWdlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlTnVtID0gcGFnZUluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQ6IGRhdGEuaW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW50ZXJhY3RpdmVGb3JtczogZGF0YS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKG9wZXJhdG9yTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgncGFnZT0nICsgcGFnZU51bSArICcgLSBnZXRPcGVyYXRvckxpc3Q6IHRpbWU9JyArIChEYXRlLm5vdygpIC0gc3RhcnQpICsgJ21zLCBsZW49JyArIG9wZXJhdG9yTGlzdC50b3RhbExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLnNlbmQoJ1Vuc3VwcG9ydGVkRmVhdHVyZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnVua25vd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbmltdW1TdGFja01lc3NhZ2UgPSAnd29ya2VyLmpzOiB3aGlsZSB0cnlpbmcgdG8gZ2V0UGFnZSgpIGFuZCBnZXRPcGVyYXRvckxpc3QoKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JhcHBlZEV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZWRFeGNlcHRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrOiBtaW5pbXVtU3RhY2tNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZihlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwcGVkRXhjZXB0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlLm1lc3NhZ2UgfHwgZS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjazogZS5zdGFjayB8fCBtaW5pbXVtU3RhY2tNZXNzYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlZEV4Y2VwdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ1Vua25vd24gZXhjZXB0aW9uIHR5cGU6ICcgKyBfdHlwZW9mKGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjazogbWluaW11bVN0YWNrTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnUGFnZUVycm9yJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VOdW06IHBhZ2VOdW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHdyYXBwZWRFeGNlcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50OiBkYXRhLmludGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdHZXRUZXh0Q29udGVudCcsIGZ1bmN0aW9uIHdwaEV4dHJhY3RUZXh0KGRhdGEsIHNpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZUluZGV4ID0gZGF0YS5wYWdlSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLm9uUHVsbCA9IGZ1bmN0aW9uIChkZXNpcmVkU2l6ZSkge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLm9uQ2FuY2VsID0gZnVuY3Rpb24gKHJlYXNvbikge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZNYW5hZ2VyLmdldFBhZ2UocGFnZUluZGV4KS50aGVuKGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gbmV3IFdvcmtlclRhc2soJ0dldFRleHRDb250ZW50OiBwYWdlICcgKyBwYWdlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdvcmtlclRhc2sodGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlTnVtID0gcGFnZUluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5leHRyYWN0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rOiBzaW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZTogZGF0YS5ub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtczogZGF0YS5jb21iaW5lVGV4dEl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXNoV29ya2VyVGFzayh0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgndGV4dCBpbmRleGluZzogcGFnZT0nICsgcGFnZU51bSArICcgLSB0aW1lPScgKyAoRGF0ZS5ub3coKSAtIHN0YXJ0KSArICdtcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luay5jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2hXb3JrZXJUYXNrKHRhc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFzay50ZXJtaW5hdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdGb250RmFsbGJhY2snLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmZvbnRGYWxsYmFjayhkYXRhLmlkLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignQ2xlYW51cCcsIGZ1bmN0aW9uIHdwaENsZWFudXAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZNYW5hZ2VyLmNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5vbignVGVybWluYXRlJywgZnVuY3Rpb24gd3BoVGVybWluYXRlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIudGVybWluYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5jZWxYSFJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFhIUnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2FpdE9uID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya2VyVGFza3MuZm9yRWFjaChmdW5jdGlvbiAodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0T24ucHVzaCh0YXNrLmZpbmlzaGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLm9uKCdSZWFkeScsIGZ1bmN0aW9uIHdwaFJlYWR5KGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXR1cERvYyhkb2NQYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY1BhcmFtcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3b3JrZXJIYW5kbGVyTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUZyb21Qb3J0OiBmdW5jdGlvbiBpbml0aWFsaXplRnJvbVBvcnQocG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcignd29ya2VyJywgJ21haW4nLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdvcmtlck1lc3NhZ2VIYW5kbGVyLnNldHVwKGhhbmRsZXIsIHBvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdyZWFkeScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLldvcmtlck1lc3NhZ2VIYW5kbGVyID0gV29ya2VyTWVzc2FnZUhhbmRsZXI7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc01lc3NhZ2VQb3J0KG1heWJlUG9ydCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIG1heWJlUG9ydC5wb3N0TWVzc2FnZSA9PT0gJ2Z1bmN0aW9uJyAmJiAnb25tZXNzYWdlJyBpbiBtYXliZVBvcnQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnICYmICEoMCwgX2lzX25vZGUuZGVmYXVsdCkoKSAmJiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNNZXNzYWdlUG9ydChzZWxmKSkge1xuICAgICAgICAgICAgICAgICAgICBXb3JrZXJNZXNzYWdlSGFuZGxlci5pbml0aWFsaXplRnJvbVBvcnQoc2VsZik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIHZhciBnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcyB8fCAodHlwZW9mIHNlbGYgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihzZWxmKSkgPT09IFwib2JqZWN0XCIgJiYgc2VsZjtcbiAgICAgICAgICAgICAgICB9KCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhhZFJ1bnRpbWUgPSBnLnJlZ2VuZXJhdG9yUnVudGltZSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpID49IDA7XG4gICAgICAgICAgICAgICAgdmFyIG9sZFJ1bnRpbWUgPSBoYWRSdW50aW1lICYmIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICAgICAgICAgICAgICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0KTtcblxuICAgICAgICAgICAgICAgIGlmIChoYWRSdW50aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gb2xkUnVudGltZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGcucmVnZW5lcmF0b3JSdW50aW1lO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgICAgICAgICAgLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICAgICAgIWZ1bmN0aW9uIChnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5Nb2R1bGUgPSAoIGZhbHNlID8gdW5kZWZpbmVkIDogX3R5cGVvZihtb2R1bGUpKSA9PT0gXCJvYmplY3RcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzogZXJyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3RvciA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5GdW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSBcIm9iamVjdFwiICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbiAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBHZW5TdGF0ZUNvbXBsZXRlZCA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFjYXVnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJiAodHlwZSA9PT0gXCJicmVha1wiIHx8IHR5cGUgPT09IFwiY29udGludWVcIikgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8IHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMgfHwgKHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yoc2VsZikpID09PSBcIm9iamVjdFwiICYmIHNlbGY7XG4gICAgICAgICAgICAgICAgICAgIH0oKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkpO1xuICAgICAgICAgICAgICAgICAgICAvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1KShtb2R1bGUpKSlcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1vZHVsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5kZXByZWNhdGUgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLnBhdGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImxvYWRlZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnRvUm9tYW5OdW1lcmFscyA9IHRvUm9tYW5OdW1lcmFscztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmFycmF5Qnl0ZUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmFycmF5c1RvQnl0ZXMgPSBhcnJheXNUb0J5dGVzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYXNzZXJ0ID0gYXNzZXJ0O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYnl0ZXNUb1N0cmluZyA9IGJ5dGVzVG9TdHJpbmc7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSA9IGNyZWF0ZVByb21pc2VDYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZGVwcmVjYXRlZCA9IGRlcHJlY2F0ZWQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRJbmhlcml0YWJsZVByb3BlcnR5ID0gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldExvb2t1cFRhYmxlRmFjdG9yeSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldFZlcmJvc2l0eUxldmVsID0gZ2V0VmVyYm9zaXR5TGV2ZWw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pbmZvID0gaW5mbztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzQXJyYXlCdWZmZXIgPSBpc0FycmF5QnVmZmVyO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNCb29sID0gaXNCb29sO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNFbXB0eU9iaiA9IGlzRW1wdHlPYmo7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc051bSA9IGlzTnVtO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzU3BhY2UgPSBpc1NwYWNlO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNTYW1lT3JpZ2luID0gaXNTYW1lT3JpZ2luO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCA9IGNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0xpdHRsZUVuZGlhbiA9IGlzTGl0dGxlRW5kaWFuO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNFdmFsU3VwcG9ydGVkID0gaXNFdmFsU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMubG9nMiA9IGxvZzI7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5yZWFkSW50OCA9IHJlYWRJbnQ4O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVhZFVpbnQxNiA9IHJlYWRVaW50MTY7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5yZWFkVWludDMyID0gcmVhZFVpbnQzMjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbW92ZU51bGxDaGFyYWN0ZXJzID0gcmVtb3ZlTnVsbENoYXJhY3RlcnM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zZXRWZXJib3NpdHlMZXZlbCA9IHNldFZlcmJvc2l0eUxldmVsO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc2hhZG93ID0gc2hhZG93O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RyaW5nMzIgPSBzdHJpbmczMjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnN0cmluZ1RvQnl0ZXMgPSBzdHJpbmdUb0J5dGVzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RyaW5nVG9QREZTdHJpbmcgPSBzdHJpbmdUb1BERlN0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLnN0cmluZ1RvVVRGOFN0cmluZyA9IHN0cmluZ1RvVVRGOFN0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLnV0ZjhTdHJpbmdUb1N0cmluZyA9IHV0ZjhTdHJpbmdUb1N0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLndhcm4gPSB3YXJuO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudW5yZWFjaGFibGUgPSB1bnJlYWNoYWJsZTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWFkYWJsZVN0cmVhbVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdHJlYW1zX3BvbHlmaWxsLlJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVVJMXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3VybF9wb2x5ZmlsbC5VUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGV4cG9ydHMuRm9ybWF0RXJyb3IgPSBleHBvcnRzLlhSZWZQYXJzZUV4Y2VwdGlvbiA9IGV4cG9ydHMuWFJlZkVudHJ5RXhjZXB0aW9uID0gZXhwb3J0cy5VdGlsID0gZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBleHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IGV4cG9ydHMuVGV4dFJlbmRlcmluZ01vZGUgPSBleHBvcnRzLlN0cmVhbVR5cGUgPSBleHBvcnRzLlBlcm1pc3Npb25GbGFnID0gZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IGV4cG9ydHMuUGFzc3dvcmRFeGNlcHRpb24gPSBleHBvcnRzLk5hdGl2ZUltYWdlRGVjb2RpbmcgPSBleHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBleHBvcnRzLk1pc3NpbmdEYXRhRXhjZXB0aW9uID0gZXhwb3J0cy5JbnZhbGlkUERGRXhjZXB0aW9uID0gZXhwb3J0cy5BYm9ydEV4Y2VwdGlvbiA9IGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4cG9ydHMuSW1hZ2VLaW5kID0gZXhwb3J0cy5Gb250VHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvblR5cGUgPSBleHBvcnRzLkFubm90YXRpb25GbGFnID0gZXhwb3J0cy5Bbm5vdGF0aW9uRmllbGRGbGFnID0gZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gZXhwb3J0cy5VTlNVUFBPUlRFRF9GRUFUVVJFUyA9IGV4cG9ydHMuVmVyYm9zaXR5TGV2ZWwgPSBleHBvcnRzLk9QUyA9IGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gZXhwb3J0cy5GT05UX0lERU5USVRZX01BVFJJWCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmVhbXNfcG9seWZpbGwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3VybF9wb2x5ZmlsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ5KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgSURFTlRJVFlfTUFUUklYID0gWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSURFTlRJVFlfTUFUUklYID0gSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgIHZhciBGT05UX0lERU5USVRZX01BVFJJWCA9IFswLjAwMSwgMCwgMCwgMC4wMDEsIDAsIDBdO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuRk9OVF9JREVOVElUWV9NQVRSSVggPSBGT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgICAgICAgICAgICB2YXIgTmF0aXZlSW1hZ2VEZWNvZGluZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgTk9ORTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBERUNPREU6ICdkZWNvZGUnLFxuICAgICAgICAgICAgICAgICAgICBESVNQTEFZOiAnZGlzcGxheSdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuTmF0aXZlSW1hZ2VEZWNvZGluZyA9IE5hdGl2ZUltYWdlRGVjb2Rpbmc7XG4gICAgICAgICAgICAgICAgdmFyIFBlcm1pc3Npb25GbGFnID0ge1xuICAgICAgICAgICAgICAgICAgICBQUklOVDogMHgwNCxcbiAgICAgICAgICAgICAgICAgICAgTU9ESUZZX0NPTlRFTlRTOiAweDA4LFxuICAgICAgICAgICAgICAgICAgICBDT1BZOiAweDEwLFxuICAgICAgICAgICAgICAgICAgICBNT0RJRllfQU5OT1RBVElPTlM6IDB4MjAsXG4gICAgICAgICAgICAgICAgICAgIEZJTExfSU5URVJBQ1RJVkVfRk9STVM6IDB4MTAwLFxuICAgICAgICAgICAgICAgICAgICBDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOiAweDIwMCxcbiAgICAgICAgICAgICAgICAgICAgQVNTRU1CTEU6IDB4NDAwLFxuICAgICAgICAgICAgICAgICAgICBQUklOVF9ISUdIX1FVQUxJVFk6IDB4ODAwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlBlcm1pc3Npb25GbGFnID0gUGVybWlzc2lvbkZsYWc7XG4gICAgICAgICAgICAgICAgdmFyIFRleHRSZW5kZXJpbmdNb2RlID0ge1xuICAgICAgICAgICAgICAgICAgICBGSUxMOiAwLFxuICAgICAgICAgICAgICAgICAgICBTVFJPS0U6IDEsXG4gICAgICAgICAgICAgICAgICAgIEZJTExfU1RST0tFOiAyLFxuICAgICAgICAgICAgICAgICAgICBJTlZJU0lCTEU6IDMsXG4gICAgICAgICAgICAgICAgICAgIEZJTExfQUREX1RPX1BBVEg6IDQsXG4gICAgICAgICAgICAgICAgICAgIFNUUk9LRV9BRERfVE9fUEFUSDogNSxcbiAgICAgICAgICAgICAgICAgICAgRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6IDYsXG4gICAgICAgICAgICAgICAgICAgIEFERF9UT19QQVRIOiA3LFxuICAgICAgICAgICAgICAgICAgICBGSUxMX1NUUk9LRV9NQVNLOiAzLFxuICAgICAgICAgICAgICAgICAgICBBRERfVE9fUEFUSF9GTEFHOiA0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlRleHRSZW5kZXJpbmdNb2RlID0gVGV4dFJlbmRlcmluZ01vZGU7XG4gICAgICAgICAgICAgICAgdmFyIEltYWdlS2luZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgR1JBWVNDQUxFXzFCUFA6IDEsXG4gICAgICAgICAgICAgICAgICAgIFJHQl8yNEJQUDogMixcbiAgICAgICAgICAgICAgICAgICAgUkdCQV8zMkJQUDogM1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5JbWFnZUtpbmQgPSBJbWFnZUtpbmQ7XG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb25UeXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBURVhUOiAxLFxuICAgICAgICAgICAgICAgICAgICBMSU5LOiAyLFxuICAgICAgICAgICAgICAgICAgICBGUkVFVEVYVDogMyxcbiAgICAgICAgICAgICAgICAgICAgTElORTogNCxcbiAgICAgICAgICAgICAgICAgICAgU1FVQVJFOiA1LFxuICAgICAgICAgICAgICAgICAgICBDSVJDTEU6IDYsXG4gICAgICAgICAgICAgICAgICAgIFBPTFlHT046IDcsXG4gICAgICAgICAgICAgICAgICAgIFBPTFlMSU5FOiA4LFxuICAgICAgICAgICAgICAgICAgICBISUdITElHSFQ6IDksXG4gICAgICAgICAgICAgICAgICAgIFVOREVSTElORTogMTAsXG4gICAgICAgICAgICAgICAgICAgIFNRVUlHR0xZOiAxMSxcbiAgICAgICAgICAgICAgICAgICAgU1RSSUtFT1VUOiAxMixcbiAgICAgICAgICAgICAgICAgICAgU1RBTVA6IDEzLFxuICAgICAgICAgICAgICAgICAgICBDQVJFVDogMTQsXG4gICAgICAgICAgICAgICAgICAgIElOSzogMTUsXG4gICAgICAgICAgICAgICAgICAgIFBPUFVQOiAxNixcbiAgICAgICAgICAgICAgICAgICAgRklMRUFUVEFDSE1FTlQ6IDE3LFxuICAgICAgICAgICAgICAgICAgICBTT1VORDogMTgsXG4gICAgICAgICAgICAgICAgICAgIE1PVklFOiAxOSxcbiAgICAgICAgICAgICAgICAgICAgV0lER0VUOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgU0NSRUVOOiAyMSxcbiAgICAgICAgICAgICAgICAgICAgUFJJTlRFUk1BUks6IDIyLFxuICAgICAgICAgICAgICAgICAgICBUUkFQTkVUOiAyMyxcbiAgICAgICAgICAgICAgICAgICAgV0FURVJNQVJLOiAyNCxcbiAgICAgICAgICAgICAgICAgICAgVEhSRUVEOiAyNSxcbiAgICAgICAgICAgICAgICAgICAgUkVEQUNUOiAyNlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uVHlwZSA9IEFubm90YXRpb25UeXBlO1xuICAgICAgICAgICAgICAgIHZhciBBbm5vdGF0aW9uRmxhZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgSU5WSVNJQkxFOiAweDAxLFxuICAgICAgICAgICAgICAgICAgICBISURERU46IDB4MDIsXG4gICAgICAgICAgICAgICAgICAgIFBSSU5UOiAweDA0LFxuICAgICAgICAgICAgICAgICAgICBOT1pPT006IDB4MDgsXG4gICAgICAgICAgICAgICAgICAgIE5PUk9UQVRFOiAweDEwLFxuICAgICAgICAgICAgICAgICAgICBOT1ZJRVc6IDB4MjAsXG4gICAgICAgICAgICAgICAgICAgIFJFQURPTkxZOiAweDQwLFxuICAgICAgICAgICAgICAgICAgICBMT0NLRUQ6IDB4ODAsXG4gICAgICAgICAgICAgICAgICAgIFRPR0dMRU5PVklFVzogMHgxMDAsXG4gICAgICAgICAgICAgICAgICAgIExPQ0tFRENPTlRFTlRTOiAweDIwMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uRmxhZyA9IEFubm90YXRpb25GbGFnO1xuICAgICAgICAgICAgICAgIHZhciBBbm5vdGF0aW9uRmllbGRGbGFnID0ge1xuICAgICAgICAgICAgICAgICAgICBSRUFET05MWTogMHgwMDAwMDAxLFxuICAgICAgICAgICAgICAgICAgICBSRVFVSVJFRDogMHgwMDAwMDAyLFxuICAgICAgICAgICAgICAgICAgICBOT0VYUE9SVDogMHgwMDAwMDA0LFxuICAgICAgICAgICAgICAgICAgICBNVUxUSUxJTkU6IDB4MDAwMTAwMCxcbiAgICAgICAgICAgICAgICAgICAgUEFTU1dPUkQ6IDB4MDAwMjAwMCxcbiAgICAgICAgICAgICAgICAgICAgTk9UT0dHTEVUT09GRjogMHgwMDA0MDAwLFxuICAgICAgICAgICAgICAgICAgICBSQURJTzogMHgwMDA4MDAwLFxuICAgICAgICAgICAgICAgICAgICBQVVNIQlVUVE9OOiAweDAwMTAwMDAsXG4gICAgICAgICAgICAgICAgICAgIENPTUJPOiAweDAwMjAwMDAsXG4gICAgICAgICAgICAgICAgICAgIEVESVQ6IDB4MDA0MDAwMCxcbiAgICAgICAgICAgICAgICAgICAgU09SVDogMHgwMDgwMDAwLFxuICAgICAgICAgICAgICAgICAgICBGSUxFU0VMRUNUOiAweDAxMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIE1VTFRJU0VMRUNUOiAweDAyMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIERPTk9UU1BFTExDSEVDSzogMHgwNDAwMDAwLFxuICAgICAgICAgICAgICAgICAgICBET05PVFNDUk9MTDogMHgwODAwMDAwLFxuICAgICAgICAgICAgICAgICAgICBDT01COiAweDEwMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIFJJQ0hURVhUOiAweDIwMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIFJBRElPU0lOVU5JU09OOiAweDIwMDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIENPTU1JVE9OU0VMQ0hBTkdFOiAweDQwMDAwMDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbkZpZWxkRmxhZyA9IEFubm90YXRpb25GaWVsZEZsYWc7XG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIFNPTElEOiAxLFxuICAgICAgICAgICAgICAgICAgICBEQVNIRUQ6IDIsXG4gICAgICAgICAgICAgICAgICAgIEJFVkVMRUQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIElOU0VUOiA0LFxuICAgICAgICAgICAgICAgICAgICBVTkRFUkxJTkU6IDVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IEFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU7XG4gICAgICAgICAgICAgICAgdmFyIFN0cmVhbVR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIFVOS05PV046IDAsXG4gICAgICAgICAgICAgICAgICAgIEZMQVRFOiAxLFxuICAgICAgICAgICAgICAgICAgICBMWlc6IDIsXG4gICAgICAgICAgICAgICAgICAgIERDVDogMyxcbiAgICAgICAgICAgICAgICAgICAgSlBYOiA0LFxuICAgICAgICAgICAgICAgICAgICBKQklHOiA1LFxuICAgICAgICAgICAgICAgICAgICBBODU6IDYsXG4gICAgICAgICAgICAgICAgICAgIEFIWDogNyxcbiAgICAgICAgICAgICAgICAgICAgQ0NGOiA4LFxuICAgICAgICAgICAgICAgICAgICBSTDogOVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5TdHJlYW1UeXBlID0gU3RyZWFtVHlwZTtcbiAgICAgICAgICAgICAgICB2YXIgRm9udFR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIFVOS05PV046IDAsXG4gICAgICAgICAgICAgICAgICAgIFRZUEUxOiAxLFxuICAgICAgICAgICAgICAgICAgICBUWVBFMUM6IDIsXG4gICAgICAgICAgICAgICAgICAgIENJREZPTlRUWVBFMDogMyxcbiAgICAgICAgICAgICAgICAgICAgQ0lERk9OVFRZUEUwQzogNCxcbiAgICAgICAgICAgICAgICAgICAgVFJVRVRZUEU6IDUsXG4gICAgICAgICAgICAgICAgICAgIENJREZPTlRUWVBFMjogNixcbiAgICAgICAgICAgICAgICAgICAgVFlQRTM6IDcsXG4gICAgICAgICAgICAgICAgICAgIE9QRU5UWVBFOiA4LFxuICAgICAgICAgICAgICAgICAgICBUWVBFMDogOSxcbiAgICAgICAgICAgICAgICAgICAgTU1UWVBFMTogMTBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuRm9udFR5cGUgPSBGb250VHlwZTtcbiAgICAgICAgICAgICAgICB2YXIgVmVyYm9zaXR5TGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIEVSUk9SUzogMCxcbiAgICAgICAgICAgICAgICAgICAgV0FSTklOR1M6IDEsXG4gICAgICAgICAgICAgICAgICAgIElORk9TOiA1XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlZlcmJvc2l0eUxldmVsID0gVmVyYm9zaXR5TGV2ZWw7XG4gICAgICAgICAgICAgICAgdmFyIENNYXBDb21wcmVzc2lvblR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIE5PTkU6IDAsXG4gICAgICAgICAgICAgICAgICAgIEJJTkFSWTogMSxcbiAgICAgICAgICAgICAgICAgICAgU1RSRUFNOiAyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkNNYXBDb21wcmVzc2lvblR5cGUgPSBDTWFwQ29tcHJlc3Npb25UeXBlO1xuICAgICAgICAgICAgICAgIHZhciBPUFMgPSB7XG4gICAgICAgICAgICAgICAgICAgIGRlcGVuZGVuY3k6IDEsXG4gICAgICAgICAgICAgICAgICAgIHNldExpbmVXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgc2V0TGluZUNhcDogMyxcbiAgICAgICAgICAgICAgICAgICAgc2V0TGluZUpvaW46IDQsXG4gICAgICAgICAgICAgICAgICAgIHNldE1pdGVyTGltaXQ6IDUsXG4gICAgICAgICAgICAgICAgICAgIHNldERhc2g6IDYsXG4gICAgICAgICAgICAgICAgICAgIHNldFJlbmRlcmluZ0ludGVudDogNyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmxhdG5lc3M6IDgsXG4gICAgICAgICAgICAgICAgICAgIHNldEdTdGF0ZTogOSxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZTogMTAsXG4gICAgICAgICAgICAgICAgICAgIHJlc3RvcmU6IDExLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IDEyLFxuICAgICAgICAgICAgICAgICAgICBtb3ZlVG86IDEzLFxuICAgICAgICAgICAgICAgICAgICBsaW5lVG86IDE0LFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgY3VydmVUbzI6IDE2LFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvMzogMTcsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlUGF0aDogMTgsXG4gICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZTogMTksXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogMjAsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlU3Ryb2tlOiAyMSxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogMjIsXG4gICAgICAgICAgICAgICAgICAgIGVvRmlsbDogMjMsXG4gICAgICAgICAgICAgICAgICAgIGZpbGxTdHJva2U6IDI0LFxuICAgICAgICAgICAgICAgICAgICBlb0ZpbGxTdHJva2U6IDI1LFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUZpbGxTdHJva2U6IDI2LFxuICAgICAgICAgICAgICAgICAgICBjbG9zZUVPRmlsbFN0cm9rZTogMjcsXG4gICAgICAgICAgICAgICAgICAgIGVuZFBhdGg6IDI4LFxuICAgICAgICAgICAgICAgICAgICBjbGlwOiAyOSxcbiAgICAgICAgICAgICAgICAgICAgZW9DbGlwOiAzMCxcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5UZXh0OiAzMSxcbiAgICAgICAgICAgICAgICAgICAgZW5kVGV4dDogMzIsXG4gICAgICAgICAgICAgICAgICAgIHNldENoYXJTcGFjaW5nOiAzMyxcbiAgICAgICAgICAgICAgICAgICAgc2V0V29yZFNwYWNpbmc6IDM0LFxuICAgICAgICAgICAgICAgICAgICBzZXRIU2NhbGU6IDM1LFxuICAgICAgICAgICAgICAgICAgICBzZXRMZWFkaW5nOiAzNixcbiAgICAgICAgICAgICAgICAgICAgc2V0Rm9udDogMzcsXG4gICAgICAgICAgICAgICAgICAgIHNldFRleHRSZW5kZXJpbmdNb2RlOiAzOCxcbiAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJpc2U6IDM5LFxuICAgICAgICAgICAgICAgICAgICBtb3ZlVGV4dDogNDAsXG4gICAgICAgICAgICAgICAgICAgIHNldExlYWRpbmdNb3ZlVGV4dDogNDEsXG4gICAgICAgICAgICAgICAgICAgIHNldFRleHRNYXRyaXg6IDQyLFxuICAgICAgICAgICAgICAgICAgICBuZXh0TGluZTogNDMsXG4gICAgICAgICAgICAgICAgICAgIHNob3dUZXh0OiA0NCxcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NwYWNlZFRleHQ6IDQ1LFxuICAgICAgICAgICAgICAgICAgICBuZXh0TGluZVNob3dUZXh0OiA0NixcbiAgICAgICAgICAgICAgICAgICAgbmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6IDQ3LFxuICAgICAgICAgICAgICAgICAgICBzZXRDaGFyV2lkdGg6IDQ4LFxuICAgICAgICAgICAgICAgICAgICBzZXRDaGFyV2lkdGhBbmRCb3VuZHM6IDQ5LFxuICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VDb2xvclNwYWNlOiA1MCxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbENvbG9yU3BhY2U6IDUxLFxuICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VDb2xvcjogNTIsXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUNvbG9yTjogNTMsXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGxDb2xvcjogNTQsXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGxDb2xvck46IDU1LFxuICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VHcmF5OiA1NixcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbEdyYXk6IDU3LFxuICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VSR0JDb2xvcjogNTgsXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGxSR0JDb2xvcjogNTksXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUNNWUtDb2xvcjogNjAsXG4gICAgICAgICAgICAgICAgICAgIHNldEZpbGxDTVlLQ29sb3I6IDYxLFxuICAgICAgICAgICAgICAgICAgICBzaGFkaW5nRmlsbDogNjIsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luSW5saW5lSW1hZ2U6IDYzLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkltYWdlRGF0YTogNjQsXG4gICAgICAgICAgICAgICAgICAgIGVuZElubGluZUltYWdlOiA2NSxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRYT2JqZWN0OiA2NixcbiAgICAgICAgICAgICAgICAgICAgbWFya1BvaW50OiA2NyxcbiAgICAgICAgICAgICAgICAgICAgbWFya1BvaW50UHJvcHM6IDY4LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbk1hcmtlZENvbnRlbnQ6IDY5LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbk1hcmtlZENvbnRlbnRQcm9wczogNzAsXG4gICAgICAgICAgICAgICAgICAgIGVuZE1hcmtlZENvbnRlbnQ6IDcxLFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkNvbXBhdDogNzIsXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbXBhdDogNzMsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogNzQsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50Rm9ybVhPYmplY3RFbmQ6IDc1LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkdyb3VwOiA3NixcbiAgICAgICAgICAgICAgICAgICAgZW5kR3JvdXA6IDc3LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkFubm90YXRpb25zOiA3OCxcbiAgICAgICAgICAgICAgICAgICAgZW5kQW5ub3RhdGlvbnM6IDc5LFxuICAgICAgICAgICAgICAgICAgICBiZWdpbkFubm90YXRpb246IDgwLFxuICAgICAgICAgICAgICAgICAgICBlbmRBbm5vdGF0aW9uOiA4MSxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRKcGVnWE9iamVjdDogODIsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdDogODMsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiA4NCxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZVhPYmplY3Q6IDg1LFxuICAgICAgICAgICAgICAgICAgICBwYWludElubGluZUltYWdlWE9iamVjdDogODYsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IDg3LFxuICAgICAgICAgICAgICAgICAgICBwYWludEltYWdlWE9iamVjdFJlcGVhdDogODgsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogODksXG4gICAgICAgICAgICAgICAgICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzazogOTAsXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdFBhdGg6IDkxXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk9QUyA9IE9QUztcbiAgICAgICAgICAgICAgICB2YXIgVU5TVVBQT1JURURfRkVBVFVSRVMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHVua25vd246ICd1bmtub3duJyxcbiAgICAgICAgICAgICAgICAgICAgZm9ybXM6ICdmb3JtcycsXG4gICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHQ6ICdqYXZhU2NyaXB0JyxcbiAgICAgICAgICAgICAgICAgICAgc21hc2s6ICdzbWFzaycsXG4gICAgICAgICAgICAgICAgICAgIHNoYWRpbmdQYXR0ZXJuOiAnc2hhZGluZ1BhdHRlcm4nLFxuICAgICAgICAgICAgICAgICAgICBmb250OiAnZm9udCdcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBVTlNVUFBPUlRFRF9GRUFUVVJFUztcbiAgICAgICAgICAgICAgICB2YXIgUGFzc3dvcmRSZXNwb25zZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIE5FRURfUEFTU1dPUkQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIElOQ09SUkVDVF9QQVNTV09SRDogMlxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IFBhc3N3b3JkUmVzcG9uc2VzO1xuICAgICAgICAgICAgICAgIHZhciB2ZXJib3NpdHkgPSBWZXJib3NpdHlMZXZlbC5XQVJOSU5HUztcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldFZlcmJvc2l0eUxldmVsKGxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGxldmVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5ID0gbGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRWZXJib3NpdHlMZXZlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlcmJvc2l0eTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbmZvKG1zZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLklORk9TKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnSW5mbzogJyArIG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zaXR5ID49IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnV2FybmluZzogJyArIG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZXByZWNhdGVkKGRldGFpbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlcHJlY2F0ZWQgQVBJIHVzYWdlOiAnICsgZGV0YWlscyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdW5yZWFjaGFibGUobXNnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzc2VydChjb25kLCBtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1bnJlYWNoYWJsZShtc2cpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNTYW1lT3JpZ2luKGJhc2VVcmwsIG90aGVyVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZSA9IG5ldyBfdXJsX3BvbHlmaWxsLlVSTChiYXNlVXJsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFiYXNlLm9yaWdpbiB8fCBiYXNlLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBuZXcgX3VybF9wb2x5ZmlsbC5VUkwob3RoZXJVcmwsIGJhc2UpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5vcmlnaW4gPT09IG90aGVyLm9yaWdpbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXNWYWxpZFByb3RvY29sKHVybCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh1cmwucHJvdG9jb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHA6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0dHBzOic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmdHA6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21haWx0bzonOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndGVsOic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh1cmwsIGJhc2VVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhYnNvbHV0ZVVybCA9IGJhc2VVcmwgPyBuZXcgX3VybF9wb2x5ZmlsbC5VUkwodXJsLCBiYXNlVXJsKSA6IG5ldyBfdXJsX3BvbHlmaWxsLlVSTCh1cmwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzVmFsaWRQcm90b2NvbChhYnNvbHV0ZVVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWJzb2x1dGVVcmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNoYWRvdyhvYmosIHByb3AsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRMb29rdXBUYWJsZUZhY3RvcnkoaW5pdGlhbGl6ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbml0aWFsaXplcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIobG9va3VwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb29rdXA7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFBhc3N3b3JkRXhjZXB0aW9uID0gZnVuY3Rpb24gUGFzc3dvcmRFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQYXNzd29yZEV4Y2VwdGlvbihtc2csIGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICdQYXNzd29yZEV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFBhc3N3b3JkRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gUGFzc3dvcmRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXNzd29yZEV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBhc3N3b3JkRXhjZXB0aW9uID0gUGFzc3dvcmRFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgVW5rbm93bkVycm9yRXhjZXB0aW9uID0gZnVuY3Rpb24gVW5rbm93bkVycm9yRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVW5rbm93bkVycm9yRXhjZXB0aW9uKG1zZywgZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ1Vua25vd25FcnJvckV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVW5rbm93bkVycm9yRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBVbmtub3duRXJyb3JFeGNlcHRpb24uY29uc3RydWN0b3IgPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBVbmtub3duRXJyb3JFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Vbmtub3duRXJyb3JFeGNlcHRpb24gPSBVbmtub3duRXJyb3JFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgSW52YWxpZFBERkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIEludmFsaWRQREZFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbnZhbGlkUERGRXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ0ludmFsaWRQREZFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSW52YWxpZFBERkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgSW52YWxpZFBERkV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IEludmFsaWRQREZFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnZhbGlkUERGRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSW52YWxpZFBERkV4Y2VwdGlvbiA9IEludmFsaWRQREZFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgTWlzc2luZ1BERkV4Y2VwdGlvbiA9IGZ1bmN0aW9uIE1pc3NpbmdQREZFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNaXNzaW5nUERGRXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ01pc3NpbmdQREZFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTWlzc2luZ1BERkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgTWlzc2luZ1BERkV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IE1pc3NpbmdQREZFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNaXNzaW5nUERGRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IE1pc3NpbmdQREZFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gZnVuY3Rpb24gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKG1zZywgc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24uY29uc3RydWN0b3IgPSBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBmdW5jdGlvbiBNaXNzaW5nRGF0YUV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1pc3NpbmdEYXRhRXhjZXB0aW9uKGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4gPSBiZWdpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJ01pc3NpbmcgZGF0YSBbJyArIGJlZ2luICsgJywgJyArIGVuZCArICcpJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE1pc3NpbmdEYXRhRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBNaXNzaW5nRGF0YUV4Y2VwdGlvbi5wcm90b3R5cGUubmFtZSA9ICdNaXNzaW5nRGF0YUV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgIE1pc3NpbmdEYXRhRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gTWlzc2luZ0RhdGFFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNaXNzaW5nRGF0YUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLk1pc3NpbmdEYXRhRXhjZXB0aW9uID0gTWlzc2luZ0RhdGFFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgWFJlZkVudHJ5RXhjZXB0aW9uID0gZnVuY3Rpb24gWFJlZkVudHJ5RXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gWFJlZkVudHJ5RXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgWFJlZkVudHJ5RXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBYUmVmRW50cnlFeGNlcHRpb24ucHJvdG90eXBlLm5hbWUgPSAnWFJlZkVudHJ5RXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgWFJlZkVudHJ5RXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gWFJlZkVudHJ5RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWFJlZkVudHJ5RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuWFJlZkVudHJ5RXhjZXB0aW9uID0gWFJlZkVudHJ5RXhjZXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgdmFyIFhSZWZQYXJzZUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIFhSZWZQYXJzZUV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFhSZWZQYXJzZUV4Y2VwdGlvbihtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFhSZWZQYXJzZUV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgWFJlZlBhcnNlRXhjZXB0aW9uLnByb3RvdHlwZS5uYW1lID0gJ1hSZWZQYXJzZUV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgIFhSZWZQYXJzZUV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IFhSZWZQYXJzZUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFhSZWZQYXJzZUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlhSZWZQYXJzZUV4Y2VwdGlvbiA9IFhSZWZQYXJzZUV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBGb3JtYXRFcnJvciA9IGZ1bmN0aW9uIEZvcm1hdEVycm9yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRm9ybWF0RXJyb3IobXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBGb3JtYXRFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgRm9ybWF0RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnRm9ybWF0RXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBGb3JtYXRFcnJvci5jb25zdHJ1Y3RvciA9IEZvcm1hdEVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRm9ybWF0RXJyb3I7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb3JtYXRFcnJvciA9IEZvcm1hdEVycm9yO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFib3J0RXhjZXB0aW9uID0gZnVuY3Rpb24gQWJvcnRFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBYm9ydEV4Y2VwdGlvbihtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICdBYm9ydEV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBYm9ydEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgQWJvcnRFeGNlcHRpb24uY29uc3RydWN0b3IgPSBBYm9ydEV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFib3J0RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQWJvcnRFeGNlcHRpb24gPSBBYm9ydEV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB2YXIgTnVsbENoYXJhY3RlcnNSZWdFeHAgPSAvXFx4MDAvZztcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92ZU51bGxDaGFyYWN0ZXJzKHN0cikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oJ1RoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyLnJlcGxhY2UoTnVsbENoYXJhY3RlcnNSZWdFeHAsICcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBieXRlc1RvU3RyaW5nKGJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChieXRlcyAhPT0gbnVsbCAmJiBfdHlwZW9mKGJ5dGVzKSA9PT0gJ29iamVjdCcgJiYgYnl0ZXMubGVuZ3RoICE9PSB1bmRlZmluZWQsICdJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBieXRlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNQVhfQVJHVU1FTlRfQ09VTlQgPSA4MTkyO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPCBNQVhfQVJHVU1FTlRfQ09VTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHJCdWYgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSBNQVhfQVJHVU1FTlRfQ09VTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua0VuZCA9IE1hdGgubWluKGkgKyBNQVhfQVJHVU1FTlRfQ09VTlQsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBieXRlcy5zdWJhcnJheShpLCBjaHVua0VuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNodW5rKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyQnVmLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2Ygc3RyID09PSAnc3RyaW5nJywgJ0ludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHN0ci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaV0gPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXJyYXlCeXRlTGVuZ3RoKGFycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChhcnIuYnl0ZUxlbmd0aCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyci5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFycmF5c1RvQnl0ZXMoYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID09PSAxICYmIGFyclswXSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICBpaSA9IGFyci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVtLCBpdGVtTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gYXJyW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUxlbmd0aCA9IGFycmF5Qnl0ZUxlbmd0aChpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdExlbmd0aCArPSBpdGVtTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocmVzdWx0TGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGFycltpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaXRlbSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gc3RyaW5nVG9CeXRlcyhpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gbmV3IFVpbnQ4QXJyYXkoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtTGVuZ3RoID0gaXRlbS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXQoaXRlbSwgcG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBpdGVtTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaW5nMzIodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUgPj4gMjQgJiAweGZmLCB2YWx1ZSA+PiAxNiAmIDB4ZmYsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwoTWF0aC5sb2cyKHgpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkSW50OChkYXRhLCBzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtzdGFydF0gPDwgMjQgPj4gMjQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZFVpbnQxNihkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVWludDMyKGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0xpdHRsZUVuZGlhbigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcjggPSBuZXcgVWludDhBcnJheSg0KTtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyOFswXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2aWV3MzIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyOC5idWZmZXIsIDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmlldzMyWzBdID09PSAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXZhbFN1cHBvcnRlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGdW5jdGlvbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gX3JlZi5kaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gX3JlZi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVmJGdldEFycmF5ID0gX3JlZi5nZXRBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEFycmF5ID0gX3JlZiRnZXRBcnJheSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGdldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRzdG9wV2hlbkZvdW5kID0gX3JlZi5zdG9wV2hlbkZvdW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFdoZW5Gb3VuZCA9IF9yZWYkc3RvcFdoZW5Gb3VuZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYkc3RvcFdoZW5Gb3VuZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIExPT1BfTElNSVQgPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb29wQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChkaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnZXRBcnJheSA/IGRpY3QuZ2V0QXJyYXkoa2V5KSA6IGRpY3QuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3BXaGVuRm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbG9vcENvdW50ID4gTE9PUF9MSU1JVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oXCJnZXRJbmhlcml0YWJsZVByb3BlcnR5OiBtYXhpbXVtIGxvb3AgY291bnQgZXhjZWVkZWQgZm9yIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWN0ID0gZGljdC5nZXQoJ1BhcmVudCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgVXRpbCA9IGZ1bmN0aW9uIFV0aWxDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBVdGlsKCkge31cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmdiQnVmID0gWydyZ2IoJywgMCwgJywnLCAwLCAnLCcsIDAsICcpJ107XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC5tYWtlQ3NzUmdiID0gZnVuY3Rpb24gVXRpbF9tYWtlQ3NzUmdiKHIsIGcsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJnYkJ1ZlsxXSA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZ2JCdWZbM10gPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmWzVdID0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZ2JCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC50cmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX3RyYW5zZm9ybShtMSwgbTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbbTFbMF0gKiBtMlswXSArIG0xWzJdICogbTJbMV0sIG0xWzFdICogbTJbMF0gKyBtMVszXSAqIG0yWzFdLCBtMVswXSAqIG0yWzJdICsgbTFbMl0gKiBtMlszXSwgbTFbMV0gKiBtMlsyXSArIG0xWzNdICogbTJbM10sIG0xWzBdICogbTJbNF0gKyBtMVsyXSAqIG0yWzVdICsgbTFbNF0sIG0xWzFdICogbTJbNF0gKyBtMVszXSAqIG0yWzVdICsgbTFbNV1dO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX2FwcGx5VHJhbnNmb3JtKHAsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHl0ID0gcFswXSAqIG1bMV0gKyBwWzFdICogbVszXSArIG1bNV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3h0LCB5dF07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX2FwcGx5SW52ZXJzZVRyYW5zZm9ybShwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHQgPSAocFswXSAqIG1bM10gLSBwWzFdICogbVsyXSArIG1bMl0gKiBtWzVdIC0gbVs0XSAqIG1bM10pIC8gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5dCA9ICgtcFswXSAqIG1bMV0gKyBwWzFdICogbVswXSArIG1bNF0gKiBtWzFdIC0gbVs1XSAqIG1bMF0pIC8gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbeHQsIHl0XTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94ID0gZnVuY3Rpb24gVXRpbF9nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChyLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcDEgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIsIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAyID0gVXRpbC5hcHBseVRyYW5zZm9ybShyLnNsaWNlKDIsIDQpLCBtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMyA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMF0sIHJbM11dLCBtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwNCA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0oW3JbMl0sIHJbMV1dLCBtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbTWF0aC5taW4ocDFbMF0sIHAyWzBdLCBwM1swXSwgcDRbMF0pLCBNYXRoLm1pbihwMVsxXSwgcDJbMV0sIHAzWzFdLCBwNFsxXSksIE1hdGgubWF4KHAxWzBdLCBwMlswXSwgcDNbMF0sIHA0WzBdKSwgTWF0aC5tYXgocDFbMV0sIHAyWzFdLCBwM1sxXSwgcDRbMV0pXTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLmludmVyc2VUcmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX2ludmVyc2VUcmFuc2Zvcm0obSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBtWzBdICogbVszXSAtIG1bMV0gKiBtWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFttWzNdIC8gZCwgLW1bMV0gLyBkLCAtbVsyXSAvIGQsIG1bMF0gLyBkLCAobVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkLCAobVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkXTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLmFwcGx5M2RUcmFuc2Zvcm0gPSBmdW5jdGlvbiBVdGlsX2FwcGx5M2RUcmFuc2Zvcm0obSwgdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFttWzBdICogdlswXSArIG1bMV0gKiB2WzFdICsgbVsyXSAqIHZbMl0sIG1bM10gKiB2WzBdICsgbVs0XSAqIHZbMV0gKyBtWzVdICogdlsyXSwgbVs2XSAqIHZbMF0gKyBtWzddICogdlsxXSArIG1bOF0gKiB2WzJdXTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlID0gZnVuY3Rpb24gVXRpbF9zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNwb3NlID0gW21bMF0sIG1bMl0sIG1bMV0sIG1bM11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBtWzBdICogdHJhbnNwb3NlWzBdICsgbVsxXSAqIHRyYW5zcG9zZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gbVswXSAqIHRyYW5zcG9zZVsxXSArIG1bMV0gKiB0cmFuc3Bvc2VbM107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IG1bMl0gKiB0cmFuc3Bvc2VbMF0gKyBtWzNdICogdHJhbnNwb3NlWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBtWzJdICogdHJhbnNwb3NlWzFdICsgbVszXSAqIHRyYW5zcG9zZVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IChhICsgZCkgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlY29uZCA9IE1hdGguc3FydCgoYSArIGQpICogKGEgKyBkKSAtIDQgKiAoYSAqIGQgLSBjICogYikpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeCA9IGZpcnN0ICsgc2Vjb25kIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3kgPSBmaXJzdCAtIHNlY29uZCB8fCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtNYXRoLnNxcnQoc3gpLCBNYXRoLnNxcnQoc3kpXTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLm5vcm1hbGl6ZVJlY3QgPSBmdW5jdGlvbiBVdGlsX25vcm1hbGl6ZVJlY3QocmVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSByZWN0LnNsaWNlKDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjdFswXSA+IHJlY3RbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByWzBdID0gcmVjdFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByWzJdID0gcmVjdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY3RbMV0gPiByZWN0WzNdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgclsxXSA9IHJlY3RbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgclszXSA9IHJlY3RbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuaW50ZXJzZWN0ID0gZnVuY3Rpb24gVXRpbF9pbnRlcnNlY3QocmVjdDEsIHJlY3QyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21wYXJlKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSAtIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmRlcmVkWCA9IFtyZWN0MVswXSwgcmVjdDFbMl0sIHJlY3QyWzBdLCByZWN0MlsyXV0uc29ydChjb21wYXJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmVkWSA9IFtyZWN0MVsxXSwgcmVjdDFbM10sIHJlY3QyWzFdLCByZWN0MlszXV0uc29ydChjb21wYXJlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QxID0gVXRpbC5ub3JtYWxpemVSZWN0KHJlY3QxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QyID0gVXRpbC5ub3JtYWxpemVSZWN0KHJlY3QyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yZGVyZWRYWzBdID09PSByZWN0MVswXSAmJiBvcmRlcmVkWFsxXSA9PT0gcmVjdDJbMF0gfHwgb3JkZXJlZFhbMF0gPT09IHJlY3QyWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MVswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IG9yZGVyZWRYWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsyXSA9IG9yZGVyZWRYWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlcmVkWVswXSA9PT0gcmVjdDFbMV0gJiYgb3JkZXJlZFlbMV0gPT09IHJlY3QyWzFdIHx8IG9yZGVyZWRZWzBdID09PSByZWN0MlsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDFbMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMV0gPSBvcmRlcmVkWVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbM10gPSBvcmRlcmVkWVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBVdGlsO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuVXRpbCA9IFV0aWw7XG4gICAgICAgICAgICAgICAgdmFyIFJPTUFOX05VTUJFUl9NQVAgPSBbJycsICdDJywgJ0NDJywgJ0NDQycsICdDRCcsICdEJywgJ0RDJywgJ0RDQycsICdEQ0NDJywgJ0NNJywgJycsICdYJywgJ1hYJywgJ1hYWCcsICdYTCcsICdMJywgJ0xYJywgJ0xYWCcsICdMWFhYJywgJ1hDJywgJycsICdJJywgJ0lJJywgJ0lJSScsICdJVicsICdWJywgJ1ZJJywgJ1ZJSScsICdWSUlJJywgJ0lYJ107XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b1JvbWFuTnVtZXJhbHMobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsb3dlckNhc2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBhc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpICYmIG51bWJlciA+IDAsICdUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3MsXG4gICAgICAgICAgICAgICAgICAgICAgICByb21hbkJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChudW1iZXIgPj0gMTAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIC09IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICByb21hbkJ1Zi5wdXNoKCdNJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwb3MgPSBudW1iZXIgLyAxMDAgfCAwO1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgJT0gMTAwO1xuICAgICAgICAgICAgICAgICAgICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbcG9zXSk7XG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IG51bWJlciAvIDEwIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyICU9IDEwO1xuICAgICAgICAgICAgICAgICAgICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbMTAgKyBwb3NdKTtcbiAgICAgICAgICAgICAgICAgICAgcm9tYW5CdWYucHVzaChST01BTl9OVU1CRVJfTUFQWzIwICsgbnVtYmVyXSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByb21hblN0ciA9IHJvbWFuQnVmLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXJDYXNlID8gcm9tYW5TdHIudG9Mb3dlckNhc2UoKSA6IHJvbWFuU3RyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZSA9IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDJEOCwgMHgyQzcsIDB4MkM2LCAweDJEOSwgMHgyREQsIDB4MkRCLCAweDJEQSwgMHgyREMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MjAyMiwgMHgyMDIwLCAweDIwMjEsIDB4MjAyNiwgMHgyMDE0LCAweDIwMTMsIDB4MTkyLCAweDIwNDQsIDB4MjAzOSwgMHgyMDNBLCAweDIyMTIsIDB4MjAzMCwgMHgyMDFFLCAweDIwMUMsIDB4MjAxRCwgMHgyMDE4LCAweDIwMTksIDB4MjAxQSwgMHgyMTIyLCAweEZCMDEsIDB4RkIwMiwgMHgxNDEsIDB4MTUyLCAweDE2MCwgMHgxNzgsIDB4MTdELCAweDEzMSwgMHgxNDIsIDB4MTUzLCAweDE2MSwgMHgxN0UsIDAsIDB4MjBBQ107XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJpbmdUb1BERlN0cmluZyhzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RyLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJbMF0gPT09ICdcXHhGRScgJiYgc3RyWzFdID09PSAnXFx4RkYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAyOyBpIDwgbjsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShzdHIuY2hhckNvZGVBdChpKSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSArIDEpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBQREZTdHJpbmdUcmFuc2xhdGVUYWJsZVtzdHIuY2hhckNvZGVBdChpKV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goY29kZSA/IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkgOiBzdHIuY2hhckF0KGkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaW5nVG9VVEY4U3RyaW5nKHN0cikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShzdHIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1dGY4U3RyaW5nVG9TdHJpbmcoc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNFbXB0eU9iaihvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNCb29sKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnYm9vbGVhbic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNOdW0odikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdudW1iZXInO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzU3RyaW5nKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YodikgPT09ICdvYmplY3QnICYmIHYgIT09IG51bGwgJiYgdi5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNTcGFjZShjaCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2ggPT09IDB4MjAgfHwgY2ggPT09IDB4MDkgfHwgY2ggPT09IDB4MEQgfHwgY2ggPT09IDB4MEE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzU2V0dGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2FwYWJpbGl0eSwgJ3NldHRsZWQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNTZXR0bGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdCA9IGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVPYmplY3RVUkwgPSBmdW5jdGlvbiBjcmVhdGVPYmplY3RVUkxDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGlnaXRzID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTChkYXRhLCBjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlRGF0YVNjaGVtYSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9yY2VEYXRhU2NoZW1hICYmIF91cmxfcG9seWZpbGwuVVJMLmNyZWF0ZU9iamVjdFVSTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9iID0gbmV3IEJsb2IoW2RhdGFdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGNvbnRlbnRUeXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF91cmxfcG9seWZpbGwuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9ICdkYXRhOicgKyBjb250ZW50VHlwZSArICc7YmFzZTY0LCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMSA9IGRhdGFbaV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMiA9IGRhdGFbaSArIDFdICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjMgPSBkYXRhW2kgKyAyXSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQxID0gYjEgPj4gMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZDIgPSAoYjEgJiAzKSA8PCA0IHwgYjIgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZDMgPSBpICsgMSA8IGlpID8gKGIyICYgMHhGKSA8PCAyIHwgYjMgPj4gNiA6IDY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkNCA9IGkgKyAyIDwgaWkgPyBiMyAmIDB4M0YgOiA2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gZGlnaXRzW2QxXSArIGRpZ2l0c1tkMl0gKyBkaWdpdHNbZDNdICsgZGlnaXRzW2Q0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZU9iamVjdFVSTCA9IGNyZWF0ZU9iamVjdFVSTDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsU2NvcGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFnbG9iYWxTY29wZS5fZXh0cmFjdGhpZ2hsaWdodHNDb21wYXRpYmlsaXR5Q2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICBnbG9iYWxTY29wZS5fZXh0cmFjdGhpZ2hsaWdodHNDb21wYXRpYmlsaXR5Q2hlY2tlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzTm9kZUpTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzRE9NID0gKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZih3aW5kb3cpKSA9PT0gJ29iamVjdCcgJiYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKGRvY3VtZW50KSkgPT09ICdvYmplY3QnO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja05vZGVCdG9hKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLmJ0b2EgfHwgIWlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLmJ0b2EgPSBmdW5jdGlvbiAoY2hhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oY2hhcnMsICdiaW5hcnknKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja05vZGVBdG9iKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLmF0b2IgfHwgIWlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLmF0b2IgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oaW5wdXQsICdiYXNlNjQnKS50b1N0cmluZygnYmluYXJ5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja0NoaWxkTm9kZVJlbW92ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRE9NKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja0RPTVRva2VuTGlzdEFkZFJlbW92ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRE9NIHx8IGlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdi5jbGFzc0xpc3QuYWRkKCd0ZXN0T25lJywgJ3Rlc3RUd28nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdi5jbGFzc0xpc3QuY29udGFpbnMoJ3Rlc3RPbmUnKSA9PT0gdHJ1ZSAmJiBkaXYuY2xhc3NMaXN0LmNvbnRhaW5zKCd0ZXN0VHdvJykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBPcmlnaW5hbERPTVRva2VuTGlzdEFkZCA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE9yaWdpbmFsRE9NVG9rZW5MaXN0UmVtb3ZlID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB0b2tlbnMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vuc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdG9rZW5zLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbERPTVRva2VuTGlzdEFkZC5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHRva2VucyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbnNbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCB0b2tlbnMubGVuZ3RoOyBfaTIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0b2tlbnNbX2kyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2luYWxET01Ub2tlbkxpc3RSZW1vdmUuY2FsbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tET01Ub2tlbkxpc3RUb2dnbGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0RPTSB8fCBpc05vZGVKUygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXYuY2xhc3NMaXN0LnRvZ2dsZSgndGVzdCcsIDApID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS50b2dnbGUgPSBmdW5jdGlvbiAodG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/ICEhYXJndW1lbnRzWzFdIDogIXRoaXMuY29udGFpbnModG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2ZvcmNlID8gJ2FkZCcgOiAncmVtb3ZlJ10odG9rZW4pLCBmb3JjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3RyaW5nU3RhcnRzV2l0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1N0cmluZ0VuZHNXaXRoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDApO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1N0cmluZ0luY2x1ZGVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDIpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja0FycmF5SW5jbHVkZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ0KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tBcnJheUZyb20oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuZnJvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrT2JqZWN0QXNzaWduKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5hc3NpZ24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzQpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja01hdGhMb2cyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE1hdGgubG9nMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5sb2cyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3OSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrTnVtYmVySXNOYU4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIuaXNOYU4gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgxKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tOdW1iZXJJc0ludGVnZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLmlzSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODMpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1Byb21pc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuUHJvbWlzZSAmJiBnbG9iYWxTY29wZS5Qcm9taXNlLnByb3RvdHlwZSAmJiBnbG9iYWxTY29wZS5Qcm9taXNlLnByb3RvdHlwZS5maW5hbGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTY29wZS5Qcm9taXNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nik7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrV2Vha01hcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxTY29wZS5XZWFrTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTY29wZS5XZWFrTWFwID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDYpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1dlYWtTZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuV2Vha1NldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuV2Vha1NldCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdDb2RlUG9pbnRBdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcuY29kZVBvaW50QXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy5jb2RlUG9pbnRBdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI3KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdGcm9tQ29kZVBvaW50KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5mcm9tQ29kZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNvZGVQb2ludCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI5KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTeW1ib2woKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuU3ltYm9sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzMSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3RyaW5nUGFkU3RhcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzgpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1N0cmluZ1BhZEVuZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcucHJvdG90eXBlLnBhZEVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDIpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja09iamVjdFZhbHVlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QudmFsdWVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDQpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT09IE1hdGggPyB3aW5kb3cgOiB0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwuTWF0aCA9PT0gTWF0aCA/IGdsb2JhbCA6IHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT09IE1hdGggPyBzZWxmIDoge307XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc05vZGVKUygpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKHByb2Nlc3MpKSA9PT0gJ29iamVjdCcgJiYgcHJvY2VzcyArICcnID09PSAnW29iamVjdCBwcm9jZXNzXScgJiYgIXByb2Nlc3MudmVyc2lvbnNbJ253J107XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuU3RyaW5nLnN0YXJ0c1dpdGg7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMyKTtcblxuICAgICAgICAgICAgICAgIHZhciBTVEFSVFNfV0lUSCA9ICdzdGFydHNXaXRoJztcbiAgICAgICAgICAgICAgICB2YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM5KShTVEFSVFNfV0lUSCksICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0c1dpdGg6IGZ1bmN0aW9uIHN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkc3RhcnRzV2l0aCA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleCkgOiB0aGF0LnNsaWNlKGluZGV4LCBpbmRleCArIHNlYXJjaC5sZW5ndGgpID09PSBzZWFyY2g7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29yZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBmdW5jdGlvbiAkZXhwb3J0KHR5cGUsIG5hbWUsIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIElTX0dMT0JBTCA9IHR5cGUgJiAkZXhwb3J0Lkc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfUFJPVE8gPSB0eXBlICYgJGV4cG9ydC5QO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfQklORCA9IHR5cGUgJiAkZXhwb3J0LkI7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gfHwgKGdsb2JhbFtuYW1lXSA9IHt9KSA6IChnbG9iYWxbbmFtZV0gfHwge30pW1BST1RPVFlQRV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBvcnRzID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBQcm90byA9IGV4cG9ydHNbUFJPVE9UWVBFXSB8fCAoZXhwb3J0c1tQUk9UT1RZUEVdID0ge30pO1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5LCBvd24sIG91dCwgZXhwO1xuICAgICAgICAgICAgICAgICAgICBpZiAoSVNfR0xPQkFMKSBzb3VyY2UgPSBuYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX1BST1RPICYmIGV4cFByb3RvW2tleV0gIT0gb3V0KSBleHBQcm90b1trZXldID0gb3V0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGdsb2JhbC5jb3JlID0gY29yZTtcbiAgICAgICAgICAgICAgICAkZXhwb3J0LkYgPSAxO1xuICAgICAgICAgICAgICAgICRleHBvcnQuRyA9IDI7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5TID0gNDtcbiAgICAgICAgICAgICAgICAkZXhwb3J0LlAgPSA4O1xuICAgICAgICAgICAgICAgICRleHBvcnQuQiA9IDE2O1xuICAgICAgICAgICAgICAgICRleHBvcnQuVyA9IDMyO1xuICAgICAgICAgICAgICAgICRleHBvcnQuVSA9IDY0O1xuICAgICAgICAgICAgICAgICRleHBvcnQuUiA9IDEyODtcbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjYuMidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNyZWF0ZURlc2MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI0KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCkgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElFOF9ET01fREVGSU5FID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIzKTtcblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmYgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIwKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YoaXQpID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAhX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCkgJiYgIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIyKSgnZGl2JyksICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmEgIT0gNztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9ICFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmEgIT0gNztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFleGVjKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBkb2N1bWVudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpLmRvY3VtZW50O1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuLCB2YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBoaWRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgU1JDID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNykoJ3NyYycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG4gICAgICAgICAgICAgICAgdmFyICR0b1N0cmluZyA9IEZ1bmN0aW9uW1RPX1NUUklOR107XG4gICAgICAgICAgICAgICAgdmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9ba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIE9ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgT1trZXldID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZShPLCBrZXksIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhRnVuY3Rpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDI5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JbnRlZ2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW47XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjZWlsID0gTWF0aC5jZWlsO1xuICAgICAgICAgICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc1JlZ0V4cCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM0KTtcblxuICAgICAgICAgICAgICAgIHZhciBNQVRDSCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdtYXRjaCcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVnRXhwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM2KSgnd2tzJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdWlkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX1N5bWJvbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpLlN5bWJvbDtcblxuICAgICAgICAgICAgICAgIHZhciBVU0VfU1lNQk9MID0gdHlwZW9mIF9TeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3JlW25hbWVdIHx8IChzdG9yZVtuYW1lXSA9IFVTRV9TWU1CT0wgJiYgX1N5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IF9TeW1ib2wgOiB1aWQpKCdTeW1ib2wuJyArIG5hbWUpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY29yZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xuICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbiAgICAgICAgICAgICAgICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbiAgICAgICAgICAgICAgICB9KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgICAgICAgICAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIE1BVENIID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNSkoJ21hdGNoJyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gLy4vO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnLy4vJ1tLRVldKHJlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZikge31cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDQwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0MSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpLlN0cmluZy5lbmRzV2l0aDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG4gICAgICAgICAgICAgICAgdmFyICRlbmRzV2l0aCA9ICcnW0VORFNfV0lUSF07XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM5KShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICAgICAgICAgICAgICAgICAgICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZFBvc2l0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGVuZHNXaXRoID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpIDogdGhhdC5zbGljZShlbmQgLSBzZWFyY2gubGVuZ3RoLCBlbmQpID09PSBzZWFyY2g7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuU3RyaW5nLmluY2x1ZGVzO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzkpKElOQ0xVREVTKSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUykuaW5kZXhPZihzZWFyY2hTdHJpbmcsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5BcnJheS5pbmNsdWRlcztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRpbmNsdWRlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDYpKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTApKCdpbmNsdWRlcycpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0b0lPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ3KTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDkpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGZvciAoOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM0KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDQ5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4O1xuICAgICAgICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbjtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBVTlNDT1BBQkxFUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCd1bnNjb3BhYmxlcycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSkoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTIpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpLkFycmF5LmZyb207XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDUyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRhdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTMpKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1NCkoU3RyaW5nLCAnU3RyaW5nJywgZnVuY3Rpb24gKGl0ZXJhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3QgPSBTdHJpbmcoaXRlcmF0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pID0gMDtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPID0gdGhpcy5fdDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50O1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBwb2ludCA9ICRhdChPLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2kgKz0gcG9pbnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JbnRlZ2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gdG9JbnRlZ2VyKHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEsIGI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsKSByZXR1cm4gVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmYgPyBUT19TVFJJTkcgPyBzLmNoYXJBdChpKSA6IGEgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgTElCUkFSWSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzcpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KTtcblxuICAgICAgICAgICAgICAgIHZhciBJdGVyYXRvcnMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU1KTtcblxuICAgICAgICAgICAgICAgIHZhciAkaXRlckNyZWF0ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNldFRvU3RyaW5nVGFnID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0UHJvdG90eXBlT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY1KTtcblxuICAgICAgICAgICAgICAgIHZhciBJVEVSQVRPUiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdpdGVyYXRvcicpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEJVR0dZID0gIShbXS5rZXlzICYmICduZXh0JyBpbiBbXS5rZXlzKCkpO1xuICAgICAgICAgICAgICAgIHZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbiAgICAgICAgICAgICAgICB2YXIgS0VZUyA9ICdrZXlzJztcbiAgICAgICAgICAgICAgICB2YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uIHJldHVyblRoaXMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChCYXNlLCBOQU1FLCBDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgJGl0ZXJDcmVhdGUoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiBnZXRNZXRob2Qoa2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgS0VZUzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBWQUxVRVM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICAgICAgICAgICAgICAgICAgICB2YXIgREVGX1ZBTFVFUyA9IERFRkFVTFQgPT0gVkFMVUVTO1xuICAgICAgICAgICAgICAgICAgICB2YXIgVkFMVUVTX0JVRyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSBCYXNlLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRuYXRpdmUgPSBwcm90b1tJVEVSQVRPUl0gfHwgcHJvdG9bRkZfSVRFUkFUT1JdIHx8IERFRkFVTFQgJiYgcHJvdG9bREVGQVVMVF07XG4gICAgICAgICAgICAgICAgICAgIHZhciAkZGVmYXVsdCA9ICRuYXRpdmUgfHwgZ2V0TWV0aG9kKERFRkFVTFQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGVudHJpZXMgPSBERUZBVUxUID8gIURFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZCgnZW50cmllcycpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGFueU5hdGl2ZSA9IE5BTUUgPT0gJ0FycmF5JyA/IHByb3RvLmVudHJpZXMgfHwgJG5hdGl2ZSA6ICRuYXRpdmU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2RzLCBrZXksIEl0ZXJhdG9yUHJvdG90eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICgkYW55TmF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBJdGVyYXRvclByb3RvdHlwZS5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFMSUJSQVJZICYmIHR5cGVvZiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0gIT0gJ2Z1bmN0aW9uJykgaGlkZShJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIHJldHVyblRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUVTX0JVRyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCghTElCUkFSWSB8fCBGT1JDRUQpICYmIChCVUdHWSB8fCBWQUxVRVNfQlVHIHx8ICFwcm90b1tJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoREVGQVVMVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJpZXM6ICRlbnRyaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZHM7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU3KTtcblxuICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY0KTtcblxuICAgICAgICAgICAgICAgIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSkoSXRlcmF0b3JQcm90b3R5cGUsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBkZXNjcmlwdG9yKDEsIG5leHQpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZXRUb1N0cmluZ1RhZyhDb25zdHJ1Y3RvciwgTkFNRSArICcgSXRlcmF0b3InKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRQcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGVudW1CdWdLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSUVfUFJPVE8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYxKSgnSUVfUFJPVE8nKTtcblxuICAgICAgICAgICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG5cbiAgICAgICAgICAgICAgICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZURpY3QgPSBmdW5jdGlvbiBjcmVhdGVEaWN0KCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaWZyYW1lID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMikoJ2lmcmFtZScpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbHQgPSAnPCc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBndCA9ICc+JztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlmcmFtZURvY3VtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYzKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonO1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBfY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlRGljdCgpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoTyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IEVtcHR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmVzdWx0ID0gX2NyZWF0ZURpY3QoKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvcGVydGllcyA9PT0gdW5kZWZpbmVkID8gcmVzdWx0IDogZFBzKHJlc3VsdCwgUHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZFAgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KTtcblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCkgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFA7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRQLmYoTywgUCA9IGtleXNbaSsrXSwgUHJvcGVydGllc1tQXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAka2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGVudW1CdWdLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Mik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGtleXMoTywgZW51bUJ1Z0tleXMpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGhhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFycmF5SW5kZXhPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDYpKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgIHZhciBJRV9QUk9UTyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjEpKCdJRV9QUk9UTycpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB+YXJyYXlJbmRleE9mKHJlc3VsdCwga2V5KSB8fCByZXN1bHQucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA2MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBzaGFyZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM2KSgna2V5cycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHVpZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9ICdjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YnLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRvY3VtZW50ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMykuZG9jdW1lbnQ7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNikuZjtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI2KTtcblxuICAgICAgICAgICAgICAgIHZhciBUQUcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgndG9TdHJpbmdUYWcnKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGFnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGhhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSUVfUFJPVE8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYxKSgnSUVfUFJPVE8nKTtcblxuICAgICAgICAgICAgICAgIHZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICAgICAgICAgICAgICAgICAgICBPID0gdG9PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNhbGwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY4KTtcblxuICAgICAgICAgICAgICAgIHZhciBpc0FycmF5SXRlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlUHJvcGVydHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcwKTtcblxuICAgICAgICAgICAgICAgIHZhciBnZXRJdGVyRm4gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcxKTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzMpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20oaXRlcik7XG4gICAgICAgICAgICAgICAgfSksICdBcnJheScsIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbTogZnVuY3Rpb24gZnJvbShhcnJheUxpa2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVyRm4gPSBnZXRJdGVyRm4oTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgcmVzdWx0ID0gbmV3IEMoKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBjYWxsKGl0ZXJhdG9yLCBtYXBmbiwgW3N0ZXAudmFsdWUsIGluZGV4XSwgdHJ1ZSkgOiBzdGVwLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV0ID0gaXRlcmF0b3JbJ3JldHVybiddO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElURVJBVE9SID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNSkoJ2l0ZXJhdG9yJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGRlZmluZVByb3BlcnR5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlRGVzYyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO2Vsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDcxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcyKTtcblxuICAgICAgICAgICAgICAgIHZhciBJVEVSQVRPUiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdpdGVyYXRvcicpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdIHx8IGl0WydAQGl0ZXJhdG9yJ10gfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM0KTtcblxuICAgICAgICAgICAgICAgIHZhciBUQUcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgndG9TdHJpbmdUYWcnKTtcblxuICAgICAgICAgICAgICAgIHZhciBBUkcgPSBjb2YoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJndW1lbnRzO1xuICAgICAgICAgICAgICAgIH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbiAgICAgICAgICAgICAgICB2YXIgdHJ5R2V0ID0gZnVuY3Rpb24gdHJ5R2V0KGl0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdFtrZXldO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTywgVCwgQjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnIDogdHlwZW9mIChUID0gdHJ5R2V0KE8gPSBPYmplY3QoaXQpLCBUQUcpKSA9PSAnc3RyaW5nJyA/IFQgOiBBUkcgPyBjb2YoTykgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgSVRFUkFUT1IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgnaXRlcmF0b3InKTtcblxuICAgICAgICAgICAgICAgIHZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByaXRlciA9IFs3XVtJVEVSQVRPUl0oKTtcblxuICAgICAgICAgICAgICAgICAgICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IDI7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNhZmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyciA9IFs3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogc2FmZSA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMoYXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2FmZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5PYmplY3QuYXNzaWduO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiwgJ09iamVjdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduOiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc2KVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBJRSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMSkoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgQSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgQiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgUyA9IFN5bWJvbCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gICAgICAgICAgICAgICAgICAgIEFbU10gPSA3O1xuICAgICAgICAgICAgICAgICAgICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBCW2tdID0gaztcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkYXNzaWduKHt9LCBBKVtTXSAhPSA3IHx8IE9iamVjdC5rZXlzKCRhc3NpZ24oe30sIEIpKS5qb2luKCcnKSAhPSBLO1xuICAgICAgICAgICAgICAgIH0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTID0gSU9iamVjdChhcmd1bWVudHNbaW5kZXgrK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGogPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aCA+IGopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnVtLmNhbGwoUywga2V5ID0ga2V5c1tqKytdKSkgVFtrZXldID0gU1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFQ7XG4gICAgICAgICAgICAgICAgfSA6ICRhc3NpZ247XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDc3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuTWF0aC5sb2cyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gICAgICAgICAgICAgICAgICAgIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgyKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuTnVtYmVyLmlzTmFOO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg0KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuTnVtYmVyLmlzSW50ZWdlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gICAgICAgICAgICAgICAgICAgIGlzSW50ZWdlcjogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4NSlcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODcpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1Mik7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTEpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDQpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5Qcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjbGFzc29mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IHt9O1xuICAgICAgICAgICAgICAgIHRlc3RbX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNSkoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSkoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KTtcblxuICAgICAgICAgICAgICAgIHZhciBJdGVyYXRvcnMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU1KTtcblxuICAgICAgICAgICAgICAgIHZhciB3a3MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KTtcblxuICAgICAgICAgICAgICAgIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgICAgICAgICAgICAgICB2YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgICAgICAgICAgICAgICB2YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG4gICAgICAgICAgICAgICAgdmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgQ1NTUnVsZUxpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIENTU1N0eWxlRGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBDU1NWYWx1ZUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBDbGllbnRSZWN0TGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIERPTVJlY3RMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgRE9NU3RyaW5nTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIERPTVRva2VuTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgRGF0YVRyYW5zZmVySXRlbUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBGaWxlTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIEhUTUxBbGxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgSFRNTENvbGxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBIVE1MRm9ybUVsZW1lbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBIVE1MU2VsZWN0RWxlbWVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIE1lZGlhTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIE5vZGVMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgUGx1Z2luOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU3R5bGVTaGVldExpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgVG91Y2hMaXN0OiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2xsZWN0aW9ucyA9IGdldEtleXMoRE9NSXRlcmFibGVzKSwgaSA9IDA7IGkgPCBjb2xsZWN0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTkFNRSA9IGNvbGxlY3Rpb25zW2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXhwbGljaXQgPSBET01JdGVyYWJsZXNbTkFNRV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBDb2xsZWN0aW9uID0gZ2xvYmFsW05BTUVdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSBDb2xsZWN0aW9uICYmIENvbGxlY3Rpb24ucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm90bykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvW1RPX1NUUklOR19UQUddKSBoaWRlKHByb3RvLCBUT19TVFJJTkdfVEFHLCBOQU1FKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhZGRUb1Vuc2NvcGFibGVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU0KShBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3QgPSB0b0lPYmplY3QoaXRlcmF0ZWQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fayA9IGtpbmQ7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IHRoaXMuX3Q7XG4gICAgICAgICAgICAgICAgICAgIHZhciBraW5kID0gdGhpcy5faztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5faSsrO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbiAgICAgICAgICAgICAgICB9LCAndmFsdWVzJyk7XG4gICAgICAgICAgICAgICAgSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcbiAgICAgICAgICAgICAgICBhZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG4gICAgICAgICAgICAgICAgYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG4gICAgICAgICAgICAgICAgYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRvbmUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lOiAhIWRvbmVcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBMSUJSQVJZID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NvZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzIpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFGdW5jdGlvbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuSW5zdGFuY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkyKTtcblxuICAgICAgICAgICAgICAgIHZhciBmb3JPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk1KS5zZXQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWljcm90YXNrID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5NykoKTtcblxuICAgICAgICAgICAgICAgIHZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBlcmZvcm0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk5KTtcblxuICAgICAgICAgICAgICAgIHZhciB1c2VyQWdlbnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUFJPTUlTRSA9ICdQcm9taXNlJztcbiAgICAgICAgICAgICAgICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9ucyA9IHByb2Nlc3MgJiYgcHJvY2Vzcy52ZXJzaW9ucztcbiAgICAgICAgICAgICAgICB2YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbiAgICAgICAgICAgICAgICB2YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG4gICAgICAgICAgICAgICAgdmFyIGlzTm9kZSA9IGNsYXNzb2YocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4gICAgICAgICAgICAgICAgdmFyIGVtcHR5ID0gZnVuY3Rpb24gZW1wdHkoKSB7fTtcblxuICAgICAgICAgICAgICAgIHZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbiAgICAgICAgICAgICAgICB2YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuICAgICAgICAgICAgICAgIHZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9ICRQcm9taXNlLnJlc29sdmUoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW19fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpICYmIHByb21pc2UudGhlbihlbXB0eSkgaW5zdGFuY2VvZiBGYWtlUHJvbWlzZSAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMCAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gaXNUaGVuYWJsZShpdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGhlbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzT2JqZWN0KGl0KSAmJiB0eXBlb2YgKHRoZW4gPSBpdC50aGVuKSA9PSAnZnVuY3Rpb24nID8gdGhlbiA6IGZhbHNlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KHByb21pc2UsIGlzUmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UuX24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICAgICAgICAgICAgICAgICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ1biA9IGZ1bmN0aW9uIHJ1bihyZWFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gb2sgPyByZWFjdGlvbi5vayA6IHJlYWN0aW9uLmZhaWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IHJlYWN0aW9uLmRvbWFpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWFpbikgZG9tYWluLmVudGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGFpbi5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuKGNoYWluW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9jID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWplY3QgJiYgIXByb21pc2UuX2gpIG9uVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gb25VbmhhbmRsZWQocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCwgaGFuZGxlciwgY29uc29sZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlOiBwcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQgJiYgcmVzdWx0LmUpIHRocm93IHJlc3VsdC52O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gaXNVbmhhbmRsZWQocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS5faCAhPT0gMSAmJiAocHJvbWlzZS5fYSB8fCBwcm9taXNlLl9jKS5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnJlamVjdGlvbmhhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiBwcm9taXNlLl92XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJHJlamVjdCA9IGZ1bmN0aW9uICRyZWplY3QodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9zID0gMjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwcm9taXNlLl9hKSBwcm9taXNlLl9hID0gcHJvbWlzZS5fYy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICBub3RpZnkocHJvbWlzZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICRyZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoZW47XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9taXNlLl9kKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UuX2QgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS5fdyB8fCBwcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHRocm93IFR5cGVFcnJvcihcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdzogcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuLmNhbGwodmFsdWUsIGN0eCgkcmVzb2x2ZSwgd3JhcHBlciwgMSksIGN0eCgkcmVqZWN0LCB3cmFwcGVyLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl92ID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJHJlamVjdC5jYWxsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdzogcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghVVNFX05BVElWRSkge1xuICAgICAgICAgICAgICAgICAgICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuSW5zdGFuY2UodGhpcywgJFByb21pc2UsIFBST01JU0UsICdfaCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsLmNhbGwodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0b3IoY3R4KCRyZXNvbHZlLCB0aGlzLCAxKSwgY3R4KCRyZWplY3QsIHRoaXMsIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWplY3QuY2FsbCh0aGlzLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEludGVybmFsLnByb3RvdHlwZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAyKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gT3duUHJvbWlzZUNhcGFiaWxpdHkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlciA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKSA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7XG4gICAgICAgICAgICAgICAgICAgIFByb21pc2U6ICRQcm9taXNlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY0KSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMykoUFJPTUlTRSk7XG5cbiAgICAgICAgICAgICAgICBXcmFwcGVyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNClbUFJPTUlTRV07XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgUFJPTUlTRSwge1xuICAgICAgICAgICAgICAgICAgICByZWplY3Q6IGZ1bmN0aW9uIHJlamVjdChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAkJHJlamVjdChyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3MykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbiAgICAgICAgICAgICAgICB9KSksIFBST01JU0UsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxyZWFkeUNhbGxlZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmFjZTogZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGNhcGFiaWxpdHkucmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjdHggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI4KTtcblxuICAgICAgICAgICAgICAgIHZhciBjYWxsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNBcnJheUl0ZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY5KTtcblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0SXRlckZuID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQlJFQUsgPSB7fTtcbiAgICAgICAgICAgICAgICB2YXIgUkVUVVJOID0ge307XG5cbiAgICAgICAgICAgICAgICB2YXIgX2V4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgfSA6IGdldEl0ZXJGbihpdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmID0gY3R4KGZuLCB0aGF0LCBlbnRyaWVzID8gMiA6IDEpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoLCBzdGVwLCBpdGVyYXRvciwgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZXJGbiAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXRlcmFibGUgKyAnIGlzIG5vdCBpdGVyYWJsZSEnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IEJSRUFLIHx8IHJlc3VsdCA9PT0gUkVUVVJOKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKGl0ZXJhYmxlKTsgIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBfZXhwb3J0cy5CUkVBSyA9IEJSRUFLO1xuICAgICAgICAgICAgICAgIF9leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3KTtcblxuICAgICAgICAgICAgICAgIHZhciBhRnVuY3Rpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIHZhciBTUEVDSUVTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNSkoJ3NwZWNpZXMnKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFM7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjdHggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI4KTtcblxuICAgICAgICAgICAgICAgIHZhciBpbnZva2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk2KTtcblxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2VsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuICAgICAgICAgICAgICAgIHZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgICAgICAgICB2YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuICAgICAgICAgICAgICAgIHZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbiAgICAgICAgICAgICAgICB2YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIHZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbiAgICAgICAgICAgICAgICB2YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSArdGhpcztcblxuICAgICAgICAgICAgICAgICAgICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBydW4uY2FsbChldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcihjb3VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM0KShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBmdW5jdGlvbiBkZWZlcihpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlciA9IGZ1bmN0aW9uIGRlZmVyKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogc2V0VGFzayxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXI6IGNsZWFyVGFza1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDk2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW4gPyBmbigpIDogZm4uY2FsbCh0aGF0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBtYWNyb3Rhc2sgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk1KS5zZXQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuICAgICAgICAgICAgICAgIHZhciBQcm9taXNlID0gZ2xvYmFsLlByb21pc2U7XG4gICAgICAgICAgICAgICAgdmFyIGlzTm9kZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzQpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBmbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudCwgZm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChoZWFkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO2Vsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9nZ2xlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5ID0gZnVuY3Rpb24gbm90aWZ5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGF0YSA9IHRvZ2dsZSA9ICF0b2dnbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhc2sgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IGZuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0KSBsYXN0Lm5leHQgPSB0YXNrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWhlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gdGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHRhc2s7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYUZ1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZlLCByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBDKGZ1bmN0aW9uICgkJHJlc29sdmUsICQkcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0ID0gJCRyZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc29sdmUgPSBhRnVuY3Rpb24ocmVzb2x2ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gYUZ1bmN0aW9uKHJlamVjdCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IGV4ZWMoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3KTtcblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5OCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gICAgICAgICAgICAgICAgICAgIGFuT2JqZWN0KEMpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTAyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZFAgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KTtcblxuICAgICAgICAgICAgICAgIHZhciBERVNDUklQVE9SUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNQRUNJRVMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgnc3BlY2llcycpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDID0gZ2xvYmFsW0tFWV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChERVNDUklQVE9SUyAmJiBDICYmICFDW1NQRUNJRVNdKSBkUC5mKEMsIFNQRUNJRVMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KTtcblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk0KTtcblxuICAgICAgICAgICAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAxKTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbmFsbHknOiBmdW5jdGlvbiBfZmluYWxseShvbkZpbmFsbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4oaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogb25GaW5hbGx5LCBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG9uRmluYWxseSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBlcmZvcm0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk5KTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHtcbiAgICAgICAgICAgICAgICAgICAgJ3RyeSc6IGZ1bmN0aW9uIF90cnkoY2FsbGJhY2tmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nyk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA3KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE5KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIxKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuV2Vha01hcDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGVhY2ggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOCkoMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI1KTtcblxuICAgICAgICAgICAgICAgIHZhciBtZXRhID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFzc2lnbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdlYWsgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBmYWlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHZhbGlkYXRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFdFQUtfTUFQID0gJ1dlYWtNYXAnO1xuICAgICAgICAgICAgICAgIHZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xuICAgICAgICAgICAgICAgIHZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuICAgICAgICAgICAgICAgIHZhciB1bmNhdWdodEZyb3plblN0b3JlID0gd2Vhay51ZnN0b3JlO1xuICAgICAgICAgICAgICAgIHZhciB0bXAgPSB7fTtcbiAgICAgICAgICAgICAgICB2YXIgSW50ZXJuYWxNYXA7XG5cbiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlciA9IGZ1bmN0aW9uIHdyYXBwZXIoZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBtZXRob2RzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSkuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE1KShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3ICRXZWFrTWFwKCkuc2V0KChPYmplY3QuZnJlZXplIHx8IE9iamVjdCkodG1wKSwgNykuZ2V0KHRtcCkgIT0gNztcbiAgICAgICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICAgICAgICAgICAgICAgICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kID0gcHJvdG9ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuX2Zba2V5XShhLCBiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9MZW5ndGggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKTtcblxuICAgICAgICAgICAgICAgIHZhciBhc2MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICAgICAgICAgICAgICAgICAgICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKHNlbGYubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWwsIHJlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU19NQVApIHJlc3VsdFtpbmRleF0gPSByZXM7ZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBpc0FycmF5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNQRUNJRVMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KSgnc3BlY2llcycpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEM7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkob3JpZ2luYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDID09PSB1bmRlZmluZWQgPyBBcnJheSA6IEM7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTExICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGNvZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgTUVUQSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjcpKCdtZXRhJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI2KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXREZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNikuZjtcblxuICAgICAgICAgICAgICAgIHZhciBpZCA9IDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgRlJFRVpFID0gIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRNZXRhID0gZnVuY3Rpb24gc2V0TWV0YShpdCkge1xuICAgICAgICAgICAgICAgICAgICBzZXREZXNjKGl0LCBNRVRBLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6ICdPJyArICsraWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdzoge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBmYXN0S2V5ID0gZnVuY3Rpb24gZmFzdEtleShpdCwgY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gX3R5cGVvZihpdCkgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiAnRic7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuICdFJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldE1ldGEoaXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0W01FVEFdLmk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBnZXRXZWFrID0gZnVuY3Rpb24gZ2V0V2VhayhpdCwgY3JlYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXRhKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdFtNRVRBXS53O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgb25GcmVlemUgPSBmdW5jdGlvbiBvbkZyZWV6ZShpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbWV0YSA9IG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBLRVk6IE1FVEEsXG4gICAgICAgICAgICAgICAgICAgIE5FRUQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBmYXN0S2V5OiBmYXN0S2V5LFxuICAgICAgICAgICAgICAgICAgICBnZXRXZWFrOiBnZXRXZWFrLFxuICAgICAgICAgICAgICAgICAgICBvbkZyZWV6ZTogb25GcmVlemVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmVBbGwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2VhayA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEyKS5nZXRXZWFrO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBhbkluc3RhbmNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkzKTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA4KTtcblxuICAgICAgICAgICAgICAgIHZhciAkaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gICAgICAgICAgICAgICAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gICAgICAgICAgICAgICAgdmFyIGlkID0gMDtcblxuICAgICAgICAgICAgICAgIHZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gVW5jYXVnaHRGcm96ZW5TdG9yZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hID0gW107XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiBmaW5kVW5jYXVnaHRGcm96ZW4oc3RvcmUsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBVbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdkZWxldGUnOiBmdW5jdGlvbiBfZGVsZXRlKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF+aW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdCA9IE5BTUU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5faSA9IGlkKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIF9kZWxldGUoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVmOiBmdW5jdGlvbiBkZWYodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO2Vsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTE1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lQWxsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1ldGEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkzKTtcblxuICAgICAgICAgICAgICAgIHZhciBhbkluc3RhbmNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBmYWlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRpdGVyRGV0ZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY0KTtcblxuICAgICAgICAgICAgICAgIHZhciBpbmhlcml0SWZSZXF1aXJlZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE2KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IEJhc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIGZpeE1ldGhvZChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZShwcm90bywgS0VZLCBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gc2V0KGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEMoaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuICAgICAgICAgICAgICAgICAgICBPW05BTUVdID0gQztcbiAgICAgICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRQcm90b3R5cGVPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE3KS5zZXQ7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExNyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSBmdW5jdGlvbiBjaGVjayhPLCBwcm90bykge1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjgpKEZ1bmN0aW9uLmNhbGwsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE4KS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnZ3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO2Vsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrOiBjaGVja1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBwSUUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc4KTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVEZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIzKTtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI2KTtcblxuICAgICAgICAgICAgICAgIHZhciBJRThfRE9NX0RFRklORSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gICAgICAgICAgICAgICAgICAgIE8gPSB0b0lPYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMCkoJ1dlYWtNYXAnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgICAgICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQSA9IG5ldyBBcnJheShsZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjIpKCdXZWFrTWFwJyk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgYUZ1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgICAgICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcEZuID0gYXJndW1lbnRzWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBwaW5nLCBBLCBuLCBjYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhRnVuY3Rpb24odGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZyA9IG1hcEZuICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcpIGFGdW5jdGlvbihtYXBGbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSB1bmRlZmluZWQpIHJldHVybiBuZXcgdGhpcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYiA9IGN0eChtYXBGbiwgYXJndW1lbnRzWzJdLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBLnB1c2goY2IobmV4dEl0ZW0sIG4rKykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nyk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI0KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI1KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI2KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuV2Vha1NldDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHdlYWsgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNSkoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIwKSgnV2Vha1NldCcpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMikoJ1dlYWtTZXQnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5TdHJpbmcuY29kZVBvaW50QXQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGF0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MykoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzMCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpLlN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMzAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG4gICAgICAgICAgICAgICAgdmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoISEkZnJvbUNvZGVQb2ludCAmJiAkZnJvbUNvZGVQb2ludC5sZW5ndGggIT0gMSksICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21Db2RlUG9pbnQ6IGZ1bmN0aW9uIGZyb21Db2RlUG9pbnQoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvQWJzb2x1dGVJbmRleChjb2RlLCAweDEwZmZmZikgIT09IGNvZGUpIHRocm93IFJhbmdlRXJyb3IoY29kZSArICcgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwID8gZnJvbUNoYXJDb2RlKGNvZGUpIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMyKTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5TeW1ib2w7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgREVTQ1JJUFRPUlMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIwKTtcblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI1KTtcblxuICAgICAgICAgICAgICAgIHZhciBNRVRBID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTIpLktFWTtcblxuICAgICAgICAgICAgICAgIHZhciAkZmFpbHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKTtcblxuICAgICAgICAgICAgICAgIHZhciBzaGFyZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM2KTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHVpZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdrcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdrc0V4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMzKTtcblxuICAgICAgICAgICAgICAgIHZhciB3a3NEZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZW51bUtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNBcnJheSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTExKTtcblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIzKTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVEZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdPUE5FeHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJEdPUEQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJERQID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KTtcblxuICAgICAgICAgICAgICAgIHZhciBnT1BEID0gJEdPUEQuZjtcbiAgICAgICAgICAgICAgICB2YXIgZFAgPSAkRFAuZjtcbiAgICAgICAgICAgICAgICB2YXIgZ09QTiA9IGdPUE5FeHQuZjtcbiAgICAgICAgICAgICAgICB2YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG4gICAgICAgICAgICAgICAgdmFyICRKU09OID0gZ2xvYmFsLkpTT047XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcblxuICAgICAgICAgICAgICAgIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgICAgICAgICAgICAgICB2YXIgSElEREVOID0gd2tzKCdfaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgdmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbiAgICAgICAgICAgICAgICB2YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4gICAgICAgICAgICAgICAgdmFyIFN5bWJvbFJlZ2lzdHJ5ID0gc2hhcmVkKCdzeW1ib2wtcmVnaXN0cnknKTtcbiAgICAgICAgICAgICAgICB2YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xuICAgICAgICAgICAgICAgIHZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbiAgICAgICAgICAgICAgICB2YXIgT2JqZWN0UHJvdG8gPSBPYmplY3RbUFJPVE9UWVBFXTtcbiAgICAgICAgICAgICAgICB2YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbic7XG4gICAgICAgICAgICAgICAgdmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGVyID0gIVFPYmplY3QgfHwgIVFPYmplY3RbUFJPVE9UWVBFXSB8fCAhUU9iamVjdFtQUk9UT1RZUEVdLmZpbmRDaGlsZDtcbiAgICAgICAgICAgICAgICB2YXIgc2V0U3ltYm9sRGVzYyA9IERFU0NSSVBUT1JTICYmICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlKGRQKHt9LCAnYScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkUCh0aGlzLCAnYScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IDdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5hO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSkuYSAhPSA3O1xuICAgICAgICAgICAgICAgIH0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICAgICAgICAgICAgICAgICAgICBkUChpdCwga2V5LCBEKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG4gICAgICAgICAgICAgICAgfSA6IGRQO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdyYXAgPSBmdW5jdGlvbiB3cmFwKHRhZykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN5bS5fayA9IHRhZztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN5bTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzU3ltYm9sID0gVVNFX05BVElWRSAmJiBfdHlwZW9mKCRTeW1ib2wuaXRlcmF0b3IpID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdHlwZW9mKGl0KSA9PSAnc3ltYm9sJztcbiAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gICAgICAgICAgICAgICAgICAgIGFuT2JqZWN0KGl0KTtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoRCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzKGl0LCBISURERU4pKSBkUChpdCwgSElEREVOLCBjcmVhdGVEZXNjKDEsIHt9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQgPSBfY3JlYXRlKEQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldFN5bWJvbERlc2MoaXQsIGtleSwgRCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZGVmaW5lUHJvcGVydGllcyA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoaXQsIFApIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGVudW1LZXlzKFAgPSB0b0lPYmplY3QoUCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGwgPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXQgPSB0b0lPYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHZhciBEID0gZ09QRChpdCwga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEQgJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkgRC5lbnVtZXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYgKElTX09QID8gaGFzKE9iamVjdFByb3RvLCBrZXkpIDogdHJ1ZSkpIHJlc3VsdC5wdXNoKEFsbFN5bWJvbHNba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoIVVTRV9OQVRJVkUpIHtcbiAgICAgICAgICAgICAgICAgICAgJFN5bWJvbCA9IGZ1bmN0aW9uIF9TeW1ib2woKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gJHNldCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFN5bWJvbERlc2ModGhpcywgdGFnLCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMgJiYgc2V0dGVyKSBzZXRTeW1ib2xEZXNjKE9iamVjdFByb3RvLCB0YWcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiAkc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwKHRhZyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVkZWZpbmUoJFN5bWJvbFtQUk9UT1RZUEVdLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9rO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgJEdPUEQuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgICAgICAgICAgICAgICAgICREUC5mID0gJGRlZmluZVByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc4KS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc3KS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMgJiYgIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwge1xuICAgICAgICAgICAgICAgICAgICBTeW1ib2w6ICRTeW1ib2xcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGVzNlN5bWJvbHMgPSAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KSB7XG4gICAgICAgICAgICAgICAgICAgIHdrcyhlczZTeW1ib2xzW2orK10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZvciAodmFyIHdlbGxLbm93blN5bWJvbHMgPSAka2V5cyh3a3Muc3RvcmUpLCBrID0gMDsgd2VsbEtub3duU3ltYm9scy5sZW5ndGggPiBrOykge1xuICAgICAgICAgICAgICAgICAgICB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAgICAgICAgICAgICAgICAgICAnZm9yJzogZnVuY3Rpb24gX2ZvcihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXMoU3ltYm9sUmVnaXN0cnksIGtleSArPSAnJykgPyBTeW1ib2xSZWdpc3RyeVtrZXldIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIFN5bWJvbFJlZ2lzdHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdXNlU2V0dGVyOiBmdW5jdGlvbiB1c2VTZXR0ZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXR0ZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB1c2VTaW1wbGU6IGZ1bmN0aW9uIHVzZVNpbXBsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ09iamVjdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiAkY3JlYXRlLFxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0eTogJGRlZmluZVByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgICAgICAgICAgICAgICAgICAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfc3RyaW5naWZ5KFtTXSkgIT0gJ1tudWxsXScgfHwgX3N0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBhOiBTXG4gICAgICAgICAgICAgICAgICAgIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG4gICAgICAgICAgICAgICAgfSkpLCAnSlNPTicsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYXJndW1lbnRzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4gICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuICAgICAgICAgICAgICAgIHNldFRvU3RyaW5nVGFnKE1hdGgsICdNYXRoJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzUpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMzQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29yZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIExJQlJBUlkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM3KTtcblxuICAgICAgICAgICAgICAgIHZhciB3a3NFeHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KS5mO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHdrc0V4dC5mKG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzNSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBJRSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0U3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QTiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTM3KS5mO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvd05hbWVzID0gKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZih3aW5kb3cpKSA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiBnZXRXaW5kb3dOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdPUE4oaXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzNyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAka2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGRlbktleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYyKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzkpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5TdHJpbmcucGFkU3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJHBhZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQwKTtcblxuICAgICAgICAgICAgICAgIHZhciB1c2VyQWdlbnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwMCk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVwZWF0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM4KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDMpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0KS5TdHJpbmcucGFkRW5kO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRwYWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdXNlckFnZW50ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDApO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ1KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCkuT2JqZWN0LnZhbHVlcztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQ1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciAkdmFsdWVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDYpKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNFbnVtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3OCkuZjtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGlzRW50cmllcykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlYWRhYmxlU3RyZWFtID0gUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlYWRhYmxlU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDgpLlJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YyID0gZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZjIob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgKGZ1bmN0aW9uIChlLCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4gYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZVtpXSA9IGFbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KShleHBvcnRzLCBmdW5jdGlvbiAobW9kdWxlcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18obW9kdWxlSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkgcmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTogbW9kdWxlSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0czoge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5sID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5pID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24gKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGdldHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgPyBmdW5jdGlvbiBnZXREZWZhdWx0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5wID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5zID0gNyk7XG4gICAgICAgICAgICAgICAgfShbZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBfdHlwZW9mMihTeW1ib2wuaXRlcmF0b3IpID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YyKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogX3R5cGVvZjIob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUuYXNzZXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUHJvcGVydHlLZXkoYXJndW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnIHx8ICh0eXBlb2YgYXJndW1lbnQgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKGFyZ3VtZW50KSkgPT09ICdzeW1ib2wnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy50eXBlSXNPYmplY3QgPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0eXBlb2YgeCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoeCkpID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsIHx8IHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlRGF0YVByb3BlcnR5ID0gZnVuY3Rpb24gKG8sIHAsIHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChleHBvcnRzLnR5cGVJc09iamVjdChvKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgcCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZUFycmF5RnJvbUxpc3QgPSBmdW5jdGlvbiAoZWxlbWVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50cy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuQXJyYXlCdWZmZXJDb3B5ID0gZnVuY3Rpb24gKGRlc3QsIGRlc3RPZmZzZXQsIHNyYywgc3JjT2Zmc2V0LCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgVWludDhBcnJheShkZXN0KS5zZXQobmV3IFVpbnQ4QXJyYXkoc3JjLCBzcmNPZmZzZXQsIG4pLCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSBmdW5jdGlvbiAodmFsdWUsIGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZG9uZSA9PT0gJ2Jvb2xlYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICd2YWx1ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ2RvbmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGRvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIgPSBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT09IEluZmluaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENhbGwoRiwgViwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBGICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKEYsIFYsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5JbnZva2VPck5vb3AgPSBmdW5jdGlvbiAoTywgUCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KE8gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNQcm9wZXJ0eUtleShQKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kID0gT1tQXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENhbGwobWV0aG9kLCBPLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlByb21pc2VJbnZva2VPck5vb3AgPSBmdW5jdGlvbiAoTywgUCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KE8gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNQcm9wZXJ0eUtleShQKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShhcmdzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShleHBvcnRzLkludm9rZU9yTm9vcChPLCBQLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChyZXR1cm5WYWx1ZUUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmV0dXJuVmFsdWVFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlByb21pc2VJbnZva2VPclBlcmZvcm1GYWxsYmFjayA9IGZ1bmN0aW9uIChPLCBQLCBhcmdzLCBGLCBhcmdzRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KE8gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNQcm9wZXJ0eUtleShQKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShhcmdzRikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QgPSBPW1BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAobWV0aG9kRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChtZXRob2RFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEYuYXBwbHkobnVsbCwgYXJnc0YpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ2FsbChtZXRob2QsIE8sIGFyZ3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5UcmFuc2ZlckFycmF5QnVmZmVyID0gZnVuY3Rpb24gKE8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5WYWxpZGF0ZUFuZE5vcm1hbGl6ZUhpZ2hXYXRlck1hcmsgPSBmdW5jdGlvbiAoaGlnaFdhdGVyTWFyaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IE51bWJlcihoaWdoV2F0ZXJNYXJrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTihoaWdoV2F0ZXJNYXJrKSB8fCBoaWdoV2F0ZXJNYXJrIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdoaWdoV2F0ZXJNYXJrIHByb3BlcnR5IG9mIGEgcXVldWluZyBzdHJhdGVneSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm9uLU5hTicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGlnaFdhdGVyTWFyaztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5ID0gZnVuY3Rpb24gKHNpemUsIGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaXplIHByb3BlcnR5IG9mIGEgcXVldWluZyBzdHJhdGVneSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IGV4cG9ydHMuVmFsaWRhdGVBbmROb3JtYWxpemVIaWdoV2F0ZXJNYXJrKGhpZ2hXYXRlck1hcmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBzaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcms6IGhpZ2hXYXRlck1hcmtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgJiYgZS5jb25zdHJ1Y3RvciA9PT0gQXNzZXJ0aW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICdBc3NlcnRpb25FcnJvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBBc3NlcnRpb25FcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBc3NlcnRpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3NlcnQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjogcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3I6IEFzc2VydGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0OiBhc3NlcnRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG4gICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VPck5vb3AgPSBfcmVxdWlyZS5JbnZva2VPck5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlSW52b2tlT3JOb29wID0gX3JlcXVpcmUuUHJvbWlzZUludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5ID0gX3JlcXVpcmUuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlSXNPYmplY3QgPSBfcmVxdWlyZS50eXBlSXNPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgPSBfcmVxdWlyZTIuYXNzZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uID0gX3JlcXVpcmUyLnJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcXVldWVWYWx1ZSA9IF9yZXF1aXJlMy5EZXF1ZXVlVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSA9IF9yZXF1aXJlMy5FbnF1ZXVlVmFsdWVXaXRoU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFBlZWtRdWV1ZVZhbHVlID0gX3JlcXVpcmUzLlBlZWtRdWV1ZVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZSA9IF9yZXF1aXJlMy5SZXNldFF1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBXcml0YWJsZVN0cmVhbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmRlcmx5aW5nU2luayA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkaGlnaFdhdGVyTWFyayA9IF9yZWYuaGlnaFdhdGVyTWFyayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IF9yZWYkaGlnaFdhdGVyTWFyayA9PT0gdW5kZWZpbmVkID8gMSA6IF9yZWYkaGlnaFdhdGVyTWFyaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXcml0YWJsZVN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICd3cml0YWJsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0ZVJlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdBYm9ydFJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFja3ByZXNzdXJlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB1bmRlcmx5aW5nU2luay50eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciA9IG5ldyBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMsIHVuZGVybHlpbmdTaW5rLCBzaXplLCBoaWdoV2F0ZXJNYXJrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX3N0YXJ0U3RlcHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdyaXRhYmxlU3RyZWFtLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Fib3J0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Fib3J0JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1Mb2NrZWQodGhpcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdDYW5ub3QgYWJvcnQgYSBzdHJlYW0gdGhhdCBhbHJlYWR5IGhhcyBhIHdyaXRlcicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbUFib3J0KHRoaXMsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2dldFdyaXRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFdyaXRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdnZXRXcml0ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdsb2NrZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ2xvY2tlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElzV3JpdGFibGVTdHJlYW1Mb2NrZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI6IEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBJc1dyaXRhYmxlU3RyZWFtOiBJc1dyaXRhYmxlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNXcml0YWJsZVN0cmVhbUxvY2tlZDogSXNXcml0YWJsZVN0cmVhbUxvY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtOiBXcml0YWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtQWJvcnQ6IFdyaXRhYmxlU3RyZWFtQWJvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6IFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb246IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlOiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGU6IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQ6IFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzV3JpdGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNXcml0YWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlLCAnSXNXcml0YWJsZVN0cmVhbUxvY2tlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHdyaXRhYmxlIHN0cmVhbXMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fd3JpdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1BYm9ydChzdHJlYW0sIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3RlZCB0byBhYm9ydCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RhdGUgPT09ICdlcnJvcmluZycsICdzdGF0ZSBtdXN0IGJlIHdyaXRhYmxlIG9yIGVycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2FzQWxyZWFkeUVycm9yaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhc0FscmVhZHlFcnJvcmluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVqZWN0OiByZWplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWFzb246IHJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3dhc0FscmVhZHlFcnJvcmluZzogd2FzQWxyZWFkeUVycm9yaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2FzQWxyZWFkeUVycm9yaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUFkZFdyaXRlUmVxdWVzdChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWplY3Q6IHJlamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRlUmVxdWVzdHMucHVzaCh3cml0ZVJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1TdGFydEVycm9yaW5nKHN0cmVhbSwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCwgJ3N0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScsICdzdGF0ZSBtdXN0IGJlIHdyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCwgJ2NvbnRyb2xsZXIgbXVzdCBub3QgYmUgdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0YXRlID0gJ2Vycm9yaW5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RvcmVkRXJyb3IgPSByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGVyID0gc3RyZWFtLl93cml0ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZVJlYWR5UHJvbWlzZVJlamVjdGVkKHdyaXRlciwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UgJiYgY29udHJvbGxlci5fc3RhcnRlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yaW5nJywgJ3N0cmVhbS5fc3RhdGUgPT09IGVycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoV3JpdGFibGVTdHJlYW1IYXNPcGVyYXRpb25NYXJrZWRJbkZsaWdodChzdHJlYW0pID09PSBmYWxzZSwgJ1dyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RhdGUgPSAnZXJyb3JlZCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fZXJyb3JTdGVwcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmVkRXJyb3IgPSBzdHJlYW0uX3N0b3JlZEVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmVhbS5fd3JpdGVSZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZVJlcXVlc3QgPSBzdHJlYW0uX3dyaXRlUmVxdWVzdHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVJlcXVlc3QuX3JlamVjdChzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fd3JpdGVSZXF1ZXN0cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWJvcnRSZXF1ZXN0ID0gc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJvcnRSZXF1ZXN0Ll93YXNBbHJlYWR5RXJyb3JpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydFJlcXVlc3QuX3JlamVjdChzdG9yZWRFcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fYWJvcnRTdGVwcyhhYm9ydFJlcXVlc3QuX3JlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRSZXF1ZXN0Ll9yZWplY3QocmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodFdyaXRlKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QuX3Jlc29sdmUodW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRXcml0ZVdpdGhFcnJvcihzdHJlYW0sIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWFsV2l0aFJlamVjdGlvbihzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRDbG9zZShzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0Ll9yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdG9yZWRFcnJvciA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3Jlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGVyID0gc3RyZWFtLl93cml0ZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVzb2x2ZSh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID09PSB1bmRlZmluZWQsICdzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCwgJ3N0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlV2l0aEVycm9yKHN0cmVhbSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0Ll9yZWplY3QoZXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdC5fcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWFsV2l0aFJlamVjdGlvbihzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fY2xvc2VSZXF1ZXN0ID09PSB1bmRlZmluZWQgJiYgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCA9PT0gdW5kZWZpbmVkICYmIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbU1hcmtDbG9zZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fY2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9IHN0cmVhbS5fY2xvc2VSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbU1hcmtGaXJzdFdyaXRlUmVxdWVzdEluRmxpZ2h0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPT09IHVuZGVmaW5lZCwgJ3RoZXJlIG11c3QgYmUgbm8gcGVuZGluZyB3cml0ZSByZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl93cml0ZVJlcXVlc3RzLmxlbmd0aCAhPT0gMCwgJ3dyaXRlUmVxdWVzdHMgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSBzdHJlYW0uX3dyaXRlUmVxdWVzdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtUmVqZWN0Q2xvc2VBbmRDbG9zZWRQcm9taXNlSWZOZWVkZWQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnLCAnX3N0cmVhbV8uW1tzdGF0ZV1dIGlzIGBcImVycm9yZWRcImAnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fY2xvc2VSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fY2xvc2VSZXF1ZXN0Ll9yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2Nsb3NlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlamVjdCh3cml0ZXIsIHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtVXBkYXRlQmFja3ByZXNzdXJlKHN0cmVhbSwgYmFja3ByZXNzdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQgJiYgYmFja3ByZXNzdXJlICE9PSBzdHJlYW0uX2JhY2twcmVzc3VyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYWNrcHJlc3N1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc2V0KHdyaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJhY2twcmVzc3VyZSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzb2x2ZSh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9iYWNrcHJlc3N1cmUgPSBiYWNrcHJlc3N1cmU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBXcml0YWJsZVN0cmVhbSBpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSB3cml0aW5nIGJ5IGFub3RoZXIgd3JpdGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRlciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UgJiYgc3RyZWFtLl9iYWNrcHJlc3N1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdlcnJvcmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1JlamVjdGVkKHRoaXMsIHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICdlcnJvcmVkJywgJ3N0YXRlIG11c3QgYmUgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmVkRXJyb3IgPSBzdHJlYW0uX3N0b3JlZEVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQodGhpcywgc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh0aGlzLCBzdG9yZWRFcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Fib3J0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignYWJvcnQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ2Fib3J0JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckFib3J0KHRoaXMsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2UnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyTG9ja0V4Y2VwdGlvbignY2xvc2UnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ2Nhbm5vdCBjbG9zZSBhbiBhbHJlYWR5LWNsb3Npbmcgc3RyZWFtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZWxlYXNlTG9jaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbGVhc2VMb2NrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbigncmVsZWFzZUxvY2snKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fd3JpdGVyICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd3cml0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignd3JpdGUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ3dyaXRlIHRvJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlKHRoaXMsIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRXcml0ZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZGVzaXJlZFNpemUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCdkZXNpcmVkU2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckdldERlc2lyZWRTaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZWFkeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbigncmVhZHknKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHlQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX293bmVyV3JpdGFibGVTdHJlYW0nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJBYm9ydCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1BYm9ydChzdHJlYW0sIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnY2xvc2VkJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gKGluICcgKyBzdGF0ZSArICcgc3RhdGUpIGlzIG5vdCBpbiB0aGUgd3JpdGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb3NlUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWplY3Q6IHJlamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QgPSBjbG9zZVJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlICYmIHN0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc29sdmUod3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbih3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IHRydWUgfHwgc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZSh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyRW5zdXJlQ2xvc2VkUHJvbWlzZVJlamVjdGVkKHdyaXRlciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZWplY3Qod3JpdGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyRW5zdXJlUmVhZHlQcm9taXNlUmVqZWN0ZWQod3JpdGVyLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZWplY3Qod3JpdGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldFRvUmVqZWN0ZWQod3JpdGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckdldERlc2lyZWRTaXplKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yZWQnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl93cml0ZXIgPT09IHdyaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVsZWFzZWRFcnJvciA9IG5ldyBUeXBlRXJyb3IoJ1dyaXRlciB3YXMgcmVsZWFzZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCB0byBtb25pdG9yIHRoZSBzdHJlYW1cXCdzIGNsb3NlZG5lc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZVJlYWR5UHJvbWlzZVJlamVjdGVkKHdyaXRlciwgcmVsZWFzZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVDbG9zZWRQcm9taXNlUmVqZWN0ZWQod3JpdGVyLCByZWxlYXNlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fd3JpdGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUod3JpdGVyLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRDaHVua1NpemUoY29udHJvbGxlciwgY2h1bmspO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtICE9PSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ3dyaXRlIHRvJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IHRydWUgfHwgc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaXMgY2xvc2luZyBvciBjbG9zZWQgYW5kIGNhbm5vdCBiZSB3cml0dGVuIHRvJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFdyaXRhYmxlU3RyZWFtQWRkV3JpdGVSZXF1ZXN0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyV3JpdGUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcihzdHJlYW0sIHVuZGVybHlpbmdTaW5rLCBzaXplLCBoaWdoV2F0ZXJNYXJrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgV3JpdGFibGVTdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBXcml0YWJsZVN0cmVhbSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmRlcmx5aW5nU2luayA9IHVuZGVybHlpbmdTaW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlVG90YWxTaXplID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkU3RyYXRlZ3kgPSBWYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneShzaXplLCBoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneVNpemUgPSBub3JtYWxpemVkU3RyYXRlZ3kuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneUhXTSA9IG5vcm1hbGl6ZWRTdHJhdGVneS5oaWdoV2F0ZXJNYXJrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYWNrcHJlc3N1cmUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0QmFja3ByZXNzdXJlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtVXBkYXRlQmFja3ByZXNzdXJlKHN0cmVhbSwgYmFja3ByZXNzdXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS5lcnJvciBjYW4gb25seSBiZSB1c2VkIG9uIGEgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcih0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19hYm9ydFN0ZXBzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX19hYm9ydFN0ZXBzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZUludm9rZU9yTm9vcCh0aGlzLl91bmRlcmx5aW5nU2luaywgJ2Fib3J0JywgW3JlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX2Vycm9yU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX2Vycm9yU3RlcHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fc3RhcnRTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fc3RhcnRTdGVwcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBJbnZva2VPck5vb3AodGhpcy5fdW5kZXJseWluZ1NpbmssICdzdGFydCcsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShzdGFydFJlc3VsdCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChfdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVucXVldWVWYWx1ZVdpdGhTaXplKGNvbnRyb2xsZXIsICdjbG9zZScsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckFkdmFuY2VRdWV1ZUlmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldENodW5rU2l6ZShjb250cm9sbGVyLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmF0ZWd5U2l6ZSA9IGNvbnRyb2xsZXIuX3N0cmF0ZWd5U2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmF0ZWd5U2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmF0ZWd5U2l6ZShjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChjaHVua1NpemVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgY2h1bmtTaXplRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuX3N0cmF0ZWd5SFdNIC0gY29udHJvbGxlci5fcXVldWVUb3RhbFNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyV3JpdGUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlUmVjb3JkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZShjb250cm9sbGVyLCB3cml0ZVJlY29yZCwgY2h1bmtTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVucXVldWVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZW5xdWV1ZUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlICYmIHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFja3ByZXNzdXJlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ191bmRlcmx5aW5nU2luaycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fc3RhcnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hFcnJvcmluZyhzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3F1ZXVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlUmVjb3JkID0gUGVla1F1ZXVlVmFsdWUoY29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZVJlY29yZCA9PT0gJ2Nsb3NlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzQ2xvc2UoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzV3JpdGUoY29udHJvbGxlciwgd3JpdGVSZWNvcmQuY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzQ2xvc2UoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtTWFya0Nsb3NlUmVxdWVzdEluRmxpZ2h0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBEZXF1ZXVlVmFsdWUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcXVldWUubGVuZ3RoID09PSAwLCAncXVldWUgbXVzdCBiZSBlbXB0eSBvbmNlIHRoZSBmaW5hbCB3cml0ZSByZWNvcmQgaXMgZGVxdWV1ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaW5rQ2xvc2VQcm9taXNlID0gUHJvbWlzZUludm9rZU9yTm9vcChjb250cm9sbGVyLl91bmRlcmx5aW5nU2luaywgJ2Nsb3NlJywgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lua0Nsb3NlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0Q2xvc2Uoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0Q2xvc2VXaXRoRXJyb3Ioc3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJQcm9jZXNzV3JpdGUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbU1hcmtGaXJzdFdyaXRlUmVxdWVzdEluRmxpZ2h0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lua1dyaXRlUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AoY29udHJvbGxlci5fdW5kZXJseWluZ1NpbmssICd3cml0ZScsIFtjaHVuaywgY29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lua1dyaXRlUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0V3JpdGUoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVxdWV1ZVZhbHVlKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlICYmIHN0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYWNrcHJlc3N1cmUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0QmFja3ByZXNzdXJlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckFkdmFuY2VRdWV1ZUlmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRXcml0ZVdpdGhFcnJvcihzdHJlYW0sIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzaXJlZFNpemUgPD0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlU3RyZWFtLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCAnICsgbmFtZSArICcgYSBzdHJlYW0gdXNpbmcgYSByZWxlYXNlZCB3cml0ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlID0gJ3Jlc29sdmVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVqZWN0KHdyaXRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9PT0gJ3BlbmRpbmcnLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgcGVuZGluZycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0KHJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSAhPT0gJ3BlbmRpbmcnLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgbm90IHBlbmRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc29sdmUod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9PT0gJ3BlbmRpbmcnLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgcGVuZGluZycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZXNvbHZlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2UgPSBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncmVqZWN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID0gJ2Z1bGZpbGxlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVqZWN0KHdyaXRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgIT09IHVuZGVmaW5lZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QocmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncmVqZWN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc2V0KHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdwZW5kaW5nJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldFRvUmVqZWN0ZWQod3JpdGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNvbHZlKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdmdWxmaWxsZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNGaW5pdGVOb25OZWdhdGl2ZU51bWJlciA9IF9yZXF1aXJlLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgPSBfcmVxdWlyZTIuYXNzZXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuRGVxdWV1ZVZhbHVlID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCdfcXVldWUnIGluIGNvbnRhaW5lciAmJiAnX3F1ZXVlVG90YWxTaXplJyBpbiBjb250YWluZXIsICdTcGVjLWxldmVsIGZhaWx1cmU6IERlcXVldWVWYWx1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250YWluZXIuX3F1ZXVlLmxlbmd0aCA+IDAsICdTcGVjLWxldmVsIGZhaWx1cmU6IHNob3VsZCBuZXZlciBkZXF1ZXVlIGZyb20gYW4gZW1wdHkgcXVldWUuJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWlyID0gY29udGFpbmVyLl9xdWV1ZS5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuX3F1ZXVlVG90YWxTaXplIC09IHBhaXIuc2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZVRvdGFsU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuRW5xdWV1ZVZhbHVlV2l0aFNpemUgPSBmdW5jdGlvbiAoY29udGFpbmVyLCB2YWx1ZSwgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCdfcXVldWUnIGluIGNvbnRhaW5lciAmJiAnX3F1ZXVlVG90YWxTaXplJyBpbiBjb250YWluZXIsICdTcGVjLWxldmVsIGZhaWx1cmU6IEVucXVldWVWYWx1ZVdpdGhTaXplIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gY29udGFpbmVycyB3aXRoIFtbcXVldWVdXSBhbmQgJyArICdbW3F1ZXVlVG90YWxTaXplXV0uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gTnVtYmVyKHNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIoc2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignU2l6ZSBtdXN0IGJlIGEgZmluaXRlLCBub24tTmFOLCBub24tbmVnYXRpdmUgbnVtYmVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuX3F1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBzaXplXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZVRvdGFsU2l6ZSArPSBzaXplO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUGVla1F1ZXVlVmFsdWUgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoJ19xdWV1ZScgaW4gY29udGFpbmVyICYmICdfcXVldWVUb3RhbFNpemUnIGluIGNvbnRhaW5lciwgJ1NwZWMtbGV2ZWwgZmFpbHVyZTogUGVla1F1ZXVlVmFsdWUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb250YWluZXJzIHdpdGggW1txdWV1ZV1dIGFuZCBbW3F1ZXVlVG90YWxTaXplXV0uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udGFpbmVyLl9xdWV1ZS5sZW5ndGggPiAwLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBzaG91bGQgbmV2ZXIgcGVlayBhdCBhbiBlbXB0eSBxdWV1ZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWlyID0gY29udGFpbmVyLl9xdWV1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWlyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVzZXRRdWV1ZSA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgnX3F1ZXVlJyBpbiBjb250YWluZXIgJiYgJ19xdWV1ZVRvdGFsU2l6ZScgaW4gY29udGFpbmVyLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBSZXNldFF1ZXVlIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gY29udGFpbmVycyB3aXRoIFtbcXVldWVdXSBhbmQgW1txdWV1ZVRvdGFsU2l6ZV1dLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZVRvdGFsU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJDb3B5ID0gX3JlcXVpcmUuQXJyYXlCdWZmZXJDb3B5LFxuICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlSXRlclJlc3VsdE9iamVjdCA9IF9yZXF1aXJlLkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBJc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyID0gX3JlcXVpcmUuSXNGaW5pdGVOb25OZWdhdGl2ZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIEludm9rZU9yTm9vcCA9IF9yZXF1aXJlLkludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2VJbnZva2VPck5vb3AgPSBfcmVxdWlyZS5Qcm9taXNlSW52b2tlT3JOb29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmZXJBcnJheUJ1ZmZlciA9IF9yZXF1aXJlLlRyYW5zZmVyQXJyYXlCdWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneSA9IF9yZXF1aXJlLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGVBbmROb3JtYWxpemVIaWdoV2F0ZXJNYXJrID0gX3JlcXVpcmUuVmFsaWRhdGVBbmROb3JtYWxpemVIaWdoV2F0ZXJNYXJrO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXJyYXlGcm9tTGlzdCA9IF9yZXF1aXJlMi5jcmVhdGVBcnJheUZyb21MaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5ID0gX3JlcXVpcmUyLmNyZWF0ZURhdGFQcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJc09iamVjdCA9IF9yZXF1aXJlMi50eXBlSXNPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgPSBfcmVxdWlyZTMuYXNzZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uID0gX3JlcXVpcmUzLnJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmU0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIERlcXVldWVWYWx1ZSA9IF9yZXF1aXJlNC5EZXF1ZXVlVmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSA9IF9yZXF1aXJlNC5FbnF1ZXVlVmFsdWVXaXRoU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUgPSBfcmVxdWlyZTQuUmVzZXRRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmU1ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgPSBfcmVxdWlyZTUuQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIElzV3JpdGFibGVTdHJlYW0gPSBfcmVxdWlyZTUuSXNXcml0YWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIElzV3JpdGFibGVTdHJlYW1Mb2NrZWQgPSBfcmVxdWlyZTUuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtQWJvcnQgPSBfcmVxdWlyZTUuV3JpdGFibGVTdHJlYW1BYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24gPSBfcmVxdWlyZTUuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UgPSBfcmVxdWlyZTUuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQgPSBfcmVxdWlyZTUuV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlYWRhYmxlU3RyZWFtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZGVybHlpbmdTb3VyY2UgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoV2F0ZXJNYXJrID0gX3JlZi5oaWdoV2F0ZXJNYXJrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWRhYmxlU3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlID0gJ3JlYWRhYmxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzdHVyYmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdW5kZXJseWluZ1NvdXJjZS50eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlU3RyaW5nID0gU3RyaW5nKHR5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVTdHJpbmcgPT09ICdieXRlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZ2hXYXRlck1hcmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIgPSBuZXcgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcih0aGlzLCB1bmRlcmx5aW5nU291cmNlLCBoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGlnaFdhdGVyTWFyayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoV2F0ZXJNYXJrID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciA9IG5ldyBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMsIHVuZGVybHlpbmdTb3VyY2UsIHNpemUsIGhpZ2hXYXRlck1hcmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGUgaXMgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUmVhZGFibGVTdHJlYW0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCh0aGlzKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYW5jZWwgYSBzdHJlYW0gdGhhdCBhbHJlYWR5IGhhcyBhIHJlYWRlcicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUNhbmNlbCh0aGlzLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdnZXRSZWFkZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZWFkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gX3JlZjIubW9kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ2dldFJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlID0gU3RyaW5nKG1vZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnYnlvYicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3F1aXJlUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgbW9kZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncGlwZVRocm91Z2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwaXBlVGhyb3VnaChfcmVmMywgb3B0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGFibGUgPSBfcmVmMy53cml0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlID0gX3JlZjMucmVhZGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gdGhpcy5waXBlVG8od3JpdGFibGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZklzT2JqZWN0QW5kSGFzQVByb21pc2VJc0hhbmRsZWRJbnRlcm5hbFNsb3RTZXRQcm9taXNlSXNIYW5kbGVkVG9UcnVlKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3BpcGVUbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBpcGVUbyhkZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRDbG9zZSA9IF9yZWY0LnByZXZlbnRDbG9zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRBYm9ydCA9IF9yZWY0LnByZXZlbnRBYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRDYW5jZWwgPSBfcmVmNC5wcmV2ZW50Q2FuY2VsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ3BpcGVUbycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKGRlc3QpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG9cXCdzIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBXcml0YWJsZVN0cmVhbScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRDbG9zZSA9IEJvb2xlYW4ocHJldmVudENsb3NlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudEFib3J0ID0gQm9vbGVhbihwcmV2ZW50QWJvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50Q2FuY2VsID0gQm9vbGVhbihwcmV2ZW50Q2FuY2VsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCh0aGlzKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8gY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgUmVhZGFibGVTdHJlYW0nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbUxvY2tlZChkZXN0KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8gY2Fubm90IGJlIHVzZWQgb24gYSBsb2NrZWQgV3JpdGFibGVTdHJlYW0nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gQWNxdWlyZVJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIoZGVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaHV0dGluZ0Rvd24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRXcml0ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGlwZUxvb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFdyaXRlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2h1dHRpbmdEb3duID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JpdGVyLl9yZWFkeVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJSZWFkKHJlYWRlcikudGhlbihmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWY1LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBfcmVmNS5kb25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFdyaXRlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUod3JpdGVyLCB2YWx1ZSkuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKHBpcGVMb29wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPckJlY29tZXNFcnJvcmVkKF90aGlzLCByZWFkZXIuX2Nsb3NlZFByb21pc2UsIGZ1bmN0aW9uIChzdG9yZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50QWJvcnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duV2l0aEFjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1BYm9ydChkZXN0LCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRydWUsIHN0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bih0cnVlLCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09yQmVjb21lc0Vycm9yZWQoZGVzdCwgd3JpdGVyLl9jbG9zZWRQcm9taXNlLCBmdW5jdGlvbiAoc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudENhbmNlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd25XaXRoQWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUNhbmNlbChfdGhpcywgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cnVlLCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24odHJ1ZSwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPckJlY29tZXNDbG9zZWQoX3RoaXMsIHJlYWRlci5fY2xvc2VkUHJvbWlzZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50Q2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duV2l0aEFjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbih3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoZGVzdCkgPT09IHRydWUgfHwgZGVzdC5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc3RDbG9zZWQgPSBuZXcgVHlwZUVycm9yKCd0aGUgZGVzdGluYXRpb24gd3JpdGFibGUgc3RyZWFtIGNsb3NlZCBiZWZvcmUgYWxsIGRhdGEgY291bGQgYmUgcGlwZWQgdG8gaXQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ZW50Q2FuY2VsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bldpdGhBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQ2FuY2VsKF90aGlzLCBkZXN0Q2xvc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJ1ZSwgZGVzdENsb3NlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24odHJ1ZSwgZGVzdENsb3NlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlTG9vcCgpLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50V3JpdGUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24oZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB3YWl0Rm9yV3JpdGVzVG9GaW5pc2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9sZEN1cnJlbnRXcml0ZSA9IGN1cnJlbnRXcml0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdyaXRlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2xkQ3VycmVudFdyaXRlICE9PSBjdXJyZW50V3JpdGUgPyB3YWl0Rm9yV3JpdGVzVG9GaW5pc2goKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNPckJlY29tZXNFcnJvcmVkKHN0cmVhbSwgcHJvbWlzZSwgYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24oc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5jYXRjaChhY3Rpb24pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc09yQmVjb21lc0Nsb3NlZChzdHJlYW0sIHByb21pc2UsIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oYWN0aW9uKS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2h1dGRvd25XaXRoQWN0aW9uKGFjdGlvbiwgb3JpZ2luYWxJc0Vycm9yLCBvcmlnaW5hbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNodXR0aW5nRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dHRpbmdEb3duID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0Ll9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyAmJiBXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChkZXN0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEZvcldyaXRlc1RvRmluaXNoKCkudGhlbihkb1RoZVJlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvVGhlUmVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvVGhlUmVzdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxpemUob3JpZ2luYWxJc0Vycm9yLCBvcmlnaW5hbEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG5ld0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxpemUodHJ1ZSwgbmV3RXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2h1dGRvd24oaXNFcnJvciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2h1dHRpbmdEb3duID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0dGluZ0Rvd24gPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QuX3N0YXRlID09PSAnd3JpdGFibGUnICYmIFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KGRlc3QpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0Rm9yV3JpdGVzVG9GaW5pc2goKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbGl6ZShpc0Vycm9yLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoaXNFcnJvciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluYWxpemUoaXNFcnJvciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlKHdyaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZShyZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAndGVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGVlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ3RlZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJyYW5jaGVzID0gUmVhZGFibGVTdHJlYW1UZWUodGhpcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQXJyYXlGcm9tTGlzdChicmFuY2hlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2xvY2tlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbignbG9ja2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW06IFJlYWRhYmxlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZDogSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZTogUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWU6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemU6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFjcXVpcmVSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQWNxdWlyZVJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlLCAnSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW0uX2Rpc3R1cmJlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlLCAnSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fcmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1UZWUoc3RyZWFtLCBjbG9uZUZvckJyYW5jaDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChJc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBjbG9uZUZvckJyYW5jaDIgPT09ICdib29sZWFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gQWNxdWlyZVJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlZVN0YXRlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlZE9yRXJyb3JlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQxOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxlZDI6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24yOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5fcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWxsID0gY3JlYXRlX1JlYWRhYmxlU3RyZWFtVGVlUHVsbEZ1bmN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsLl9yZWFkZXIgPSByZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsLl90ZWVTdGF0ZSA9IHRlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC5fY2xvbmVGb3JCcmFuY2gyID0gY2xvbmVGb3JCcmFuY2gyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmNlbDEgPSBjcmVhdGVfUmVhZGFibGVTdHJlYW1UZWVCcmFuY2gxQ2FuY2VsRnVuY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDEuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDEuX3RlZVN0YXRlID0gdGVlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuY2VsMiA9IGNyZWF0ZV9SZWFkYWJsZVN0cmVhbVRlZUJyYW5jaDJDYW5jZWxGdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsMi5fc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsMi5fdGVlU3RhdGUgPSB0ZWVTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmRlcmx5aW5nU291cmNlMSA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYXRhUHJvcGVydHkodW5kZXJseWluZ1NvdXJjZTEsICdwdWxsJywgcHVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYXRhUHJvcGVydHkodW5kZXJseWluZ1NvdXJjZTEsICdjYW5jZWwnLCBjYW5jZWwxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmFuY2gxU3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHVuZGVybHlpbmdTb3VyY2UxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmRlcmx5aW5nU291cmNlMiA9IE9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYXRhUHJvcGVydHkodW5kZXJseWluZ1NvdXJjZTIsICdwdWxsJywgcHVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYXRhUHJvcGVydHkodW5kZXJseWluZ1NvdXJjZTIsICdjYW5jZWwnLCBjYW5jZWwyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmFuY2gyU3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHVuZGVybHlpbmdTb3VyY2UyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGwuX2JyYW5jaDEgPSBicmFuY2gxU3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsLl9icmFuY2gyID0gYnJhbmNoMlN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2xvc2VkT3JFcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IocHVsbC5fYnJhbmNoMSwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKHB1bGwuX2JyYW5jaDIsIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNsb3NlZE9yRXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFticmFuY2gxU3RyZWFtLCBicmFuY2gyU3RyZWFtXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZV9SZWFkYWJsZVN0cmVhbVRlZVB1bGxGdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IGYuX3JlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJhbmNoMSA9IGYuX2JyYW5jaDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDIgPSBmLl9icmFuY2gyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZSA9IGYuX3RlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJSZWFkKHJlYWRlcikudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlSXNPYmplY3QocmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbmUgPSByZXN1bHQuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBkb25lID09PSAnYm9vbGVhbicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lID09PSB0cnVlICYmIHRlZVN0YXRlLmNsb3NlZE9yRXJyb3JlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKGJyYW5jaDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShicmFuY2gyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2xvc2VkT3JFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jbG9zZWRPckVycm9yZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTEgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlMiA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShicmFuY2gxLCB2YWx1ZTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlKGJyYW5jaDIsIHZhbHVlMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVfUmVhZGFibGVTdHJlYW1UZWVCcmFuY2gxQ2FuY2VsRnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBmLl9zdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlID0gZi5fdGVlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuY2FuY2VsZWQxID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5yZWFzb24xID0gcmVhc29uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9zaXRlUmVhc29uID0gY3JlYXRlQXJyYXlGcm9tTGlzdChbdGVlU3RhdGUucmVhc29uMSwgdGVlU3RhdGUucmVhc29uMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FuY2VsUmVzdWx0ID0gUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCBjb21wb3NpdGVSZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLl9yZXNvbHZlKGNhbmNlbFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlZVN0YXRlLnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlX1JlYWRhYmxlU3RyZWFtVGVlQnJhbmNoMkNhbmNlbEZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gZi5fc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZSA9IGYuX3RlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbGVkMiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUucmVhc29uMiA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDEgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvc2l0ZVJlYXNvbiA9IGNyZWF0ZUFycmF5RnJvbUxpc3QoW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmNlbFJlc3VsdCA9IFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgY29tcG9zaXRlUmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5fcmVzb2x2ZShjYW5jZWxSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZWVTdGF0ZS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQWRkUmVhZEludG9SZXF1ZXN0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHN0cmVhbS5fcmVhZGVyKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZEludG9SZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlamVjdDogcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLnB1c2gocmVhZEludG9SZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUFkZFJlYWRSZXF1ZXN0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHN0cmVhbS5fcmVhZGVyKSA9PT0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZFJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVqZWN0OiByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5wdXNoKHJlYWRSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUNhbmNlbChzdHJlYW0sIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9kaXN0dXJiZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtQ2xvc2Uoc3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZUNhbmNlbFByb21pc2UgPSBzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2NhbmNlbFN0ZXBzKHJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2VDYW5jZWxQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQ2xvc2Uoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0YXRlID0gJ2Nsb3NlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihyZWFkZXIpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3Jlc29sdmUgPSByZWFkZXIuX3JlYWRSZXF1ZXN0c1tpXS5fcmVzb2x2ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fcmVhZFJlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVzb2x2ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRXJyb3Ioc3RyZWFtLCBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlLCAnc3RyZWFtIG11c3QgYmUgUmVhZGFibGVTdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnLCAnc3RhdGUgbXVzdCBiZSByZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdGF0ZSA9ICdlcnJvcmVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RvcmVkRXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIocmVhZGVyKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhZGVyLl9yZWFkUmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRSZXF1ZXN0ID0gcmVhZGVyLl9yZWFkUmVxdWVzdHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlcXVlc3QuX3JlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX3JlYWRSZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIocmVhZGVyKSwgJ3JlYWRlciBtdXN0IGJlIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRJbnRvUmVxdWVzdCA9IHJlYWRlci5fcmVhZEludG9SZXF1ZXN0c1tfaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEludG9SZXF1ZXN0Ll9yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVqZWN0KHJlYWRlciwgZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZ1bGZpbGxSZWFkSW50b1JlcXVlc3Qoc3RyZWFtLCBjaHVuaywgZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRJbnRvUmVxdWVzdCA9IHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkSW50b1JlcXVlc3QuX3Jlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdChjaHVuaywgZG9uZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZFJlcXVlc3Qoc3RyZWFtLCBjaHVuaywgZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fcmVhZFJlcXVlc3RzLmxlbmd0aCA+IDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZFJlcXVlc3QgPSByZWFkZXIuX3JlYWRSZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkUmVxdWVzdC5fcmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNodW5rLCBkb25lKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRJbnRvUmVxdWVzdHMoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLl9yZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHJlYWRlcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtSGFzRGVmYXVsdFJlYWRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIocmVhZGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgUmVhZGFibGVTdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0luaXRpYWxpemUodGhpcywgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0UmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2FuY2VsJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYWRlckxvY2tFeGNlcHRpb24oJ2NhbmNlbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNDYW5jZWwodGhpcywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVhZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0UmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbigncmVhZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFkZXJMb2NrRXhjZXB0aW9uKCdyZWFkIGZyb20nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVsZWFzZUxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlTG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlbGVhc2VMb2NrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZFJlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyaWVkIHRvIHJlbGVhc2UgYSByZWFkZXIgbG9jayB3aGVuIHRoYXQgcmVhZGVyIGhhcyBwZW5kaW5nIHJlYWQoKSBjYWxscyB1bi1zZXR0bGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNSZWxlYXNlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jbG9zZWRQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgJyArICdieXRlIHNvdXJjZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29uc3RydWN0IGEgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGZvciBhIHN0cmVhbSBub3QgY29uc3RydWN0ZWQgd2l0aCBhIGJ5dGUgJyArICdzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0luaXRpYWxpemUodGhpcywgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkSW50b1JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUlzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoYnlvYlJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2NhbmNlbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFkZXJMb2NrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljQ2FuY2VsKHRoaXMsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3JlYWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkKHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWFkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYWRlckxvY2tFeGNlcHRpb24oJ3JlYWQgZnJvbScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigndmlldyBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuYnl0ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ3ZpZXcgbXVzdCBoYXZlIG5vbi16ZXJvIGJ5dGVMZW5ndGgnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyUmVhZCh0aGlzLCB2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVsZWFzZUxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlTG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnlvYlJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlbGVhc2VMb2NrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZWxlYXNlIGEgcmVhZGVyIGxvY2sgd2hlbiB0aGF0IHJlYWRlciBoYXMgcGVuZGluZyByZWFkKCkgY2FsbHMgdW4tc2V0dGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19yZWFkSW50b1JlcXVlc3RzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfcmVhZFJlcXVlc3RzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljSW5pdGlhbGl6ZShyZWFkZXIsIHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9yZWFkZXIgPSByZWFkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZChyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnLCAnc3RhdGUgbXVzdCBiZSBlcnJvcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZChyZWFkZXIsIHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0NhbmNlbChyZWFkZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtLl9yZWFkZXIgPT09IHJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZWplY3QocmVhZGVyLCBuZXcgVHlwZUVycm9yKCdSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtXFwncyBjbG9zZWRuZXNzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZChyZWFkZXIsIG5ldyBUeXBlRXJyb3IoJ1JlYWRlciB3YXMgcmVsZWFzZWQgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCB0byBtb25pdG9yIHRoZSBzdHJlYW1cXCdzIGNsb3NlZG5lc3MnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyUmVhZChyZWFkZXIsIHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSByZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9kaXN0dXJiZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclB1bGxJbnRvKHN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLCB2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlclJlYWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gcmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fZGlzdHVyYmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuX19wdWxsU3RlcHMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcihzdHJlYW0sIHVuZGVybHlpbmdTb3VyY2UsIHNpemUsIGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgYnkgdGhlIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VuZGVybHlpbmdTb3VyY2UgPSB1bmRlcmx5aW5nU291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlVG90YWxTaXplID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVsbEFnYWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHVsbGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxpemVkU3RyYXRlZ3kgPSBWYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneShzaXplLCBoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneVNpemUgPSBub3JtYWxpemVkU3RyYXRlZ3kuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneUhXTSA9IG5vcm1hbGl6ZWRTdHJhdGVneS5oaWdoV2F0ZXJNYXJrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBJbnZva2VPck5vb3AodW5kZXJseWluZ1NvdXJjZSwgJ3N0YXJ0JywgW3RoaXNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoc3RhcnRSZXN1bHQpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3B1bGxpbmcgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZChjb250cm9sbGVyLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkOyBkbyBub3QgY2xvc2UgaXQgYWdhaW4hJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSAoaW4gJyArIHN0YXRlICsgJyBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGNsb3NlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlbnF1ZXVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIChpbiAnICsgc3RhdGUgKyAnIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgZW5xdWV1ZWQgdG8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSh0aGlzLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyAnICsgc3RyZWFtLl9zdGF0ZSArICcgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fY2FuY2VsU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX2NhbmNlbFN0ZXBzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZUludm9rZU9yTm9vcCh0aGlzLl91bmRlcmx5aW5nU291cmNlLCAnY2FuY2VsJywgW3JlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX3B1bGxTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fcHVsbFN0ZXBzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9xdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBEZXF1ZXVlVmFsdWUodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSAmJiB0aGlzLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2h1bmssIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ1Byb21pc2UgPSBSZWFkYWJsZVN0cmVhbUFkZFJlYWRSZXF1ZXN0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGVuZGluZ1Byb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Rlc2lyZWRTaXplJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ191bmRlcmx5aW5nU291cmNlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZFB1bGwgPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRQdWxsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcHVsbEFnYWluID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWxsUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AoY29udHJvbGxlci5fdW5kZXJseWluZ1NvdXJjZSwgJ3B1bGwnLCBbY29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsQWdhaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnIHx8IHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fc3RhcnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkgPT09IHRydWUgJiYgUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2lyZWRTaXplID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzaXJlZFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShjb250cm9sbGVyLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlICYmIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZFJlcXVlc3Qoc3RyZWFtLCBjaHVuaywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtTaXplID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9zdHJhdGVneVNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyYXRlZ3lTaXplID0gY29udHJvbGxlci5fc3RyYXRlZ3lTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua1NpemUgPSBzdHJhdGVneVNpemUoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChjaHVua1NpemVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZChjb250cm9sbGVyLCBjaHVua1NpemVFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGNodW5rU2l6ZUU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZShjb250cm9sbGVyLCBjaHVuaywgY2h1bmtTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlbnF1ZXVlRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZChjb250cm9sbGVyLCBlbnF1ZXVlRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVucXVldWVFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1FcnJvcihzdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuX3N0cmF0ZWd5SFdNIC0gY29udHJvbGxlci5fcXVldWVUb3RhbFNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QoY29udHJvbGxlciwgdmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyID0gY29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92aWV3ID0gdmlldztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVzcG9uZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc3BvbmQoYnl0ZXNXcml0dGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieW9iUmVxdWVzdEJyYW5kQ2hlY2tFeGNlcHRpb24oJ3Jlc3BvbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmQodGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3Jlc3BvbmRXaXRoTmV3VmlldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc3BvbmRXaXRoTmV3Vmlldyh2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieW9iUmVxdWVzdEJyYW5kQ2hlY2tFeGNlcHRpb24oJ3Jlc3BvbmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcodmlldykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1lvdSBjYW4gb25seSByZXNwb25kIHdpdGggYXJyYXkgYnVmZmVyIHZpZXdzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZFdpdGhOZXdWaWV3KHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLCB2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAndmlldycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl92aWV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoc3RyZWFtLCB1bmRlcmx5aW5nQnl0ZVNvdXJjZSwgaGlnaFdhdGVyTWFyaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuICcgKyAnYSBieXRlIHNvdXJjZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbiBvbmx5IGJlIGNyZWF0ZWQgYnkgdGhlIFJlYWRhYmxlU3RyZWFtIGNvbnN0cnVjdG9yIGdpdmVuIGEgYnl0ZSAnICsgJ3NvdXJjZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSA9IHVuZGVybHlpbmdCeXRlU291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1bGxBZ2FpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1bGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlID0gdGhpcy5fcXVldWVUb3RhbFNpemUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZVJlcXVlc3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJhdGVneUhXTSA9IFZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayhoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXV0b0FsbG9jYXRlQ2h1bmtTaXplID0gdW5kZXJseWluZ0J5dGVTb3VyY2UuYXV0b0FsbG9jYXRlQ2h1bmtTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSkgPT09IGZhbHNlIHx8IGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYXV0b0FsbG9jYXRlQ2h1bmtTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemUgPSBhdXRvQWxsb2NhdGVDaHVua1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1B1bGxJbnRvcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBJbnZva2VPck5vb3AodW5kZXJseWluZ0J5dGVTb3VyY2UsICdzdGFydCcsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHN0YXJ0UmVzdWx0KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsaW5nID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQ7IGRvIG5vdCBjbG9zZSBpdCBhZ2FpbiEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIChpbiAnICsgc3RhdGUgKyAnIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xvc2UodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2VucXVldWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnF1ZXVlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2VucXVldWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyZWFtIGlzIGNsb3NlZCBvciBkcmFpbmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gKGluICcgKyBzdGF0ZSArICcgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBlbnF1ZXVlZCB0bycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgY2FuIG9ubHkgZW5xdWV1ZSBhcnJheSBidWZmZXIgdmlld3Mgd2hlbiB1c2luZyBhIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlKHRoaXMsIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzICcgKyBzdHJlYW0uX3N0YXRlICsgJyBhbmQgc28gY2Fubm90IGJlIGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcih0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19jYW5jZWxTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fY2FuY2VsU3RlcHMocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdERlc2NyaXB0b3IgPSB0aGlzLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REZXNjcmlwdG9yLmJ5dGVzRmlsbGVkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlSW52b2tlT3JOb29wKHRoaXMuX3VuZGVybHlpbmdCeXRlU291cmNlLCAnY2FuY2VsJywgW3JlYXNvbl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX3B1bGxTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fcHVsbFN0ZXBzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyKHN0cmVhbSkgPT09IHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9xdWV1ZVRvdGFsU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRSZXF1ZXN0cyhzdHJlYW0pID09PSAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy5fcXVldWUuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVUb3RhbFNpemUgLT0gZW50cnkuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJIYW5kbGVRdWV1ZURyYWluKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlldyA9IG5ldyBVaW50OEFycmF5KGVudHJ5LmJ1ZmZlciwgZW50cnkuYnl0ZU9mZnNldCwgZW50cnkuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoICh2aWV3RSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh2aWV3RSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh2aWV3LCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSA9IHRoaXMuX2F1dG9BbGxvY2F0ZUNodW5rU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0b0FsbG9jYXRlQ2h1bmtTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChidWZmZXJFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGJ1ZmZlckUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbEludG9EZXNjcmlwdG9yID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVPZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aDogYXV0b0FsbG9jYXRlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzRmlsbGVkOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTaXplOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6IFVpbnQ4QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyVHlwZTogJ2RlZmF1bHQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nUHVsbEludG9zLnB1c2gocHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUmVhZGFibGVTdHJlYW1BZGRSZWFkUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2J5b2JSZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGJ5dGVTdHJlYW1Db250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignYnlvYlJlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ieW9iUmVxdWVzdCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RGVzY3JpcHRvciA9IHRoaXMuX3BlbmRpbmdQdWxsSW50b3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGZpcnN0RGVzY3JpcHRvci5idWZmZXIsIGZpcnN0RGVzY3JpcHRvci5ieXRlT2Zmc2V0ICsgZmlyc3REZXNjcmlwdG9yLmJ5dGVzRmlsbGVkLCBmaXJzdERlc2NyaXB0b3IuYnl0ZUxlbmd0aCAtIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ieW9iUmVxdWVzdCA9IG5ldyBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHRoaXMsIHZpZXcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J5b2JSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdkZXNpcmVkU2l6ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Rlc2lyZWRTaXplJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldERlc2lyZWRTaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfdW5kZXJseWluZ0J5dGVTb3VyY2UnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hvdWxkUHVsbCA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaG91bGRDYWxsUHVsbChjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFB1bGwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3B1bGxpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsQWdhaW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxQcm9taXNlID0gUHJvbWlzZUludm9rZU9yTm9vcChjb250cm9sbGVyLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSwgJ3B1bGwnLCBbY29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbGluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsQWdhaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJJbnZhbGlkYXRlQllPQlJlcXVlc3QoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29tbWl0UHVsbEludG9EZXNjcmlwdG9yKHN0cmVhbSwgcHVsbEludG9EZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSAhPT0gJ2Vycm9yZWQnLCAnc3RhdGUgbXVzdCBub3QgYmUgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsZWRWaWV3ID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbnZlcnRQdWxsSW50b0Rlc2NyaXB0b3IocHVsbEludG9EZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1bGxJbnRvRGVzY3JpcHRvci5yZWFkZXJUeXBlID09PSAnZGVmYXVsdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUZ1bGZpbGxSZWFkUmVxdWVzdChzdHJlYW0sIGZpbGxlZFZpZXcsIGRvbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocHVsbEludG9EZXNjcmlwdG9yLnJlYWRlclR5cGUgPT09ICdieW9iJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZEludG9SZXF1ZXN0KHN0cmVhbSwgZmlsbGVkVmlldywgZG9uZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29udmVydFB1bGxJbnRvRGVzY3JpcHRvcihwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlc0ZpbGxlZCA9IHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50U2l6ZSA9IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChieXRlc0ZpbGxlZCA8PSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnl0ZXNGaWxsZWQgJSBlbGVtZW50U2l6ZSA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHB1bGxJbnRvRGVzY3JpcHRvci5jdG9yKHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIsIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlT2Zmc2V0LCBieXRlc0ZpbGxlZCAvIGVsZW1lbnRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlQ2h1bmtUb1F1ZXVlKGNvbnRyb2xsZXIsIGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyOiBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZU9mZnNldDogYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlTGVuZ3RoOiBieXRlTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgKz0gYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsUHVsbEludG9EZXNjcmlwdG9yRnJvbVF1ZXVlKGNvbnRyb2xsZXIsIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRTaXplID0gcHVsbEludG9EZXNjcmlwdG9yLmVsZW1lbnRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRBbGlnbmVkQnl0ZXMgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgLSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgJSBlbGVtZW50U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhCeXRlc1RvQ29weSA9IE1hdGgubWluKGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplLCBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZUxlbmd0aCAtIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4Qnl0ZXNGaWxsZWQgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgKyBtYXhCeXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhBbGlnbmVkQnl0ZXMgPSBtYXhCeXRlc0ZpbGxlZCAtIG1heEJ5dGVzRmlsbGVkICUgZWxlbWVudFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyA9IG1heEJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWR5ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhBbGlnbmVkQnl0ZXMgPiBjdXJyZW50QWxpZ25lZEJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyA9IG1heEFsaWduZWRCeXRlcyAtIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IGNvbnRyb2xsZXIuX3F1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZE9mUXVldWUgPSBxdWV1ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXNUb0NvcHkgPSBNYXRoLm1pbih0b3RhbEJ5dGVzVG9Db3B5UmVtYWluaW5nLCBoZWFkT2ZRdWV1ZS5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdFN0YXJ0ID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVPZmZzZXQgKyBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJDb3B5KHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIsIGRlc3RTdGFydCwgaGVhZE9mUXVldWUuYnVmZmVyLCBoZWFkT2ZRdWV1ZS5ieXRlT2Zmc2V0LCBieXRlc1RvQ29weSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZE9mUXVldWUuYnl0ZUxlbmd0aCA9PT0gYnl0ZXNUb0NvcHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkT2ZRdWV1ZS5ieXRlT2Zmc2V0ICs9IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkT2ZRdWV1ZS5ieXRlTGVuZ3RoIC09IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplIC09IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsSGVhZFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLCBieXRlc1RvQ29weSwgcHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEJ5dGVzVG9Db3B5UmVtYWluaW5nIC09IGJ5dGVzVG9Db3B5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZHkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplID09PSAwLCAncXVldWUgbXVzdCBiZSBlbXB0eScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgPiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkIDwgcHVsbEludG9EZXNjcmlwdG9yLmVsZW1lbnRTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZpbGxIZWFkUHVsbEludG9EZXNjcmlwdG9yKGNvbnRyb2xsZXIsIHNpemUsIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID09PSAwIHx8IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3NbMF0gPT09IHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICs9IHNpemU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySGFuZGxlUXVldWVEcmFpbihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA9PT0gMCAmJiBjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtQ2xvc2UoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9ieW9iUmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdC5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdC5fdmlldyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX2J5b2JSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclByb2Nlc3NQdWxsSW50b0Rlc2NyaXB0b3JzVXNpbmdRdWV1ZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPT09IGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxJbnRvRGVzY3JpcHRvciA9IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3NbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZpbGxQdWxsSW50b0Rlc2NyaXB0b3JGcm9tUXVldWUoY29udHJvbGxlciwgcHVsbEludG9EZXNjcmlwdG9yKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hpZnRQZW5kaW5nUHVsbEludG8oY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb21taXRQdWxsSW50b0Rlc2NyaXB0b3IoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLCBwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQdWxsSW50byhjb250cm9sbGVyLCB2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRTaXplID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXcuY29uc3RydWN0b3IgIT09IERhdGFWaWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNpemUgPSB2aWV3LmNvbnN0cnVjdG9yLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3RvciA9IHZpZXcuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbEludG9EZXNjcmlwdG9yID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogdmlldy5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZU9mZnNldDogdmlldy5ieXRlT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVMZW5ndGg6IHZpZXcuYnl0ZUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc0ZpbGxlZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2l6ZTogZWxlbWVudFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3RvcjogY3RvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXJUeXBlOiAnYnlvYidcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MucHVzaChwdWxsSW50b0Rlc2NyaXB0b3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQWRkUmVhZEludG9SZXF1ZXN0KHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbXB0eVZpZXcgPSBuZXcgdmlldy5jb25zdHJ1Y3RvcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZU9mZnNldCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGVtcHR5VmlldywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsUHVsbEludG9EZXNjcmlwdG9yRnJvbVF1ZXVlKGNvbnRyb2xsZXIsIHB1bGxJbnRvRGVzY3JpcHRvcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGxlZFZpZXcgPSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29udmVydFB1bGxJbnRvRGVzY3JpcHRvcihwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySGFuZGxlUXVldWVEcmFpbihjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGZpbGxlZFZpZXcsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gbmV3IFR5cGVFcnJvcignSW5zdWZmaWNpZW50IGJ5dGVzIHRvIGZpbGwgZWxlbWVudHMgaW4gdGhlIGdpdmVuIGJ1ZmZlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIgPSBUcmFuc2ZlckFycmF5QnVmZmVyKHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnB1c2gocHVsbEludG9EZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBSZWFkYWJsZVN0cmVhbUFkZFJlYWRJbnRvUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW5DbG9zZWRTdGF0ZShjb250cm9sbGVyLCBmaXJzdERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGVzY3JpcHRvci5idWZmZXIgPSBUcmFuc2ZlckFycmF5QnVmZmVyKGZpcnN0RGVzY3JpcHRvci5idWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA9PT0gMCwgJ2J5dGVzRmlsbGVkIG11c3QgYmUgMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlU3RyZWFtSGFzQllPQlJlYWRlcihzdHJlYW0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZEludG9SZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbEludG9EZXNjcmlwdG9yID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29tbWl0UHVsbEludG9EZXNjcmlwdG9yKHN0cmVhbSwgcHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEluUmVhZGFibGVTdGF0ZShjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4sIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCArIGJ5dGVzV3JpdHRlbiA+IHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2J5dGVzV3JpdHRlbiBvdXQgb2YgcmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckZpbGxIZWFkUHVsbEludG9EZXNjcmlwdG9yKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbiwgcHVsbEludG9EZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA8IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmRlclNpemUgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgJSBwdWxsSW50b0Rlc2NyaXB0b3IuZWxlbWVudFNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1haW5kZXJTaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZU9mZnNldCArIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluZGVyID0gcHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlci5zbGljZShlbmQgLSByZW1haW5kZXJTaXplLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlQ2h1bmtUb1F1ZXVlKGNvbnRyb2xsZXIsIHJlbWFpbmRlciwgMCwgcmVtYWluZGVyLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCAtPSByZW1haW5kZXJTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUHJvY2Vzc1B1bGxJbnRvRGVzY3JpcHRvcnNVc2luZ1F1ZXVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbnRlcm5hbChjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdERlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdieXRlc1dyaXR0ZW4gbXVzdCBiZSAwIHdoZW4gY2FsbGluZyByZXNwb25kKCkgb24gYSBjbG9zZWQgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbkNsb3NlZFN0YXRlKGNvbnRyb2xsZXIsIGZpcnN0RGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEluUmVhZGFibGVTdGF0ZShjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4sIGZpcnN0RGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hpZnRQZW5kaW5nUHVsbEludG8oY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJJbnZhbGlkYXRlQllPQlJlcXVlc3QoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaG91bGRDYWxsUHVsbChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fc3RhcnRlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkYWJsZVN0cmVhbUhhc0RlZmF1bHRSZWFkZXIoc3RyZWFtKSA9PT0gdHJ1ZSAmJiBSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRSZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVTdHJlYW1IYXNCWU9CUmVhZGVyKHN0cmVhbSkgPT09IHRydWUgJiYgUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkSW50b1JlcXVlc3RzKHN0cmVhbSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcikgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbG9zZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0UGVuZGluZ1B1bGxJbnRvID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvc1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFBlbmRpbmdQdWxsSW50by5ieXRlc0ZpbGxlZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBuZXcgVHlwZUVycm9yKCdJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtQ2xvc2Uoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlKGNvbnRyb2xsZXIsIGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gY2h1bmsuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVPZmZzZXQgPSBjaHVuay5ieXRlT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVMZW5ndGggPSBjaHVuay5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVycmVkQnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihidWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyKHN0cmVhbSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCB0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3F1ZXVlLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2ZlcnJlZFZpZXcgPSBuZXcgVWludDhBcnJheSh0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRSZXF1ZXN0KHN0cmVhbSwgdHJhbnNmZXJyZWRWaWV3LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJFbnF1ZXVlQ2h1bmtUb1F1ZXVlKGNvbnRyb2xsZXIsIHRyYW5zZmVycmVkQnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUHJvY2Vzc1B1bGxJbnRvRGVzY3JpcHRvcnNVc2luZ1F1ZXVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSBmYWxzZSwgJ3N0cmVhbSBtdXN0IG5vdCBiZSBsb2NrZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCB0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDbGVhclBlbmRpbmdQdWxsSW50b3MoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1FcnJvcihzdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLl9zdHJhdGVneUhXTSAtIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmQoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc1dyaXR0ZW4gPSBOdW1iZXIoYnl0ZXNXcml0dGVuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIoYnl0ZXNXcml0dGVuKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYnl0ZXNXcml0dGVuIG11c3QgYmUgYSBmaW5pdGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEludGVybmFsKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZFdpdGhOZXdWaWV3KGNvbnRyb2xsZXIsIHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RGVzY3JpcHRvciA9IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3NbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdERlc2NyaXB0b3IuYnl0ZU9mZnNldCArIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCAhPT0gdmlldy5ieXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgZG9lcyBub3QgbWF0Y2ggYnlvYlJlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RGVzY3JpcHRvci5ieXRlTGVuZ3RoICE9PSB2aWV3LmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIGJ1ZmZlciBvZiB2aWV3IGhhcyBkaWZmZXJlbnQgY2FwYWNpdHkgdGhhbiBieW9iUmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERlc2NyaXB0b3IuYnVmZmVyID0gdmlldy5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEludGVybmFsKGNvbnRyb2xsZXIsIHZpZXcuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZGVyTG9ja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90ICcgKyBuYW1lICsgJyBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlci5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZChyZWFkZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVqZWN0KHJlYWRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVhZGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdChyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZChyZWFkZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UgPSBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZXNvbHZlKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnlvYlJlcXVlc3RCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0LnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5dGVTdHJlYW1Db250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpZklzT2JqZWN0QW5kSGFzQVByb21pc2VJc0hhbmRsZWRJbnRlcm5hbFNsb3RTZXRQcm9taXNlSXNIYW5kbGVkVG9UcnVlKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5wcm90b3R5cGUudGhlbi5jYWxsKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRhYmxlU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0KTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGFibGVTdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVHJhbnNmb3JtU3RyZWFtID0gdHJhbnNmb3JtU3RyZWFtLlRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbSA9IHJlYWRhYmxlU3RyZWFtLlJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLklzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQgPSByZWFkYWJsZVN0cmVhbS5Jc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSA9IHJlYWRhYmxlU3RyZWFtLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSA9IHJlYWRhYmxlU3RyZWFtLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvciA9IHJlYWRhYmxlU3RyZWFtLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUgPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemU7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciA9IHdyaXRhYmxlU3RyZWFtLkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuSXNXcml0YWJsZVN0cmVhbSA9IHdyaXRhYmxlU3RyZWFtLklzV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCA9IHdyaXRhYmxlU3RyZWFtLklzV3JpdGFibGVTdHJlYW1Mb2NrZWQ7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW0gPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Xcml0YWJsZVN0cmVhbUFib3J0ID0gd3JpdGFibGVTdHJlYW0uV3JpdGFibGVTdHJlYW1BYm9ydDtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Xcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IgPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbiA9IHdyaXRhYmxlU3RyZWFtLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb247XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSA9IHdyaXRhYmxlU3RyZWFtLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2U7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUgPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG4gICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgPSBfcmVxdWlyZS5hc3NlcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VPck5vb3AgPSBfcmVxdWlyZTIuSW52b2tlT3JOb29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZUludm9rZU9yUGVyZm9ybUZhbGxiYWNrID0gX3JlcXVpcmUyLlByb21pc2VJbnZva2VPclBlcmZvcm1GYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2VJbnZva2VPck5vb3AgPSBfcmVxdWlyZTIuUHJvbWlzZUludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVJc09iamVjdCA9IF9yZXF1aXJlMi50eXBlSXNPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNCksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbSA9IF9yZXF1aXJlMy5SZWFkYWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSA9IF9yZXF1aXJlMy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSA9IF9yZXF1aXJlMy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvciA9IF9yZXF1aXJlMy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUgPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW0gPSBfcmVxdWlyZTQuV3JpdGFibGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IgPSBfcmVxdWlyZTQuV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUNsb3NlUmVhZGFibGUodHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtIGlzIGFscmVhZHkgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlIHNpZGUgaXMgYWxyZWFkeSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtQ2xvc2VSZWFkYWJsZUludGVybmFsKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1FbnF1ZXVlVG9SZWFkYWJsZSh0cmFuc2Zvcm1TdHJlYW0sIGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtIGlzIGFscmVhZHkgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlIHNpZGUgaXMgYWxyZWFkeSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSB0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ29udHJvbGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShjb250cm9sbGVyLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJZk5lZWRlZCh0cmFuc2Zvcm1TdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHRyYW5zZm9ybVN0cmVhbS5fc3RvcmVkRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNpcmVkU2l6ZSA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXliZUJhY2twcmVzc3VyZSA9IGRlc2lyZWRTaXplIDw9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZUJhY2twcmVzc3VyZSA9PT0gdHJ1ZSAmJiB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUodHJhbnNmb3JtU3RyZWFtLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUVycm9yKHRyYW5zZm9ybVN0cmVhbSwgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtQ2xvc2VSZWFkYWJsZUludGVybmFsKHRyYW5zZm9ybVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPT09IGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRXJyb3JJZk5lZWRlZCh0cmFuc2Zvcm1TdHJlYW0sIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3N0b3JlZEVycm9yID0gZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fd3JpdGFibGVEb25lID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcih0cmFuc2Zvcm1TdHJlYW0uX3dyaXRhYmxlQ29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ2xvc2VkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcih0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1SZWFkYWJsZVJlYWR5UHJvbWlzZSh0cmFuc2Zvcm1TdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgIT09IHVuZGVmaW5lZCwgJ19iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlLCAnX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKHRyYW5zZm9ybVN0cmVhbSwgYmFja3ByZXNzdXJlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgIT09IGJhY2twcmVzc3VyZSwgJ1RyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSgpIHNob3VsZCBiZSBjYWxsZWQgb25seSB3aGVuIGJhY2twcmVzc3VyZSBpcyBjaGFuZ2VkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlKGJhY2twcmVzc3VyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZS50aGVuKGZ1bmN0aW9uIChyZXNvbHV0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlc29sdXRpb24gIT09IGJhY2twcmVzc3VyZSwgJ19iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBiZSBmdWxmaWxsZWQgb25seSB3aGVuIGJhY2twcmVzc3VyZSBpcyBjaGFuZ2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgPSBiYWNrcHJlc3N1cmU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0VHJhbnNmb3JtKGNodW5rLCB0cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlci5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVucXVldWVUb1JlYWRhYmxlKHRyYW5zZm9ybVN0cmVhbSwgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtVHJhbnNmb3JtKHRyYW5zZm9ybVN0cmVhbSwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybWluZyA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybWluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSB0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtUHJvbWlzZSA9IFByb21pc2VJbnZva2VPclBlcmZvcm1GYWxsYmFjayh0cmFuc2Zvcm1lciwgJ3RyYW5zZm9ybScsIFtjaHVuaywgY29udHJvbGxlcl0sIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRUcmFuc2Zvcm0sIFtjaHVuaywgY29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtUmVhZGFibGVSZWFkeVByb21pc2UodHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJZk5lZWRlZCh0cmFuc2Zvcm1TdHJlYW0sIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNUcmFuc2Zvcm1TdHJlYW0oeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUcmFuc2Zvcm1TdHJlYW1TaW5rID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtU2luayh0cmFuc2Zvcm1TdHJlYW0sIHN0YXJ0UHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2Zvcm1TdHJlYW1TaW5rKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFByb21pc2UgPSBzdGFydFByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUcmFuc2Zvcm1TdHJlYW1TaW5rLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3N0YXJ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc3RhcnQoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdGhpcy5fdHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3dyaXRhYmxlQ29udHJvbGxlciA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGFydFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtUmVhZGFibGVSZWFkeVByb21pc2UodHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3dyaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gd3JpdGUoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbVRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJlYW0sIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnYWJvcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhYm9ydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl93cml0YWJsZURvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FcnJvckludGVybmFsKHRyYW5zZm9ybVN0cmVhbSwgbmV3IFR5cGVFcnJvcignV3JpdGFibGUgc2lkZSBhYm9ydGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdGhpcy5fdHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1pbmcgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl93cml0YWJsZURvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmx1c2hQcm9taXNlID0gUHJvbWlzZUludm9rZU9yTm9vcCh0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybWVyLCAnZmx1c2gnLCBbdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbHVzaFByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRyYW5zZm9ybVN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1DbG9zZVJlYWRhYmxlSW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJZk5lZWRlZCh0cmFuc2Zvcm1TdHJlYW0sIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHRyYW5zZm9ybVN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW1TaW5rO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRyYW5zZm9ybVN0cmVhbVNvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVNvdXJjZSh0cmFuc2Zvcm1TdHJlYW0sIHN0YXJ0UHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2Zvcm1TdHJlYW1Tb3VyY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtU3RyZWFtID0gdHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0UHJvbWlzZSA9IHN0YXJ0UHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRyYW5zZm9ybVN0cmVhbVNvdXJjZSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0KGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXIgPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSAhPT0gdW5kZWZpbmVkLCAnX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2Ugc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gZmFsc2UsICdfYmFja3ByZXNzdXJlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdwdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcHVsbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlLCAncHVsbCgpIHNob3VsZCBiZSBuZXZlciBjYWxsZWQgd2hpbGUgX2JhY2twcmVzc3VyZSBpcyBmYWxzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlICE9PSB1bmRlZmluZWQsICdfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSh0cmFuc2Zvcm1TdHJlYW0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdGhpcy5fdHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlIHNpZGUgY2FuY2VsZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtU291cmNlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIodHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbSh0cmFuc2Zvcm1TdHJlYW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSAnICsgJ2NvbnN0cnVjdGVkIHdpdGggYSBUcmFuc2Zvcm1TdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgaW5zdGFuY2VzIGNhbiAnICsgJ29ubHkgYmUgY3JlYXRlZCBieSB0aGUgVHJhbnNmb3JtU3RyZWFtIGNvbnN0cnVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2VucXVldWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnF1ZXVlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlbnF1ZXVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FbnF1ZXVlVG9SZWFkYWJsZSh0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtQ2xvc2VSZWFkYWJsZSh0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlcnJvcihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Vycm9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FcnJvcih0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdkZXNpcmVkU2l6ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdkZXNpcmVkU2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZUNvbnRyb2xsZXIgPSB0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShyZWFkYWJsZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRyYW5zZm9ybVN0cmVhbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRyYW5zZm9ybVN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZVN0cmF0ZWd5ID0gdHJhbnNmb3JtZXIucmVhZGFibGVTdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGVTdHJhdGVneSA9IHRyYW5zZm9ybWVyLndyaXRhYmxlU3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZURvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZUNsb3NlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhY2twcmVzc3VyZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydFByb21pc2VfcmVzb2x2ZSA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBuZXcgVHJhbnNmb3JtU3RyZWFtU291cmNlKHRoaXMsIHN0YXJ0UHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGUgPSBuZXcgUmVhZGFibGVTdHJlYW0oc291cmNlLCByZWFkYWJsZVN0cmF0ZWd5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2luayA9IG5ldyBUcmFuc2Zvcm1TdHJlYW1TaW5rKHRoaXMsIHN0YXJ0UHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGUgPSBuZXcgV3JpdGFibGVTdHJlYW0oc2luaywgd3JpdGFibGVTdHJhdGVneSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRoaXMuX3dyaXRhYmxlQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodGhpcy5fcmVhZGFibGVDb250cm9sbGVyICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNpcmVkU2l6ZSA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSh0aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSh0aGlzLCBkZXNpcmVkU2l6ZSA8PSAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyZWFtID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRSZXN1bHQgPSBJbnZva2VPck5vb3AodHJhbnNmb3JtZXIsICdzdGFydCcsIFt0cmFuc2Zvcm1TdHJlYW0uX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFByb21pc2VfcmVzb2x2ZShzdGFydFJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9zdG9yZWRFcnJvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRyYW5zZm9ybVN0cmVhbSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZWFkYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3dyaXRhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzVHJhbnNmb3JtU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbignd3JpdGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93cml0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbTogVHJhbnNmb3JtU3RyZWFtXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFRyYW5zZm9ybVN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNSk7XG4gICAgICAgICAgICAgICAgfV0pKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQ5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzVVJMU3VwcG9ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgVVJMID09PSAnZnVuY3Rpb24nICYmIF90eXBlb2YoVVJMLnByb3RvdHlwZSkgPT09ICdvYmplY3QnICYmICdvcmlnaW4nIGluIFVSTC5wcm90b3R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdSA9IG5ldyBVUkwoJ2InLCAnaHR0cDovL2EnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1LnBhdGhuYW1lID0gJ2MlMjBkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1VSTFN1cHBvcnRlZCA9IHUuaHJlZiA9PT0gJ2h0dHA6Ly9hL2MlMjBkJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVVJMU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlVSTCA9IFVSTDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBQb2x5ZmlsbFVSTCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUwKS5VUkw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBPcmlnaW5hbFVSTCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCkuVVJMO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT3JpZ2luYWxVUkwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2x5ZmlsbFVSTC5jcmVhdGVPYmplY3RVUkwgPSBmdW5jdGlvbiAoYmxvYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT3JpZ2luYWxVUkwuY3JlYXRlT2JqZWN0VVJMLmFwcGx5KE9yaWdpbmFsVVJMLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2x5ZmlsbFVSTC5yZXZva2VPYmplY3RVUkwgPSBmdW5jdGlvbiAodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVVJMID0gUG9seWZpbGxVUkw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIChmdW5jdGlvbiBVUkxDb25zdHJ1Y3RvckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICd1c2Ugc3RyaWN0JztcblxuICAgICAgICAgICAgICAgICAgICB2YXIgcmVsYXRpdmUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnZnRwJ10gPSAyMTtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ2ZpbGUnXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWydnb3BoZXInXSA9IDcwO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnaHR0cCddID0gODA7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWydodHRwcyddID0gNDQzO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnd3MnXSA9IDgwO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnd3NzJ10gPSA0NDM7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZVBhdGhEb3RNYXBwaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVQYXRoRG90TWFwcGluZ1snJTJlJ10gPSAnLic7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbJy4lMmUnXSA9ICcuLic7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbJyUyZS4nXSA9ICcuLic7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbJyUyZSUyZSddID0gJy4uJztcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1JlbGF0aXZlU2NoZW1lKHNjaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbGF0aXZlW3NjaGVtZV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGludmFsaWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElETkFUb0FTQ0lJKGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGgudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBlcmNlbnRFc2NhcGUoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSBjLmNoYXJDb2RlQXQoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlID4gMHgyMCAmJiB1bmljb2RlIDwgMHg3RiAmJiBbMHgyMiwgMHgyMywgMHgzQywgMHgzRSwgMHgzRiwgMHg2MF0uaW5kZXhPZih1bmljb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBlcmNlbnRFc2NhcGVRdWVyeShjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5pY29kZSA9IGMuY2hhckNvZGVBdCgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgPiAweDIwICYmIHVuaWNvZGUgPCAweDdGICYmIFsweDIyLCAweDIzLCAweDNDLCAweDNFLCAweDYwXS5pbmRleE9mKHVuaWNvZGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIEVPRixcbiAgICAgICAgICAgICAgICAgICAgICAgIEFMUEhBID0gL1thLXpBLVpdLyxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFMUEhBTlVNRVJJQyA9IC9bYS16QS1aMC05XFwrXFwtXFwuXS87XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIHN0YXRlT3ZlcnJpZGUsIGJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVycihtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0YXRlT3ZlcnJpZGUgfHwgJ3NjaGVtZSBzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQXQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQnJhY2tldCA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsb29wOiB3aGlsZSAoKGlucHV0W2N1cnNvciAtIDFdICE9PSBFT0YgfHwgY3Vyc29yID09PSAwKSAmJiAhdGhpcy5faXNJbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBpbnB1dFtjdXJzb3JdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzY2hlbWUgc3RhcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiYgQUxQSEEudGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnc2NoZW1lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdubyBzY2hlbWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgc2NoZW1lLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3NjaGVtZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAmJiBBTFBIQU5VTUVSSUMudGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc6Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZSA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVsYXRpdmVTY2hlbWUodGhpcy5fc2NoZW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JlbGF0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2NoZW1lID09PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNSZWxhdGl2ZSAmJiBiYXNlICYmIGJhc2UuX3NjaGVtZSA9PT0gdGhpcy5fc2NoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIG9yIGF1dGhvcml0eSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBmaXJzdCBzbGFzaCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnc2NoZW1lIGRhdGEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ25vIHNjaGVtZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IEVPRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignQ29kZSBwb2ludCBub3QgYWxsb3dlZCBpbiBzY2hlbWU6ICcgKyBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzY2hlbWUgZGF0YSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSAnPyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncXVlcnknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFnbWVudCA9ICcjJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdmcmFnbWVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBFT0YgJiYgYyAhPT0gJ1xcdCcgJiYgYyAhPT0gJ1xcbicgJiYgYyAhPT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZW1lRGF0YSArPSBwZXJjZW50RXNjYXBlKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm8gc2NoZW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYmFzZSB8fCAhaXNSZWxhdGl2ZVNjaGVtZShiYXNlLl9zY2hlbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdNaXNzaW5nIHNjaGVtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUgb3IgYXV0aG9yaXR5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnLycgJiYgaW5wdXRbY3Vyc29yICsgMV0gPT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignRXhwZWN0ZWQgLywgZ290OiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWxhdGl2ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JlbGF0aXZlID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSAhPT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZW1lID0gYmFzZS5fc2NoZW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gRU9GKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aCA9IGJhc2UuX3BhdGguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9IGJhc2UuX3F1ZXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gYmFzZS5fdXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFzc3dvcmQgPSBiYXNlLl9wYXNzd29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnLycgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ1xcXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHNsYXNoJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aCA9IGJhc2UuX3BhdGguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9ICc/JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VybmFtZSA9IGJhc2UuX3VzZXJuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gYmFzZS5fcGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncXVlcnknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gYmFzZS5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gYmFzZS5fcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gYmFzZS5fcGF0aC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ID0gYmFzZS5fcXVlcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlcm5hbWUgPSBiYXNlLl91c2VybmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IGJhc2UuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2ZyYWdtZW50JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRDID0gaW5wdXRbY3Vyc29yICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHROZXh0QyA9IGlucHV0W2N1cnNvciArIDJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSAhPT0gJ2ZpbGUnIHx8ICFBTFBIQS50ZXN0KGMpIHx8IG5leHRDICE9PSAnOicgJiYgbmV4dEMgIT09ICd8JyB8fCBuZXh0TmV4dEMgIT09IEVPRiAmJiBuZXh0TmV4dEMgIT09ICcvJyAmJiBuZXh0TmV4dEMgIT09ICdcXFxcJyAmJiBuZXh0TmV4dEMgIT09ICc/JyAmJiBuZXh0TmV4dEMgIT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gYmFzZS5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gYmFzZS5fdXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gYmFzZS5fcGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBiYXNlLl9wYXRoLnNsaWNlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUgc2xhc2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignXFxcXCBpcyBhbiBpbnZhbGlkIGNvZGUgcG9pbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2ZpbGUgaG9zdCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gYmFzZS5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gYmFzZS5fdXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gYmFzZS5fcGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhvcml0eSBmaXJzdCBzbGFzaCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5IHNlY29uZCBzbGFzaCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignRXhwZWN0ZWQgXFwnL1xcJywgZ290OiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXV0aG9yaXR5IHNlY29uZCBzbGFzaCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gJy8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdFeHBlY3RlZCBcXCcvXFwnLCBnb3Q6ICcgKyBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSAnLycgJiYgYyAhPT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdFeHBlY3RlZCBhdXRob3JpdHksIGdvdDogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRob3JpdHknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdAJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWVuQXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdAIGFscmVhZHkgc2Vlbi4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9ICclNDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5BdCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3AgPSBidWZmZXJbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNwID09PSAnXFx0JyB8fCBjcCA9PT0gJ1xcbicgfHwgY3AgPT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgd2hpdGVzcGFjZSBpbiBhdXRob3JpdHkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcCA9PT0gJzonICYmIHRoaXMuX3Bhc3N3b3JkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcEMgPSBwZXJjZW50RXNjYXBlKGNwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFzc3dvcmQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkICs9IHRlbXBDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlcm5hbWUgKz0gdGVtcEM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gRU9GIHx8IGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcgfHwgYyA9PT0gJz8nIHx8IGMgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciAtPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2hvc3QnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmlsZSBob3N0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJyB8fCBjID09PSAnPycgfHwgYyA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDIgJiYgQUxQSEEudGVzdChidWZmZXJbMF0pICYmIChidWZmZXJbMV0gPT09ICc6JyB8fCBidWZmZXJbMV0gPT09ICd8JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGggc3RhcnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSBJRE5BVG9BU0NJSS5jYWxsKHRoaXMsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoIHN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ1xcdCcgfHwgYyA9PT0gJ1xcbicgfHwgYyA9PT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgd2hpdGVzcGFjZSBpbiBmaWxlIGhvc3QuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdob3N0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG9zdG5hbWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICc6JyAmJiAhc2VlbkJyYWNrZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gSUROQVRvQVNDSUkuY2FsbCh0aGlzLCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3BvcnQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUgPT09ICdob3N0bmFtZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IEVPRiB8fCBjID09PSAnLycgfHwgYyA9PT0gJ1xcXFwnIHx8IGMgPT09ICc/JyB8fCBjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gSUROQVRvQVNDSUkuY2FsbCh0aGlzLCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGggc3RhcnQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJ1xcdCcgJiYgYyAhPT0gJ1xcbicgJiYgYyAhPT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1snKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5CcmFja2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICddJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQnJhY2tldCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgY29kZSBwb2ludCBpbiBob3N0L2hvc3RuYW1lOiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BvcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9bMC05XS8udGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBFT0YgfHwgYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJyB8fCBjID09PSAnPycgfHwgYyA9PT0gJyMnIHx8IHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IHBhcnNlSW50KGJ1ZmZlciwgMTApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wICE9PSByZWxhdGl2ZVt0aGlzLl9zY2hlbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gdGVtcCArICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlT3ZlcnJpZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoIHN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ1xcdCcgfHwgYyA9PT0gJ1xcbicgfHwgYyA9PT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0ludmFsaWQgY29kZSBwb2ludCBpbiBwb3J0OiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUgcGF0aCBzdGFydCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdcXCdcXFxcXFwnIG5vdCBhbGxvd2VkIGluIHBhdGguJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGgnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gJy8nICYmIGMgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZWxhdGl2ZSBwYXRoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJyB8fCAhc3RhdGVPdmVycmlkZSAmJiAoYyA9PT0gJz8nIHx8IGMgPT09ICcjJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignXFxcXCBub3QgYWxsb3dlZCBpbiByZWxhdGl2ZSBwYXRoLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wID0gcmVsYXRpdmVQYXRoRG90TWFwcGluZ1tidWZmZXIudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIgPT09ICcuLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gJy8nICYmIGMgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyID09PSAnLicgJiYgYyAhPT0gJy8nICYmIGMgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoLnB1c2goJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyICE9PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSA9PT0gJ2ZpbGUnICYmIHRoaXMuX3BhdGgubGVuZ3RoID09PSAwICYmIGJ1ZmZlci5sZW5ndGggPT09IDIgJiYgQUxQSEEudGVzdChidWZmZXJbMF0pICYmIGJ1ZmZlclsxXSA9PT0gJ3wnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXJbMF0gKyAnOic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnPycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSAnPyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3F1ZXJ5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFnbWVudCA9ICcjJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnZnJhZ21lbnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gJ1xcdCcgJiYgYyAhPT0gJ1xcbicgJiYgYyAhPT0gJ1xccicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gcGVyY2VudEVzY2FwZShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncXVlcnknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZU92ZXJyaWRlICYmIGMgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50ID0gJyMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2ZyYWdtZW50JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPT0gRU9GICYmIGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgKz0gcGVyY2VudEVzY2FwZVF1ZXJ5KGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmcmFnbWVudCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gRU9GICYmIGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZW1lRGF0YSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlcm5hbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFnbWVudCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNJbnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JlbGF0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBKVVJMKHVybCwgYmFzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2UgIT09IHVuZGVmaW5lZCAmJiAhKGJhc2UgaW5zdGFuY2VvZiBKVVJMKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UgPSBuZXcgSlVSTChTdHJpbmcoYmFzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cmwgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGVhci5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdXJsLnJlcGxhY2UoL15bIFxcdFxcclxcblxcZl0rfFsgXFx0XFxyXFxuXFxmXSskL2csICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgaW5wdXQsIG51bGwsIGJhc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSlVSTC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBocmVmKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXV0aG9yaXR5ID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdXNlcm5hbWUgIT09ICcnIHx8IHRoaXMuX3Bhc3N3b3JkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eSA9IHRoaXMuX3VzZXJuYW1lICsgKHRoaXMuX3Bhc3N3b3JkICE9PSBudWxsID8gJzonICsgdGhpcy5fcGFzc3dvcmQgOiAnJykgKyAnQCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvdG9jb2wgKyAodGhpcy5faXNSZWxhdGl2ZSA/ICcvLycgKyBhdXRob3JpdHkgKyB0aGlzLmhvc3QgOiAnJykgKyB0aGlzLnBhdGhuYW1lICsgdGhpcy5fcXVlcnkgKyB0aGlzLl9mcmFnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBocmVmKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBwcm90b2NvbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NoZW1lICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHByb3RvY29sKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSArICc6JywgJ3NjaGVtZSBzdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGhvc3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCA/ICcnIDogdGhpcy5fcG9ydCA/IHRoaXMuX2hvc3QgKyAnOicgKyB0aGlzLl9wb3J0IDogdGhpcy5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBob3N0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW52YWxpZCB8fCAhdGhpcy5faXNSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSwgJ2hvc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBob3N0bmFtZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBob3N0bmFtZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX2lzUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdob3N0bmFtZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHBvcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgcG9ydCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX2lzUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdwb3J0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgcGF0aG5hbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCA/ICcnIDogdGhpcy5faXNSZWxhdGl2ZSA/ICcvJyArIHRoaXMuX3BhdGguam9pbignLycpIDogdGhpcy5fc2NoZW1lRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwYXRobmFtZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX2lzUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlLCAncmVsYXRpdmUgcGF0aCBzdGFydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHNlYXJjaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9xdWVyeSB8fCB0aGlzLl9xdWVyeSA9PT0gJz8nID8gJycgOiB0aGlzLl9xdWVyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBzZWFyY2godmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9ICc/JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVswXSA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSwgJ3F1ZXJ5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaGFzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9mcmFnbWVudCB8fCB0aGlzLl9mcmFnbWVudCA9PT0gJyMnID8gJycgOiB0aGlzLl9mcmFnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBoYXNoKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnIyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF0gPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdmcmFnbWVudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IG9yaWdpbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9zdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX3NjaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLl9zY2hlbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdqYXZhc2NyaXB0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFpbHRvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmxvYic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSlVSTCh0aGlzLl9zY2hlbWVEYXRhKS5vcmlnaW4gfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoXykge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0ID0gdGhpcy5ob3N0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFob3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2NoZW1lICsgJzovLycgKyBob3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVVJMID0gSlVSTDtcbiAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk5ldHdvcmtQZGZNYW5hZ2VyID0gZXhwb3J0cy5Mb2NhbFBkZk1hbmFnZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NodW5rZWRfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9kb2N1bWVudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUzKTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBCYXNlUGRmTWFuYWdlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQmFzZVBkZk1hbmFnZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VQZGZNYW5hZ2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBCYXNlUGRmTWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhCYXNlUGRmTWFuYWdlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25Mb2FkZWRTdHJlYW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25Mb2FkZWRTdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgb25Mb2FkZWRTdHJlYW1gIGNhbGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlRG9jXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVuc3VyZURvYyhwcm9wLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LCBwcm9wLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImVuc3VyZVhSZWZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5zdXJlWFJlZihwcm9wLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsIHByb3AsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlQ2F0YWxvZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnN1cmVDYXRhbG9nKHByb3AsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZywgcHJvcCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhZ2UocGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZvbnRGYWxsYmFja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb250RmFsbGJhY2soaWQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNsZWFudXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9lbnN1cmUgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShvYmosIHByb3AsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVuc3VyZShfeCwgX3gyLCBfeDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZW5zdXJlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW5zdXJlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZXF1ZXN0UmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdExvYWRlZFN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RMb2FkZWRTdHJlYW1gIGNhbGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2VuZFByb2dyZXNzaXZlRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgc2VuZFByb2dyZXNzaXZlRGF0YWAgY2FsbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ1cGRhdGVQYXNzd29yZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGVQYXNzd29yZChwYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidGVybWluYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIGB0ZXJtaW5hdGVgIGNhbGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZG9jSWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RvY0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFzc3dvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZG9jQmFzZVVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9jQmFzZVVybCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RvY0Jhc2VVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhYnNvbHV0ZVVybCA9ICgwLCBfdXRpbC5jcmVhdGVWYWxpZEFic29sdXRlVXJsKSh0aGlzLl9kb2NCYXNlVXJsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFic29sdXRlVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jQmFzZVVybCA9IGFic29sdXRlVXJsLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIkludmFsaWQgYWJzb2x1dGUgZG9jQmFzZVVybDogXFxcIlwiLmNvbmNhdCh0aGlzLl9kb2NCYXNlVXJsLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnZG9jQmFzZVVybCcsIGRvY0Jhc2VVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhc2VQZGZNYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgTG9jYWxQZGZNYW5hZ2VyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Jhc2VQZGZNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoTG9jYWxQZGZNYW5hZ2VyLCBfQmFzZVBkZk1hbmFnZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMb2NhbFBkZk1hbmFnZXIoZG9jSWQsIGRhdGEsIHBhc3N3b3JkLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvY2FsUGRmTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihMb2NhbFBkZk1hbmFnZXIpLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kb2NJZCA9IGRvY0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9kb2NCYXNlVXJsID0gZG9jQmFzZVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5ldmFsdWF0b3JPcHRpb25zID0gZXZhbHVhdG9yT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnBkZkRvY3VtZW50ID0gbmV3IF9kb2N1bWVudC5QREZEb2N1bWVudChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKSwgc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKExvY2FsUGRmTWFuYWdlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9lbnN1cmUyID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKG9iaiwgcHJvcCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gb2JqW3Byb3BdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwgdmFsdWUuYXBwbHkob2JqLCBhcmdzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGVuc3VyZShfeDQsIF94NSwgX3g2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2Vuc3VyZTIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnN1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlcXVlc3RSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZXF1ZXN0TG9hZGVkU3RyZWFtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlcXVlc3RMb2FkZWRTdHJlYW0oKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkxvYWRlZFN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbkxvYWRlZFN0cmVhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0ZXJtaW5hdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGVybWluYXRlKCkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExvY2FsUGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgfShCYXNlUGRmTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkxvY2FsUGRmTWFuYWdlciA9IExvY2FsUGRmTWFuYWdlcjtcblxuICAgICAgICAgICAgICAgIHZhciBOZXR3b3JrUGRmTWFuYWdlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9CYXNlUGRmTWFuYWdlcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhOZXR3b3JrUGRmTWFuYWdlciwgX0Jhc2VQZGZNYW5hZ2VyMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE5ldHdvcmtQZGZNYW5hZ2VyKGRvY0lkLCBwZGZOZXR3b3JrU3RyZWFtLCBhcmdzLCBldmFsdWF0b3JPcHRpb25zLCBkb2NCYXNlVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOZXR3b3JrUGRmTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTmV0d29ya1BkZk1hbmFnZXIpLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fZG9jSWQgPSBkb2NJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3Bhc3N3b3JkID0gYXJncy5wYXNzd29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX2RvY0Jhc2VVcmwgPSBkb2NCYXNlVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5tc2dIYW5kbGVyID0gYXJncy5tc2dIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5ldmFsdWF0b3JPcHRpb25zID0gZXZhbHVhdG9yT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtTWFuYWdlciA9IG5ldyBfY2h1bmtlZF9zdHJlYW0uQ2h1bmtlZFN0cmVhbU1hbmFnZXIocGRmTmV0d29ya1N0cmVhbSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dIYW5kbGVyOiBhcmdzLm1zZ0hhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogYXJncy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRmV0Y2g6IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VDaHVua1NpemU6IGFyZ3MucmFuZ2VDaHVua1NpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucGRmRG9jdW1lbnQgPSBuZXcgX2RvY3VtZW50LlBERkRvY3VtZW50KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczIpKSwgX3RoaXMyLnN0cmVhbU1hbmFnZXIuZ2V0U3RyZWFtKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhOZXR3b3JrUGRmTWFuYWdlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZW5zdXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9lbnN1cmUzID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKG9iaiwgcHJvcCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My5wcmV2ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBvYmpbcHJvcF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdChcInJldHVyblwiLCB2YWx1ZS5hcHBseShvYmosIGFyZ3MpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoXCJyZXR1cm5cIiwgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0My50MCA9IF9jb250ZXh0M1tcImNhdGNoXCJdKDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY29udGV4dDMudDAgaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2NvbnRleHQzLnQwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdFJhbmdlKF9jb250ZXh0My50MC5iZWdpbiwgX2NvbnRleHQzLnQwLmVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdChcInJldHVyblwiLCB0aGlzLmVuc3VyZShvYmosIHByb3AsIGFyZ3MpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUzLCB0aGlzLCBbWzAsIDddXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZW5zdXJlKF94NywgX3g4LCBfeDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZW5zdXJlMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuc3VyZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdFJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlcXVlc3RSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdExvYWRlZFN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0TG9hZGVkU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2VuZFByb2dyZXNzaXZlRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZW5kUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtTWFuYWdlci5vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uTG9hZGVkU3RyZWFtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLm9uTG9hZGVkU3RyZWFtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0ZXJtaW5hdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGVybWluYXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbU1hbmFnZXIuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOZXR3b3JrUGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgfShCYXNlUGRmTWFuYWdlcik7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLk5ldHdvcmtQZGZNYW5hZ2VyID0gTmV0d29ya1BkZk1hbmFnZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ2h1bmtlZFN0cmVhbU1hbmFnZXIgPSBleHBvcnRzLkNodW5rZWRTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2h1bmtlZFN0cmVhbSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ2h1bmtlZFN0cmVhbShsZW5ndGgsIGNodW5rU2l6ZSwgbWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaHVua2VkU3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnl0ZXMgPSBuZXcgVWludDhBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNodW5rU2l6ZSA9IGNodW5rU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZENodW5rcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtQ2h1bmtzTG9hZGVkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bUNodW5rcyA9IE1hdGguY2VpbChsZW5ndGggLyBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFuYWdlciA9IG1hbmFnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bmsgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKENodW5rZWRTdHJlYW0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE1pc3NpbmdDaHVua3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TWlzc2luZ0NodW5rcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNodW5rID0gMCwgbiA9IHRoaXMubnVtQ2h1bmtzOyBjaHVuayA8IG47ICsrY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWRDaHVua3NbY2h1bmtdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNodW5rcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEJhc2VTdHJlYW1zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJhc2VTdHJlYW1zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RoaXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYWxsQ2h1bmtzTG9hZGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFsbENodW5rc0xvYWRlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkID09PSB0aGlzLm51bUNodW5rcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUmVjZWl2ZURhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25SZWNlaXZlRGF0YShiZWdpbiwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbiAlIGNodW5rU2l6ZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGJlZ2luIG9mZnNldDogXCIuY29uY2F0KGJlZ2luKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgJSBjaHVua1NpemUgIT09IDAgJiYgZW5kICE9PSB0aGlzLmJ5dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmFkIGVuZCBvZmZzZXQ6IFwiLmNvbmNhdChlbmQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnl0ZXMuc2V0KG5ldyBVaW50OEFycmF5KGNodW5rKSwgYmVnaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kQ2h1bmsgPSBNYXRoLmZsb29yKChlbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5udW1DaHVua3NMb2FkZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUmVjZWl2ZVByb2dyZXNzaXZlRGF0YVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHBvc2l0aW9uIC8gdGhpcy5jaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShkYXRhKSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRDaHVuayA9IHBvc2l0aW9uID49IHRoaXMuZW5kID8gdGhpcy5udW1DaHVua3MgOiBNYXRoLmZsb29yKHBvc2l0aW9uIC8gdGhpcy5jaHVua1NpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGN1ckNodW5rID0gYmVnaW5DaHVuazsgY3VyQ2h1bmsgPCBlbmRDaHVuazsgKytjdXJDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZENodW5rc1tjdXJDaHVua10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrdGhpcy5udW1DaHVua3NMb2FkZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImVuc3VyZUJ5dGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5zdXJlQnl0ZShwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gTWF0aC5mbG9vcihwb3MgLyB0aGlzLmNodW5rU2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rID09PSB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2NodW5rXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKHBvcywgcG9zICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJlbnN1cmVSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnN1cmVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbiA+PSBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPD0gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua1NpemUgPSB0aGlzLmNodW5rU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKGJlZ2luIC8gY2h1bmtTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZENodW5rID0gTWF0aC5mbG9vcigoZW5kIC0gMSkgLyBjaHVua1NpemUpICsgMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWRDaHVua3NbY2h1bmtdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJuZXh0RW1wdHlDaHVua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBuZXh0RW1wdHlDaHVuayhiZWdpbkNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1DaHVua3MgPSB0aGlzLm51bUNodW5rcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNodW5rczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSAoYmVnaW5DaHVuayArIGkpICUgbnVtQ2h1bmtzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubG9hZGVkQ2h1bmtzW2NodW5rXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaGFzQ2h1bmtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzQ2h1bmsoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhdGhpcy5sb2FkZWRDaHVua3NbY2h1bmtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0Qnl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRCeXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyA+PSB0aGlzLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVCeXRlKHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0VWludDE2XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFVpbnQxNigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIwID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRJbnQzMlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRJbnQzMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIwID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMSA9IHRoaXMuZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIzID0gdGhpcy5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0Qnl0ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Qnl0ZXMobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZUNsYW1wZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJFbmQgPSB0aGlzLmVuZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIHN0ckVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIHN0ckVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JjZUNsYW1wZWQgPyBuZXcgVWludDhDbGFtcGVkQXJyYXkoX3N1YmFycmF5KSA6IF9zdWJhcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBwb3MgKyBsZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZCA+IHN0ckVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RyRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShwb3MsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYXJyYXkgPSBieXRlcy5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JjZUNsYW1wZWQgPyBuZXcgVWludDhDbGFtcGVkQXJyYXkoc3ViYXJyYXkpIDogc3ViYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwZWVrQnl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwZWVrQnl0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlZWtlZEJ5dGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwZWVrQnl0ZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGVla0J5dGVzKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yY2VDbGFtcGVkID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gdGhpcy5nZXRCeXRlcyhsZW5ndGgsIGZvcmNlQ2xhbXBlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zIC09IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0Qnl0ZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJ5dGVSYW5nZShiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlUmFuZ2UoYmVnaW4sIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzLnN1YmFycmF5KGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2tpcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBza2lwKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZXNldFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibW92ZVN0YXJ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1vdmVTdGFydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydCA9IHRoaXMucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWFrZVN1YlN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYWtlU3ViU3RyZWFtKHN0YXJ0LCBsZW5ndGgsIGRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVSYW5nZShzdGFydCwgc3RhcnQgKyBsZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENodW5rZWRTdHJlYW1TdWJzdHJlYW0oKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZS5nZXRNaXNzaW5nQ2h1bmtzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IHRoaXMuY2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSBNYXRoLmZsb29yKHRoaXMuc3RhcnQgLyBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZENodW5rID0gTWF0aC5mbG9vcigodGhpcy5lbmQgLSAxKSAvIGNodW5rU2l6ZSkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pc3NpbmdDaHVua3MgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZENodW5rc1tjaHVua10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2luZ0NodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtaXNzaW5nQ2h1bmtzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJTdHJlYW0gPSBuZXcgQ2h1bmtlZFN0cmVhbVN1YnN0cmVhbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJTdHJlYW0ucG9zID0gc3ViU3RyZWFtLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YlN0cmVhbS5lbmQgPSBzdGFydCArIGxlbmd0aCB8fCB0aGlzLmVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViU3RyZWFtLmRpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ViU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuZCAtIHRoaXMuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc0VtcHR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaHVua2VkU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNodW5rZWRTdHJlYW0gPSBDaHVua2VkU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIENodW5rZWRTdHJlYW1NYW5hZ2VyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDaHVua2VkU3RyZWFtTWFuYWdlcihwZGZOZXR3b3JrU3RyZWFtLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENodW5rZWRTdHJlYW1NYW5hZ2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gYXJncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaHVua1NpemUgPSBhcmdzLnJhbmdlQ2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gbmV3IENodW5rZWRTdHJlYW0odGhpcy5sZW5ndGgsIHRoaXMuY2h1bmtTaXplLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZk5ldHdvcmtTdHJlYW0gPSBwZGZOZXR3b3JrU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUF1dG9GZXRjaCA9IGFyZ3MuZGlzYWJsZUF1dG9GZXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0hhbmRsZXIgPSBhcmdzLm1zZ0hhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyUmVxdWVzdElkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNodW5rc05lZWRlZEJ5UmVxdWVzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXF1ZXN0c0J5Q2h1bmsgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZXNCeVJlcXVlc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoQ2h1bmtlZFN0cmVhbU1hbmFnZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uTG9hZGVkU3RyZWFtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uTG9hZGVkU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2VuZFJlcXVlc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2VuZFJlcXVlc3QoYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZVJlYWRlciA9IHRoaXMucGRmTmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlUmVhZGVyLmlzU3RyZWFtaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZVJlYWRlci5vblByb2dyZXNzID0gdGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkQ2h1bmsgPSBmdW5jdGlvbiByZWFkQ2h1bmsoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNodW5rLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gY2h1bmsudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZCArPSAoMCwgX3V0aWwuYXJyYXlCeXRlTGVuZ3RoKShkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlUmVhZGVyLmlzU3RyZWFtaW5nU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogbG9hZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua0RhdGEgPSAoMCwgX3V0aWwuYXJyYXlzVG9CeXRlcykoY2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjaHVua0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKHJlYWRDaHVuaywgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm9uUmVjZWl2ZURhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdEFsbENodW5rc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0QWxsQ2h1bmtzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlzc2luZ0NodW5rcyA9IHRoaXMuc3RyZWFtLmdldE1pc3NpbmdDaHVua3MoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0Q2h1bmtzKG1pc3NpbmdDaHVua3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcmVxdWVzdENodW5rc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVxdWVzdENodW5rcyhjaHVua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RJZCA9IHRoaXMuY3VyclJlcXVlc3RJZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzTmVlZGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaHVua3NOZWVkZWRCeVJlcXVlc3RbcmVxdWVzdElkXSA9IGNodW5rc05lZWRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IgPSBjaHVua3NbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jaHVuayA9IF9zdGVwLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0cmVhbS5oYXNDaHVuayhfY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rc05lZWRlZFtfY2h1bmtdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiAmJiBfaXRlcmF0b3IucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNFbXB0eU9iaikoY2h1bmtzTmVlZGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvbWlzZXNCeVJlcXVlc3RbcmVxdWVzdElkXSA9IGNhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua3NUb1JlcXVlc3QgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaHVuayBpbiBjaHVua3NOZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsgfCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShjaHVuayBpbiB0aGlzLnJlcXVlc3RzQnlDaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVlc3RzQnlDaHVua1tjaHVua10gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3NUb1JlcXVlc3QucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVxdWVzdHNCeUNodW5rW2NodW5rXS5wdXNoKHJlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNodW5rc1RvUmVxdWVzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBlZENodW5rc1RvUmVxdWVzdCA9IHRoaXMuZ3JvdXBDaHVua3MoY2h1bmtzVG9SZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IyID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IyID0gZ3JvdXBlZENodW5rc1RvUmVxdWVzdFtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMjsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IChfc3RlcDIgPSBfaXRlcmF0b3IyLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cGVkQ2h1bmsgPSBfc3RlcDIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luID0gZ3JvdXBlZENodW5rLmJlZ2luQ2h1bmsgKiB0aGlzLmNodW5rU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gTWF0aC5taW4oZ3JvdXBlZENodW5rLmVuZENodW5rICogdGhpcy5jaHVua1NpemUsIHRoaXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbmRSZXF1ZXN0KGJlZ2luLCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvcjIgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgJiYgX2l0ZXJhdG9yMi5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3IyLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFN0cmVhbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlcXVlc3RSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0UmFuZ2UoYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBNYXRoLm1pbihlbmQsIHRoaXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSB0aGlzLmdldEJlZ2luQ2h1bmsoYmVnaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kQ2h1bmsgPSB0aGlzLmdldEVuZENodW5rKGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua3MgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaHVuayA9IGJlZ2luQ2h1bms7IGNodW5rIDwgZW5kQ2h1bms7ICsrY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZXF1ZXN0UmFuZ2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlcXVlc3RSYW5nZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzVG9SZXF1ZXN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yMyA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMyA9IHJhbmdlc1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IF9zdGVwMy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW5DaHVuayA9IHRoaXMuZ2V0QmVnaW5DaHVuayhyYW5nZS5iZWdpbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZENodW5rID0gdGhpcy5nZXRFbmRDaHVuayhyYW5nZS5lbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2h1bmsgPSBiZWdpbkNodW5rOyBjaHVuayA8IGVuZENodW5rOyArK2NodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2h1bmtzVG9SZXF1ZXN0LmluY2x1ZGVzKGNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzVG9SZXF1ZXN0LnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvcjMgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjMgJiYgX2l0ZXJhdG9yMy5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3IzLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzVG9SZXF1ZXN0LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGNodW5rc1RvUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJncm91cENodW5rc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBncm91cENodW5rcyhjaHVua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwZWRDaHVua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJlZ2luQ2h1bmsgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDaHVuayA9IC0xO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNodW5rcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBjaHVua3NbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbkNodW5rIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQ2h1bmsgPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZDaHVuayA+PSAwICYmIHByZXZDaHVuayArIDEgIT09IGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENodW5rcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5DaHVuazogYmVnaW5DaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kQ2h1bms6IHByZXZDaHVuayArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkNodW5rID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpICsgMSA9PT0gY2h1bmtzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwZWRDaHVua3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQ2h1bms6IGJlZ2luQ2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENodW5rOiBjaHVuayArIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNodW5rID0gY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JvdXBlZENodW5rcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25Qcm9ncmVzcyhhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubXNnSGFuZGxlci5zZW5kKCdEb2NQcm9ncmVzcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkICogdGhpcy5jaHVua1NpemUgKyBhcmdzLmxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0aGlzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUmVjZWl2ZURhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25SZWNlaXZlRGF0YShhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGFyZ3MuY2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1Byb2dyZXNzaXZlID0gYXJncy5iZWdpbiA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW4gPSBpc1Byb2dyZXNzaXZlID8gdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggOiBhcmdzLmJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gYmVnaW4gKyBjaHVuay5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW5DaHVuayA9IE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRDaHVuayA9IGVuZCA8IHRoaXMubGVuZ3RoID8gTWF0aC5mbG9vcihlbmQgLyB0aGlzLmNodW5rU2l6ZSkgOiBNYXRoLmNlaWwoZW5kIC8gdGhpcy5jaHVua1NpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb2dyZXNzaXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGggPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbS5vblJlY2VpdmVEYXRhKGJlZ2luLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHJlYW0uYWxsQ2h1bmtzTG9hZGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9hZGVkUmVxdWVzdHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfY2h1bmsyID0gYmVnaW5DaHVuazsgX2NodW5rMiA8IGVuZENodW5rOyArK19jaHVuazIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0SWRzID0gdGhpcy5yZXF1ZXN0c0J5Q2h1bmtbX2NodW5rMl0gfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5yZXF1ZXN0c0J5Q2h1bmtbX2NodW5rMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yNCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yNCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I0ID0gcmVxdWVzdElkc1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwNDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCA9IChfc3RlcDQgPSBfaXRlcmF0b3I0Lm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdElkID0gX3N0ZXA0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzTmVlZGVkID0gdGhpcy5jaHVua3NOZWVkZWRCeVJlcXVlc3RbcmVxdWVzdElkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2NodW5rMiBpbiBjaHVua3NOZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjaHVua3NOZWVkZWRbX2NodW5rMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc0VtcHR5T2JqKShjaHVua3NOZWVkZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZFJlcXVlc3RzLnB1c2gocmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvckVycm9yNCA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uNCAmJiBfaXRlcmF0b3I0LnJldHVybiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3I0LnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVBdXRvRmV0Y2ggJiYgKDAsIF91dGlsLmlzRW1wdHlPYmopKHRoaXMucmVxdWVzdHNCeUNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRFbXB0eUNodW5rO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RDaHVuayA9IHRoaXMuc3RyZWFtLm51bUNodW5rcyAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtLmhhc0NodW5rKGxhc3RDaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dEVtcHR5Q2h1bmsgPSBsYXN0Q2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0RW1wdHlDaHVuayA9IHRoaXMuc3RyZWFtLm5leHRFbXB0eUNodW5rKGVuZENodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobmV4dEVtcHR5Q2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdENodW5rcyhbbmV4dEVtcHR5Q2h1bmtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsb2FkZWRSZXF1ZXN0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWVzdElkID0gbG9hZGVkUmVxdWVzdHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSB0aGlzLnByb21pc2VzQnlSZXF1ZXN0W19yZXF1ZXN0SWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucHJvbWlzZXNCeVJlcXVlc3RbX3JlcXVlc3RJZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubXNnSGFuZGxlci5zZW5kKCdEb2NQcm9ncmVzcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkICogdGhpcy5jaHVua1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogdGhpcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXJyb3IoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRCZWdpbkNodW5rXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEJlZ2luQ2h1bmsoYmVnaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoYmVnaW4gLyB0aGlzLmNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRFbmRDaHVua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRFbmRDaHVuayhlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoKGVuZCAtIDEpIC8gdGhpcy5jaHVua1NpemUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFib3J0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBkZk5ldHdvcmtTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGRmTmV0d29ya1N0cmVhbS5jYW5jZWxBbGxSZXF1ZXN0cygnYWJvcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHJlcXVlc3RJZCBpbiB0aGlzLnByb21pc2VzQnlSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb21pc2VzQnlSZXF1ZXN0W3JlcXVlc3RJZF0ucmVqZWN0KG5ldyBFcnJvcignUmVxdWVzdCB3YXMgYWJvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENodW5rZWRTdHJlYW1NYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNodW5rZWRTdHJlYW1NYW5hZ2VyID0gQ2h1bmtlZFN0cmVhbU1hbmFnZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRG9jdW1lbnQgPSBleHBvcnRzLlBhZ2UgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9vYmogPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmVhbTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2Fubm90YXRpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NyeXB0byA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfcGFyc2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9vcGVyYXRvcl9saXN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9ldmFsdWF0b3IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2Z1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxODUpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBERUZBVUxUX1VTRVJfVU5JVCA9IDEuMDtcbiAgICAgICAgICAgICAgICB2YXIgTEVUVEVSX1NJWkVfTUVESUFCT1ggPSBbMCwgMCwgNjEyLCA3OTJdO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNBbm5vdGF0aW9uUmVuZGVyYWJsZShhbm5vdGF0aW9uLCBpbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVudCA9PT0gJ2Rpc3BsYXknICYmIGFubm90YXRpb24udmlld2FibGUgfHwgaW50ZW50ID09PSAncHJpbnQnICYmIGFubm90YXRpb24ucHJpbnRhYmxlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQYWdlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQYWdlKF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmTWFuYWdlciA9IF9yZWYucGRmTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZiA9IF9yZWYueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4ID0gX3JlZi5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VEaWN0ID0gX3JlZi5wYWdlRGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmID0gX3JlZi5yZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDYWNoZSA9IF9yZWYuZm9udENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdEluQ01hcENhY2hlID0gX3JlZi5idWlsdEluQ01hcENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnkgPSBfcmVmLnBkZkZ1bmN0aW9uRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYWdlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlRGljdCA9IHBhZ2VEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYgPSByZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250Q2FjaGUgPSBmb250Q2FjaGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gYnVpbHRJbkNNYXBDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSA9IHBkZkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2YWx1YXRvck9wdGlvbnMgPSBwZGZNYW5hZ2VyLmV2YWx1YXRvck9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNvdXJjZXNQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5pcXVlUHJlZml4ID0gXCJwXCIuY29uY2F0KHRoaXMucGFnZUluZGV4LCBcIl9cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkQ291bnRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pZEZhY3RvcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZU9iaklkOiBmdW5jdGlvbiBjcmVhdGVPYmpJZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmlxdWVQcmVmaXggKyArK2lkQ291bnRlcnMub2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBhZ2UsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9nZXRJbmhlcml0YWJsZVByb3BlcnR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9nZXRJbmhlcml0YWJsZVByb3BlcnR5KGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0QXJyYXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSAoMCwgX3V0aWwuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogdGhpcy5wYWdlRGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXJyYXk6IGdldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcFdoZW5Gb3VuZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodmFsdWVbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuRGljdC5tZXJnZSh0aGlzLnhyZWYsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldENvbnRlbnRTdHJlYW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Q29udGVudFN0cmVhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSB0aGlzLmNvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IGNvbnRlbnRbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gKF9zdGVwID0gX2l0ZXJhdG9yLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbXMucHVzaCh4cmVmLmZldGNoSWZSZWYoX3N0cmVhbSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0yLlN0cmVhbXNTZXF1ZW5jZVN0cmVhbShzdHJlYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGNvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBjb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gbmV3IF9zdHJlYW0yLk51bGxTdHJlYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsb2FkUmVzb3VyY2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRSZXNvdXJjZXMoa2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZXNvdXJjZXNQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlc1Byb21pc2UgPSB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsICdyZXNvdXJjZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqZWN0TG9hZGVyID0gbmV3IF9vYmouT2JqZWN0TG9hZGVyKF90aGlzLnJlc291cmNlcywga2V5cywgX3RoaXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0TG9hZGVyLmxvYWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVyYXRvckxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlcmF0b3JMaXN0KF9yZWYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX3JlZjIuaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBfcmVmMi50YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gX3JlZjIuaW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW50ZXJhY3RpdmVGb3JtcyA9IF9yZWYyLnJlbmRlckludGVyYWN0aXZlRm9ybXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywgJ2dldENvbnRlbnRTdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoWydFeHRHU3RhdGUnLCAnQ29sb3JTcGFjZScsICdQYXR0ZXJuJywgJ1NoYWRpbmcnLCAnWE9iamVjdCcsICdGb250J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGlhbEV2YWx1YXRvciA9IG5ldyBfZXZhbHVhdG9yLlBhcnRpYWxFdmFsdWF0b3Ioe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlcjogdGhpcy5wZGZNYW5hZ2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZEZhY3Rvcnk6IHRoaXMuaWRGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENhY2hlOiB0aGlzLmZvbnRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWx0SW5DTWFwQ2FjaGU6IHRoaXMuYnVpbHRJbkNNYXBDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZXZhbHVhdG9yT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhUHJvbWlzZXMgPSBQcm9taXNlLmFsbChbY29udGVudFN0cmVhbVByb21pc2UsIHJlc291cmNlc1Byb21pc2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VMaXN0UHJvbWlzZSA9IGRhdGFQcm9taXNlcy50aGVuKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gX3NsaWNlZFRvQXJyYXkoX3JlZjMsIDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRTdHJlYW0gPSBfcmVmNFswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoaW50ZW50LCBoYW5kbGVyLCBfdGhpczIucGFnZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnU3RhcnRSZW5kZXJQYWdlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW5jeTogcGFydGlhbEV2YWx1YXRvci5oYXNCbGVuZE1vZGVzKF90aGlzMi5yZXNvdXJjZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogX3RoaXMyLnBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQ6IGludGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydGlhbEV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogY29udGVudFN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogX3RoaXMyLnJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3Q6IG9wTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wTGlzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtwYWdlTGlzdFByb21pc2UsIHRoaXMuX3BhcnNlZEFubm90YXRpb25zXSkudGhlbihmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlT3BMaXN0ID0gX3JlZjZbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnMgPSBfcmVmNlsxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VPcExpc3QuZmx1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VPcExpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcExpc3RQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IGFubm90YXRpb25zW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXAyOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gKF9zdGVwMiA9IF9pdGVyYXRvcjIubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uID0gX3N0ZXAyLnZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Fubm90YXRpb25SZW5kZXJhYmxlKGFubm90YXRpb24sIGludGVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wTGlzdFByb21pc2VzLnB1c2goYW5ub3RhdGlvbi5nZXRPcGVyYXRvckxpc3QocGFydGlhbEV2YWx1YXRvciwgdGFzaywgcmVuZGVySW50ZXJhY3RpdmVGb3JtcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvcjIgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgJiYgX2l0ZXJhdG9yMi5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yMi5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG9wTGlzdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChvcExpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU9wTGlzdC5hZGRPcChfdXRpbC5PUFMuYmVnaW5Bbm5vdGF0aW9ucywgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yMyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjMgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3IzID0gb3BMaXN0c1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wTGlzdCA9IF9zdGVwMy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VPcExpc3QuYWRkT3BMaXN0KG9wTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IzID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zICYmIF9pdGVyYXRvcjMucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3IzLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VPcExpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEFubm90YXRpb25zLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU9wTGlzdC5mbHVzaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZU9wTGlzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImV4dHJhY3RUZXh0Q29udGVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBleHRyYWN0VGV4dENvbnRlbnQoX3JlZjcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBfcmVmNy5oYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzayA9IF9yZWY3LnRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlID0gX3JlZjcubm9ybWFsaXplV2hpdGVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsgPSBfcmVmNy5zaW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtcyA9IF9yZWY3LmNvbWJpbmVUZXh0SXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50U3RyZWFtUHJvbWlzZSA9IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywgJ2dldENvbnRlbnRTdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoWydFeHRHU3RhdGUnLCAnWE9iamVjdCcsICdGb250J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YVByb21pc2VzID0gUHJvbWlzZS5hbGwoW2NvbnRlbnRTdHJlYW1Qcm9taXNlLCByZXNvdXJjZXNQcm9taXNlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhUHJvbWlzZXMudGhlbihmdW5jdGlvbiAoX3JlZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmOSA9IF9zbGljZWRUb0FycmF5KF9yZWY4LCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50U3RyZWFtID0gX3JlZjlbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0aWFsRXZhbHVhdG9yID0gbmV3IF9ldmFsdWF0b3IuUGFydGlhbEV2YWx1YXRvcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlcjogX3RoaXMzLnBkZk1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogX3RoaXMzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IF90aGlzMy5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRGYWN0b3J5OiBfdGhpczMuaWRGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDYWNoZTogX3RoaXMzLmZvbnRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdEluQ01hcENhY2hlOiBfdGhpczMuYnVpbHRJbkNNYXBDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBfdGhpczMuZXZhbHVhdG9yT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IF90aGlzMy5wZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRpYWxFdmFsdWF0b3IuZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogY29udGVudFN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogX3RoaXMzLnJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVUZXh0SXRlbXM6IGNvbWJpbmVUZXh0SXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luazogc2lua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0QW5ub3RhdGlvbnNEYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFubm90YXRpb25zRGF0YShpbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oZnVuY3Rpb24gKGFubm90YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5ub3RhdGlvbnNEYXRhID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFubm90YXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVudCB8fCBpc0Fubm90YXRpb25SZW5kZXJhYmxlKGFubm90YXRpb25zW2ldLCBpbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zRGF0YS5wdXNoKGFubm90YXRpb25zW2ldLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb25zRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb250ZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VEaWN0LmdldCgnQ29udGVudHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlc291cmNlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3Jlc291cmNlcycsIHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoJ1Jlc291cmNlcycpIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWVkaWFCb3hcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhQm94ID0gdGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgnTWVkaWFCb3gnLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkobWVkaWFCb3gpIHx8IG1lZGlhQm94Lmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdtZWRpYUJveCcsIExFVFRFUl9TSVpFX01FRElBQk9YKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbWVkaWFCb3gnLCBtZWRpYUJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjcm9wQm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcm9wQm94ID0gdGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgnQ3JvcEJveCcsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShjcm9wQm94KSB8fCBjcm9wQm94Lmxlbmd0aCAhPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdjcm9wQm94JywgdGhpcy5tZWRpYUJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2Nyb3BCb3gnLCBjcm9wQm94KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInVzZXJVbml0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLnBhZ2VEaWN0LmdldCgnVXNlclVuaXQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc051bSkob2JqKSB8fCBvYmogPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gREVGQVVMVF9VU0VSX1VOSVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3VzZXJVbml0Jywgb2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhQm94ID0gdGhpcy5tZWRpYUJveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3BCb3ggPSB0aGlzLmNyb3BCb3g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lZGlhQm94ID09PSBjcm9wQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3ZpZXcnLCBtZWRpYUJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZXJzZWN0aW9uID0gX3V0aWwuVXRpbC5pbnRlcnNlY3QoY3JvcEJveCwgbWVkaWFCb3gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAndmlldycsIGludGVyc2VjdGlvbiB8fCBtZWRpYUJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyb3RhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdGF0ZSA9IHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoJ1JvdGF0ZScpIHx8IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0ZSAlIDkwICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJvdGF0ZSA+PSAzNjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZSA9IHJvdGF0ZSAlIDM2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyb3RhdGUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGUgPSAocm90YXRlICUgMzYwICsgMzYwKSAlIDM2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncm90YXRlJywgcm90YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFubm90YXRpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnYW5ub3RhdGlvbnMnLCB0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCdBbm5vdHMnKSB8fCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcGFyc2VkQW5ub3RhdGlvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlZEFubm90YXRpb25zID0gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCAnYW5ub3RhdGlvbnMnKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uUmVmcyA9IF90aGlzNC5hbm5vdGF0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdGF0aW9uUHJvbWlzZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYW5ub3RhdGlvblJlZnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25Qcm9taXNlcy5wdXNoKF9hbm5vdGF0aW9uLkFubm90YXRpb25GYWN0b3J5LmNyZWF0ZShfdGhpczQueHJlZiwgYW5ub3RhdGlvblJlZnNbaV0sIF90aGlzNC5wZGZNYW5hZ2VyLCBfdGhpczQuaWRGYWN0b3J5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChhbm5vdGF0aW9uUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKGFubm90YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb25zLmZpbHRlcihmdW5jdGlvbiBpc0RlZmluZWQoYW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFhbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIl9wYXJzZWRBbm5vdGF0aW9uczogXFxcIlwiLmNvbmNhdChyZWFzb24sIFwiXFxcIi5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdfcGFyc2VkQW5ub3RhdGlvbnMnLCBwYXJzZWRBbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYWdlID0gUGFnZTtcbiAgICAgICAgICAgICAgICB2YXIgRklOR0VSUFJJTlRfRklSU1RfQllURVMgPSAxMDI0O1xuICAgICAgICAgICAgICAgIHZhciBFTVBUWV9GSU5HRVJQUklOVCA9ICdcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMCcgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwJztcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmQoc3RyZWFtLCBuZWVkbGUsIGxpbWl0LCBiYWNrd2FyZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBzdHJlYW0uZW5kO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwb3MgKyBsaW1pdCA+IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBlbmQgLSBwb3M7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3RyQnVmID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaW1pdDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0cmVhbS5nZXRCeXRlKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBzdHJCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGJhY2t3YXJkcyA/IHN0ci5sYXN0SW5kZXhPZihuZWVkbGUpIDogc3RyLmluZGV4T2YobmVlZGxlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zICs9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRG9jdW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkRvY3VtZW50KHBkZk1hbmFnZXIsIGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZEb2N1bWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoYXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBhcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikoYXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBuZXcgX3N0cmVhbTIuU3RyZWFtKGFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQREZEb2N1bWVudDogVW5rbm93biBhcmd1bWVudCB0eXBlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5sZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BERkRvY3VtZW50OiBTdHJlYW0gbXVzdCBoYXZlIGRhdGEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZk1hbmFnZXIgPSBwZGZNYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IG5ldyBfb2JqLlhSZWYoc3RyZWFtLCBwZGZNYW5hZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSA9IG5ldyBfZnVuY3Rpb24uUERGRnVuY3Rpb25GYWN0b3J5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHBkZk1hbmFnZXIuZXZhbHVhdG9yT3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERkRvY3VtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR1cChyZWNvdmVyeU1vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVyc2lvbiA9IHRoaXMuY2F0YWxvZy5jYXREaWN0LmdldCgnVmVyc2lvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh2ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZGb3JtYXRWZXJzaW9uID0gdmVyc2lvbi5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNyb0Zvcm0gPSB0aGlzLmNhdGFsb2cuY2F0RGljdC5nZXQoJ0Fjcm9Gb3JtJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjcm9Gb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54ZmEgPSB0aGlzLmFjcm9Gb3JtLmdldCgnWEZBJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkcyA9IHRoaXMuYWNyb0Zvcm0uZ2V0KCdGaWVsZHMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoIWZpZWxkcyB8fCAhQXJyYXkuaXNBcnJheShmaWVsZHMpIHx8IGZpZWxkcy5sZW5ndGggPT09IDApICYmICF0aGlzLnhmYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjcm9Gb3JtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0Nhbm5vdCBmZXRjaCBBY3JvRm9ybSBlbnRyeTsgYXNzdW1pbmcgbm8gQWNyb0Zvcm1zIGFyZSBwcmVzZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjcm9Gb3JtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2hlY2tIZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tIZWFkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlc2V0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaW5kKHN0cmVhbSwgJyVQREYtJywgMTAyNCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5tb3ZlU3RhcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9QREZfVkVSU0lPTl9MRU5HVEggPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSA+IDB4MjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uLmxlbmd0aCA+PSBNQVhfUERGX1ZFUlNJT05fTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGRmRm9ybWF0VmVyc2lvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZGb3JtYXRWZXJzaW9uID0gdmVyc2lvbi5zdWJzdHJpbmcoNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInBhcnNlU3RhcnRYUmVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlU3RhcnRYUmVmKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInNldHVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldHVwKHJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYucGFyc2UocmVjb3ZlcnlNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXRhbG9nID0gbmV3IF9vYmouQ2F0YWxvZyh0aGlzLnBkZk1hbmFnZXIsIHRoaXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZ2V0TGluZWFyaXphdGlvblBhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2dldExpbmVhcml6YXRpb25QYWdlKHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2F0YWxvZyA9IHRoaXMuY2F0YWxvZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhcml6YXRpb24gPSB0aGlzLmxpbmVhcml6YXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGxpbmVhcml6YXRpb24gJiYgbGluZWFyaXphdGlvbi5wYWdlRmlyc3QgPT09IHBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmKGxpbmVhcml6YXRpb24ub2JqZWN0TnVtYmVyRmlyc3QsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy54cmVmLmZldGNoQXN5bmMocmVmKS50aGVuKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmosICdQYWdlJykgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiAhb2JqLmhhcygnVHlwZScpICYmIG9iai5oYXMoJ0NvbnRlbnRzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmICYmICFjYXRhbG9nLnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRhbG9nLnBhZ2VLaWRzQ291bnRDYWNoZS5wdXQocmVmLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW29iaiwgcmVmXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdUaGUgTGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXNuXFwndCBwb2ludCAnICsgJ3RvIGEgdmFsaWQgUGFnZSBkaWN0aW9uYXJ5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXRhbG9nLmdldFBhZ2VEaWN0KHBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlKHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFnZVByb21pc2VzW3BhZ2VJbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VQcm9taXNlc1twYWdlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhdGFsb2cgPSB0aGlzLmNhdGFsb2csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXJpemF0aW9uID0gdGhpcy5saW5lYXJpemF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IGxpbmVhcml6YXRpb24gJiYgbGluZWFyaXphdGlvbi5wYWdlRmlyc3QgPT09IHBhZ2VJbmRleCA/IHRoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKHBhZ2VJbmRleCkgOiBjYXRhbG9nLmdldFBhZ2VEaWN0KHBhZ2VJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlUHJvbWlzZXNbcGFnZUluZGV4XSA9IHByb21pc2UudGhlbihmdW5jdGlvbiAoX3JlZjEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjExID0gX3NsaWNlZFRvQXJyYXkoX3JlZjEwLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlRGljdCA9IF9yZWYxMVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYgPSBfcmVmMTFbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmTWFuYWdlcjogX3RoaXM1LnBkZk1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogX3RoaXM1LnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZURpY3Q6IHBhZ2VEaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjogcmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDYWNoZTogY2F0YWxvZy5mb250Q2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRJbkNNYXBDYWNoZTogY2F0YWxvZy5idWlsdEluQ01hcENhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogX3RoaXM1LnBkZkZ1bmN0aW9uRmFjdG9yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2hlY2tGaXJzdFBhZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2hlY2tGaXJzdFBhZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2UoMCkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLlhSZWZFbnRyeUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fcGFnZVByb21pc2VzLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuY2xlYW51cCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlhSZWZQYXJzZUV4Y2VwdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZvbnRGYWxsYmFja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb250RmFsbGJhY2soaWQsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0YWxvZy5mb250RmFsbGJhY2soaWQsIGhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYW51cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYXRhbG9nLmNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImxpbmVhcml6YXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVhcml6YXRpb24gPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lYXJpemF0aW9uID0gX3BhcnNlci5MaW5lYXJpemF0aW9uLmNyZWF0ZSh0aGlzLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbGluZWFyaXphdGlvbicsIGxpbmVhcml6YXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic3RhcnRYUmVmXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLnN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0WFJlZiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubGluZWFyaXphdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlc2V0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kKHN0cmVhbSwgJ2VuZG9iaicsIDEwMjQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYUmVmID0gc3RyZWFtLnBvcyArIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IDEwMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRYUmVmTGVuZ3RoID0gJ3N0YXJ0eHJlZicubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gc3RyZWFtLmVuZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFmb3VuZCAmJiBwb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zIC09IHN0ZXAgLSBzdGFydFhSZWZMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBmaW5kKHN0cmVhbSwgJ3N0YXJ0eHJlZicsIHN0ZXAsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcCg5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgoMCwgX3V0aWwuaXNTcGFjZSkoY2gpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaCA+PSAweDIwICYmIGNoIDw9IDB4MzkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYUmVmID0gcGFyc2VJbnQoc3RyLCAxMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oc3RhcnRYUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFhSZWYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnc3RhcnRYUmVmJywgc3RhcnRYUmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm51bVBhZ2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lYXJpemF0aW9uID0gdGhpcy5saW5lYXJpemF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gbGluZWFyaXphdGlvbiA/IGxpbmVhcml6YXRpb24ubnVtUGFnZXMgOiB0aGlzLmNhdGFsb2cubnVtUGFnZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbnVtUGFnZXMnLCBudW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZG9jdW1lbnRJbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBEb2N1bWVudEluZm9WYWxpZGF0b3JzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGl0bGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aG9yOiBfdXRpbC5pc1N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1YmplY3Q6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5d29yZHM6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRvcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9kdWNlcjogX3V0aWwuaXNTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGlvbkRhdGU6IF91dGlsLmlzU3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kRGF0ZTogX3V0aWwuaXNTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFwcGVkOiBfcHJpbWl0aXZlcy5pc05hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0luZm8gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQREZGb3JtYXRWZXJzaW9uOiB0aGlzLnBkZkZvcm1hdFZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJc0xpbmVhcml6ZWQ6ICEhdGhpcy5saW5lYXJpemF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXNBY3JvRm9ybVByZXNlbnQ6ICEhdGhpcy5hY3JvRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzWEZBUHJlc2VudDogISF0aGlzLnhmYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5mb0RpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9EaWN0ID0gdGhpcy54cmVmLnRyYWlsZXIuZ2V0KCdJbmZvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1RoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoaW5mb0RpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yNCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yNCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaXRlcmF0b3I0ID0gaW5mb0RpY3QuZ2V0S2V5cygpW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA0OyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb240ID0gKF9zdGVwNCA9IF9pdGVyYXRvcjQubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgPSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBfc3RlcDQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGluZm9EaWN0LmdldChrZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEluZm9WYWxpZGF0b3JzW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudEluZm9WYWxpZGF0b3JzW2tleV0odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jSW5mb1trZXldID0gdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyA/IHZhbHVlIDogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkJhZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21WYWx1ZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tVmFsdWUgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUpIHx8ICgwLCBfdXRpbC5pc051bSkodmFsdWUpIHx8ICgwLCBfdXRpbC5pc0Jvb2wpKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlVuc3VwcG9ydGVkIHZhbHVlIGluIGRvY3VtZW50IGluZm8gZm9yIChjdXN0b20pIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb2NJbmZvWydDdXN0b20nXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY0luZm9bJ0N1c3RvbSddID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jSW5mb1snQ3VzdG9tJ11ba2V5XSA9IGN1c3RvbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3I0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvcjQgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjQgJiYgX2l0ZXJhdG9yNC5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnZG9jdW1lbnRJbmZvJywgZG9jSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJmaW5nZXJwcmludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkQXJyYXkgPSB0aGlzLnhyZWYudHJhaWxlci5nZXQoJ0lEJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaWRBcnJheSkgJiYgaWRBcnJheVswXSAmJiAoMCwgX3V0aWwuaXNTdHJpbmcpKGlkQXJyYXlbMF0pICYmIGlkQXJyYXlbMF0gIT09IEVNUFRZX0ZJTkdFUlBSSU5UKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGlkQXJyYXlbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RyZWFtLmVuc3VyZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0uZW5zdXJlUmFuZ2UoMCwgTWF0aC5taW4oRklOR0VSUFJJTlRfRklSU1RfQllURVMsIHRoaXMuc3RyZWFtLmVuZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoID0gKDAsIF9jcnlwdG8uY2FsY3VsYXRlTUQ1KSh0aGlzLnN0cmVhbS5ieXRlcy5zdWJhcnJheSgwLCBGSU5HRVJQUklOVF9GSVJTVF9CWVRFUyksIDAsIEZJTkdFUlBSSU5UX0ZJUlNUX0JZVEVTKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5nZXJwcmludCA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGhhc2gubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IGhhc2hbaV0udG9TdHJpbmcoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQgKz0gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnZmluZ2VycHJpbnQnLCBmaW5nZXJwcmludCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGRG9jdW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRG9jdW1lbnQgPSBQREZEb2N1bWVudDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5GaWxlU3BlYyA9IGV4cG9ydHMuWFJlZiA9IGV4cG9ydHMuT2JqZWN0TG9hZGVyID0gZXhwb3J0cy5DYXRhbG9nID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9yZWdlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wYXJzZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NodW5rZWRfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9jcnlwdG8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NvbG9yc3BhY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBmZXRjaERlc3RpbmF0aW9uKGRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGRlc3QpID8gZGVzdC5nZXQoJ0QnKSA6IGRlc3Q7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIENhdGFsb2cgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENhdGFsb2cocGRmTWFuYWdlciwgeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDYXRhbG9nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGRmTWFuYWdlciA9IHBkZk1hbmFnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmID0geHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhdERpY3QgPSB4cmVmLmdldENhdGFsb2dPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodGhpcy5jYXREaWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0NhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250Q2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0Q2FjaGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKENhdGFsb2csIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZWFkRG9jdW1lbnRPdXRsaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9yZWFkRG9jdW1lbnRPdXRsaW5lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5jYXREaWN0LmdldCgnT3V0bGluZXMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gb2JqLmdldFJhdygnRmlyc3QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqOiBvYmosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IHJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWQgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmU2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZC5wdXQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja0NvbG9yID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0bGluZURpY3QgPSB4cmVmLmZldGNoSWZSZWYoaS5vYmopO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0bGluZURpY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdXRsaW5lRGljdC5oYXMoJ1RpdGxlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdERpY3Q6IG91dGxpbmVEaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iajogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NCYXNlVXJsOiB0aGlzLnBkZk1hbmFnZXIuZG9jQmFzZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGUgPSBvdXRsaW5lRGljdC5nZXQoJ1RpdGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3MgPSBvdXRsaW5lRGljdC5nZXQoJ0YnKSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gb3V0bGluZURpY3QuZ2V0QXJyYXkoJ0MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZ2JDb2xvciA9IGJsYWNrQ29sb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvbG9yKSAmJiBjb2xvci5sZW5ndGggPT09IDMgJiYgKGNvbG9yWzBdICE9PSAwIHx8IGNvbG9yWzFdICE9PSAwIHx8IGNvbG9yWzJdICE9PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkNvbG9yID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoY29sb3IsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0bGluZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDogZGF0YS5kZXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogZGF0YS51cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zYWZlVXJsOiBkYXRhLnVuc2FmZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdXaW5kb3c6IGRhdGEubmV3V2luZG93LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHRpdGxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogcmdiQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ6IG91dGxpbmVEaWN0LmdldCgnQ291bnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib2xkOiAhIShmbGFncyAmIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0YWxpYzogISEoZmxhZ3MgJiAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLnBhcmVudC5pdGVtcy5wdXNoKG91dGxpbmVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IG91dGxpbmVEaWN0LmdldFJhdygnRmlyc3QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikob2JqKSAmJiAhcHJvY2Vzc2VkLmhhcyhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajogb2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG91dGxpbmVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBvdXRsaW5lRGljdC5nZXRSYXcoJ05leHQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikob2JqKSAmJiAhcHJvY2Vzc2VkLmhhcyhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajogb2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGkucGFyZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkLnB1dChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3QuaXRlbXMubGVuZ3RoID4gMCA/IHJvb3QuaXRlbXMgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3JlYWRQZXJtaXNzaW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVhZFBlcm1pc3Npb25zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdCA9IHRoaXMueHJlZi50cmFpbGVyLmdldCgnRW5jcnlwdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jcnlwdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gZW5jcnlwdC5nZXQoJ1AnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc051bSkoZmxhZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzICs9IE1hdGgucG93KDIsIDMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlcm1pc3Npb25zID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIF91dGlsLlBlcm1pc3Npb25GbGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfdXRpbC5QZXJtaXNzaW9uRmxhZ1trZXldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlcm1pc3Npb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RGVzdGluYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVzdGluYXRpb24oZGVzdGluYXRpb25JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5fcmVhZERlc3RzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE5hbWVUcmVlIHx8IG9iaiBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaERlc3RpbmF0aW9uKG9iai5nZXQoZGVzdGluYXRpb25JZCkgfHwgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZWFkRGVzdHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlYWREZXN0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMuY2F0RGljdC5nZXQoJ05hbWVzJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaiAmJiBvYmouaGFzKCdEZXN0cycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE5hbWVUcmVlKG9iai5nZXRSYXcoJ0Rlc3RzJyksIHRoaXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5jYXREaWN0LmhhcygnRGVzdHMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2F0RGljdC5nZXQoJ0Rlc3RzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZWFkUGFnZUxhYmVsc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcmVhZFBhZ2VMYWJlbHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLmNhdERpY3QuZ2V0UmF3KCdQYWdlTGFiZWxzJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VMYWJlbHMgPSBuZXcgQXJyYXkodGhpcy5udW1QYWdlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlclRyZWUgPSBuZXcgTnVtYmVyVHJlZShvYmosIHRoaXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1zID0gbnVtYmVyVHJlZS5nZXRBbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRMYWJlbCA9ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4ID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLm51bVBhZ2VzOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgaW4gbnVtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYWJlbERpY3QgPSBudW1zW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShsYWJlbERpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsRGljdC5oYXMoJ1R5cGUnKSAmJiAhKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkobGFiZWxEaWN0LmdldCgnVHlwZScpLCAnUGFnZUxhYmVsJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdJbnZhbGlkIHR5cGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsRGljdC5oYXMoJ1MnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IGxhYmVsRGljdC5nZXQoJ1MnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgc3R5bGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IHMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhYmVsRGljdC5oYXMoJ1AnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IGxhYmVsRGljdC5nZXQoJ1AnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykocCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBwcmVmaXggaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYWJlbERpY3QuaGFzKCdTdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdCA9IGxhYmVsRGljdC5nZXQoJ1N0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoTnVtYmVyLmlzSW50ZWdlcihzdCkgJiYgc3QgPj0gMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IHN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMYWJlbCA9IGN1cnJlbnRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExhYmVsID0gKDAsIF91dGlsLnRvUm9tYW5OdW1lcmFscykoY3VycmVudEluZGV4LCBzdHlsZSA9PT0gJ3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdBJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExJTUlUID0gMjY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBX1VQUEVSX0NBU0UgPSAweDQxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQV9MT1dFUl9DQVNFID0gMHg2MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VDaGFyQ29kZSA9IHN0eWxlID09PSAnYScgPyBBX0xPV0VSX0NBU0UgOiBBX1VQUEVSX0NBU0U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXR0ZXJJbmRleCA9IGN1cnJlbnRJbmRleCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJhc2VDaGFyQ29kZSArIGxldHRlckluZGV4ICUgTElNSVQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGxldHRlckluZGV4IC8gTElNSVQgfCAwOyBqIDw9IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJCdWYucHVzaChjaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExhYmVsID0gY2hhckJ1Zi5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgc3R5bGUgXFxcIlwiLmNvbmNhdChzdHlsZSwgXCJcXFwiIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGFiZWwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUxhYmVsc1tpXSA9IHByZWZpeCArIGN1cnJlbnRMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRJbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VMYWJlbHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJmb250RmFsbGJhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZm9udEZhbGxiYWNrKGlkLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRDYWNoZS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uICh0cmFuc2xhdGVkRm9udHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvckVycm9yID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IHRyYW5zbGF0ZWRGb250c1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0ZWRGb250ID0gX3N0ZXAudmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0ZWRGb250LmxvYWRlZE5hbWUgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkRm9udC5mYWxsYmFjayhoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3JFcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uICYmIF9pdGVyYXRvci5yZXR1cm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjbGVhbnVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFudXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udENhY2hlLmZvckVhY2goZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VzLnB1c2gocHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWRGb250cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdHJhbnNsYXRlZEZvbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udCA9IHRyYW5zbGF0ZWRGb250c1tpXS5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmb250LnRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmZvbnRDYWNoZS5jbGVhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5idWlsdEluQ01hcENhY2hlLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZURpY3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFnZURpY3QocGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXNUb1Zpc2l0ID0gW3RoaXMuY2F0RGljdC5nZXRSYXcoJ1BhZ2VzJyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VLaWRzQ291bnRDYWNoZSA9IHRoaXMucGFnZUtpZHNDb3VudENhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gbm9kZXNUb1Zpc2l0LnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gcGFnZUtpZHNDb3VudENhY2hlLmdldChjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBjdXJyZW50UGFnZUluZGV4ICsgY291bnQgPCBwYWdlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXggKz0gY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJjb250aW51ZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZi5mZXRjaEFzeW5jKGN1cnJlbnROb2RlKS50aGVuKGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmosICdQYWdlJykgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSAmJiAhb2JqLmhhcygnS2lkcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2VJbmRleCA9PT0gY3VycmVudFBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUgJiYgIXBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUucHV0KGN1cnJlbnROb2RlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZShbb2JqLCBjdXJyZW50Tm9kZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNUb1Zpc2l0LnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY2FwYWJpbGl0eS5yZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkZvcm1hdEVycm9yKCdQYWdlIGRpY3Rpb25hcnkga2lkIHJlZmVyZW5jZSBwb2ludHMgdG8gd3JvbmcgdHlwZSBvZiBvYmplY3QuJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBjdXJyZW50Tm9kZS5nZXQoJ0NvdW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihjb3VudCkgJiYgY291bnQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqSWQgPSBjdXJyZW50Tm9kZS5vYmpJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqSWQgJiYgIXBhZ2VLaWRzQ291bnRDYWNoZS5oYXMob2JqSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlS2lkc0NvdW50Q2FjaGUucHV0KG9iaklkLCBjb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCArIGNvdW50IDw9IHBhZ2VJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VJbmRleCArPSBjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkcyA9IGN1cnJlbnROb2RlLmdldCgnS2lkcycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShjdXJyZW50Tm9kZS5nZXQoJ1R5cGUnKSwgJ1BhZ2UnKSB8fCAhY3VycmVudE5vZGUuaGFzKCdUeXBlJykgJiYgY3VycmVudE5vZGUuaGFzKCdDb250ZW50cycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFBhZ2VJbmRleCA9PT0gcGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKFtjdXJyZW50Tm9kZSwgbnVsbF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHZvaWQgMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcImNvbnRpbnVlXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1BhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogdm9pZCAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbGFzdCA9IGtpZHMubGVuZ3RoIC0gMTsgbGFzdCA+PSAwOyBsYXN0LS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNUb1Zpc2l0LnB1c2goa2lkc1tsYXN0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGVzVG9WaXNpdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JldCA9IF9sb29wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9yZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNvbnRpbnVlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90eXBlb2YoX3JldCkgPT09IFwib2JqZWN0XCIpIHJldHVybiBfcmV0LnY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoXCJQYWdlIGluZGV4IFwiLmNvbmNhdChwYWdlSW5kZXgsIFwiIG5vdCBmb3VuZC5cIikpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFBhZ2VJbmRleFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlSW5kZXgocGFnZVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYWdlc0JlZm9yZVJlZihraWRSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3RhbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hBc3luYyhraWRSZWYpLnRoZW4oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmc0VxdWFsKShraWRSZWYsIHBhZ2VSZWYpICYmICEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShub2RlLCAnUGFnZScpICYmICEoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkgJiYgIW5vZGUuaGFzKCdUeXBlJykgJiYgbm9kZS5oYXMoJ0NvbnRlbnRzJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVGhlIHJlZmVyZW5jZSBkb2VzIG5vdCBwb2ludCB0byBhIC9QYWdlIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdOb2RlIG11c3QgYmUgYSBkaWN0aW9uYXJ5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudFJlZiA9IG5vZGUuZ2V0UmF3KCdQYXJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBc3luYygnUGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudC5nZXRBc3luYygnS2lkcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoa2lkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgha2lkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkUHJvbWlzZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGtpZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikoa2lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWZzRXF1YWwpKGtpZCwga2lkUmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWRQcm9taXNlcy5wdXNoKHhyZWYuZmV0Y2hBc3luYyhraWQpLnRoZW4oZnVuY3Rpb24gKGtpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShraWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpZC5oYXMoJ0NvdW50JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBraWQuZ2V0KCdDb3VudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0tpZCByZWZlcmVuY2Ugbm90IGZvdW5kIGluIHBhcmVudFxcJ3Mga2lkcy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoa2lkUHJvbWlzZXMpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RvdGFsLCBwYXJlbnRSZWZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWwgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG5leHQocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZXNCZWZvcmVSZWYocmVmKS50aGVuKGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2FyZ3MgPSBfc2xpY2VkVG9BcnJheShhcmdzLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBfYXJnc1swXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50UmVmID0gX2FyZ3NbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChwYXJlbnRSZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV4dChwYWdlUmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1SZWYgPSB0aGlzLmNhdERpY3QuZ2V0UmF3KCdNZXRhZGF0YScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShzdHJlYW1SZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ21ldGFkYXRhJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcHJlc3NFbmNyeXB0aW9uID0gISh0aGlzLnhyZWYuZW5jcnlwdCAmJiB0aGlzLnhyZWYuZW5jcnlwdC5lbmNyeXB0TWV0YWRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy54cmVmLmZldGNoKHN0cmVhbVJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0gJiYgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoc3RyZWFtLmRpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHN0cmVhbS5kaWN0LmdldCgnVHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBzdHJlYW0uZGljdC5nZXQoJ1N1YnR5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUsICdNZXRhZGF0YScpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN1YnR5cGUsICdYTUwnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvVVRGOFN0cmluZykoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKHN0cmVhbS5nZXRCeXRlcygpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdTa2lwcGluZyBpbnZhbGlkIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbWV0YWRhdGEnLCBtZXRhZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0b3BsZXZlbFBhZ2VzRGljdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZXNPYmogPSB0aGlzLmNhdERpY3QuZ2V0KCdQYWdlcycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocGFnZXNPYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3RvcGxldmVsUGFnZXNEaWN0JywgcGFnZXNPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZG9jdW1lbnRPdXRsaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSB0aGlzLl9yZWFkRG9jdW1lbnRPdXRsaW5lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2RvY3VtZW50T3V0bGluZScsIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwZXJtaXNzaW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVybWlzc2lvbnMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJtaXNzaW9ucyA9IHRoaXMuX3JlYWRQZXJtaXNzaW9ucygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmFibGUgdG8gcmVhZCBwZXJtaXNzaW9ucy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncGVybWlzc2lvbnMnLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJudW1QYWdlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoJ0NvdW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUGFnZSBjb3VudCBpbiB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeSBpcyBub3QgYW4gaW50ZWdlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnbnVtUGFnZXMnLCBvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZGVzdGluYXRpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9yZWFkRGVzdHMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgTmFtZVRyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lcyA9IG9iai5nZXRBbGwoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiBuYW1lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RzW25hbWVdID0gZmV0Y2hEZXN0aW5hdGlvbihuYW1lc1tuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgX3ByaW1pdGl2ZXMuRGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmZvckVhY2goZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdHNba2V5XSA9IGZldGNoRGVzdGluYXRpb24odmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdkZXN0aW5hdGlvbnMnLCBkZXN0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYWdlTGFiZWxzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSB0aGlzLl9yZWFkUGFnZUxhYmVscygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmFibGUgdG8gcmVhZCBwYWdlIGxhYmVscy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncGFnZUxhYmVscycsIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYWdlTW9kZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5jYXREaWN0LmdldCgnUGFnZU1vZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VNb2RlID0gJ1VzZU5vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9iai5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVXNlTm9uZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVXNlT3V0bGluZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1VzZVRodW1icyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRnVsbFNjcmVlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVXNlT0MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1VzZUF0dGFjaG1lbnRzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU1vZGUgPSBvYmoubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncGFnZU1vZGUnLCBwYWdlTW9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvcGVuQWN0aW9uRGVzdGluYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHRoaXMuY2F0RGljdC5nZXQoJ09wZW5BY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZW5BY3Rpb25EZXN0ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc3REaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3REaWN0LnNldCgnQScsIG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0T2JqID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0OiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0RGljdDogZGVzdERpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqOiByZXN1bHRPYmpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZXN1bHRPYmouZGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuQWN0aW9uRGVzdCA9IHJlc3VsdE9iai5kZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbkFjdGlvbkRlc3QgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ29wZW5BY3Rpb25EZXN0aW5hdGlvbicsIG9wZW5BY3Rpb25EZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImF0dGFjaG1lbnRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KCdOYW1lcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0YWNobWVudHMgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmogJiYgb2JqLmhhcygnRW1iZWRkZWRGaWxlcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVRyZWUgPSBuZXcgTmFtZVRyZWUob2JqLmdldFJhdygnRW1iZWRkZWRGaWxlcycpLCB0aGlzLnhyZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gbmFtZVRyZWUuZ2V0QWxsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnMgPSBuZXcgRmlsZVNwZWMobmFtZXNbbmFtZV0sIHRoaXMueHJlZik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50c1soMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKG5hbWUpXSA9IGZzLnNlcmlhbGl6YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnYXR0YWNobWVudHMnLCBhdHRhY2htZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJqYXZhU2NyaXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLmNhdERpY3QuZ2V0KCdOYW1lcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgamF2YVNjcmlwdCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwZW5kSWZKYXZhU2NyaXB0RGljdChqc0RpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0ganNEaWN0LmdldCgnUycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHR5cGUsICdKYXZhU2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcyA9IGpzRGljdC5nZXQoJ0pTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGpzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGpzLmdldEJ5dGVzKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShqcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghamF2YVNjcmlwdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamF2YVNjcmlwdC5wdXNoKCgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoanMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmogJiYgb2JqLmhhcygnSmF2YVNjcmlwdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVRyZWUgPSBuZXcgTmFtZVRyZWUob2JqLmdldFJhdygnSmF2YVNjcmlwdCcpLCB0aGlzLnhyZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gbmFtZVRyZWUuZ2V0QWxsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gbmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganNEaWN0ID0gbmFtZXNbbmFtZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoanNEaWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRJZkphdmFTY3JpcHREaWN0KGpzRGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZW5BY3Rpb25EaWN0ID0gdGhpcy5jYXREaWN0LmdldCgnT3BlbkFjdGlvbicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvcGVuQWN0aW9uRGljdCwgJ0FjdGlvbicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uVHlwZSA9IG9wZW5BY3Rpb25EaWN0LmdldCgnUycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYWN0aW9uVHlwZSwgJ05hbWVkJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gb3BlbkFjdGlvbkRpY3QuZ2V0KCdOJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYWN0aW9uLCAnUHJpbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWphdmFTY3JpcHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHQucHVzaCgncHJpbnQoe30pOycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kSWZKYXZhU2NyaXB0RGljdChvcGVuQWN0aW9uRGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2phdmFTY3JpcHQnLCBqYXZhU2NyaXB0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFyc2VEZXN0RGljdGlvbmFyeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZURlc3REaWN0aW9uYXJ5KHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGREZWZhdWx0UHJvdG9jb2xUb1VybCh1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aCgnd3d3LicpID8gXCJodHRwOi8vXCIuY29uY2F0KHVybCkgOiB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cnlDb252ZXJ0VXJsRW5jb2RpbmcodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc3RyaW5nVG9VVEY4U3RyaW5nKSh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdERpY3QgPSBwYXJhbXMuZGVzdERpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkZXN0RGljdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgncGFyc2VEZXN0RGljdGlvbmFyeTogYGRlc3REaWN0YCBtdXN0IGJlIGEgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRPYmogPSBwYXJhbXMucmVzdWx0T2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZW9mKHJlc3VsdE9iaikgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ3BhcnNlRGVzdERpY3Rpb25hcnk6IGByZXN1bHRPYmpgIG11c3QgYmUgYW4gb2JqZWN0LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY0Jhc2VVcmwgPSBwYXJhbXMuZG9jQmFzZVVybCB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gZGVzdERpY3QuZ2V0KCdBJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSAmJiBkZXN0RGljdC5oYXMoJ0Rlc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gZGVzdERpY3QuZ2V0KCdEZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGlvblR5cGUgPSBhY3Rpb24uZ2V0KCdTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYWN0aW9uVHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ3BhcnNlRGVzdERpY3Rpb25hcnk6IEludmFsaWQgdHlwZSBpbiBBY3Rpb24gZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3Rpb25OYW1lID0gYWN0aW9uVHlwZS5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbk5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdVUkknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBhY3Rpb24uZ2V0KCdVUkknKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gJy8nICsgdXJsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh1cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBhZGREZWZhdWx0UHJvdG9jb2xUb1VybCh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdHb1RvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdCA9IGFjdGlvbi5nZXQoJ0QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMYXVuY2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0dvVG9SJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybERpY3QgPSBhY3Rpb24uZ2V0KCdGJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHVybERpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSB1cmxEaWN0LmdldCgnRicpIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh1cmxEaWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsRGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW1vdGVEZXN0ID0gYWN0aW9uLmdldCgnRCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdGVEZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocmVtb3RlRGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVEZXN0ID0gcmVtb3RlRGVzdC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzU3RyaW5nKSh1cmwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VVcmwgPSB1cmwuc3BsaXQoJyMnKVswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHJlbW90ZURlc3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGJhc2VVcmwgKyAnIycgKyByZW1vdGVEZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZW1vdGVEZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBiYXNlVXJsICsgJyMnICsgSlNPTi5zdHJpbmdpZnkocmVtb3RlRGVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1dpbmRvdyA9IGFjdGlvbi5nZXQoJ05ld1dpbmRvdycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShuZXdXaW5kb3cpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoubmV3V2luZG93ID0gbmV3V2luZG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOYW1lZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lZEFjdGlvbiA9IGFjdGlvbi5nZXQoJ04nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkobmFtZWRBY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmouYWN0aW9uID0gbmFtZWRBY3Rpb24ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSmF2YVNjcmlwdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqc0FjdGlvbiA9IGFjdGlvbi5nZXQoJ0pTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShqc0FjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGpzQWN0aW9uLmdldEJ5dGVzKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoanNBY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcyA9IGpzQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVVJMX09QRU5fTUVUSE9EUyA9IFsnYXBwLmxhdW5jaFVSTCcsICd3aW5kb3cub3BlbiddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlxcXFxzKignICsgVVJMX09QRU5fTUVUSE9EUy5qb2luKCd8Jykuc3BsaXQoJy4nKS5qb2luKCdcXFxcLicpICsgJylcXFxcKCg/OlxcJ3xcXFwiKShbXlxcJ1xcXCJdKikoPzpcXCd8XFxcIikoPzosXFxcXHMqKFxcXFx3KylcXFxcKXxcXFxcKSknLCAnaScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpzVXJsID0gcmVnZXguZXhlYygoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGpzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc1VybCAmJiBqc1VybFsyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IGpzVXJsWzJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzVXJsWzNdID09PSAndHJ1ZScgJiYganNVcmxbMV0gPT09ICdhcHAubGF1bmNoVVJMJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoubmV3V2luZG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwicGFyc2VEZXN0RGljdGlvbmFyeTogdW5zdXBwb3J0ZWQgYWN0aW9uIHR5cGUgXFxcIlwiLmNvbmNhdChhY3Rpb25OYW1lLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVzdERpY3QuaGFzKCdEZXN0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBkZXN0RGljdC5nZXQoJ0Rlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKHVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IHRyeUNvbnZlcnRVcmxFbmNvZGluZyh1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFic29sdXRlVXJsID0gKDAsIF91dGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHVybCwgZG9jQmFzZVVybCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYnNvbHV0ZVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai51cmwgPSBhYnNvbHV0ZVVybC5ocmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudW5zYWZlVXJsID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkZXN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QgPSBkZXN0Lm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGRlc3QpIHx8IEFycmF5LmlzQXJyYXkoZGVzdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmouZGVzdCA9IGRlc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYXRhbG9nO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNhdGFsb2cgPSBDYXRhbG9nO1xuXG4gICAgICAgICAgICAgICAgdmFyIFhSZWYgPSBmdW5jdGlvbiBYUmVmQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gWFJlZihzdHJlYW0sIHBkZk1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZNYW5hZ2VyID0gcGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cmllcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmc3RtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVR5cGVzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250VHlwZXM6IFtdXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgWFJlZi5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGFydFhSZWY6IGZ1bmN0aW9uIFhSZWZfc2V0U3RhcnRYUmVmKHN0YXJ0WFJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUgPSBbc3RhcnRYUmVmXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24gWFJlZl9wYXJzZShyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhaWxlckRpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGVyRGljdCA9IHRoaXMucmVhZFhSZWYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0luZGV4aW5nIGFsbCBQREYgb2JqZWN0cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGVyRGljdCA9IHRoaXMuaW5kZXhPYmplY3RzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxlckRpY3QuYXNzaWduWHJlZih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYWlsZXIgPSB0cmFpbGVyRGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQgPSB0cmFpbGVyRGljdC5nZXQoJ0VuY3J5cHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJYUmVmLnBhcnNlIC0gSW52YWxpZCBcXFwiRW5jcnlwdFxcXCIgcmVmZXJlbmNlOiBcXFwiXCIuY29uY2F0KGV4LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jcnlwdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkcyA9IHRyYWlsZXJEaWN0LmdldCgnSUQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGVJZCA9IGlkcyAmJiBpZHMubGVuZ3RoID8gaWRzWzBdIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHQuc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmNyeXB0ID0gbmV3IF9jcnlwdG8uQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeShlbmNyeXB0LCBmaWxlSWQsIHRoaXMucGRmTWFuYWdlci5wYXNzd29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290ID0gdHJhaWxlckRpY3QuZ2V0KCdSb290Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiWFJlZi5wYXJzZSAtIEludmFsaWQgXFxcIlJvb3RcXFwiIHJlZmVyZW5jZTogXFxcIlwiLmNvbmNhdChleCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHJvb3QpICYmIHJvb3QuaGFzKCdQYWdlcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5YUmVmUGFyc2VFeGNlcHRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCByb290IHJlZmVyZW5jZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzWFJlZlRhYmxlOiBmdW5jdGlvbiBYUmVmX3Byb2Nlc3NYUmVmVGFibGUocGFyc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoJ3RhYmxlU3RhdGUnIGluIHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5TnVtOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtUG9zOiBwYXJzZXIubGV4ZXIuc3RyZWFtLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlckJ1ZjE6IHBhcnNlci5idWYxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyQnVmMjogcGFyc2VyLmJ1ZjJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gdGhpcy5yZWFkWFJlZlRhYmxlKHBhcnNlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAndHJhaWxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgZmluZCB0cmFpbGVyIGRpY3Rpb25hcnknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkgJiYgZGljdC5kaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QgPSBkaWN0LmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkaWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IHBhcnNlIHRyYWlsZXIgZGljdGlvbmFyeScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRhYmxlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFhSZWZUYWJsZTogZnVuY3Rpb24gWFJlZl9yZWFkWFJlZlRhYmxlKHBhcnNlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBwYXJzZXIubGV4ZXIuc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZVN0YXRlID0gdGhpcy50YWJsZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSB0YWJsZVN0YXRlLnN0cmVhbVBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuYnVmMSA9IHRhYmxlU3RhdGUucGFyc2VyQnVmMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuYnVmMiA9IHRhYmxlU3RhdGUucGFyc2VyQnVmMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoJ2ZpcnN0RW50cnlOdW0nIGluIHRhYmxlU3RhdGUpIHx8ICEoJ2VudHJ5Q291bnQnIGluIHRhYmxlU3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmogPSBwYXJzZXIuZ2V0T2JqKCksICd0cmFpbGVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtID0gb2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVTdGF0ZS5lbnRyeUNvdW50ID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gdGFibGVTdGF0ZS5maXJzdEVudHJ5TnVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSB0YWJsZVN0YXRlLmVudHJ5Q291bnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihjb3VudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBYUmVmIHRhYmxlOiB3cm9uZyB0eXBlcyBpbiBzdWJzZWN0aW9uIGhlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRhYmxlU3RhdGUuZW50cnlOdW07IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVN0YXRlLmVudHJ5TnVtID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMSA9IHBhcnNlci5idWYxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVTdGF0ZS5wYXJzZXJCdWYyID0gcGFyc2VyLmJ1ZjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm9mZnNldCA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmdlbiA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0eXBlLCAnZicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZnJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodHlwZSwgJ24nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LnVuY29tcHJlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihlbnRyeS5vZmZzZXQpIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGVudHJ5LmdlbikgfHwgIShlbnRyeS5mcmVlIHx8IGVudHJ5LnVuY29tcHJlc3NlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIGVudHJ5IGluIFhSZWYgc3Vic2VjdGlvbjogXCIuY29uY2F0KGZpcnN0LCBcIiwgXCIpLmNvbmNhdChjb3VudCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCAmJiBlbnRyeS5mcmVlICYmIGZpcnN0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZW50cmllc1tpICsgZmlyc3RdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzW2kgKyBmaXJzdF0gPSBlbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU3RhdGUuZW50cnlOdW0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlU3RhdGUucGFyc2VyQnVmMSA9IHBhcnNlci5idWYxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZVN0YXRlLnBhcnNlckJ1ZjIgPSBwYXJzZXIuYnVmMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlU3RhdGUuZmlyc3RFbnRyeU51bTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlU3RhdGUuZW50cnlDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbnRyaWVzWzBdICYmICF0aGlzLmVudHJpZXNbMF0uZnJlZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NYUmVmU3RyZWFtOiBmdW5jdGlvbiBYUmVmX3Byb2Nlc3NYUmVmU3RyZWFtKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKCdzdHJlYW1TdGF0ZScgaW4gdGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbVBhcmFtZXRlcnMgPSBzdHJlYW0uZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVXaWR0aHMgPSBzdHJlYW1QYXJhbWV0ZXJzLmdldCgnVycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBzdHJlYW1QYXJhbWV0ZXJzLmdldCgnSW5kZXgnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IFswLCBzdHJlYW1QYXJhbWV0ZXJzLmdldCgnU2l6ZScpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeVJhbmdlczogcmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlV2lkdGhzOiBieXRlV2lkdGhzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlOdW06IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1Qb3M6IHN0cmVhbS5wb3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRYUmVmU3RyZWFtKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc3RyZWFtU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRYUmVmU3RyZWFtOiBmdW5jdGlvbiBYUmVmX3JlYWRYUmVmU3RyZWFtKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1TdGF0ZSA9IHRoaXMuc3RyZWFtU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHN0cmVhbVN0YXRlLnN0cmVhbVBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZVdpZHRocyA9IHN0cmVhbVN0YXRlLmJ5dGVXaWR0aHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGVGaWVsZFdpZHRoID0gYnl0ZVdpZHRoc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0RmllbGRXaWR0aCA9IGJ5dGVXaWR0aHNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdlbmVyYXRpb25GaWVsZFdpZHRoID0gYnl0ZVdpZHRoc1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnlSYW5nZXMgPSBzdHJlYW1TdGF0ZS5lbnRyeVJhbmdlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChlbnRyeVJhbmdlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IGVudHJ5UmFuZ2VzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IGVudHJ5UmFuZ2VzWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihmaXJzdCkgfHwgIU51bWJlci5pc0ludGVnZXIobikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiByYW5nZSBmaWVsZHM6IFwiLmNvbmNhdChmaXJzdCwgXCIsIFwiKS5jb25jYXQobikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKHR5cGVGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihvZmZzZXRGaWVsZFdpZHRoKSB8fCAhTnVtYmVyLmlzSW50ZWdlcihnZW5lcmF0aW9uRmllbGRXaWR0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiBcIi5jb25jYXQoZmlyc3QsIFwiLCBcIikuY29uY2F0KG4pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IHN0cmVhbVN0YXRlLmVudHJ5TnVtOyBpIDwgbjsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TdGF0ZS5lbnRyeU51bSA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TdGF0ZS5zdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGlvbiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0eXBlRmllbGRXaWR0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUgPDwgOCB8IHN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlRmllbGRXaWR0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgb2Zmc2V0RmllbGRXaWR0aDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gb2Zmc2V0IDw8IDggfCBzdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgZ2VuZXJhdGlvbkZpZWxkV2lkdGg7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRpb24gPSBnZW5lcmF0aW9uIDw8IDggfCBzdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5Lm9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmdlbiA9IGdlbmVyYXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkuZnJlZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS51bmNvbXByZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogXCIuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVudHJpZXNbZmlyc3QgKyBpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW50cmllc1tmaXJzdCArIGldID0gZW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TdGF0ZS5lbnRyeU51bSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVN0YXRlLnN0cmVhbVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5UmFuZ2VzLnNwbGljZSgwLCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhPYmplY3RzOiBmdW5jdGlvbiBYUmVmX2luZGV4T2JqZWN0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgVEFCID0gMHg5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRiA9IDB4QSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1IgPSAweEQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNQQUNFID0gMHgyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgUEVSQ0VOVCA9IDB4MjUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUID0gMHgzQztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRUb2tlbihkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IGRhdGFbb2Zmc2V0XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT09IExGICYmIGNoICE9PSBDUiAmJiBjaCAhPT0gTFQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK29mZnNldCA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNraXBVbnRpbChkYXRhLCBvZmZzZXQsIHdoYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHdoYXQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2tpcHBlZCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGggJiYgZGF0YVtvZmZzZXQgKyBpXSA9PT0gd2hhdFtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcHBlZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNraXBwZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ialJlZ0V4cCA9IC9eKFxcZCspXFxzKyhcXGQrKVxccytvYmpcXGIvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRvYmpSZWdFeHAgPSAvXFxiZW5kb2JqW1xcYlxcc10kLztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVzdGVkT2JqUmVnRXhwID0gL1xccysoXFxkK1xccytcXGQrXFxzK29ialtcXGJcXHM8XSkkLztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ0hFQ0tfQ09OVEVOVF9MRU5HVEggPSAyNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhaWxlckJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExNiwgMTE0LCA5NywgMTA1LCAxMDgsIDEwMSwgMTE0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0eHJlZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzExNSwgMTE2LCA5NywgMTE0LCAxMTYsIDEyMCwgMTE0LCAxMDEsIDEwMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmpCeXRlcyA9IG5ldyBVaW50OEFycmF5KFsxMTEsIDk4LCAxMDZdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZkJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzQ3LCA4OCwgODIsIDEwMSwgMTAyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYWlsZXJzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZTdG1zID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zaXRpb24gPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gYnVmZmVyW3Bvc2l0aW9uXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IFRBQiB8fCBjaCA9PT0gTEYgfHwgY2ggPT09IENSIHx8IGNoID09PSBTUEFDRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSBQRVJDRU5UKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3NpdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBidWZmZXJbcG9zaXRpb25dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggIT09IExGICYmIGNoICE9PSBDUik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gcmVhZFRva2VuKGJ1ZmZlciwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4uc3RhcnRzV2l0aCgneHJlZicpICYmICh0b2tlbi5sZW5ndGggPT09IDQgfHwgL1xccy8udGVzdCh0b2tlbls0XSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBza2lwVW50aWwoYnVmZmVyLCBwb3NpdGlvbiwgdHJhaWxlckJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsZXJzLnB1c2gocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gc2tpcFVudGlsKGJ1ZmZlciwgcG9zaXRpb24sIHN0YXJ0eHJlZkJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtID0gb2JqUmVnRXhwLmV4ZWModG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gbVsxXSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuID0gbVsyXSB8IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5lbnRyaWVzW251bV0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzW251bV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogcG9zaXRpb24gLSBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbjogZ2VuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNvbXByZXNzZWQ6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudExlbmd0aCA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvcyA9IHBvc2l0aW9uICsgdG9rZW4ubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhcnRQb3MgPCBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZFBvcyA9IHN0YXJ0UG9zICsgc2tpcFVudGlsKGJ1ZmZlciwgc3RhcnRQb3MsIG9iakJ5dGVzKSArIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudExlbmd0aCA9IGVuZFBvcyAtIHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja1BvcyA9IE1hdGgubWF4KGVuZFBvcyAtIENIRUNLX0NPTlRFTlRfTEVOR1RILCBzdGFydFBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuU3RyID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGJ1ZmZlci5zdWJhcnJheShjaGVja1BvcywgZW5kUG9zKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kb2JqUmVnRXhwLnRlc3QodG9rZW5TdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmpUb2tlbiA9IG5lc3RlZE9ialJlZ0V4cC5leGVjKHRva2VuU3RyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqVG9rZW4gJiYgb2JqVG9rZW5bMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnaW5kZXhPYmplY3RzOiBGb3VuZCBuZXcgXCJvYmpcIiBpbnNpZGUgb2YgYW5vdGhlciBcIm9ialwiLCAnICsgJ2NhdXNlZCBieSBtaXNzaW5nIFwiZW5kb2JqXCIgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TGVuZ3RoIC09IG9ialRva2VuWzFdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3MgPSBlbmRQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZW50ID0gYnVmZmVyLnN1YmFycmF5KHBvc2l0aW9uLCBwb3NpdGlvbiArIGNvbnRlbnRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWZUYWdPZmZzZXQgPSBza2lwVW50aWwoY29udGVudCwgMCwgeHJlZkJ5dGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhyZWZUYWdPZmZzZXQgPCBjb250ZW50TGVuZ3RoICYmIGNvbnRlbnRbeHJlZlRhZ09mZnNldCArIDVdIDwgNjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmU3Rtcy5wdXNoKHBvc2l0aW9uIC0gc3RyZWFtLnN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWZzdG1zW3Bvc2l0aW9uIC0gc3RyZWFtLnN0YXJ0XSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGNvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4uc3RhcnRzV2l0aCgndHJhaWxlcicpICYmICh0b2tlbi5sZW5ndGggPT09IDcgfHwgL1xccy8udGVzdCh0b2tlbls3XSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGVycy5wdXNoKHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHNraXBVbnRpbChidWZmZXIsIHBvc2l0aW9uLCBzdGFydHhyZWZCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSB0b2tlbi5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB4cmVmU3Rtcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaCh4cmVmU3Rtc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZFhSZWYodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYWlsZXJEaWN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB0cmFpbGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSB0cmFpbGVyc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcihuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLCB0cnVlLCB0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAndHJhaWxlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyc2VyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvb3REaWN0ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290RGljdCA9IGRpY3QuZ2V0KCdSb290Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocm9vdERpY3QpIHx8ICFyb290RGljdC5oYXMoJ1BhZ2VzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3QuaGFzKCdJRCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsZXJEaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhaWxlckRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYWlsZXJEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5JbnZhbGlkUERGRXhjZXB0aW9uKCdJbnZhbGlkIFBERiBzdHJ1Y3R1cmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkWFJlZjogZnVuY3Rpb24gWFJlZl9yZWFkWFJlZihyZWNvdmVyeU1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0WFJlZlBhcnNlZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0WFJlZiA9IHRoaXMuc3RhcnRYUmVmUXVldWVbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFhSZWZQYXJzZWRDYWNoZVtzdGFydFhSZWZdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdyZWFkWFJlZiAtIHNraXBwaW5nIFhSZWYgdGFibGUgc2luY2UgaXQgd2FzIGFscmVhZHkgcGFyc2VkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRYUmVmUGFyc2VkQ2FjaGVbc3RhcnRYUmVmXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zID0gc3RhcnRYUmVmICsgc3RyZWFtLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfcGFyc2VyLlBhcnNlcihuZXcgX3BhcnNlci5MZXhlcihzdHJlYW0pLCB0cnVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAneHJlZicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IHRoaXMucHJvY2Vzc1hSZWZUYWJsZShwYXJzZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnRvcERpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b3BEaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBkaWN0LmdldCgnWFJlZlN0bScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gb2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHBvcyBpbiB0aGlzLnhyZWZzdG1zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmc3Rtc1twb3NdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChwb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyc2VyLmdldE9iaigpKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzQ21kKShwYXJzZXIuZ2V0T2JqKCksICdvYmonKSB8fCAhKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShvYmogPSBwYXJzZXIuZ2V0T2JqKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBYUmVmIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QgPSB0aGlzLnByb2Nlc3NYUmVmU3RyZWFtKG9iaik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudG9wRGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvcERpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ZhaWxlZCB0byByZWFkIFhSZWYgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgWFJlZiBzdHJlYW0gaGVhZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGRpY3QuZ2V0KCdQcmV2Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2gob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzUmVmKShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKG9iai5udW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0WFJlZlF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b3BEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnKHdoaWxlIHJlYWRpbmcgWFJlZik6ICcgKyBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcnlNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuWFJlZlBhcnNlRXhjZXB0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RW50cnk6IGZ1bmN0aW9uIFhSZWZfZ2V0RW50cnkoaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmRW50cnkgPSB0aGlzLmVudHJpZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZkVudHJ5ICYmICF4cmVmRW50cnkuZnJlZSAmJiB4cmVmRW50cnkub2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmRW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hJZlJlZjogZnVuY3Rpb24gWFJlZl9mZXRjaElmUmVmKG9iaiwgc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mZXRjaChvYmosIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2g6IGZ1bmN0aW9uIFhSZWZfZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1JlZikocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3JlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IHJlZi5udW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtIGluIHRoaXMuY2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlRW50cnkgPSB0aGlzLmNhY2hlW251bV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlRW50cnkgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5EaWN0ICYmICFjYWNoZUVudHJ5Lm9iaklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZUVudHJ5Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZkVudHJ5ID0gdGhpcy5nZXRFbnRyeShudW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhyZWZFbnRyeSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZVtudW1dID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZkVudHJ5LnVuY29tcHJlc3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmRW50cnkgPSB0aGlzLmZldGNoVW5jb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeSA9IHRoaXMuZmV0Y2hDb21wcmVzc2VkKHJlZiwgeHJlZkVudHJ5LCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh4cmVmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeS5vYmpJZCA9IHJlZi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4cmVmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeS5kaWN0Lm9iaklkID0gcmVmLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaFVuY29tcHJlc3NlZDogZnVuY3Rpb24gZmV0Y2hVbmNvbXByZXNzZWQocmVmLCB4cmVmRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcHJlc3NFbmNyeXB0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuID0gcmVmLmdlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0gcmVmLm51bTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4cmVmRW50cnkuZ2VuICE9PSBnZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlhSZWZFbnRyeUV4Y2VwdGlvbihcIkluY29uc2lzdGVudCBnZW5lcmF0aW9uIGluIFhSZWY6IFwiLmNvbmNhdChyZWYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW0ubWFrZVN1YlN0cmVhbSh4cmVmRW50cnkub2Zmc2V0ICsgdGhpcy5zdHJlYW0uc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIobmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSwgdHJ1ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iajEgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iajIgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iajMgPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2JqMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqMSA9IHBhcnNlSW50KG9iajEsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2JqMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqMiA9IHBhcnNlSW50KG9iajIsIDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqMSAhPT0gbnVtIHx8IG9iajIgIT09IGdlbiB8fCAhKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmozKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuWFJlZkVudHJ5RXhjZXB0aW9uKFwiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6IFwiLmNvbmNhdChyZWYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqMy5jbWQgIT09ICdvYmonKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmozLmNtZC5zdGFydHNXaXRoKCdvYmonKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0gcGFyc2VJbnQob2JqMy5jbWQuc3Vic3RyaW5nKDMpLCAxMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG51bSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlhSZWZFbnRyeUV4Y2VwdGlvbihcIkJhZCAodW5jb21wcmVzc2VkKSBYUmVmIGVudHJ5OiBcIi5jb25jYXQocmVmKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jcnlwdCAmJiAhc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeSA9IHBhcnNlci5nZXRPYmoodGhpcy5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShudW0sIGdlbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeSA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoeHJlZkVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlW251bV0gPSB4cmVmRW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWZFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmZXRjaENvbXByZXNzZWQ6IGZ1bmN0aW9uIGZldGNoQ29tcHJlc3NlZChyZWYsIHhyZWZFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwcmVzc0VuY3J5cHRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZU9mZnNldCA9IHhyZWZFbnRyeS5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuZmV0Y2gobmV3IF9wcmltaXRpdmVzLlJlZih0YWJsZU9mZnNldCwgMCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHN0cmVhbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdiYWQgT2JqU3RtIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IHN0cmVhbS5kaWN0LmdldCgnRmlyc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHN0cmVhbS5kaWN0LmdldCgnTicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGZpcnN0KSB8fCAhTnVtYmVyLmlzSW50ZWdlcihuKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ2ludmFsaWQgZmlyc3QgYW5kIG4gcGFyYW1ldGVycyBmb3IgT2JqU3RtIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX3BhcnNlci5QYXJzZXIobmV3IF9wYXJzZXIuTGV4ZXIoc3RyZWFtKSwgZmFsc2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5hbGxvd1N0cmVhbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG51bSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImludmFsaWQgb2JqZWN0IG51bWJlciBpbiB0aGUgT2JqU3RtIHN0cmVhbTogXCIuY29uY2F0KG51bSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtcy5wdXNoKG51bSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBwYXJzZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9mZnNldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcImludmFsaWQgb2JqZWN0IG9mZnNldCBpbiB0aGUgT2JqU3RtIHN0cmVhbTogXCIuY29uY2F0KG9mZnNldCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2gocGFyc2VyLmdldE9iaigpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShwYXJzZXIuYnVmMSwgJ2VuZG9iaicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IG51bXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuZW50cmllc1tudW1dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSAmJiBlbnRyeS5vZmZzZXQgPT09IHRhYmxlT2Zmc2V0ICYmIGVudHJ5LmdlbiA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZVtudW1dID0gZW50cmllc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZFbnRyeSA9IGVudHJpZXNbeHJlZkVudHJ5Lmdlbl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZkVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlhSZWZFbnRyeUV4Y2VwdGlvbihcIkJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogXCIuY29uY2F0KHJlZikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmRW50cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hJZlJlZkFzeW5jOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mZXRjaElmUmVmQXN5bmMgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUob2JqLCBzdXBwcmVzc0VuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgb2JqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwgdGhpcy5mZXRjaEFzeW5jKG9iaiwgc3VwcHJlc3NFbmNyeXB0aW9uKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZldGNoSWZSZWZBc3luYyhfeCwgX3gyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfZmV0Y2hJZlJlZkFzeW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoSWZSZWZBc3luYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoQXN5bmM6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ZldGNoQXN5bmMgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKHJlZiwgc3VwcHJlc3NFbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLnByZXYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHRoaXMuZmV0Y2gocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5wcmV2ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIudDAgPSBfY29udGV4dDJbXCJjYXRjaFwiXSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY29udGV4dDIudDAgaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9jb250ZXh0Mi50MDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoX2NvbnRleHQyLnQwLmJlZ2luLCBfY29udGV4dDIudDAuZW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCB0aGlzLmZldGNoQXN5bmMocmVmLCBzdXBwcmVzc0VuY3J5cHRpb24pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUyLCB0aGlzLCBbWzAsIDRdXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZldGNoQXN5bmMoX3gzLCBfeDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mZXRjaEFzeW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZldGNoQXN5bmM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDYXRhbG9nT2JqOiBmdW5jdGlvbiBYUmVmX2dldENhdGFsb2dPYmooKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFhSZWY7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5YUmVmID0gWFJlZjtcblxuICAgICAgICAgICAgICAgIHZhciBOYW1lT3JOdW1iZXJUcmVlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBOYW1lT3JOdW1iZXJUcmVlKHJvb3QsIHhyZWYsIHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTmFtZU9yTnVtYmVyVHJlZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gTmFtZU9yTnVtYmVyVHJlZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdDYW5ub3QgaW5pdGlhbGl6ZSBOYW1lT3JOdW1iZXJUcmVlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdCA9IHJvb3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmID0geHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKE5hbWVPck51bWJlclRyZWUsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NlZCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkLnB1dCh0aGlzLnJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBbdGhpcy5yb290XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHhyZWYuZmV0Y2hJZlJlZihxdWV1ZS5zaGlmdCgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmouaGFzKCdLaWRzJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkcyA9IG9iai5nZXQoJ0tpZHMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGtpZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkID0ga2lkc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkLmhhcyhraWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJEdXBsaWNhdGUgZW50cnkgaW4gXFxcIlwiLmNvbmNhdCh0aGlzLl90eXBlLCBcIlxcXCIgdHJlZS5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaChraWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWQucHV0KGtpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyaWVzID0gb2JqLmdldCh0aGlzLl90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZW50cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwLCBfaWkgPSBlbnRyaWVzLmxlbmd0aDsgX2kyIDwgX2lpOyBfaTIgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0W3hyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW19pMl0pXSA9IHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW19pMiArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yb290KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2lkc09yRW50cmllcyA9IHhyZWYuZmV0Y2hJZlJlZih0aGlzLnJvb3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9vcENvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9MRVZFTFMgPSAxMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoa2lkc09yRW50cmllcy5oYXMoJ0tpZHMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrbG9vcENvdW50ID4gTUFYX0xFVkVMUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlNlYXJjaCBkZXB0aCBsaW1pdCByZWFjaGVkIGZvciBcXFwiXCIuY29uY2F0KHRoaXMuX3R5cGUsIFwiXFxcIiB0cmVlLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBraWRzID0ga2lkc09yRW50cmllcy5nZXQoJ0tpZHMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGtpZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0ga2lkcy5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobCA8PSByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBsICsgciA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBraWQgPSB4cmVmLmZldGNoSWZSZWYoa2lkc1ttXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbWl0cyA9IGtpZC5nZXQoJ0xpbWl0cycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA8IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBtIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA+IHhyZWYuZmV0Y2hJZlJlZihsaW1pdHNbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBtICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraWRzT3JFbnRyaWVzID0geHJlZi5mZXRjaElmUmVmKGtpZHNbbV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsID4gcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJpZXMgPSBraWRzT3JFbnRyaWVzLmdldCh0aGlzLl90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbnRyaWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfciA9IGVudHJpZXMubGVuZ3RoIC0gMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKF9sIDw9IF9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IF9sICsgX3IgPj4gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX20gPSB0bXAgKyAodG1wICYgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudEtleSA9IHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW19tXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5IDwgY3VycmVudEtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfciA9IF9tIC0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA+IGN1cnJlbnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2wgPSBfbSArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hJZlJlZihlbnRyaWVzW19tICsgMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiRmFsbGluZyBiYWNrIHRvIGFuIGV4aGF1c3RpdmUgc2VhcmNoLCBmb3Iga2V5IFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIsIFwiKSArIFwiaW4gXFxcIlwiLmNvbmNhdCh0aGlzLl90eXBlLCBcIlxcXCIgdHJlZS5cIikpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfbTIgPSAwLCBtbSA9IGVudHJpZXMubGVuZ3RoOyBfbTIgPCBtbTsgX20yICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2N1cnJlbnRLZXkgPSB4cmVmLmZldGNoSWZSZWYoZW50cmllc1tfbTJdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfY3VycmVudEtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlRoZSBcXFwiXCIuY29uY2F0KGtleSwgXCJcXFwiIGtleSB3YXMgZm91bmQgYXQgYW4gaW5jb3JyZWN0LCBcIikgKyBcImkuZS4gb3V0LW9mLW9yZGVyLCBwb3NpdGlvbiBpbiBcXFwiXCIuY29uY2F0KHRoaXMuX3R5cGUsIFwiXFxcIiB0cmVlLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmLmZldGNoSWZSZWYoZW50cmllc1tfbTIgKyAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZU9yTnVtYmVyVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIE5hbWVUcmVlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX05hbWVPck51bWJlclRyZWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhOYW1lVHJlZSwgX05hbWVPck51bWJlclRyZWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBOYW1lVHJlZShyb290LCB4cmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE5hbWVUcmVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTmFtZVRyZWUpLmNhbGwodGhpcywgcm9vdCwgeHJlZiwgJ05hbWVzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZVRyZWU7XG4gICAgICAgICAgICAgICAgICAgIH0oTmFtZU9yTnVtYmVyVHJlZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgTnVtYmVyVHJlZSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9OYW1lT3JOdW1iZXJUcmVlMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKE51bWJlclRyZWUsIF9OYW1lT3JOdW1iZXJUcmVlMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bWJlclRyZWUocm9vdCwgeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBOdW1iZXJUcmVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoTnVtYmVyVHJlZSkuY2FsbCh0aGlzLCByb290LCB4cmVmLCAnTnVtcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlclRyZWU7XG4gICAgICAgICAgICAgICAgICAgIH0oTmFtZU9yTnVtYmVyVHJlZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRmlsZVNwZWMgPSBmdW5jdGlvbiBGaWxlU3BlY0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEZpbGVTcGVjKHJvb3QsIHhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcm9vdCB8fCAhKDAsIF9wcmltaXRpdmVzLmlzRGljdCkocm9vdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3QgPSByb290O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9vdC5oYXMoJ0ZTJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZzID0gcm9vdC5nZXQoJ0ZTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gPSByb290LmhhcygnRGVzYycpID8gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShyb290LmdldCgnRGVzYycpKSA6ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm9vdC5oYXMoJ1JGJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1JlbGF0ZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJvb3QuaGFzKCdFRicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50QXZhaWxhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdOb24tZW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGlja1BsYXRmb3JtSXRlbShkaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdC5oYXMoJ1VGJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5nZXQoJ1VGJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRpY3QuaGFzKCdGJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5nZXQoJ0YnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGljdC5oYXMoJ1VuaXgnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaWN0LmdldCgnVW5peCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWN0LmhhcygnTWFjJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5nZXQoJ01hYycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkaWN0LmhhcygnRE9TJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5nZXQoJ0RPUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEZpbGVTcGVjLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBmaWxlbmFtZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2ZpbGVuYW1lICYmIHRoaXMucm9vdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSBwaWNrUGxhdGZvcm1JdGVtKHRoaXMucm9vdCkgfHwgJ3VubmFtZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlbmFtZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoZmlsZW5hbWUpLnJlcGxhY2UoL1xcXFxcXFxcL2csICdcXFxcJykucmVwbGFjZSgvXFxcXFxcLy9nLCAnLycpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgY29udGVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudEF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGVudFJlZiAmJiB0aGlzLnJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZW50UmVmID0gcGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QuZ2V0KCdFRicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZU9iaiA9IHhyZWYuZmV0Y2hJZlJlZih0aGlzLmNvbnRlbnRSZWYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlT2JqICYmICgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZmlsZU9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBmaWxlT2JqLmdldEJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0VtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBwb2ludHMgdG8gbm9uLWV4aXN0aW5nL2ludmFsaWQgJyArICdjb250ZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0VtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGEgY29udGVudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHNlcmlhbGl6YWJsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5maWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsZVNwZWM7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5GaWxlU3BlYyA9IEZpbGVTcGVjO1xuXG4gICAgICAgICAgICAgICAgdmFyIE9iamVjdExvYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF5SGF2ZUNoaWxkcmVuKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9wcmltaXRpdmVzLmlzUmVmKSh2YWx1ZSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodmFsdWUpIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpIHx8ICgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ2hpbGRyZW4obm9kZSwgbm9kZXNUb1Zpc2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9kZSkgPyBub2RlIDogbm9kZS5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0S2V5cyA9IGRpY3QuZ2V0S2V5cygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGljdEtleXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmF3VmFsdWUgPSBkaWN0LmdldFJhdyhkaWN0S2V5c1tpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heUhhdmVDaGlsZHJlbihyYXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDAsIF9paTIgPSBub2RlLmxlbmd0aDsgX2kzIDwgX2lpMjsgX2kzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbm9kZVtfaTNdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXlIYXZlQ2hpbGRyZW4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1RvVmlzaXQucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBPYmplY3RMb2FkZXIoZGljdCwga2V5cywgeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5cyA9IGtleXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZTZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXBhYmlsaXR5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdExvYWRlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkOiBmdW5jdGlvbiBsb2FkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRoaXMueHJlZi5zdHJlYW0gaW5zdGFuY2VvZiBfY2h1bmtlZF9zdHJlYW0uQ2h1bmtlZFN0cmVhbSkgfHwgdGhpcy54cmVmLnN0cmVhbS5nZXRNaXNzaW5nQ2h1bmtzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IHRoaXMua2V5cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IHRoaXMuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZlNldCA9IG5ldyBfcHJpbWl0aXZlcy5SZWZTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXNUb1Zpc2l0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBrZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhd1ZhbHVlID0gZGljdC5nZXRSYXcoa2V5c1tpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhd1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9WaXNpdC5wdXNoKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dhbGsobm9kZXNUb1Zpc2l0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfd2FsazogZnVuY3Rpb24gX3dhbGsobm9kZXNUb1Zpc2l0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZXNUb1JldmlzaXQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ1JlcXVlc3RzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobm9kZXNUb1Zpc2l0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudE5vZGUgPSBub2Rlc1RvVmlzaXQucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoY3VycmVudE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWZTZXQuaGFzKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmU2V0LnB1dChjdXJyZW50Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUgPSB0aGlzLnhyZWYuZmV0Y2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShleCBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1RvUmV2aXNpdC5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBleC5iZWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBleC5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSAmJiBjdXJyZW50Tm9kZS5nZXRCYXNlU3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VTdHJlYW1zID0gY3VycmVudE5vZGUuZ2V0QmFzZVN0cmVhbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VuZE1pc3NpbmdEYXRhID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJhc2VTdHJlYW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gYmFzZVN0cmVhbXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmdldE1pc3NpbmdDaHVua3MgJiYgc3RyZWFtLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRNaXNzaW5nRGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBzdHJlYW0uc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IHN0cmVhbS5lbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmRNaXNzaW5nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzVG9SZXZpc2l0LnB1c2goY3VycmVudE5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ2hpbGRyZW4oY3VycmVudE5vZGUsIG5vZGVzVG9WaXNpdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54cmVmLnN0cmVhbS5tYW5hZ2VyLnJlcXVlc3RSYW5nZXMocGVuZGluZ1JlcXVlc3RzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pNCA9IDAsIF9paTMgPSBub2Rlc1RvUmV2aXNpdC5sZW5ndGg7IF9pNCA8IF9paTM7IF9pNCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlc1RvUmV2aXNpdFtfaTRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikobm9kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnJlZlNldC5yZW1vdmUobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3dhbGsobm9kZXNUb1JldmlzaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLmNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmU2V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0TG9hZGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuT2JqZWN0TG9hZGVyID0gT2JqZWN0TG9hZGVyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzRU9GID0gaXNFT0Y7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0NtZCA9IGlzQ21kO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNEaWN0ID0gaXNEaWN0O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNOYW1lID0gaXNOYW1lO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNSZWYgPSBpc1JlZjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzUmVmc0VxdWFsID0gaXNSZWZzRXF1YWw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc1N0cmVhbSA9IGlzU3RyZWFtO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVmU2V0Q2FjaGUgPSBleHBvcnRzLlJlZlNldCA9IGV4cG9ydHMuUmVmID0gZXhwb3J0cy5OYW1lID0gZXhwb3J0cy5EaWN0ID0gZXhwb3J0cy5DbWQgPSBleHBvcnRzLkVPRiA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgRU9GID0ge307XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5FT0YgPSBFT0Y7XG5cbiAgICAgICAgICAgICAgICB2YXIgTmFtZSA9IGZ1bmN0aW9uIE5hbWVDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBOYW1lKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBOYW1lLnByb3RvdHlwZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICBOYW1lLmdldCA9IGZ1bmN0aW9uIE5hbWVfZ2V0KG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lVmFsdWUgPSBuYW1lQ2FjaGVbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZVZhbHVlID8gbmFtZVZhbHVlIDogbmFtZUNhY2hlW25hbWVdID0gbmV3IE5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWU7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5OYW1lID0gTmFtZTtcblxuICAgICAgICAgICAgICAgIHZhciBDbWQgPSBmdW5jdGlvbiBDbWRDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDbWQoY21kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNtZCA9IGNtZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENtZC5wcm90b3R5cGUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNtZENhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICBDbWQuZ2V0ID0gZnVuY3Rpb24gQ21kX2dldChjbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWRWYWx1ZSA9IGNtZENhY2hlW2NtZF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY21kVmFsdWUgPyBjbWRWYWx1ZSA6IGNtZENhY2hlW2NtZF0gPSBuZXcgQ21kKGNtZCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENtZDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNtZCA9IENtZDtcblxuICAgICAgICAgICAgICAgIHZhciBEaWN0ID0gZnVuY3Rpb24gRGljdENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub25TZXJpYWxpemFibGUgPSBmdW5jdGlvbiBub25TZXJpYWxpemFibGVDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vblNlcmlhbGl6YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEaWN0KHhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmpJZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25vblNlcmlhbGl6YWJsZV9fID0gbm9uU2VyaWFsaXphYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgRGljdC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25YcmVmOiBmdW5jdGlvbiBEaWN0X2Fzc2lnblhyZWYobmV3WHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IG5ld1hyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBEaWN0X2dldChrZXkxLCBrZXkyLCBrZXkzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwcmVzc0VuY3J5cHRpb24gPSB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlID0gdGhpcy5fbWFwW2tleTFdKSAhPT0gJ3VuZGVmaW5lZCcgfHwga2V5MSBpbiB0aGlzLl9tYXAgfHwgdHlwZW9mIGtleTIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmID8geHJlZi5mZXRjaElmUmVmKHZhbHVlLCBzdXBwcmVzc0VuY3J5cHRpb24pIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUgPSB0aGlzLl9tYXBba2V5Ml0pICE9PSAndW5kZWZpbmVkJyB8fCBrZXkyIGluIHRoaXMuX21hcCB8fCB0eXBlb2Yga2V5MyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWYgPyB4cmVmLmZldGNoSWZSZWYodmFsdWUsIHN1cHByZXNzRW5jcnlwdGlvbikgOiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX21hcFtrZXkzXSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmID8geHJlZi5mZXRjaElmUmVmKHZhbHVlLCBzdXBwcmVzc0VuY3J5cHRpb24pIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXN5bmM6IGZ1bmN0aW9uIERpY3RfZ2V0QXN5bmMoa2V5MSwga2V5Miwga2V5Mykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NFbmNyeXB0aW9uID0gdGhpcy5zdXBwcmVzc0VuY3J5cHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSA9IHRoaXMuX21hcFtrZXkxXSkgIT09ICd1bmRlZmluZWQnIHx8IGtleTEgaW4gdGhpcy5fbWFwIHx8IHR5cGVvZiBrZXkyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhyZWYuZmV0Y2hJZlJlZkFzeW5jKHZhbHVlLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUgPSB0aGlzLl9tYXBba2V5Ml0pICE9PSAndW5kZWZpbmVkJyB8fCBrZXkyIGluIHRoaXMuX21hcCB8fCB0eXBlb2Yga2V5MyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4cmVmLmZldGNoSWZSZWZBc3luYyh2YWx1ZSwgc3VwcHJlc3NFbmNyeXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fbWFwW2tleTNdIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geHJlZi5mZXRjaElmUmVmQXN5bmModmFsdWUsIHN1cHByZXNzRW5jcnlwdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXJyYXk6IGZ1bmN0aW9uIERpY3RfZ2V0QXJyYXkoa2V5MSwga2V5Miwga2V5Mykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KGtleTEsIGtleTIsIGtleTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwcmVzc0VuY3J5cHRpb24gPSB0aGlzLnN1cHByZXNzRW5jcnlwdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgIXhyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuc2xpY2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JlZih2YWx1ZVtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVbaV0gPSB4cmVmLmZldGNoKHZhbHVlW2ldLCBzdXBwcmVzc0VuY3J5cHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRSYXc6IGZ1bmN0aW9uIERpY3RfZ2V0UmF3KGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXBba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRLZXlzOiBmdW5jdGlvbiBEaWN0X2dldEtleXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBEaWN0X3NldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIERpY3RfaGFzKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXkgaW4gdGhpcy5fbWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIERpY3RfZm9yRWFjaChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLl9tYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soa2V5LCB0aGlzLmdldChrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIERpY3QuZW1wdHkgPSBuZXcgRGljdChudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICBEaWN0Lm1lcmdlID0gZnVuY3Rpb24gKHhyZWYsIGRpY3RBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lcmdlZERpY3QgPSBuZXcgRGljdCh4cmVmKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGljdEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IGRpY3RBcnJheVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNEaWN0KGRpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleU5hbWUgaW4gZGljdC5fbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXJnZWREaWN0Ll9tYXBba2V5TmFtZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZWREaWN0Ll9tYXBba2V5TmFtZV0gPSBkaWN0Ll9tYXBba2V5TmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVyZ2VkRGljdDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGljdDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkRpY3QgPSBEaWN0O1xuXG4gICAgICAgICAgICAgICAgdmFyIFJlZiA9IGZ1bmN0aW9uIFJlZkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlZihudW0sIGdlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW0gPSBudW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbiA9IGdlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFJlZi5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gUmVmX3RvU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdlbiAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIi5jb25jYXQodGhpcy5udW0sIFwiUlwiKS5jb25jYXQodGhpcy5nZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh0aGlzLm51bSwgXCJSXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVmID0gUmVmO1xuXG4gICAgICAgICAgICAgICAgdmFyIFJlZlNldCA9IGZ1bmN0aW9uIFJlZlNldENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlZlNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBSZWZTZXQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiBSZWZTZXRfaGFzKHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWYudG9TdHJpbmcoKSBpbiB0aGlzLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0OiBmdW5jdGlvbiBSZWZTZXRfcHV0KHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24gUmVmU2V0X3JlbW92ZShyZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5kaWN0W3JlZi50b1N0cmluZygpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZlNldDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlJlZlNldCA9IFJlZlNldDtcblxuICAgICAgICAgICAgICAgIHZhciBSZWZTZXRDYWNoZSA9IGZ1bmN0aW9uIFJlZlNldENhY2hlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVmU2V0Q2FjaGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUmVmU2V0Q2FjaGUucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9nZXQocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzOiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9oYXMocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlZi50b1N0cmluZygpIGluIHRoaXMuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXQ6IGZ1bmN0aW9uIFJlZlNldENhY2hlX3B1dChyZWYsIG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdFtyZWYudG9TdHJpbmcoKV0gPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0QWxpYXM6IGZ1bmN0aW9uIFJlZlNldENhY2hlX3B1dEFsaWFzKHJlZiwgYWxpYXNSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3RbcmVmLnRvU3RyaW5nKCldID0gdGhpcy5nZXQoYWxpYXNSZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIFJlZlNldENhY2hlX2ZvckVhY2goZm4sIHRoaXNBcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMuZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXNBcmcsIHRoaXMuZGljdFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbiBSZWZTZXRDYWNoZV9jbGVhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVmU2V0Q2FjaGU7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5SZWZTZXRDYWNoZSA9IFJlZlNldENhY2hlO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNFT0Yodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiA9PT0gRU9GO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzTmFtZSh2LCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2IGluc3RhbmNlb2YgTmFtZSAmJiAobmFtZSA9PT0gdW5kZWZpbmVkIHx8IHYubmFtZSA9PT0gbmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNDbWQodiwgY21kKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2IGluc3RhbmNlb2YgQ21kICYmIChjbWQgPT09IHVuZGVmaW5lZCB8fCB2LmNtZCA9PT0gY21kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0RpY3QodiwgdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiBpbnN0YW5jZW9mIERpY3QgJiYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCBpc05hbWUodi5nZXQoJ1R5cGUnKSwgdHlwZSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzUmVmKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgaW5zdGFuY2VvZiBSZWY7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNSZWZzRXF1YWwodjEsIHYyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2MS5udW0gPT09IHYyLm51bSAmJiB2MS5nZW4gPT09IHYyLmdlbjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1N0cmVhbSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfdHlwZW9mKHYpID09PSAnb2JqZWN0JyAmJiB2ICE9PSBudWxsICYmIHYuZ2V0Qnl0ZXMgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGFyc2VyID0gZXhwb3J0cy5MaW5lYXJpemF0aW9uID0gZXhwb3J0cy5MZXhlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfcHJpbWl0aXZlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU1KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY2NpdHRfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9qYmlnMl9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2pwZWdfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9qcHhfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIE1BWF9MRU5HVEhfVE9fQ0FDSEUgPSAxMDAwO1xuICAgICAgICAgICAgICAgIHZhciBNQVhfQURMRVIzMl9MRU5HVEggPSA1NTUyO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcHV0ZUFkbGVyMzIoYnl0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzTGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBiID0gMDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgKz0gYnl0ZXNbaV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgYiArPSBhO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGIgJSA2NTUyMSA8PCAxNiB8IGEgJSA2NTUyMTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUGFyc2VyID0gZnVuY3Rpb24gUGFyc2VyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUGFyc2VyKGxleGVyLCBhbGxvd1N0cmVhbXMsIHhyZWYsIHJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZXhlciA9IGxleGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd1N0cmVhbXMgPSBhbGxvd1N0cmVhbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhyZWYgPSB4cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvdmVyeU1vZGUgPSByZWNvdmVyeU1vZGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFBhcnNlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWZpbGw6IGZ1bmN0aW9uIFBhcnNlcl9yZWZpbGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYxID0gdGhpcy5sZXhlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZjIgPSB0aGlzLmxleGVyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0OiBmdW5jdGlvbiBQYXJzZXJfc2hpZnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCAnSUQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZjEgPSB0aGlzLmJ1ZjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmMiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYxID0gdGhpcy5idWYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZjIgPSB0aGlzLmxleGVyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnlTaGlmdDogZnVuY3Rpb24gUGFyc2VyX3RyeVNoaWZ0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPYmo6IGZ1bmN0aW9uIFBhcnNlcl9nZXRPYmooY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZjEgPSB0aGlzLmJ1ZjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZjEgaW5zdGFuY2VvZiBfcHJpbWl0aXZlcy5DbWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChidWYxLmNtZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQkknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VJbmxpbmVJbWFnZShjaXBoZXJUcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdbJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjEsICddJykgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdFbmQgb2YgZmlsZSBpbnNpZGUgYXJyYXknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc8PCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBuZXcgX3ByaW1pdGl2ZXMuRGljdCh0aGlzLnhyZWYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKHRoaXMuYnVmMSwgJz4+JykgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnTWFsZm9ybWVkIGRpY3Rpb25hcnk6IGtleSBtdXN0IGJlIGEgbmFtZSBvYmplY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuYnVmMS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnNldChrZXksIHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlY292ZXJ5TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCAnc3RyZWFtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWxsb3dTdHJlYW1zID8gdGhpcy5tYWtlU3RyZWFtKGRpY3QsIGNpcGhlclRyYW5zZm9ybSkgOiBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGJ1ZjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBidWYxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuYnVmMSkgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjIsICdSJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWYgPSBuZXcgX3ByaW1pdGl2ZXMuUmVmKG51bSwgdGhpcy5idWYxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGJ1ZjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBidWYxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IGNpcGhlclRyYW5zZm9ybS5kZWNyeXB0U3RyaW5nKHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidWYxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBmdW5jdGlvbiBmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRSA9IDB4NDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgPSAweDQ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUEFDRSA9IDB4MjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExGID0gMHhBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUiA9IDB4RDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUwgPSAweDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UG9zID0gc3RyZWFtLnBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVFSVBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGNoID09PSBFID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gY2ggPT09IEkgPyAyIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHN0YXRlID09PSAyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSBTUEFDRSB8fCBjaCA9PT0gTEYgfHwgY2ggPT09IENSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVFSVBvcyA9IHN0cmVhbS5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbGxvd2luZ0J5dGVzID0gc3RyZWFtLnBlZWtCeXRlcyhuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZvbGxvd2luZ0J5dGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBmb2xsb3dpbmdCeXRlc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IE5VTCAmJiBmb2xsb3dpbmdCeXRlc1tpICsgMV0gIT09IE5VTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggIT09IExGICYmIGNoICE9PSBDUiAmJiAoY2ggPCBTUEFDRSB8fCBjaCA+IDB4N0YpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZDogJyArICdSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVFSVBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgXCJFSVwiIG9jY3VycmVuY2UuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcCgtKHN0cmVhbS5wb3MgLSBtYXliZUVJUG9zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kT2Zmc2V0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcCgtZW5kT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5wZWVrQnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKGVuZE9mZnNldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1NwYWNlKShjaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5wb3MgLSBlbmRPZmZzZXQgLSBzdGFydFBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kOiBmdW5jdGlvbiBQYXJzZXJfZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEVPSSA9IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoYiA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYiAhPT0gMHhGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0cmVhbS5nZXRCeXRlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEQ5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kRU9JID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEMwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEMxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEMyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEMzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENBOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENGOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEM0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweENDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERBOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEREOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweERGOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEUwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEUxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEUyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEUzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEU5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVBOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEVGOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlckxlbmd0aCA9IHN0cmVhbS5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXJMZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKG1hcmtlckxlbmd0aCAtIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKC0yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZEVPSSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBzdHJlYW0ucG9zIC0gc3RhcnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYiA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbmxpbmUgRENURGVjb2RlIGltYWdlIHN0cmVhbTogJyArICdFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZDogZnVuY3Rpb24gUGFyc2VyX2ZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUSUxERSA9IDB4N0UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUID0gMHgzRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IFRJTERFICYmIHN0cmVhbS5wZWVrQnl0ZSgpID09PSBHVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0YXJ0UG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0lubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogJyArICdFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKC1sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQ6IGZ1bmN0aW9uIFBhcnNlcl9maW5kQVNDSUlIZXhEZWNvZGVJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdUID0gMHgzRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IEdUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHN0cmVhbS5wb3MgLSBzdGFydFBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbmxpbmUgQVNDSUlIZXhEZWNvZGUgaW1hZ2Ugc3RyZWFtOiAnICsgJ0VPRCBtYXJrZXIgbm90IGZvdW5kLCBzZWFyY2hpbmcgZm9yIC9FSS8gaW5zdGVhZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXAoLWxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZVN0cmVhbVNraXBFSTogZnVuY3Rpb24gUGFyc2VyX2lubGluZVN0cmVhbVNraXBFSShzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRSA9IDB4NDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkgPSAweDQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5nZXRCeXRlKCkpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gY2ggPT09IEUgPyAxIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBjaCA9PT0gSSA/IDIgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWtlSW5saW5lSW1hZ2U6IGZ1bmN0aW9uIFBhcnNlcl9tYWtlSW5saW5lSW1hZ2UoY2lwaGVyVHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxleGVyID0gdGhpcy5sZXhlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gbGV4ZXIuc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gbmV3IF9wcmltaXRpdmVzLkRpY3QodGhpcy54cmVmKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdExlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKSh0aGlzLmJ1ZjEsICdJRCcpICYmICEoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKHRoaXMuYnVmMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0aGlzLmJ1ZjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0RpY3Rpb25hcnkga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IHRoaXMuYnVmMS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikodGhpcy5idWYxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnNldChrZXksIHRoaXMuZ2V0T2JqKGNpcGhlclRyYW5zZm9ybSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXhlci5iZWdpbklubGluZUltYWdlUG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0TGVuZ3RoID0gc3RyZWFtLnBvcyAtIGxleGVyLmJlZ2luSW5saW5lSW1hZ2VQb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IGRpY3QuZ2V0KCdGaWx0ZXInLCAnRicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJOYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyTmFtZSA9IGZpbHRlci5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJaZXJvID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmlsdGVyWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyWmVybykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlck5hbWUgPSBmaWx0ZXJaZXJvLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyTmFtZSA9PT0gJ0RDVERlY29kZScgfHwgZmlsdGVyTmFtZSA9PT0gJ0RDVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5maW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJOYW1lID09PSAnQVNDSUk4NURlY29kZScgfHwgZmlsdGVyTmFtZSA9PT0gJ0E4NScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyTmFtZSA9PT0gJ0FTQ0lJSGV4RGVjb2RlJyB8fCBmaWx0ZXJOYW1lID09PSAnQUh4Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSB0aGlzLmZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VTdHJlYW0gPSBzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydFBvcywgbGVuZ3RoLCBkaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVLZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDwgTUFYX0xFTkdUSF9UT19DQUNIRSAmJiBkaWN0TGVuZ3RoIDwgTUFYX0FETEVSMzJfTEVOR1RIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZUJ5dGVzID0gaW1hZ2VTdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJlYW0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluaXRpYWxTdHJlYW1Qb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zID0gbGV4ZXIuYmVnaW5JbmxpbmVJbWFnZVBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3RCeXRlcyA9IHN0cmVhbS5nZXRCeXRlcyhkaWN0TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IGluaXRpYWxTdHJlYW1Qb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5ID0gY29tcHV0ZUFkbGVyMzIoaW1hZ2VCeXRlcykgKyAnXycgKyBjb21wdXRlQWRsZXIzMihkaWN0Qnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVFbnRyeSA9IHRoaXMuaW1hZ2VDYWNoZVtjYWNoZUtleV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlRW50cnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWYyID0gX3ByaW1pdGl2ZXMuQ21kLmdldCgnRUknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlRW50cnkucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWNoZUVudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNpcGhlclRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmVhbSA9IGNpcGhlclRyYW5zZm9ybS5jcmVhdGVTdHJlYW0oaW1hZ2VTdHJlYW0sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJlYW0gPSB0aGlzLmZpbHRlcihpbWFnZVN0cmVhbSwgZGljdCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmVhbS5kaWN0ID0gZGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZWFtLmNhY2hlS2V5ID0gJ2lubGluZV8nICsgbGVuZ3RoICsgJ18nICsgY2FjaGVLZXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2VDYWNoZVtjYWNoZUtleV0gPSBpbWFnZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZjIgPSBfcHJpbWl0aXZlcy5DbWQuZ2V0KCdFSScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1hZ2VTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2ZpbmRTdHJlYW1MZW5ndGg6IGZ1bmN0aW9uIF9maW5kU3RyZWFtTGVuZ3RoKHN0YXJ0UG9zLCBzaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5sZXhlci5zdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHN0YXJ0UG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTQ0FOX0JMT0NLX0xFTkdUSCA9IDIwNDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25hdHVyZUxlbmd0aCA9IHNpZ25hdHVyZS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IHN0cmVhbS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Nhbkxlbmd0aCA9IHNjYW5CeXRlcy5sZW5ndGggLSBzaWduYXR1cmVMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjYW5MZW5ndGggPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgc2Nhbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGogPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaiA8IHNpZ25hdHVyZUxlbmd0aCAmJiBzY2FuQnl0ZXNbcG9zICsgal0gPT09IHNpZ25hdHVyZVtqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPj0gc2lnbmF0dXJlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyArPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5wb3MgLSBzdGFydFBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucG9zICs9IHNjYW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VTdHJlYW06IGZ1bmN0aW9uIFBhcnNlcl9tYWtlU3RyZWFtKGRpY3QsIGNpcGhlclRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGxleGVyLnN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXhlci5za2lwVG9OZXh0TGluZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydFBvcyA9IHN0cmVhbS5wb3MgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBkaWN0LmdldCgnTGVuZ3RoJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0JhZCAnICsgbGVuZ3RoICsgJyBhdHRyaWJ1dGUgaW4gc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHN0YXJ0UG9zICsgbGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleGVyLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50cnlTaGlmdCgpICYmICgwLCBfcHJpbWl0aXZlcy5pc0NtZCkodGhpcy5idWYyLCAnZW5kc3RyZWFtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBFTkRTVFJFQU1fU0lHTkFUVVJFID0gbmV3IFVpbnQ4QXJyYXkoWzB4NjUsIDB4NkUsIDB4NjQsIDB4NzMsIDB4NzQsIDB4NzIsIDB4NjUsIDB4NjEsIDB4NkRdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0dWFsTGVuZ3RoID0gdGhpcy5fZmluZFN0cmVhbUxlbmd0aChzdGFydFBvcywgRU5EU1RSRUFNX1NJR05BVFVSRSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfVFJVTkNBVElPTiA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IE1BWF9UUlVOQ0FUSU9OOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gRU5EU1RSRUFNX1NJR05BVFVSRS5sZW5ndGggLSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUUlVOQ0FURURfU0lHTkFUVVJFID0gRU5EU1RSRUFNX1NJR05BVFVSRS5zbGljZSgwLCBlbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heWJlTGVuZ3RoID0gdGhpcy5fZmluZFN0cmVhbUxlbmd0aChzdGFydFBvcywgVFJVTkNBVEVEX1NJR05BVFVSRSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVMZW5ndGggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdEJ5dGUgPSBzdHJlYW0ucGVla0J5dGVzKGVuZCArIDEpW2VuZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3V0aWwuaXNTcGFjZSkobGFzdEJ5dGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkZvdW5kIFxcXCJcIi5jb25jYXQoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKFRSVU5DQVRFRF9TSUdOQVRVUkUpLCBcIlxcXCIgd2hlbiBcIikgKyAnc2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbExlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ01pc3NpbmcgZW5kc3RyZWFtIGNvbW1hbmQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBhY3R1YWxMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxleGVyLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBzdHJlYW0ubWFrZVN1YlN0cmVhbShzdGFydFBvcywgbGVuZ3RoLCBkaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaXBoZXJUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gY2lwaGVyVHJhbnNmb3JtLmNyZWF0ZVN0cmVhbShzdHJlYW0sIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0gdGhpcy5maWx0ZXIoc3RyZWFtLCBkaWN0LCBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5kaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjogZnVuY3Rpb24gUGFyc2VyX2ZpbHRlcihzdHJlYW0sIGRpY3QsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBkaWN0LmdldCgnRmlsdGVyJywgJ0YnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gZGljdC5nZXQoJ0RlY29kZVBhcm1zJywgJ0RQJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJy9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGNvbnRhaW4gYW4gQXJyYXksICcgKyAnd2hlbiAvRmlsdGVyIGNvbnRhaW5zIGEgTmFtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1ha2VGaWx0ZXIoc3RyZWFtLCBmaWx0ZXIubmFtZSwgbGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXliZUxlbmd0aCA9IGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlckFycmF5ID0gZmlsdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zQXJyYXkgPSBwYXJhbXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZmlsdGVyQXJyYXkubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gdGhpcy54cmVmLmZldGNoSWZSZWYoZmlsdGVyQXJyYXlbaV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBmaWx0ZXIgbmFtZTogJyArIGZpbHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcmFtc0FycmF5KSAmJiBpIGluIHBhcmFtc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gdGhpcy54cmVmLmZldGNoSWZSZWYocGFyYW1zQXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSB0aGlzLm1ha2VGaWx0ZXIoc3RyZWFtLCBmaWx0ZXIubmFtZSwgbWF5YmVMZW5ndGgsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZUxlbmd0aCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ha2VGaWx0ZXI6IGZ1bmN0aW9uIFBhcnNlcl9tYWtlRmlsdGVyKHN0cmVhbSwgbmFtZSwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0VtcHR5IFwiJyArIG5hbWUgKyAnXCIgc3RyZWFtLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTnVsbFN0cmVhbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmU3RyZWFtU3RhdHMgPSB0aGlzLnhyZWYuc3RhdHMuc3RyZWFtVHlwZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdGbGF0ZURlY29kZScgfHwgbmFtZSA9PT0gJ0ZsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuRkxBVEVdID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5QcmVkaWN0b3JTdHJlYW0obmV3IF9zdHJlYW0uRmxhdGVTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCksIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uRmxhdGVTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gJ0xaV0RlY29kZScgfHwgbmFtZSA9PT0gJ0xaVycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkxaV10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVhcmx5Q2hhbmdlID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMuaGFzKCdFYXJseUNoYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhcmx5Q2hhbmdlID0gcGFyYW1zLmdldCgnRWFybHlDaGFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uUHJlZGljdG9yU3RyZWFtKG5ldyBfc3RyZWFtLkxaV1N0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBlYXJseUNoYW5nZSksIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uTFpXU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGVhcmx5Q2hhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnRENURGVjb2RlJyB8fCBuYW1lID09PSAnRENUJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuRENUXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHN0cmVhbS5kaWN0LCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdKUFhEZWNvZGUnIHx8IG5hbWUgPT09ICdKUFgnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5KUFhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2pweF9zdHJlYW0uSnB4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIHN0cmVhbS5kaWN0LCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdBU0NJSTg1RGVjb2RlJyB8fCBuYW1lID09PSAnQTg1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZlN0cmVhbVN0YXRzW191dGlsLlN0cmVhbVR5cGUuQTg1XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uQXNjaWk4NVN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnQVNDSUlIZXhEZWNvZGUnIHx8IG5hbWUgPT09ICdBSHgnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5BSFhdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3N0cmVhbS5Bc2NpaUhleFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnQ0NJVFRGYXhEZWNvZGUnIHx8IG5hbWUgPT09ICdDQ0YnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmU3RyZWFtU3RhdHNbX3V0aWwuU3RyZWFtVHlwZS5DQ0ZdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2NjaXR0X3N0cmVhbS5DQ0lUVEZheFN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdSdW5MZW5ndGhEZWNvZGUnIHx8IG5hbWUgPT09ICdSTCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLlJMXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uUnVuTGVuZ3RoU3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09ICdKQklHMkRlY29kZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZTdHJlYW1TdGF0c1tfdXRpbC5TdHJlYW1UeXBlLkpCSUddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2piaWcyX3N0cmVhbS5KYmlnMlN0cmVhbShzdHJlYW0sIG1heWJlTGVuZ3RoLCBzdHJlYW0uZGljdCwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnZmlsdGVyIFwiJyArIG5hbWUgKyAnXCIgbm90IHN1cHBvcnRlZCB5ZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBfdXRpbC5NaXNzaW5nRGF0YUV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ludmFsaWQgc3RyZWFtOiBcXFwiJyArIGV4ICsgJ1xcXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfc3RyZWFtLk51bGxTdHJlYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZXI7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7XG5cbiAgICAgICAgICAgICAgICB2YXIgTGV4ZXIgPSBmdW5jdGlvbiBMZXhlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExleGVyKHN0cmVhbSwga25vd25Db21tYW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ckJ1ZiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5rbm93bkNvbW1hbmRzID0ga25vd25Db21tYW5kcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcyA9IC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNwZWNpYWxDaGFycyA9IFsxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAyLCAyLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyLCAwLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b0hleERpZ2l0KGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoICYgMHgwRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg0NiB8fCBjaCA+PSAweDYxICYmIGNoIDw9IDB4NjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoICYgMHgwRikgKyA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBMZXhlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q2hhcjogZnVuY3Rpb24gTGV4ZXJfbmV4dENoYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudENoYXIgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGVla0NoYXI6IGZ1bmN0aW9uIExleGVyX3BlZWtDaGFyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldE51bWJlcjogZnVuY3Rpb24gTGV4ZXJfZ2V0TnVtYmVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY3VycmVudENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVOb3RhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXZpZGVCeSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ24gPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDJEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4MkIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwQSB8fCBjaCA9PT0gMHgwRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggPT09IDB4MEEgfHwgY2ggPT09IDB4MEQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVCeSA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aWRlQnkgPT09IDEwICYmIHNpZ24gPT09IDAgJiYgKCgwLCBfdXRpbC5pc1NwYWNlKShjaCkgfHwgY2ggPT09IC0xKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdMZXhlci5nZXROdW1iZXIgLSB0cmVhdGluZyBhIHNpbmdsZSBkZWNpbWFsIHBvaW50IGFzIHplcm8uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgbnVtYmVyOiBcIi5jb25jYXQoU3RyaW5nLmZyb21DaGFyQ29kZShjaCksIFwiIChjaGFyQ29kZSBcIikuY29uY2F0KGNoLCBcIilcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSBzaWduIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VWYWx1ZSA9IGNoIC0gMHgzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG93ZXJWYWx1ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvd2VyVmFsdWVTaWduID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDB4MzAgPD0gY2ggJiYgY2ggPD0gMHgzOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnREaWdpdCA9IGNoIC0gMHgzMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVOb3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvd2VyVmFsdWUgPSBwb3dlclZhbHVlICogMTAgKyBjdXJyZW50RGlnaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXZpZGVCeSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVCeSAqPSAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlVmFsdWUgPSBiYXNlVmFsdWUgKiAxMCArIGN1cnJlbnREaWdpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdmlkZUJ5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlQnkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdCYWRseSBmb3JtYXR0ZWQgbnVtYmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDB4NDUgfHwgY2ggPT09IDB4NjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5wZWVrQ2hhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MkIgfHwgY2ggPT09IDB4MkQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3dlclZhbHVlU2lnbiA9IGNoID09PSAweDJEID8gLTEgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPCAweDMwIHx8IGNoID4gMHgzOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlTm90YXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGl2aWRlQnkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVZhbHVlIC89IGRpdmlkZUJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlTm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVZhbHVlICo9IE1hdGgucG93KDEwLCBwb3dlclZhbHVlU2lnbiAqIHBvd2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWduICogYmFzZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFN0cmluZzogZnVuY3Rpb24gTGV4ZXJfZ2V0U3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1QYXJlbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJCdWZmZXJlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2ggfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIC0xOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW50ZXJtaW5hdGVkIHN0cmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mjg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytudW1QYXJlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaCgnKCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mjk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0tbnVtUGFyZW4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaCgnKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NUM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgLTE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VudGVybWluYXRlZCBzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDZFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDcyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xccicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDc0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xcdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDYyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xcYicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDY2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJ1xcZicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDVDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mjg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDMxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSBjaCAmIDB4MEY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJCdWZmZXJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gKHggPDwgMykgKyAoY2ggJiAweDBGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAweDMwICYmIGNoIDw9IDB4MzcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckJ1ZmZlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSAoeCA8PCAzKSArIChjaCAmIDB4MEYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MEQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wZWVrQ2hhcigpID09PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MEE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFyQnVmZmVyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ckJ1Zi5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXROYW1lOiBmdW5jdGlvbiBMZXhlcl9nZXROYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCwgcHJldmlvdXNDaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyQnVmID0gdGhpcy5zdHJCdWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGNoID0gdGhpcy5uZXh0Q2hhcigpKSA+PSAwICYmICFzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgyMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcGVjaWFsQ2hhcnNbY2hdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdMZXhlcl9nZXROYW1lOiAnICsgJ05VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSB0b0hleERpZ2l0KGNoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNDaCA9IGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4MiA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgyID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0xleGVyX2dldE5hbWU6IElsbGVnYWwgZGlnaXQgKCcgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSArICcpIGluIGhleGFkZWNpbWFsIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyMnLCBTdHJpbmcuZnJvbUNoYXJDb2RlKHByZXZpb3VzQ2gpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY2lhbENoYXJzW2NoXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoeCA8PCA0IHwgeDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyMnLCBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyQnVmLmxlbmd0aCA+IDEyNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ25hbWUgdG9rZW4gaXMgbG9uZ2VyIHRoYW4gYWxsb3dlZCBieSB0aGUgc3BlYzogJyArIHN0ckJ1Zi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5OYW1lLmdldChzdHJCdWYuam9pbignJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEhleFN0cmluZzogZnVuY3Rpb24gTGV4ZXJfZ2V0SGV4U3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0ZpcnN0SGV4ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3REaWdpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Vjb25kRGlnaXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VudGVybWluYXRlZCBoZXggc3RyaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgzRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3BlY2lhbENoYXJzW2NoXSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0ZpcnN0SGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REaWdpdCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RGlnaXQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSWdub3JpbmcgaW52YWxpZCBjaGFyYWN0ZXIgXCInICsgY2ggKyAnXCIgaW4gaGV4IHN0cmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmREaWdpdCA9IHRvSGV4RGlnaXQoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlY29uZERpZ2l0ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0lnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyIFwiJyArIGNoICsgJ1wiIGluIGhleCBzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZmlyc3REaWdpdCA8PCA0IHwgc2Vjb25kRGlnaXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNGaXJzdEhleCA9ICFpc0ZpcnN0SGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyQnVmLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldE9iajogZnVuY3Rpb24gTGV4ZXJfZ2V0T2JqKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5FT0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBBIHx8IGNoID09PSAweDBEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDI1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGVjaWFsQ2hhcnNbY2hdICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2ggfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDMxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgzOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDJCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyRTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE51bWJlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyRjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5hbWUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NUI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldCgnWycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg1RDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KCddJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDNDOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgzQykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldCgnPDwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SGV4U3RyaW5nKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDNFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSB0aGlzLm5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgzRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldCgnPj4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wcmltaXRpdmVzLkNtZC5nZXQoJz4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4N0I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuQ21kLmdldCgneycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg3RDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KCd9Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDI5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSWxsZWdhbCBjaGFyYWN0ZXI6IFwiLmNvbmNhdChjaCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga25vd25Db21tYW5kcyA9IHRoaXMua25vd25Db21tYW5kcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga25vd25Db21tYW5kRm91bmQgPSBrbm93bkNvbW1hbmRzICYmIGtub3duQ29tbWFuZHNbc3RyXSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCAmJiAhc3BlY2lhbENoYXJzW2NoXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zc2libGVDb21tYW5kID0gc3RyICsgU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtub3duQ29tbWFuZEZvdW5kICYmIGtub3duQ29tbWFuZHNbcG9zc2libGVDb21tYW5kXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID09PSAxMjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkNvbW1hbmQgdG9rZW4gdG9vIGxvbmc6IFwiLmNvbmNhdChzdHIubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBwb3NzaWJsZUNvbW1hbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duQ29tbWFuZEZvdW5kID0ga25vd25Db21tYW5kcyAmJiBrbm93bkNvbW1hbmRzW3N0cl0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyID09PSAndHJ1ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PT0gJ251bGwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHIgPT09ICdCSScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbklubGluZUltYWdlUG9zID0gdGhpcy5zdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcHJpbWl0aXZlcy5DbWQuZ2V0KHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRvTmV4dExpbmU6IGZ1bmN0aW9uIExleGVyX3NraXBUb05leHRMaW5lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY3VycmVudENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4MEEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExleGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTGV4ZXIgPSBMZXhlcjtcbiAgICAgICAgICAgICAgICB2YXIgTGluZWFyaXphdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiBMaW5lYXJpemF0aW9uQ3JlYXRlKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SW50KG5hbWUsIGFsbG93WmVyb1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxpbkRpY3QuZ2V0KG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIob2JqKSAmJiAoYWxsb3daZXJvVmFsdWUgPyBvYmogPj0gMCA6IG9iaiA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCInICsgbmFtZSArICdcIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gJyArICdkaWN0aW9uYXJ5IGlzIGludmFsaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEhpbnRzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaW50cyA9IGxpbkRpY3QuZ2V0KCdIJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpbnRzTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGludHMpICYmICgoaGludHNMZW5ndGggPSBoaW50cy5sZW5ndGgpID09PSAyIHx8IGhpbnRzTGVuZ3RoID09PSA0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleCA9IDA7IGluZGV4IDwgaGludHNMZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKE51bWJlci5pc0ludGVnZXIoaXRlbSA9IGhpbnRzW2luZGV4XSkgJiYgaXRlbSA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIaW50ICgnICsgaW5kZXggKyAnKSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGludHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdIaW50IGFycmF5IGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIobmV3IExleGVyKHN0cmVhbSksIGZhbHNlLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmoxID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iajIgPSBwYXJzZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqMyA9IHBhcnNlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5EaWN0ID0gcGFyc2VyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiwgbGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShOdW1iZXIuaXNJbnRlZ2VyKG9iajEpICYmIE51bWJlci5pc0ludGVnZXIob2JqMikgJiYgKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmozLCAnb2JqJykgJiYgKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobGluRGljdCkgJiYgKDAsIF91dGlsLmlzTnVtKShvYmogPSBsaW5EaWN0LmdldCgnTGluZWFyaXplZCcpKSAmJiBvYmogPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgobGVuZ3RoID0gZ2V0SW50KCdMJykpICE9PSBzdHJlYW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJMXCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgJyArICdkb2VzIG5vdCBlcXVhbCB0aGUgc3RyZWFtIGxlbmd0aC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50czogZ2V0SGludHMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3ROdW1iZXJGaXJzdDogZ2V0SW50KCdPJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kRmlyc3Q6IGdldEludCgnRScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVBhZ2VzOiBnZXRJbnQoJ04nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWluWFJlZkVudHJpZXNPZmZzZXQ6IGdldEludCgnVCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VGaXJzdDogbGluRGljdC5oYXMoJ1AnKSA/IGdldEludCgnUCcsIHRydWUpIDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5MaW5lYXJpemF0aW9uID0gTGluZWFyaXphdGlvbjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5MWldTdHJlYW0gPSBleHBvcnRzLlN0cmluZ1N0cmVhbSA9IGV4cG9ydHMuU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gZXhwb3J0cy5TdHJlYW0gPSBleHBvcnRzLlJ1bkxlbmd0aFN0cmVhbSA9IGV4cG9ydHMuUHJlZGljdG9yU3RyZWFtID0gZXhwb3J0cy5OdWxsU3RyZWFtID0gZXhwb3J0cy5GbGF0ZVN0cmVhbSA9IGV4cG9ydHMuRGVjb2RlU3RyZWFtID0gZXhwb3J0cy5EZWNyeXB0U3RyZWFtID0gZXhwb3J0cy5Bc2NpaUhleFN0cmVhbSA9IGV4cG9ydHMuQXNjaWk4NVN0cmVhbSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gfVxuXG4gICAgICAgICAgICAgICAgdmFyIFN0cmVhbSA9IGZ1bmN0aW9uIFN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN0cmVhbShhcnJheUJ1ZmZlciwgc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlcyA9IGFycmF5QnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGFycmF5QnVmZmVyIDogbmV3IFVpbnQ4QXJyYXkoYXJyYXlCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0IHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IHRoaXMuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IHN0YXJ0ICsgbGVuZ3RoIHx8IHRoaXMuYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFN0cmVhbS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmVuZCAtIHRoaXMuc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCeXRlOiBmdW5jdGlvbiBTdHJlYW1fZ2V0Qnl0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wb3MgPj0gdGhpcy5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFVpbnQxNjogZnVuY3Rpb24gU3RyZWFtX2dldFVpbnQxNigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW50MzI6IGZ1bmN0aW9uIFN0cmVhbV9nZXRJbnQzMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjMgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDI0KSArIChiMSA8PCAxNikgKyAoYjIgPDwgOCkgKyBiMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCeXRlczogZnVuY3Rpb24gZ2V0Qnl0ZXMobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlQ2xhbXBlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckVuZCA9IHRoaXMuZW5kO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9zdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgc3RyRW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9yY2VDbGFtcGVkID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KF9zdWJhcnJheSkgOiBfc3ViYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHBvcyArIGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPiBzdHJFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc3RyRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJhcnJheSA9IGJ5dGVzLnN1YmFycmF5KHBvcywgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9yY2VDbGFtcGVkID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN1YmFycmF5KSA6IHN1YmFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZWtCeXRlOiBmdW5jdGlvbiBTdHJlYW1fcGVla0J5dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVrZWRCeXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZWtCeXRlczogZnVuY3Rpb24gcGVla0J5dGVzKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZUNsYW1wZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zIC09IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2tpcDogZnVuY3Rpb24gU3RyZWFtX3NraXAobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyArPSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiBTdHJlYW1fcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVTdGFydDogZnVuY3Rpb24gU3RyZWFtX21vdmVTdGFydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ID0gdGhpcy5wb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVN1YlN0cmVhbTogZnVuY3Rpb24gU3RyZWFtX21ha2VTdWJTdHJlYW0oc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyZWFtKHRoaXMuYnl0ZXMuYnVmZmVyLCBzdGFydCwgbGVuZ3RoLCBkaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlN0cmVhbSA9IFN0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBTdHJpbmdTdHJlYW0gPSBmdW5jdGlvbiBTdHJpbmdTdHJlYW1DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbS5jYWxsKHRoaXMsIGJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUgPSBTdHJlYW0ucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuU3RyaW5nU3RyZWFtID0gU3RyaW5nU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIERlY29kZVN0cmVhbSA9IGZ1bmN0aW9uIERlY29kZVN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbXB0eUJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDApO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIERlY29kZVN0cmVhbShtYXliZU1pbkJ1ZmZlckxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmF3TWluQnVmZmVyTGVuZ3RoID0gbWF5YmVNaW5CdWZmZXJMZW5ndGggfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGVtcHR5QnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW5CdWZmZXJMZW5ndGggPSA1MTI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZU1pbkJ1ZmZlckxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLm1pbkJ1ZmZlckxlbmd0aCA8IG1heWJlTWluQnVmZmVyTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluQnVmZmVyTGVuZ3RoICo9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgRGVjb2RlU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpc0VtcHR5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YgJiYgdGhpcy5idWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJMZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVCdWZmZXI6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9lbnN1cmVCdWZmZXIocmVxdWVzdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3RlZCA8PSBidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplID0gdGhpcy5taW5CdWZmZXJMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc2l6ZSA8IHJlcXVlc3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplICo9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcjIgPSBuZXcgVWludDhBcnJheShzaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIyLnNldChidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Qnl0ZTogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2dldEJ5dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHRoaXMucG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRoaXMuYnVmZmVyTGVuZ3RoIDw9IHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyW3RoaXMucG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFVpbnQxNjogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2dldFVpbnQxNigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMCA9PT0gLTEgfHwgYjEgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDgpICsgYjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW50MzI6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9nZXRJbnQzMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjAgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjIgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjMgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGIwIDw8IDI0KSArIChiMSA8PCAxNikgKyAoYjIgPDwgOCkgKyBiMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCeXRlczogZnVuY3Rpb24gZ2V0Qnl0ZXMobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlQ2xhbXBlZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gdGhpcy5wb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHBvcyArIGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIXRoaXMuZW9mICYmIHRoaXMuYnVmZmVyTGVuZ3RoIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRCbG9jaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZkVuZCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmQgPiBidWZFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGJ1ZkVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghdGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcyA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYXJyYXkgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheShwb3MsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmNlQ2xhbXBlZCAmJiAhKHN1YmFycmF5IGluc3RhbmNlb2YgVWludDhDbGFtcGVkQXJyYXkpID8gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN1YmFycmF5KSA6IHN1YmFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZWtCeXRlOiBmdW5jdGlvbiBEZWNvZGVTdHJlYW1fcGVla0J5dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlZWtlZEJ5dGUgPSB0aGlzLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcy0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVrZWRCeXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlZWtCeXRlczogZnVuY3Rpb24gcGVla0J5dGVzKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZUNsYW1wZWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuZ2V0Qnl0ZXMobGVuZ3RoLCBmb3JjZUNsYW1wZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zIC09IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVN1YlN0cmVhbTogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX21ha2VTdWJTdHJlYW0oc3RhcnQsIGxlbmd0aCwgZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBzdGFydCArIGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0aGlzLmJ1ZmZlckxlbmd0aCA8PSBlbmQgJiYgIXRoaXMuZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0odGhpcy5idWZmZXIsIHN0YXJ0LCBsZW5ndGgsIGRpY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IGZ1bmN0aW9uIERlY29kZVN0cmVhbV9za2lwKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgKz0gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldDogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX3Jlc2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCYXNlU3RyZWFtczogZnVuY3Rpb24gRGVjb2RlU3RyZWFtX2dldEJhc2VTdHJlYW1zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0ciAmJiB0aGlzLnN0ci5nZXRCYXNlU3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHIuZ2V0QmFzZVN0cmVhbXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBEZWNvZGVTdHJlYW07XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5EZWNvZGVTdHJlYW0gPSBEZWNvZGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICB2YXIgU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gZnVuY3Rpb24gU3RyZWFtc1NlcXVlbmNlU3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3RyZWFtc1NlcXVlbmNlU3RyZWFtKHN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtcyA9IHN0cmVhbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVMZW5ndGggPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdHJlYW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gc3RyZWFtc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0gaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVMZW5ndGggKz0gc3RyZWFtLl9yYXdNaW5CdWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVMZW5ndGggKz0gc3RyZWFtLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gc3RyZWFtU2VxdWVuY2VTdHJlYW1SZWFkQmxvY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtcyA9IHRoaXMuc3RyZWFtcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHN0cmVhbXMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IHN0cmVhbS5nZXRCeXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0xlbmd0aCA9IGJ1ZmZlckxlbmd0aCArIGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihuZXdMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldChjaHVuaywgYnVmZmVyTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gbmV3TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbS5wcm90b3R5cGUuZ2V0QmFzZVN0cmVhbXMgPSBmdW5jdGlvbiBTdHJlYW1zU2VxdWVuY2VTdHJlYW1fZ2V0QmFzZVN0cmVhbXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZVN0cmVhbXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5zdHJlYW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW1zW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5nZXRCYXNlU3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlU3RyZWFtcy5wdXNoLmFwcGx5KGJhc2VTdHJlYW1zLCBfdG9Db25zdW1hYmxlQXJyYXkoc3RyZWFtLmdldEJhc2VTdHJlYW1zKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlU3RyZWFtcztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyZWFtc1NlcXVlbmNlU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuU3RyZWFtc1NlcXVlbmNlU3RyZWFtID0gU3RyZWFtc1NlcXVlbmNlU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIEZsYXRlU3RyZWFtID0gZnVuY3Rpb24gRmxhdGVTdHJlYW1DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZUxlbkNvZGVNYXAgPSBuZXcgSW50MzJBcnJheShbMTYsIDE3LCAxOCwgMCwgOCwgNywgOSwgNiwgMTAsIDUsIDExLCA0LCAxMiwgMywgMTMsIDIsIDE0LCAxLCAxNV0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoRGVjb2RlID0gbmV3IEludDMyQXJyYXkoWzB4MDAwMDMsIDB4MDAwMDQsIDB4MDAwMDUsIDB4MDAwMDYsIDB4MDAwMDcsIDB4MDAwMDgsIDB4MDAwMDksIDB4MDAwMGEsIDB4MTAwMGIsIDB4MTAwMGQsIDB4MTAwMGYsIDB4MTAwMTEsIDB4MjAwMTMsIDB4MjAwMTcsIDB4MjAwMWIsIDB4MjAwMWYsIDB4MzAwMjMsIDB4MzAwMmIsIDB4MzAwMzMsIDB4MzAwM2IsIDB4NDAwNDMsIDB4NDAwNTMsIDB4NDAwNjMsIDB4NDAwNzMsIDB4NTAwODMsIDB4NTAwYTMsIDB4NTAwYzMsIDB4NTAwZTMsIDB4MDAxMDIsIDB4MDAxMDIsIDB4MDAxMDJdKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3REZWNvZGUgPSBuZXcgSW50MzJBcnJheShbMHgwMDAwMSwgMHgwMDAwMiwgMHgwMDAwMywgMHgwMDAwNCwgMHgxMDAwNSwgMHgxMDAwNywgMHgyMDAwOSwgMHgyMDAwZCwgMHgzMDAxMSwgMHgzMDAxOSwgMHg0MDAyMSwgMHg0MDAzMSwgMHg1MDA0MSwgMHg1MDA2MSwgMHg2MDA4MSwgMHg2MDBjMSwgMHg3MDEwMSwgMHg3MDE4MSwgMHg4MDIwMSwgMHg4MDMwMSwgMHg5MDQwMSwgMHg5MDYwMSwgMHhhMDgwMSwgMHhhMGMwMSwgMHhiMTAwMSwgMHhiMTgwMSwgMHhjMjAwMSwgMHhjMzAwMSwgMHhkNDAwMSwgMHhkNjAwMV0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZml4ZWRMaXRDb2RlVGFiID0gW25ldyBJbnQzMkFycmF5KFsweDcwMTAwLCAweDgwMDUwLCAweDgwMDEwLCAweDgwMTE4LCAweDcwMTEwLCAweDgwMDcwLCAweDgwMDMwLCAweDkwMGMwLCAweDcwMTA4LCAweDgwMDYwLCAweDgwMDIwLCAweDkwMGEwLCAweDgwMDAwLCAweDgwMDgwLCAweDgwMDQwLCAweDkwMGUwLCAweDcwMTA0LCAweDgwMDU4LCAweDgwMDE4LCAweDkwMDkwLCAweDcwMTE0LCAweDgwMDc4LCAweDgwMDM4LCAweDkwMGQwLCAweDcwMTBjLCAweDgwMDY4LCAweDgwMDI4LCAweDkwMGIwLCAweDgwMDA4LCAweDgwMDg4LCAweDgwMDQ4LCAweDkwMGYwLCAweDcwMTAyLCAweDgwMDU0LCAweDgwMDE0LCAweDgwMTFjLCAweDcwMTEyLCAweDgwMDc0LCAweDgwMDM0LCAweDkwMGM4LCAweDcwMTBhLCAweDgwMDY0LCAweDgwMDI0LCAweDkwMGE4LCAweDgwMDA0LCAweDgwMDg0LCAweDgwMDQ0LCAweDkwMGU4LCAweDcwMTA2LCAweDgwMDVjLCAweDgwMDFjLCAweDkwMDk4LCAweDcwMTE2LCAweDgwMDdjLCAweDgwMDNjLCAweDkwMGQ4LCAweDcwMTBlLCAweDgwMDZjLCAweDgwMDJjLCAweDkwMGI4LCAweDgwMDBjLCAweDgwMDhjLCAweDgwMDRjLCAweDkwMGY4LCAweDcwMTAxLCAweDgwMDUyLCAweDgwMDEyLCAweDgwMTFhLCAweDcwMTExLCAweDgwMDcyLCAweDgwMDMyLCAweDkwMGM0LCAweDcwMTA5LCAweDgwMDYyLCAweDgwMDIyLCAweDkwMGE0LCAweDgwMDAyLCAweDgwMDgyLCAweDgwMDQyLCAweDkwMGU0LCAweDcwMTA1LCAweDgwMDVhLCAweDgwMDFhLCAweDkwMDk0LCAweDcwMTE1LCAweDgwMDdhLCAweDgwMDNhLCAweDkwMGQ0LCAweDcwMTBkLCAweDgwMDZhLCAweDgwMDJhLCAweDkwMGI0LCAweDgwMDBhLCAweDgwMDhhLCAweDgwMDRhLCAweDkwMGY0LCAweDcwMTAzLCAweDgwMDU2LCAweDgwMDE2LCAweDgwMTFlLCAweDcwMTEzLCAweDgwMDc2LCAweDgwMDM2LCAweDkwMGNjLCAweDcwMTBiLCAweDgwMDY2LCAweDgwMDI2LCAweDkwMGFjLCAweDgwMDA2LCAweDgwMDg2LCAweDgwMDQ2LCAweDkwMGVjLCAweDcwMTA3LCAweDgwMDVlLCAweDgwMDFlLCAweDkwMDljLCAweDcwMTE3LCAweDgwMDdlLCAweDgwMDNlLCAweDkwMGRjLCAweDcwMTBmLCAweDgwMDZlLCAweDgwMDJlLCAweDkwMGJjLCAweDgwMDBlLCAweDgwMDhlLCAweDgwMDRlLCAweDkwMGZjLCAweDcwMTAwLCAweDgwMDUxLCAweDgwMDExLCAweDgwMTE5LCAweDcwMTEwLCAweDgwMDcxLCAweDgwMDMxLCAweDkwMGMyLCAweDcwMTA4LCAweDgwMDYxLCAweDgwMDIxLCAweDkwMGEyLCAweDgwMDAxLCAweDgwMDgxLCAweDgwMDQxLCAweDkwMGUyLCAweDcwMTA0LCAweDgwMDU5LCAweDgwMDE5LCAweDkwMDkyLCAweDcwMTE0LCAweDgwMDc5LCAweDgwMDM5LCAweDkwMGQyLCAweDcwMTBjLCAweDgwMDY5LCAweDgwMDI5LCAweDkwMGIyLCAweDgwMDA5LCAweDgwMDg5LCAweDgwMDQ5LCAweDkwMGYyLCAweDcwMTAyLCAweDgwMDU1LCAweDgwMDE1LCAweDgwMTFkLCAweDcwMTEyLCAweDgwMDc1LCAweDgwMDM1LCAweDkwMGNhLCAweDcwMTBhLCAweDgwMDY1LCAweDgwMDI1LCAweDkwMGFhLCAweDgwMDA1LCAweDgwMDg1LCAweDgwMDQ1LCAweDkwMGVhLCAweDcwMTA2LCAweDgwMDVkLCAweDgwMDFkLCAweDkwMDlhLCAweDcwMTE2LCAweDgwMDdkLCAweDgwMDNkLCAweDkwMGRhLCAweDcwMTBlLCAweDgwMDZkLCAweDgwMDJkLCAweDkwMGJhLCAweDgwMDBkLCAweDgwMDhkLCAweDgwMDRkLCAweDkwMGZhLCAweDcwMTAxLCAweDgwMDUzLCAweDgwMDEzLCAweDgwMTFiLCAweDcwMTExLCAweDgwMDczLCAweDgwMDMzLCAweDkwMGM2LCAweDcwMTA5LCAweDgwMDYzLCAweDgwMDIzLCAweDkwMGE2LCAweDgwMDAzLCAweDgwMDgzLCAweDgwMDQzLCAweDkwMGU2LCAweDcwMTA1LCAweDgwMDViLCAweDgwMDFiLCAweDkwMDk2LCAweDcwMTE1LCAweDgwMDdiLCAweDgwMDNiLCAweDkwMGQ2LCAweDcwMTBkLCAweDgwMDZiLCAweDgwMDJiLCAweDkwMGI2LCAweDgwMDBiLCAweDgwMDhiLCAweDgwMDRiLCAweDkwMGY2LCAweDcwMTAzLCAweDgwMDU3LCAweDgwMDE3LCAweDgwMTFmLCAweDcwMTEzLCAweDgwMDc3LCAweDgwMDM3LCAweDkwMGNlLCAweDcwMTBiLCAweDgwMDY3LCAweDgwMDI3LCAweDkwMGFlLCAweDgwMDA3LCAweDgwMDg3LCAweDgwMDQ3LCAweDkwMGVlLCAweDcwMTA3LCAweDgwMDVmLCAweDgwMDFmLCAweDkwMDllLCAweDcwMTE3LCAweDgwMDdmLCAweDgwMDNmLCAweDkwMGRlLCAweDcwMTBmLCAweDgwMDZmLCAweDgwMDJmLCAweDkwMGJlLCAweDgwMDBmLCAweDgwMDhmLCAweDgwMDRmLCAweDkwMGZlLCAweDcwMTAwLCAweDgwMDUwLCAweDgwMDEwLCAweDgwMTE4LCAweDcwMTEwLCAweDgwMDcwLCAweDgwMDMwLCAweDkwMGMxLCAweDcwMTA4LCAweDgwMDYwLCAweDgwMDIwLCAweDkwMGExLCAweDgwMDAwLCAweDgwMDgwLCAweDgwMDQwLCAweDkwMGUxLCAweDcwMTA0LCAweDgwMDU4LCAweDgwMDE4LCAweDkwMDkxLCAweDcwMTE0LCAweDgwMDc4LCAweDgwMDM4LCAweDkwMGQxLCAweDcwMTBjLCAweDgwMDY4LCAweDgwMDI4LCAweDkwMGIxLCAweDgwMDA4LCAweDgwMDg4LCAweDgwMDQ4LCAweDkwMGYxLCAweDcwMTAyLCAweDgwMDU0LCAweDgwMDE0LCAweDgwMTFjLCAweDcwMTEyLCAweDgwMDc0LCAweDgwMDM0LCAweDkwMGM5LCAweDcwMTBhLCAweDgwMDY0LCAweDgwMDI0LCAweDkwMGE5LCAweDgwMDA0LCAweDgwMDg0LCAweDgwMDQ0LCAweDkwMGU5LCAweDcwMTA2LCAweDgwMDVjLCAweDgwMDFjLCAweDkwMDk5LCAweDcwMTE2LCAweDgwMDdjLCAweDgwMDNjLCAweDkwMGQ5LCAweDcwMTBlLCAweDgwMDZjLCAweDgwMDJjLCAweDkwMGI5LCAweDgwMDBjLCAweDgwMDhjLCAweDgwMDRjLCAweDkwMGY5LCAweDcwMTAxLCAweDgwMDUyLCAweDgwMDEyLCAweDgwMTFhLCAweDcwMTExLCAweDgwMDcyLCAweDgwMDMyLCAweDkwMGM1LCAweDcwMTA5LCAweDgwMDYyLCAweDgwMDIyLCAweDkwMGE1LCAweDgwMDAyLCAweDgwMDgyLCAweDgwMDQyLCAweDkwMGU1LCAweDcwMTA1LCAweDgwMDVhLCAweDgwMDFhLCAweDkwMDk1LCAweDcwMTE1LCAweDgwMDdhLCAweDgwMDNhLCAweDkwMGQ1LCAweDcwMTBkLCAweDgwMDZhLCAweDgwMDJhLCAweDkwMGI1LCAweDgwMDBhLCAweDgwMDhhLCAweDgwMDRhLCAweDkwMGY1LCAweDcwMTAzLCAweDgwMDU2LCAweDgwMDE2LCAweDgwMTFlLCAweDcwMTEzLCAweDgwMDc2LCAweDgwMDM2LCAweDkwMGNkLCAweDcwMTBiLCAweDgwMDY2LCAweDgwMDI2LCAweDkwMGFkLCAweDgwMDA2LCAweDgwMDg2LCAweDgwMDQ2LCAweDkwMGVkLCAweDcwMTA3LCAweDgwMDVlLCAweDgwMDFlLCAweDkwMDlkLCAweDcwMTE3LCAweDgwMDdlLCAweDgwMDNlLCAweDkwMGRkLCAweDcwMTBmLCAweDgwMDZlLCAweDgwMDJlLCAweDkwMGJkLCAweDgwMDBlLCAweDgwMDhlLCAweDgwMDRlLCAweDkwMGZkLCAweDcwMTAwLCAweDgwMDUxLCAweDgwMDExLCAweDgwMTE5LCAweDcwMTEwLCAweDgwMDcxLCAweDgwMDMxLCAweDkwMGMzLCAweDcwMTA4LCAweDgwMDYxLCAweDgwMDIxLCAweDkwMGEzLCAweDgwMDAxLCAweDgwMDgxLCAweDgwMDQxLCAweDkwMGUzLCAweDcwMTA0LCAweDgwMDU5LCAweDgwMDE5LCAweDkwMDkzLCAweDcwMTE0LCAweDgwMDc5LCAweDgwMDM5LCAweDkwMGQzLCAweDcwMTBjLCAweDgwMDY5LCAweDgwMDI5LCAweDkwMGIzLCAweDgwMDA5LCAweDgwMDg5LCAweDgwMDQ5LCAweDkwMGYzLCAweDcwMTAyLCAweDgwMDU1LCAweDgwMDE1LCAweDgwMTFkLCAweDcwMTEyLCAweDgwMDc1LCAweDgwMDM1LCAweDkwMGNiLCAweDcwMTBhLCAweDgwMDY1LCAweDgwMDI1LCAweDkwMGFiLCAweDgwMDA1LCAweDgwMDg1LCAweDgwMDQ1LCAweDkwMGViLCAweDcwMTA2LCAweDgwMDVkLCAweDgwMDFkLCAweDkwMDliLCAweDcwMTE2LCAweDgwMDdkLCAweDgwMDNkLCAweDkwMGRiLCAweDcwMTBlLCAweDgwMDZkLCAweDgwMDJkLCAweDkwMGJiLCAweDgwMDBkLCAweDgwMDhkLCAweDgwMDRkLCAweDkwMGZiLCAweDcwMTAxLCAweDgwMDUzLCAweDgwMDEzLCAweDgwMTFiLCAweDcwMTExLCAweDgwMDczLCAweDgwMDMzLCAweDkwMGM3LCAweDcwMTA5LCAweDgwMDYzLCAweDgwMDIzLCAweDkwMGE3LCAweDgwMDAzLCAweDgwMDgzLCAweDgwMDQzLCAweDkwMGU3LCAweDcwMTA1LCAweDgwMDViLCAweDgwMDFiLCAweDkwMDk3LCAweDcwMTE1LCAweDgwMDdiLCAweDgwMDNiLCAweDkwMGQ3LCAweDcwMTBkLCAweDgwMDZiLCAweDgwMDJiLCAweDkwMGI3LCAweDgwMDBiLCAweDgwMDhiLCAweDgwMDRiLCAweDkwMGY3LCAweDcwMTAzLCAweDgwMDU3LCAweDgwMDE3LCAweDgwMTFmLCAweDcwMTEzLCAweDgwMDc3LCAweDgwMDM3LCAweDkwMGNmLCAweDcwMTBiLCAweDgwMDY3LCAweDgwMDI3LCAweDkwMGFmLCAweDgwMDA3LCAweDgwMDg3LCAweDgwMDQ3LCAweDkwMGVmLCAweDcwMTA3LCAweDgwMDVmLCAweDgwMDFmLCAweDkwMDlmLCAweDcwMTE3LCAweDgwMDdmLCAweDgwMDNmLCAweDkwMGRmLCAweDcwMTBmLCAweDgwMDZmLCAweDgwMDJmLCAweDkwMGJmLCAweDgwMDBmLCAweDgwMDhmLCAweDgwMDRmLCAweDkwMGZmXSksIDldO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZml4ZWREaXN0Q29kZVRhYiA9IFtuZXcgSW50MzJBcnJheShbMHg1MDAwMCwgMHg1MDAxMCwgMHg1MDAwOCwgMHg1MDAxOCwgMHg1MDAwNCwgMHg1MDAxNCwgMHg1MDAwYywgMHg1MDAxYywgMHg1MDAwMiwgMHg1MDAxMiwgMHg1MDAwYSwgMHg1MDAxYSwgMHg1MDAwNiwgMHg1MDAxNiwgMHg1MDAwZSwgMHgwMDAwMCwgMHg1MDAwMSwgMHg1MDAxMSwgMHg1MDAwOSwgMHg1MDAxOSwgMHg1MDAwNSwgMHg1MDAxNSwgMHg1MDAwZCwgMHg1MDAxZCwgMHg1MDAwMywgMHg1MDAxMywgMHg1MDAwYiwgMHg1MDAxYiwgMHg1MDAwNywgMHg1MDAxNywgMHg1MDAwZiwgMHgwMDAwMF0pLCA1XTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBGbGF0ZVN0cmVhbShzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtZiA9IHN0ci5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxnID0gc3RyLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtZiA9PT0gLTEgfHwgZmxnID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgaGVhZGVyIGluIGZsYXRlIHN0cmVhbTogXCIuY29uY2F0KGNtZiwgXCIsIFwiKS5jb25jYXQoZmxnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoY21mICYgMHgwZikgIT09IDB4MDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06IFwiLmNvbmNhdChjbWYsIFwiLCBcIikuY29uY2F0KGZsZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKChjbWYgPDwgOCkgKyBmbGcpICUgMzEgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogXCIuY29uY2F0KGNtZiwgXCIsIFwiKS5jb25jYXQoZmxnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGcgJiAweDIwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiRkRJQ1QgYml0IHNldCBpbiBmbGF0ZSBzdHJlYW06IFwiLmNvbmNhdChjbWYsIFwiLCBcIikuY29uY2F0KGZsZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVTaXplID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kZUJ1ZiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBGbGF0ZVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIEZsYXRlU3RyZWFtLnByb3RvdHlwZS5nZXRCaXRzID0gZnVuY3Rpb24gRmxhdGVTdHJlYW1fZ2V0Qml0cyhiaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gdGhpcy5zdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVNpemUgPSB0aGlzLmNvZGVTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVCdWYgPSB0aGlzLmNvZGVCdWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvZGVTaXplIDwgYml0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlQnVmIHw9IGIgPDwgY29kZVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVNpemUgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYiA9IGNvZGVCdWYgJiAoMSA8PCBiaXRzKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVCdWYgPSBjb2RlQnVmID4+IGJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVTaXplID0gY29kZVNpemUgLT0gYml0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEZsYXRlU3RyZWFtLnByb3RvdHlwZS5nZXRDb2RlID0gZnVuY3Rpb24gRmxhdGVTdHJlYW1fZ2V0Q29kZSh0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9IHRoaXMuc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVzID0gdGFibGVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4TGVuID0gdGFibGVbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVNpemUgPSB0aGlzLmNvZGVTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVCdWYgPSB0aGlzLmNvZGVCdWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvZGVTaXplIDwgbWF4TGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCdWYgfD0gYiA8PCBjb2RlU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlU2l6ZSArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGNvZGVzW2NvZGVCdWYgJiAoMSA8PCBtYXhMZW4pIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZUxlbiA9IGNvZGUgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVZhbCA9IGNvZGUgJiAweGZmZmY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlTGVuIDwgMSB8fCBjb2RlU2l6ZSA8IGNvZGVMZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RlQnVmID0gY29kZUJ1ZiA+PiBjb2RlTGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RlU2l6ZSA9IGNvZGVTaXplIC0gY29kZUxlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlVmFsO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEZsYXRlU3RyZWFtLnByb3RvdHlwZS5nZW5lcmF0ZUh1ZmZtYW5UYWJsZSA9IGZ1bmN0aW9uIGZsYXRlU3RyZWFtR2VuZXJhdGVIdWZmbWFuVGFibGUobGVuZ3Rocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBsZW5ndGhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhMZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3Roc1tpXSA+IG1heExlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhMZW4gPSBsZW5ndGhzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSAxIDw8IG1heExlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlcyA9IG5ldyBJbnQzMkFycmF5KHNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBsZW4gPSAxLCBjb2RlID0gMCwgc2tpcCA9IDI7IGxlbiA8PSBtYXhMZW47ICsrbGVuLCBjb2RlIDw8PSAxLCBza2lwIDw8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdmFsID0gMDsgdmFsIDwgbjsgKyt2YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aHNbdmFsXSA9PT0gbGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZTIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBjb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMiA9IGNvZGUyIDw8IDEgfCB0ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID4+PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBjb2RlMjsgaSA8IHNpemU7IGkgKz0gc2tpcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzW2ldID0gbGVuIDw8IDE2IHwgdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2NvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbY29kZXMsIG1heExlbl07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgRmxhdGVTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIEZsYXRlU3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIsIGxlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSB0aGlzLnN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZHIgPSB0aGlzLmdldEJpdHMoMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZHIgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBoZHIgPj49IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZHIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrTGVuID0gYjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYiA9IHN0ci5nZXRCeXRlKCkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tMZW4gfD0gYiA8PCA4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSBiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayB8PSBiIDw8IDg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2sgIT09ICh+YmxvY2tMZW4gJiAweGZmZmYpICYmIChibG9ja0xlbiAhPT0gMCB8fCBjaGVjayAhPT0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdCYWQgdW5jb21wcmVzc2VkIGJsb2NrIGxlbmd0aCBpbiBmbGF0ZSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVCdWYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kZVNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBibG9ja0xlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IGJ1ZmZlckxlbmd0aCArIGJsb2NrTGVuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gZW5kO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrTGVuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHIucGVla0J5dGUoKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSBidWZmZXJMZW5ndGg7IG4gPCBlbmQ7ICsrbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChiID0gc3RyLmdldEJ5dGUoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbbl0gPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGl0Q29kZVRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3RDb2RlVGFibGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZHIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRDb2RlVGFibGUgPSBmaXhlZExpdENvZGVUYWI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdENvZGVUYWJsZSA9IGZpeGVkRGlzdENvZGVUYWI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhkciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1MaXRDb2RlcyA9IHRoaXMuZ2V0Qml0cyg1KSArIDI1NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtRGlzdENvZGVzID0gdGhpcy5nZXRCaXRzKDUpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQ29kZUxlbkNvZGVzID0gdGhpcy5nZXRCaXRzKDQpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZUxlbkNvZGVMZW5ndGhzID0gbmV3IFVpbnQ4QXJyYXkoY29kZUxlbkNvZGVNYXAubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1Db2RlTGVuQ29kZXM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlTGVuQ29kZUxlbmd0aHNbY29kZUxlbkNvZGVNYXBbaV1dID0gdGhpcy5nZXRCaXRzKDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlTGVuQ29kZVRhYiA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbkNvZGVMZW5ndGhzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlcyA9IG51bUxpdENvZGVzICsgbnVtRGlzdENvZGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlTGVuZ3RocyA9IG5ldyBVaW50OEFycmF5KGNvZGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0c0xlbmd0aCwgYml0c09mZnNldCwgd2hhdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgY29kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSB0aGlzLmdldENvZGUoY29kZUxlbkNvZGVUYWIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0xlbmd0aCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzT2Zmc2V0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoYXQgPSBsZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA9PT0gMTcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNMZW5ndGggPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c09mZnNldCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAxOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0xlbmd0aCA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzT2Zmc2V0ID0gMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGF0ID0gbGVuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVMZW5ndGhzW2krK10gPSBsZW4gPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwZWF0TGVuZ3RoID0gdGhpcy5nZXRCaXRzKGJpdHNMZW5ndGgpICsgYml0c09mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVwZWF0TGVuZ3RoLS0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlTGVuZ3Roc1tpKytdID0gd2hhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdENvZGVUYWJsZSA9IHRoaXMuZ2VuZXJhdGVIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMuc3ViYXJyYXkoMCwgbnVtTGl0Q29kZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0Q29kZVRhYmxlID0gdGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShjb2RlTGVuZ3Rocy5zdWJhcnJheShudW1MaXRDb2RlcywgY29kZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbWl0ID0gYnVmZmVyID8gYnVmZmVyLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gdGhpcy5idWZmZXJMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUxID0gdGhpcy5nZXRDb2RlKGxpdENvZGVUYWJsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPCAyNTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyArIDEgPj0gbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQgPSBidWZmZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW3BvcysrXSA9IGNvZGUxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPT09IDI1Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IHBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxIC09IDI1NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMSA9IGxlbmd0aERlY29kZVtjb2RlMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUyID0gY29kZTEgPj4gMTY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTIgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUyID0gdGhpcy5nZXRCaXRzKGNvZGUyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLmdldENvZGUoZGlzdENvZGVUYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSBkaXN0RGVjb2RlW2NvZGUxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMiA9IGNvZGUxID4+IDE2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUyID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMiA9IHRoaXMuZ2V0Qml0cyhjb2RlMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpc3QgPSAoY29kZTEgJiAweGZmZmYpICsgY29kZTI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zICsgbGVuID49IGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHBvcyArIGxlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0ID0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IGxlbjsgKytrLCArK3Bvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zXSA9IGJ1ZmZlcltwb3MgLSBkaXN0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZsYXRlU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuRmxhdGVTdHJlYW0gPSBGbGF0ZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBQcmVkaWN0b3JTdHJlYW0gPSBmdW5jdGlvbiBQcmVkaWN0b3JTdHJlYW1DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQcmVkaWN0b3JTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZGljdG9yID0gdGhpcy5wcmVkaWN0b3IgPSBwYXJhbXMuZ2V0KCdQcmVkaWN0b3InKSB8fCAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGljdG9yIDw9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGljdG9yICE9PSAyICYmIChwcmVkaWN0b3IgPCAxMCB8fCBwcmVkaWN0b3IgPiAxNSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbnN1cHBvcnRlZCBwcmVkaWN0b3I6IFwiLmNvbmNhdChwcmVkaWN0b3IpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRpY3RvciA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZEJsb2NrID0gdGhpcy5yZWFkQmxvY2tUaWZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRCbG9jayA9IHRoaXMucmVhZEJsb2NrUG5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzID0gcGFyYW1zLmdldCgnQ29sb3JzJykgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzID0gdGhpcy5iaXRzID0gcGFyYW1zLmdldCgnQml0c1BlckNvbXBvbmVudCcpIHx8IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IHRoaXMuY29sdW1ucyA9IHBhcmFtcy5nZXQoJ0NvbHVtbnMnKSB8fCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waXhCeXRlcyA9IGNvbG9ycyAqIGJpdHMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0J5dGVzID0gY29sdW1ucyAqIGNvbG9ycyAqIGJpdHMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFByZWRpY3RvclN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIFByZWRpY3RvclN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrVGlmZiA9IGZ1bmN0aW9uIHByZWRpY3RvclN0cmVhbVJlYWRCbG9ja1RpZmYoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93Qnl0ZXMgPSB0aGlzLnJvd0J5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIHJvd0J5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzID0gdGhpcy5iaXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IHRoaXMuY29sb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhd0J5dGVzID0gdGhpcy5zdHIuZ2V0Qnl0ZXMocm93Qnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSAhcmF3Qnl0ZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmJ1ZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0YnVmID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmJpdHMgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGJpdHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0cyA9PT0gMSAmJiBjb2xvcnMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHJhd0J5dGVzW2ldIF4gaW5idWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgXj0gYyA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIF49IGMgPj4gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyBePSBjID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmID0gKGMgJiAxKSA8PCA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zKytdID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpdHMgPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sb3JzOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW3BvcysrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zXSA9IGJ1ZmZlcltwb3MgLSBjb2xvcnNdICsgcmF3Qnl0ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYml0cyA9PT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXNQZXJQaXhlbCA9IGNvbG9ycyAqIDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYnl0ZXNQZXJQaXhlbDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltwb3MrK10gPSByYXdCeXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1bSA9ICgocmF3Qnl0ZXNbaV0gJiAweEZGKSA8PCA4KSArIChyYXdCeXRlc1tpICsgMV0gJiAweEZGKSArICgoYnVmZmVyW3BvcyAtIGJ5dGVzUGVyUGl4ZWxdICYgMHhGRikgPDwgOCkgKyAoYnVmZmVyW3BvcyAtIGJ5dGVzUGVyUGl4ZWwgKyAxXSAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zKytdID0gc3VtID4+IDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbcG9zKytdID0gc3VtICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wQXJyYXkgPSBuZXcgVWludDhBcnJheShjb2xvcnMgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0TWFzayA9ICgxIDw8IGJpdHMpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29sdW1uczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtrID0gMDsga2sgPCBjb2xvcnM7ICsra2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmJpdHMgPCBiaXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5idWYgPSBpbmJ1ZiA8PCA4IHwgcmF3Qnl0ZXNbaisrXSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5iaXRzICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBBcnJheVtra10gPSBjb21wQXJyYXlba2tdICsgKGluYnVmID4+IGluYml0cyAtIGJpdHMpICYgYml0TWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYml0cyAtPSBiaXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0YnVmID0gb3V0YnVmIDw8IGJpdHMgfCBjb21wQXJyYXlba2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Yml0cyArPSBiaXRzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0Yml0cyA+PSA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2srK10gPSBvdXRidWYgPj4gb3V0Yml0cyAtIDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGJpdHMgLT0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRiaXRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaysrXSA9IChvdXRidWYgPDwgOCAtIG91dGJpdHMpICsgKGluYnVmICYgKDEgPDwgOCAtIG91dGJpdHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSByb3dCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBQcmVkaWN0b3JTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9ja1BuZyA9IGZ1bmN0aW9uIHByZWRpY3RvclN0cmVhbVJlYWRCbG9ja1BuZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3dCeXRlcyA9IHRoaXMucm93Qnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGl4Qnl0ZXMgPSB0aGlzLnBpeEJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWRpY3RvciA9IHRoaXMuc3RyLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYXdCeXRlcyA9IHRoaXMuc3RyLmdldEJ5dGVzKHJvd0J5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gIXJhd0J5dGVzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgcm93Qnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZSb3cgPSBidWZmZXIuc3ViYXJyYXkoYnVmZmVyTGVuZ3RoIC0gcm93Qnl0ZXMsIGJ1ZmZlckxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2Um93Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZSb3cgPSBuZXcgVWludDhBcnJheShyb3dCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBidWZmZXJMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwcmVkaWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IHJhd0J5dGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbal0gPSBidWZmZXJbaiAtIHBpeEJ5dGVzXSArIHJhd0J5dGVzW2ldICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93Qnl0ZXM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2orK10gPSBwcmV2Um93W2ldICsgcmF3Qnl0ZXNbaV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IChwcmV2Um93W2ldID4+IDEpICsgcmF3Qnl0ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IHJvd0J5dGVzOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltqXSA9IChwcmV2Um93W2ldICsgYnVmZmVyW2ogLSBwaXhCeXRlc10gPj4gMSkgKyByYXdCeXRlc1tpXSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBpeEJ5dGVzOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwID0gcHJldlJvd1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSByYXdCeXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gdXAgKyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCByb3dCeXRlczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCA9IHByZXZSb3dbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXBMZWZ0ID0gcHJldlJvd1tpIC0gcGl4Qnl0ZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBidWZmZXJbaiAtIHBpeEJ5dGVzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gbGVmdCArIHVwIC0gdXBMZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhID0gcCAtIGxlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYSA9IC1wYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBiID0gcCAtIHVwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGIgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGIgPSAtcGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYyA9IHAgLSB1cExlZnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYyA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYyA9IC1wYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHJhd0J5dGVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGEgPD0gcGIgJiYgcGEgPD0gcGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IGxlZnQgKyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYiA8PSBwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltqKytdID0gdXAgKyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaisrXSA9IHVwTGVmdCArIGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogXCIuY29uY2F0KHByZWRpY3RvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCArPSByb3dCeXRlcztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJlZGljdG9yU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUHJlZGljdG9yU3RyZWFtID0gUHJlZGljdG9yU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIERlY3J5cHRTdHJlYW0gPSBmdW5jdGlvbiBEZWNyeXB0U3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRGVjcnlwdFN0cmVhbShzdHIsIG1heWJlTGVuZ3RoLCBkZWNyeXB0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNyeXB0ID0gZGVjcnlwdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENodW5rID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjaHVua1NpemUgPSA1MTI7XG4gICAgICAgICAgICAgICAgICAgIERlY3J5cHRTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICBEZWNyeXB0U3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBEZWNyeXB0U3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMubmV4dENodW5rO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHRoaXMuc3RyLmdldEJ5dGVzKGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2h1bmsgfHwgY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2h1bmsgPSB0aGlzLnN0ci5nZXRCeXRlcyhjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc01vcmVEYXRhID0gdGhpcy5uZXh0Q2h1bmsgJiYgdGhpcy5uZXh0Q2h1bmsubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNyeXB0ID0gdGhpcy5kZWNyeXB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBkZWNyeXB0KGNodW5rLCAhaGFzTW9yZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGNodW5rLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGgrK10gPSBjaHVua1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERlY3J5cHRTdHJlYW07XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5EZWNyeXB0U3RyZWFtID0gRGVjcnlwdFN0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBBc2NpaTg1U3RyZWFtID0gZnVuY3Rpb24gQXNjaWk4NVN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzY2lpODVTdHJlYW0oc3RyLCBtYXliZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBuZXcgVWludDhBcnJheSg1KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heWJlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVMZW5ndGggPSAwLjggKiBtYXliZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQXNjaWk4NVN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIEFzY2lpODVTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIEFzY2lpODVTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFRJTERBX0NIQVIgPSAweDdFO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFpfTE9XRVJfQ0hBUiA9IDB4N0E7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgRU9GID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gdGhpcy5zdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHN0ci5nZXRCeXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoMCwgX3V0aWwuaXNTcGFjZSkoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gc3RyLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IEVPRiB8fCBjID09PSBUSUxEQV9DSEFSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gWl9MT1dFUl9DSEFSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGggKyBpXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5pbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFswXSA9IGM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgNTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoMCwgX3V0aWwuaXNTcGFjZSkoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzdHIuZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRbaV0gPSBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSBFT0YgfHwgYyA9PT0gVElMREFfQ0hBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSB0aGlzLmVuc3VyZUJ1ZmZlcihidWZmZXJMZW5ndGggKyBpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggKz0gaSAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W2ldID0gMHgyMSArIDg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA1OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHQgKiA4NSArIChpbnB1dFtpXSAtIDB4MjEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDM7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGggKyBpXSA9IHQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID4+PSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXNjaWk4NVN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFzY2lpODVTdHJlYW0gPSBBc2NpaTg1U3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFzY2lpSGV4U3RyZWFtID0gZnVuY3Rpb24gQXNjaWlIZXhTdHJlYW1DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc2NpaUhleFN0cmVhbShzdHIsIG1heWJlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ciA9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IHN0ci5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdERpZ2l0ID0gLTE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXliZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlTGVuZ3RoID0gMC41ICogbWF5YmVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEFzY2lpSGV4U3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgQXNjaWlIZXhTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIEFzY2lpSGV4U3RyZWFtX3JlYWRCbG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBVUFNUUkVBTV9CTE9DS19TSVpFID0gODAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuc3RyLmdldEJ5dGVzKFVQU1RSRUFNX0JMT0NLX1NJWkUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJ5dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhEZWNvZGVMZW5ndGggPSBieXRlcy5sZW5ndGggKyAxID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyBtYXhEZWNvZGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RGlnaXQgPSB0aGlzLmZpcnN0RGlnaXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSBieXRlc1tpXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlnaXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPj0gMHgzMCAmJiBjaCA8PSAweDM5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2l0ID0gY2ggJiAweDBGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPj0gMHg0MSAmJiBjaCA8PSAweDQ2IHx8IGNoID49IDB4NjEgJiYgY2ggPD0gMHg2Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWdpdCA9IChjaCAmIDB4MEYpICsgOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0RGlnaXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGlnaXQgPSBkaWdpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0IHwgZGlnaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGlnaXQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdERpZ2l0ID49IDAgJiYgdGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gZmlyc3REaWdpdCA8PCA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGlnaXQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdERpZ2l0ID0gZmlyc3REaWdpdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBc2NpaUhleFN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFzY2lpSGV4U3RyZWFtID0gQXNjaWlIZXhTdHJlYW07XG5cbiAgICAgICAgICAgICAgICB2YXIgUnVuTGVuZ3RoU3RyZWFtID0gZnVuY3Rpb24gUnVuTGVuZ3RoU3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUnVuTGVuZ3RoU3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyID0gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0ID0gc3RyLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBEZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBSdW5MZW5ndGhTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICBSdW5MZW5ndGhTdHJlYW0ucHJvdG90eXBlLnJlYWRCbG9jayA9IGZ1bmN0aW9uIFJ1bkxlbmd0aFN0cmVhbV9yZWFkQmxvY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVwZWF0SGVhZGVyID0gdGhpcy5zdHIuZ2V0Qnl0ZXMoMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVwZWF0SGVhZGVyIHx8IHJlcGVhdEhlYWRlci5sZW5ndGggPCAyIHx8IHJlcGVhdEhlYWRlclswXSA9PT0gMTI4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gcmVwZWF0SGVhZGVyWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDEyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKGJ1ZmZlckxlbmd0aCArIG4gKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoKytdID0gcmVwZWF0SGVhZGVyWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLnN0ci5nZXRCeXRlcyhuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldChzb3VyY2UsIGJ1ZmZlckxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCArPSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IDI1NyAtIG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSByZXBlYXRIZWFkZXJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIoYnVmZmVyTGVuZ3RoICsgbiArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aCsrXSA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUnVuTGVuZ3RoU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUnVuTGVuZ3RoU3RyZWFtID0gUnVuTGVuZ3RoU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgdmFyIExaV1N0cmVhbSA9IGZ1bmN0aW9uIExaV1N0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExaV1N0cmVhbShzdHIsIG1heWJlTGVuZ3RoLCBlYXJseUNoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkRGF0YSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpdHNDYWNoZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEx6d0RpY3Rpb25hcnlTaXplID0gNDA5NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsendTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYXJseUNoYW5nZTogZWFybHlDaGFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUxlbmd0aDogOSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Q29kZTogMjU4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnlWYWx1ZXM6IG5ldyBVaW50OEFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5TGVuZ3RoczogbmV3IFVpbnQxNkFycmF5KG1heEx6d0RpY3Rpb25hcnlTaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5UHJldkNvZGVzOiBuZXcgVWludDE2QXJyYXkobWF4THp3RGljdGlvbmFyeVNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZTogbmV3IFVpbnQ4QXJyYXkobWF4THp3RGljdGlvbmFyeVNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6d1N0YXRlLmRpY3Rpb25hcnlWYWx1ZXNbaV0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6d1N0YXRlLmRpY3Rpb25hcnlMZW5ndGhzW2ldID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sendTdGF0ZSA9IGx6d1N0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTFpXU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgTFpXU3RyZWFtLnByb3RvdHlwZS5yZWFkQml0cyA9IGZ1bmN0aW9uIExaV1N0cmVhbV9yZWFkQml0cyhuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0c0NhY2hlZCA9IHRoaXMuYml0c0NhY2hlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZWREYXRhID0gdGhpcy5jYWNoZWREYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYml0c0NhY2hlZCA8IG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHRoaXMuc3RyLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZERhdGEgPSBjYWNoZWREYXRhIDw8IDggfCBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNDYWNoZWQgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iaXRzQ2FjaGVkID0gYml0c0NhY2hlZCAtPSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWREYXRhID0gY2FjaGVkRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdENvZGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlZERhdGEgPj4+IGJpdHNDYWNoZWQgJiAoMSA8PCBuKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgTFpXU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiBMWldTdHJlYW1fcmVhZEJsb2NrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrU2l6ZSA9IDUxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlc3RpbWF0ZWREZWNvZGVkU2l6ZSA9IGJsb2NrU2l6ZSAqIDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFNpemVEZWx0YSA9IGJsb2NrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqLCBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGx6d1N0YXRlID0gdGhpcy5sendTdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsendTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVhcmx5Q2hhbmdlID0gbHp3U3RhdGUuZWFybHlDaGFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dENvZGUgPSBsendTdGF0ZS5uZXh0Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0aW9uYXJ5VmFsdWVzID0gbHp3U3RhdGUuZGljdGlvbmFyeVZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0aW9uYXJ5TGVuZ3RocyA9IGx6d1N0YXRlLmRpY3Rpb25hcnlMZW5ndGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3Rpb25hcnlQcmV2Q29kZXMgPSBsendTdGF0ZS5kaWN0aW9uYXJ5UHJldkNvZGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVMZW5ndGggPSBsendTdGF0ZS5jb2RlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZDb2RlID0gbHp3U3RhdGUucHJldkNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFNlcXVlbmNlID0gbHp3U3RhdGUuY3VycmVudFNlcXVlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA9IGx6d1N0YXRlLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVkTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50QnVmZmVyTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyBlc3RpbWF0ZWREZWNvZGVkU2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja1NpemU7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gdGhpcy5yZWFkQml0cyhjb2RlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzUHJldiA9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA8IDI1Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VbMF0gPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VMZW5ndGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA+PSAyNTgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPCBuZXh0Q29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlcXVlbmNlTGVuZ3RoID0gZGljdGlvbmFyeUxlbmd0aHNbY29kZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGN1cnJlbnRTZXF1ZW5jZUxlbmd0aCAtIDEsIHEgPSBjb2RlOyBqID49IDA7IGotLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXF1ZW5jZVtqXSA9IGRpY3Rpb25hcnlWYWx1ZXNbcV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGRpY3Rpb25hcnlQcmV2Q29kZXNbcV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VbY3VycmVudFNlcXVlbmNlTGVuZ3RoKytdID0gY3VycmVudFNlcXVlbmNlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAyNTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUxlbmd0aCA9IDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDb2RlID0gMjU4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2VxdWVuY2VMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmx6d1N0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzUHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5UHJldkNvZGVzW25leHRDb2RlXSA9IHByZXZDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5TGVuZ3Roc1tuZXh0Q29kZV0gPSBkaWN0aW9uYXJ5TGVuZ3Roc1twcmV2Q29kZV0gKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5VmFsdWVzW25leHRDb2RlXSA9IGN1cnJlbnRTZXF1ZW5jZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvZGUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUxlbmd0aCA9IG5leHRDb2RlICsgZWFybHlDaGFuZ2UgJiBuZXh0Q29kZSArIGVhcmx5Q2hhbmdlIC0gMSA/IGNvZGVMZW5ndGggOiBNYXRoLm1pbihNYXRoLmxvZyhuZXh0Q29kZSArIGVhcmx5Q2hhbmdlKSAvIDAuNjkzMTQ3MTgwNTU5OTQ1MyArIDEsIDEyKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldkNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRMZW5ndGggKz0gY3VycmVudFNlcXVlbmNlTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVzdGltYXRlZERlY29kZWRTaXplIDwgZGVjb2RlZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc3RpbWF0ZWREZWNvZGVkU2l6ZSArPSBkZWNvZGVkU2l6ZURlbHRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChlc3RpbWF0ZWREZWNvZGVkU2l6ZSA8IGRlY29kZWRMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoICsgZXN0aW1hdGVkRGVjb2RlZFNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjdXJyZW50U2VxdWVuY2VMZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbY3VycmVudEJ1ZmZlckxlbmd0aCsrXSA9IGN1cnJlbnRTZXF1ZW5jZVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGx6d1N0YXRlLm5leHRDb2RlID0gbmV4dENvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsendTdGF0ZS5jb2RlTGVuZ3RoID0gY29kZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGx6d1N0YXRlLnByZXZDb2RlID0gcHJldkNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBsendTdGF0ZS5jdXJyZW50U2VxdWVuY2VMZW5ndGggPSBjdXJyZW50U2VxdWVuY2VMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGN1cnJlbnRCdWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExaV1N0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkxaV1N0cmVhbSA9IExaV1N0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBOdWxsU3RyZWFtID0gZnVuY3Rpb24gTnVsbFN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bGxTdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW0uY2FsbCh0aGlzLCBuZXcgVWludDhBcnJheSgwKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBOdWxsU3RyZWFtLnByb3RvdHlwZSA9IFN0cmVhbS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTnVsbFN0cmVhbSA9IE51bGxTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0NJVFRGYXhTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NjaXR0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ0NJVFRGYXhTdHJlYW0gPSBmdW5jdGlvbiBDQ0lUVEZheFN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENDSVRURmF4U3RyZWFtKHN0ciwgbWF5YmVMZW5ndGgsIHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHIgPSBzdHI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBzdHIuZGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0gX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jY2l0dEZheERlY29kZXIgPSBuZXcgX2NjaXR0LkNDSVRURmF4RGVjb2Rlcihzb3VyY2UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBLOiBwYXJhbXMuZ2V0KCdLJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5kT2ZMaW5lOiBwYXJhbXMuZ2V0KCdFbmRPZkxpbmUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmNvZGVkQnl0ZUFsaWduOiBwYXJhbXMuZ2V0KCdFbmNvZGVkQnl0ZUFsaWduJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uczogcGFyYW1zLmdldCgnQ29sdW1ucycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvd3M6IHBhcmFtcy5nZXQoJ1Jvd3MnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbmRPZkJsb2NrOiBwYXJhbXMuZ2V0KCdFbmRPZkJsb2NrJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQmxhY2tJczE6IHBhcmFtcy5nZXQoJ0JsYWNrSXMxJylcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBfc3RyZWFtLkRlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENDSVRURmF4U3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoX3N0cmVhbS5EZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICBDQ0lUVEZheFN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCF0aGlzLmVvZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gdGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENDSVRURmF4U3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0NJVFRGYXhTdHJlYW0gPSBDQ0lUVEZheFN0cmVhbTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DQ0lUVEZheERlY29kZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENDSVRURmF4RGVjb2RlciA9IGZ1bmN0aW9uIENDSVRURmF4RGVjb2RlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNjaXR0RU9MID0gLTI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjY2l0dEVPRiA9IC0xO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHdvRGltUGFzcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1Ib3JpeiA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1WZXJ0MCA9IDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1WZXJ0UjEgPSAzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHdvRGltVmVydEwxID0gNDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR3b0RpbVZlcnRSMiA9IDU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1WZXJ0TDIgPSA2O1xuICAgICAgICAgICAgICAgICAgICB2YXIgdHdvRGltVmVydFIzID0gNztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHR3b0RpbVZlcnRMMyA9IDg7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0d29EaW1UYWJsZSA9IFtbLTEsIC0xXSwgWy0xLCAtMV0sIFs3LCB0d29EaW1WZXJ0TDNdLCBbNywgdHdvRGltVmVydFIzXSwgWzYsIHR3b0RpbVZlcnRMMl0sIFs2LCB0d29EaW1WZXJ0TDJdLCBbNiwgdHdvRGltVmVydFIyXSwgWzYsIHR3b0RpbVZlcnRSMl0sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbNCwgdHdvRGltUGFzc10sIFs0LCB0d29EaW1QYXNzXSwgWzQsIHR3b0RpbVBhc3NdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltSG9yaXpdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRMMV0sIFszLCB0d29EaW1WZXJ0TDFdLCBbMywgdHdvRGltVmVydEwxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFszLCB0d29EaW1WZXJ0UjFdLCBbMywgdHdvRGltVmVydFIxXSwgWzMsIHR3b0RpbVZlcnRSMV0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF0sIFsxLCB0d29EaW1WZXJ0MF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGVUYWJsZTEgPSBbWy0xLCAtMV0sIFsxMiwgY2NpdHRFT0xdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMiwgMTk4NF0sIFsxMiwgMjA0OF0sIFsxMiwgMjExMl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjI0MF0sIFsxMiwgMjMwNF0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMiwgMjM2OF0sIFsxMiwgMjQzMl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjU2MF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2hpdGVUYWJsZTIgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFs4LCAyOV0sIFs4LCAyOV0sIFs4LCAzMF0sIFs4LCAzMF0sIFs4LCA0NV0sIFs4LCA0NV0sIFs4LCA0Nl0sIFs4LCA0Nl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyMl0sIFs3LCAyM10sIFs3LCAyM10sIFs3LCAyM10sIFs3LCAyM10sIFs4LCA0N10sIFs4LCA0N10sIFs4LCA0OF0sIFs4LCA0OF0sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs2LCAxM10sIFs3LCAyMF0sIFs3LCAyMF0sIFs3LCAyMF0sIFs3LCAyMF0sIFs4LCAzM10sIFs4LCAzM10sIFs4LCAzNF0sIFs4LCAzNF0sIFs4LCAzNV0sIFs4LCAzNV0sIFs4LCAzNl0sIFs4LCAzNl0sIFs4LCAzN10sIFs4LCAzN10sIFs4LCAzOF0sIFs4LCAzOF0sIFs3LCAxOV0sIFs3LCAxOV0sIFs3LCAxOV0sIFs3LCAxOV0sIFs4LCAzMV0sIFs4LCAzMV0sIFs4LCAzMl0sIFs4LCAzMl0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMV0sIFs2LCAxXSwgWzYsIDFdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbNiwgMTJdLCBbOCwgNTNdLCBbOCwgNTNdLCBbOCwgNTRdLCBbOCwgNTRdLCBbNywgMjZdLCBbNywgMjZdLCBbNywgMjZdLCBbNywgMjZdLCBbOCwgMzldLCBbOCwgMzldLCBbOCwgNDBdLCBbOCwgNDBdLCBbOCwgNDFdLCBbOCwgNDFdLCBbOCwgNDJdLCBbOCwgNDJdLCBbOCwgNDNdLCBbOCwgNDNdLCBbOCwgNDRdLCBbOCwgNDRdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjFdLCBbNywgMjhdLCBbNywgMjhdLCBbNywgMjhdLCBbNywgMjhdLCBbOCwgNjFdLCBbOCwgNjFdLCBbOCwgNjJdLCBbOCwgNjJdLCBbOCwgNjNdLCBbOCwgNjNdLCBbOCwgMF0sIFs4LCAwXSwgWzgsIDMyMF0sIFs4LCAzMjBdLCBbOCwgMzg0XSwgWzgsIDM4NF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMF0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs1LCAxMV0sIFs3LCAyN10sIFs3LCAyN10sIFs3LCAyN10sIFs3LCAyN10sIFs4LCA1OV0sIFs4LCA1OV0sIFs4LCA2MF0sIFs4LCA2MF0sIFs5LCAxNDcyXSwgWzksIDE1MzZdLCBbOSwgMTYwMF0sIFs5LCAxNzI4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDE4XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzcsIDI0XSwgWzgsIDQ5XSwgWzgsIDQ5XSwgWzgsIDUwXSwgWzgsIDUwXSwgWzgsIDUxXSwgWzgsIDUxXSwgWzgsIDUyXSwgWzgsIDUyXSwgWzcsIDI1XSwgWzcsIDI1XSwgWzcsIDI1XSwgWzcsIDI1XSwgWzgsIDU1XSwgWzgsIDU1XSwgWzgsIDU2XSwgWzgsIDU2XSwgWzgsIDU3XSwgWzgsIDU3XSwgWzgsIDU4XSwgWzgsIDU4XSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTkyXSwgWzYsIDE5Ml0sIFs2LCAxOTJdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzYsIDE2NjRdLCBbNiwgMTY2NF0sIFs2LCAxNjY0XSwgWzgsIDQ0OF0sIFs4LCA0NDhdLCBbOCwgNTEyXSwgWzgsIDUxMl0sIFs5LCA3MDRdLCBbOSwgNzY4XSwgWzgsIDY0MF0sIFs4LCA2NDBdLCBbOCwgNTc2XSwgWzgsIDU3Nl0sIFs5LCA4MzJdLCBbOSwgODk2XSwgWzksIDk2MF0sIFs5LCAxMDI0XSwgWzksIDEwODhdLCBbOSwgMTE1Ml0sIFs5LCAxMjE2XSwgWzksIDEyODBdLCBbOSwgMTM0NF0sIFs5LCAxNDA4XSwgWzcsIDI1Nl0sIFs3LCAyNTZdLCBbNywgMjU2XSwgWzcsIDI1Nl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgMl0sIFs0LCAyXSwgWzQsIDJdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzQsIDNdLCBbNCwgM10sIFs0LCAzXSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCAxMjhdLCBbNSwgMTI4XSwgWzUsIDEyOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDhdLCBbNSwgOF0sIFs1LCA4XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNSwgOV0sIFs1LCA5XSwgWzUsIDldLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTZdLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNiwgMTddLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDRdLCBbNCwgNF0sIFs0LCA0XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNF0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs2LCAxNV0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs1LCA2NF0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XSwgWzQsIDddLCBbNCwgN10sIFs0LCA3XV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBibGFja1RhYmxlMSA9IFtbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMiwgY2NpdHRFT0xdLCBbMTIsIGNjaXR0RU9MXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMSwgMTc5Ml0sIFsxMiwgMTk4NF0sIFsxMiwgMTk4NF0sIFsxMiwgMjA0OF0sIFsxMiwgMjA0OF0sIFsxMiwgMjExMl0sIFsxMiwgMjExMl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjE3Nl0sIFsxMiwgMjI0MF0sIFsxMiwgMjI0MF0sIFsxMiwgMjMwNF0sIFsxMiwgMjMwNF0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTg1Nl0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMSwgMTkyMF0sIFsxMiwgMjM2OF0sIFsxMiwgMjM2OF0sIFsxMiwgMjQzMl0sIFsxMiwgMjQzMl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjQ5Nl0sIFsxMiwgMjU2MF0sIFsxMiwgMjU2MF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEwLCAxOF0sIFsxMCwgMThdLCBbMTAsIDE4XSwgWzEyLCA1Ml0sIFsxMiwgNTJdLCBbMTMsIDY0MF0sIFsxMywgNzA0XSwgWzEzLCA3NjhdLCBbMTMsIDgzMl0sIFsxMiwgNTVdLCBbMTIsIDU1XSwgWzEyLCA1Nl0sIFsxMiwgNTZdLCBbMTMsIDEyODBdLCBbMTMsIDEzNDRdLCBbMTMsIDE0MDhdLCBbMTMsIDE0NzJdLCBbMTIsIDU5XSwgWzEyLCA1OV0sIFsxMiwgNjBdLCBbMTIsIDYwXSwgWzEzLCAxNTM2XSwgWzEzLCAxNjAwXSwgWzExLCAyNF0sIFsxMSwgMjRdLCBbMTEsIDI0XSwgWzExLCAyNF0sIFsxMSwgMjVdLCBbMTEsIDI1XSwgWzExLCAyNV0sIFsxMSwgMjVdLCBbMTMsIDE2NjRdLCBbMTMsIDE3MjhdLCBbMTIsIDMyMF0sIFsxMiwgMzIwXSwgWzEyLCAzODRdLCBbMTIsIDM4NF0sIFsxMiwgNDQ4XSwgWzEyLCA0NDhdLCBbMTMsIDUxMl0sIFsxMywgNTc2XSwgWzEyLCA1M10sIFsxMiwgNTNdLCBbMTIsIDU0XSwgWzEyLCA1NF0sIFsxMywgODk2XSwgWzEzLCA5NjBdLCBbMTMsIDEwMjRdLCBbMTMsIDEwODhdLCBbMTMsIDExNTJdLCBbMTMsIDEyMTZdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF0sIFsxMCwgNjRdLCBbMTAsIDY0XSwgWzEwLCA2NF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmxhY2tUYWJsZTIgPSBbWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzgsIDEzXSwgWzExLCAyM10sIFsxMSwgMjNdLCBbMTIsIDUwXSwgWzEyLCA1MV0sIFsxMiwgNDRdLCBbMTIsIDQ1XSwgWzEyLCA0Nl0sIFsxMiwgNDddLCBbMTIsIDU3XSwgWzEyLCA1OF0sIFsxMiwgNjFdLCBbMTIsIDI1Nl0sIFsxMCwgMTZdLCBbMTAsIDE2XSwgWzEwLCAxNl0sIFsxMCwgMTZdLCBbMTAsIDE3XSwgWzEwLCAxN10sIFsxMCwgMTddLCBbMTAsIDE3XSwgWzEyLCA0OF0sIFsxMiwgNDldLCBbMTIsIDYyXSwgWzEyLCA2M10sIFsxMiwgMzBdLCBbMTIsIDMxXSwgWzEyLCAzMl0sIFsxMiwgMzNdLCBbMTIsIDQwXSwgWzEyLCA0MV0sIFsxMSwgMjJdLCBbMTEsIDIyXSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzgsIDE0XSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDEwXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzcsIDExXSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzksIDE1XSwgWzEyLCAxMjhdLCBbMTIsIDE5Ml0sIFsxMiwgMjZdLCBbMTIsIDI3XSwgWzEyLCAyOF0sIFsxMiwgMjldLCBbMTEsIDE5XSwgWzExLCAxOV0sIFsxMSwgMjBdLCBbMTEsIDIwXSwgWzEyLCAzNF0sIFsxMiwgMzVdLCBbMTIsIDM2XSwgWzEyLCAzN10sIFsxMiwgMzhdLCBbMTIsIDM5XSwgWzExLCAyMV0sIFsxMSwgMjFdLCBbMTIsIDQyXSwgWzEyLCA0M10sIFsxMCwgMF0sIFsxMCwgMF0sIFsxMCwgMF0sIFsxMCwgMF0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl0sIFs3LCAxMl1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmxhY2tUYWJsZTMgPSBbWy0xLCAtMV0sIFstMSwgLTFdLCBbLTEsIC0xXSwgWy0xLCAtMV0sIFs2LCA5XSwgWzYsIDhdLCBbNSwgN10sIFs1LCA3XSwgWzQsIDZdLCBbNCwgNl0sIFs0LCA2XSwgWzQsIDZdLCBbNCwgNV0sIFs0LCA1XSwgWzQsIDVdLCBbNCwgNV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgMV0sIFszLCAxXSwgWzMsIDFdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzMsIDRdLCBbMywgNF0sIFszLCA0XSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgM10sIFsyLCAzXSwgWzIsIDNdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl0sIFsyLCAyXSwgWzIsIDJdLCBbMiwgMl1dO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENDSVRURmF4RGVjb2Rlcihzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzb3VyY2UgfHwgdHlwZW9mIHNvdXJjZS5uZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDQ0lUVEZheERlY29kZXIgLSBpbnZhbGlkIFwic291cmNlXCIgcGFyYW1ldGVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuY29kaW5nID0gb3B0aW9uc1snSyddIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvbGluZSA9IG9wdGlvbnNbJ0VuZE9mTGluZSddIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlQWxpZ24gPSBvcHRpb25zWydFbmNvZGVkQnl0ZUFsaWduJ10gfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMgPSBvcHRpb25zWydDb2x1bW5zJ10gfHwgMTcyODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93cyA9IG9wdGlvbnNbJ1Jvd3MnXSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVvYmxvY2sgPSBvcHRpb25zWydFbmRPZkJsb2NrJ107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlb2Jsb2NrID09PSBudWxsIHx8IGVvYmxvY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvYmxvY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvYmxvY2sgPSBlb2Jsb2NrO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ibGFjayA9IG9wdGlvbnNbJ0JsYWNrSXMxJ10gfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGluZ0xpbmUgPSBuZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZkxpbmUgPSBuZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGluZ0xpbmVbMF0gPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGluZ1BvcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRMaW5lMkQgPSB0aGlzLmVuY29kaW5nIDwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRCaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRCdWYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm93c0RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0TGluZTJEID0gIXRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENDSVRURmF4RGVjb2Rlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkTmV4dENoYXI6IGZ1bmN0aW9uIHJlYWROZXh0Q2hhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZMaW5lID0gdGhpcy5yZWZMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5jb2x1bW5zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZQb3MsIGJsYWNrUGl4ZWxzLCBiaXRzLCBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3dzRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVyciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZTEsIGNvZGUyLCBjb2RlMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZXh0TGluZTJEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBjb2RpbmdMaW5lW2ldIDwgY29sdW1uczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmTGluZVtpXSA9IGNvZGluZ0xpbmVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZkxpbmVbaSsrXSA9IGNvbHVtbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZMaW5lW2ldID0gY29sdW1ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ0xpbmVbMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RpbmdQb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmUG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fZ2V0VHdvRGltQ29kZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHR3b0RpbVBhc3M6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3MgKyAxXSwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmTGluZVtyZWZQb3MgKyAxXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0d29EaW1Ib3JpejpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gY29kZTIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0QmxhY2tDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY29kZTMgPj0gNjQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMiArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTIgKz0gY29kZTMgPSB0aGlzLl9nZXRCbGFja0NvZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSArIGNvZGUxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gKyBjb2RlMiwgYmxhY2tQaXhlbHMgXiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydFIzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKHJlZkxpbmVbcmVmUG9zXSArIDMsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlZkxpbmVbcmVmUG9zXSA8PSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSAmJiByZWZMaW5lW3JlZlBvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZlBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB0d29EaW1WZXJ0UjI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdICsgMiwgYmxhY2tQaXhlbHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BpeGVscyBePSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytyZWZQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVmTGluZVtyZWZQb3NdIDw9IGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICYmIHJlZkxpbmVbcmVmUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmUG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHR3b0RpbVZlcnRSMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhyZWZMaW5lW3JlZlBvc10gKyAxLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMocmVmTGluZVtyZWZQb3NdLCBibGFja1BpeGVscyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3JlZlBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDMsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDIsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdHdvRGltVmVydEwxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzTmVnKHJlZkxpbmVbcmVmUG9zXSAtIDEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgXj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZQb3MgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcmVmUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWZMaW5lW3JlZlBvc10gPD0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gJiYgcmVmTGluZVtyZWZQb3NdIDwgY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZQb3MgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgY2NpdHRFT0Y6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hZGRQaXhlbHMoY29sdW1ucywgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ2JhZCAyZCBjb2RlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2FkZFBpeGVscyhjb2x1bW5zLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ0xpbmVbMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RpbmdQb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQaXhlbHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxICs9IGNvZGUzID0gdGhpcy5fZ2V0QmxhY2tDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNvZGUzID49IDY0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMSArPSBjb2RlMyA9IHRoaXMuX2dldFdoaXRlQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChjb2RlMyA+PSA2NCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWRkUGl4ZWxzKGNvZGluZ0xpbmVbdGhpcy5jb2RpbmdQb3NdICsgY29kZTEsIGJsYWNrUGl4ZWxzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUGl4ZWxzIF49IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ290RU9MID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnl0ZUFsaWduKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0Qml0cyAmPSB+NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lb2Jsb2NrICYmIHRoaXMucm93ID09PSB0aGlzLnJvd3MgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd3NEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2xpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29kZTEgIT09IGNjaXR0RU9GICYmIGNvZGUxICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY29kZTEgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlMSA9IHRoaXMuX2xvb2tCaXRzKDEyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlMSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290RU9MID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kZTEgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVvZiAmJiB0aGlzLmVuY29kaW5nID4gMCAmJiAhdGhpcy5yb3dzRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0TGluZTJEID0gIXRoaXMuX2xvb2tCaXRzKDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9ibG9jayAmJiBnb3RFT0wgJiYgdGhpcy5ieXRlQWxpZ24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb29rQml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuY29kaW5nID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTEgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlMSAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnYmFkIHJ0YyBjb2RlOiAnICsgY29kZTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9va0JpdHMoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZXJyICYmIHRoaXMuZW9saW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUxID0gdGhpcy5fbG9va0JpdHMoMTMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUxID09PSBjY2l0dEVPRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZTEgPj4gMSA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKDEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5jb2RpbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dExpbmUyRCA9ICEoY29kZTEgJiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lWzBdID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1BvcyA9IDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3crKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dEJpdHMgPj0gOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gdGhpcy5jb2RpbmdQb3MgJiAxID8gMCA6IDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0Qml0cyAtPSA4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm91dHB1dEJpdHMgPT09IDAgJiYgY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGluZ1BvcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gLSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3V0cHV0Qml0cyA+IGJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIDw8PSBiaXRzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5jb2RpbmdQb3MgJiAxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIHw9IDB4RkYgPj4gOCAtIGJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzIC09IGJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPDw9IHRoaXMub3V0cHV0Qml0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRoaXMuY29kaW5nUG9zICYgMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyB8PSAweEZGID4+IDggLSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyAtPSB0aGlzLm91dHB1dEJpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zXSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2RpbmdQb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRCaXRzID0gY29kaW5nTGluZVt0aGlzLmNvZGluZ1Bvc10gLSBjb2RpbmdMaW5lW3RoaXMuY29kaW5nUG9zIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaXRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjIDw8PSBiaXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGJpdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJsYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgXj0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfYWRkUGl4ZWxzOiBmdW5jdGlvbiBfYWRkUGl4ZWxzKGExLCBibGFja1BpeGVscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdMaW5lID0gdGhpcy5jb2RpbmdMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdQb3MgPSB0aGlzLmNvZGluZ1BvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhMSA+IGNvZGluZ0xpbmVbY29kaW5nUG9zXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYTEgPiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgncm93IGlzIHdyb25nIGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTEgPSB0aGlzLmNvbHVtbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kaW5nUG9zICYgMSBeIGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2NvZGluZ1BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kaW5nUG9zID0gY29kaW5nUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRQaXhlbHNOZWc6IGZ1bmN0aW9uIF9hZGRQaXhlbHNOZWcoYTEsIGJsYWNrUGl4ZWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGluZ0xpbmUgPSB0aGlzLmNvZGluZ0xpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGluZ1BvcyA9IHRoaXMuY29kaW5nUG9zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGExID4gY29kaW5nTGluZVtjb2RpbmdQb3NdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhMSA+IHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdyb3cgaXMgd3JvbmcgbGVuZ3RoJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVyciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhMSA9IHRoaXMuY29sdW1ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RpbmdQb3MgJiAxIF4gYmxhY2tQaXhlbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY29kaW5nUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nTGluZVtjb2RpbmdQb3NdID0gYTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhMSA8IGNvZGluZ0xpbmVbY29kaW5nUG9zXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYTEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ2ludmFsaWQgY29kZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYTEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvZGluZ1BvcyA+IDAgJiYgYTEgPCBjb2RpbmdMaW5lW2NvZGluZ1BvcyAtIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWNvZGluZ1BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ0xpbmVbY29kaW5nUG9zXSA9IGExO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kaW5nUG9zID0gY29kaW5nUG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9maW5kVGFibGVDb2RlOiBmdW5jdGlvbiBfZmluZFRhYmxlQ29kZShzdGFydCwgZW5kLCB0YWJsZSwgbGltaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGltaXRWYWx1ZSA9IGxpbWl0IHx8IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSB0aGlzLl9sb29rQml0cyhpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSA9PT0gY2NpdHRFT0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgMSwgZmFsc2VdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPDw9IGVuZCAtIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbWl0VmFsdWUgfHwgY29kZSA+PSBsaW1pdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHRhYmxlW2NvZGUgLSBsaW1pdFZhbHVlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBbMF0gPT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKGkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBwWzFdLCB0cnVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbZmFsc2UsIDAsIGZhbHNlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2V0VHdvRGltQ29kZTogZnVuY3Rpb24gX2dldFR3b0RpbUNvZGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9ibG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gdGhpcy5fbG9va0JpdHMoNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB0d29EaW1UYWJsZVtjb2RlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocCAmJiBwWzBdID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxLCA3LCB0d29EaW1UYWJsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFswXSAmJiByZXN1bHRbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0JhZCB0d28gZGltIGNvZGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2NpdHRFT0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2dldFdoaXRlQ29kZTogZnVuY3Rpb24gX2dldFdoaXRlQ29kZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSB0aGlzLl9sb29rQml0cygxMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID4+IDUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB3aGl0ZVRhYmxlMVtjb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB3aGl0ZVRhYmxlMltjb2RlID4+IDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBbMF0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lYXRCaXRzKHBbMF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9maW5kVGFibGVDb2RlKDEsIDksIHdoaXRlVGFibGUyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgxMSwgMTIsIHdoaXRlVGFibGUxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0WzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdiYWQgd2hpdGUgY29kZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cygxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9nZXRCbGFja0NvZGU6IGZ1bmN0aW9uIF9nZXRCbGFja0NvZGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUsIHA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2Jsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSB0aGlzLl9sb29rQml0cygxMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT09IGNjaXR0RU9GKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID4+IDcgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBibGFja1RhYmxlMVtjb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID4+IDkgPT09IDAgJiYgY29kZSA+PiA3ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gYmxhY2tUYWJsZTJbKGNvZGUgPj4gMSkgLSA2NF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gYmxhY2tUYWJsZTNbY29kZSA+PiA3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwWzBdID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWF0Qml0cyhwWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZmluZFRhYmxlQ29kZSgyLCA2LCBibGFja1RhYmxlMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoNywgMTIsIGJsYWNrVGFibGUyLCA2NCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuX2ZpbmRUYWJsZUNvZGUoMTAsIDEzLCBibGFja1RhYmxlMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdFswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnYmFkIGJsYWNrIGNvZGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VhdEJpdHMoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfbG9va0JpdHM6IGZ1bmN0aW9uIF9sb29rQml0cyhuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5pbnB1dEJpdHMgPCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoYyA9IHRoaXMuc291cmNlLm5leHQoKSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dEJpdHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2NpdHRFT0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmlucHV0QnVmIDw8IG4gLSB0aGlzLmlucHV0Qml0cyAmIDB4RkZGRiA+PiAxNiAtIG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0QnVmID0gdGhpcy5pbnB1dEJ1ZiA8PCA4IHwgYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEJpdHMgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dEJ1ZiA+PiB0aGlzLmlucHV0Qml0cyAtIG4gJiAweEZGRkYgPj4gMTYgLSBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lYXRCaXRzOiBmdW5jdGlvbiBfZWF0Qml0cyhuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmlucHV0Qml0cyAtPSBuKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEJpdHMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENDSVRURmF4RGVjb2RlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNDSVRURmF4RGVjb2RlciA9IENDSVRURmF4RGVjb2RlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTYwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5KYmlnMlN0cmVhbSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfcHJpbWl0aXZlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU1KTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9qYmlnID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBKYmlnMlN0cmVhbSA9IGZ1bmN0aW9uIEpiaWcyU3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSmJpZzJTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZGljdCwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF5YmVMZW5ndGggPSBtYXliZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgX3N0cmVhbS5EZWNvZGVTdHJlYW0uY2FsbCh0aGlzLCBtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBKYmlnMlN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKF9zdHJlYW0uRGVjb2RlU3RyZWFtLnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShKYmlnMlN0cmVhbS5wcm90b3R5cGUsICdieXRlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnYnl0ZXMnLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIEpiaWcyU3RyZWFtLnByb3RvdHlwZS5lbnN1cmVCdWZmZXIgPSBmdW5jdGlvbiAocmVxdWVzdGVkKSB7fTtcblxuICAgICAgICAgICAgICAgICAgICBKYmlnMlN0cmVhbS5wcm90b3R5cGUucmVhZEJsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgamJpZzJJbWFnZSA9IG5ldyBfamJpZy5KYmlnMkltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh0aGlzLnBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsc1N0cmVhbSA9IHRoaXMucGFyYW1zLmdldCgnSkJJRzJHbG9iYWxzJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShnbG9iYWxzU3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xvYmFscyA9IGdsb2JhbHNTdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZ2xvYmFscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBnbG9iYWxzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmJ5dGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogdGhpcy5ieXRlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBqYmlnMkltYWdlLnBhcnNlQ2h1bmtzKGNodW5rcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGFMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gXj0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBkYXRhTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKYmlnMlN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkpiaWcyU3RyZWFtID0gSmJpZzJTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSmJpZzJJbWFnZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2FyaXRobWV0aWNfZGVjb2RlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfY2NpdHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSmJpZzJFcnJvciA9IGZ1bmN0aW9uIEpiaWcyRXJyb3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBKYmlnMkVycm9yKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJ0pCSUcyIGVycm9yOiAnICsgbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSmJpZzJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgSmJpZzJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdKYmlnMkVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgSmJpZzJFcnJvci5jb25zdHJ1Y3RvciA9IEpiaWcyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKYmlnMkVycm9yO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBKYmlnMkltYWdlID0gZnVuY3Rpb24gSmJpZzJJbWFnZUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbnRleHRDYWNoZSgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgQ29udGV4dENhY2hlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRleHRzOiBmdW5jdGlvbiBnZXRDb250ZXh0cyhpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCBpbiB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tpZF0gPSBuZXcgSW50OEFycmF5KDEgPDwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBEZWNvZGluZ0NvbnRleHQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGRlY29kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBuZXcgX2FyaXRobWV0aWNfZGVjb2Rlci5Bcml0aG1ldGljRGVjb2Rlcih0aGlzLmRhdGEsIHRoaXMuc3RhcnQsIHRoaXMuZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2RlY29kZXInLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBjb250ZXh0Q2FjaGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlID0gbmV3IENvbnRleHRDYWNoZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnY29udGV4dENhY2hlJywgY2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsIHByb2NlZHVyZSwgZGVjb2Rlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRzID0gY29udGV4dENhY2hlLmdldENvbnRleHRzKHByb2NlZHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJldiA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRCaXRzKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgcHJldik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBwcmV2IDwgMjU2ID8gcHJldiA8PCAxIHwgYml0IDogKHByZXYgPDwgMSB8IGJpdCkgJiA1MTEgfCAyNTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSB2IDw8IDEgfCBiaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWduID0gcmVhZEJpdHMoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMSkgPyByZWFkQml0cygxKSA/IHJlYWRCaXRzKDEpID8gcmVhZEJpdHMoMzIpICsgNDQzNiA6IHJlYWRCaXRzKDEyKSArIDM0MCA6IHJlYWRCaXRzKDgpICsgODQgOiByZWFkQml0cyg2KSArIDIwIDogcmVhZEJpdHMoNCkgKyA0IDogcmVhZEJpdHMoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2lnbiA9PT0gMCA/IHZhbHVlIDogdmFsdWUgPiAwID8gLXZhbHVlIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZUlBSUQoY29udGV4dENhY2hlLCBkZWNvZGVyLCBjb2RlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSBjb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoJ0lBSUQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2RlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0ID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcHJldiA8PCAxIHwgYml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZUxlbmd0aCA8IDMxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgJiAoMSA8PCBjb2RlTGVuZ3RoKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICYgMHg3RkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBTZWdtZW50VHlwZXMgPSBbJ1N5bWJvbERpY3Rpb25hcnknLCBudWxsLCBudWxsLCBudWxsLCAnSW50ZXJtZWRpYXRlVGV4dFJlZ2lvbicsIG51bGwsICdJbW1lZGlhdGVUZXh0UmVnaW9uJywgJ0ltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbicsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICdQYXR0ZXJuRGljdGlvbmFyeScsIG51bGwsIG51bGwsIG51bGwsICdJbnRlcm1lZGlhdGVIYWxmdG9uZVJlZ2lvbicsIG51bGwsICdJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbicsICdJbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uJywgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgJ0ludGVybWVkaWF0ZUdlbmVyaWNSZWdpb24nLCBudWxsLCAnSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbicsICdJbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24nLCAnSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24nLCBudWxsLCAnSW1tZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24nLCAnSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVmaW5lbWVudFJlZ2lvbicsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICdQYWdlSW5mb3JtYXRpb24nLCAnRW5kT2ZQYWdlJywgJ0VuZE9mU3RyaXBlJywgJ0VuZE9mRmlsZScsICdQcm9maWxlcycsICdUYWJsZXMnLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAnRXh0ZW5zaW9uJ107XG4gICAgICAgICAgICAgICAgICAgIHZhciBDb2RpbmdUZW1wbGF0ZXMgPSBbW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0yXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH1dLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0yXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTMsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0yLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgICAgICAgICAgfV0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0yXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICB9XSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiAtMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgIH1dXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlZmluZW1lbnRUZW1wbGF0ZXMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2U6IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nOiBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICAgICAgICAgICAgICB9XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZTogW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfV1cbiAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBSZXVzZWRDb250ZXh0cyA9IFsweDlCMjUsIDB4MDc5NSwgMHgwMEU1LCAweDAxOTVdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgUmVmaW5lbWVudFJldXNlZENvbnRleHRzID0gWzB4MDAyMCwgMHgwMDA4XTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVCaXRtYXBUZW1wbGF0ZTAod2lkdGgsIGhlaWdodCwgZGVjb2RpbmdDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IGRlY29kaW5nQ29udGV4dC5kZWNvZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRzID0gZGVjb2RpbmdDb250ZXh0LmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygnR0InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT0xEX1BJWEVMX01BU0sgPSAweDdCRjc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IGJpdG1hcFtpXSA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cxID0gaSA8IDEgPyByb3cgOiBiaXRtYXBbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzIgPSBpIDwgMiA/IHJvdyA6IGJpdG1hcFtpIC0gMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dExhYmVsID0gcm93MlswXSA8PCAxMyB8IHJvdzJbMV0gPDwgMTIgfCByb3cyWzJdIDw8IDExIHwgcm93MVswXSA8PCA3IHwgcm93MVsxXSA8PCA2IHwgcm93MVsyXSA8PCA1IHwgcm93MVszXSA8PCA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2pdID0gcGl4ZWwgPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IChjb250ZXh0TGFiZWwgJiBPTERfUElYRUxfTUFTSykgPDwgMSB8IChqICsgMyA8IHdpZHRoID8gcm93MltqICsgM10gPDwgMTEgOiAwKSB8IChqICsgNCA8IHdpZHRoID8gcm93MVtqICsgNF0gPDwgNCA6IDApIHwgcGl4ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQml0bWFwKG1tciwgd2lkdGgsIGhlaWdodCwgdGVtcGxhdGVJbmRleCwgcHJlZGljdGlvbiwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1tcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IG5ldyBSZWFkZXIoZGVjb2RpbmdDb250ZXh0LmRhdGEsIGRlY29kaW5nQ29udGV4dC5zdGFydCwgZGVjb2RpbmdDb250ZXh0LmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZU1NUkJpdG1hcChpbnB1dCwgd2lkdGgsIGhlaWdodCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGVJbmRleCA9PT0gMCAmJiAhc2tpcCAmJiAhcHJlZGljdGlvbiAmJiBhdC5sZW5ndGggPT09IDQgJiYgYXRbMF0ueCA9PT0gMyAmJiBhdFswXS55ID09PSAtMSAmJiBhdFsxXS54ID09PSAtMyAmJiBhdFsxXS55ID09PSAtMSAmJiBhdFsyXS54ID09PSAyICYmIGF0WzJdLnkgPT09IC0yICYmIGF0WzNdLnggPT09IC0yICYmIGF0WzNdLnkgPT09IC0yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZUJpdG1hcFRlbXBsYXRlMCh3aWR0aCwgaGVpZ2h0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlc2tpcCA9ICEhc2tpcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wbGF0ZSA9IENvZGluZ1RlbXBsYXRlc1t0ZW1wbGF0ZUluZGV4XS5jb25jYXQoYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLnkgLSBiLnkgfHwgYS54IC0gYi54O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVMZW5ndGggPSB0ZW1wbGF0ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVYID0gbmV3IEludDhBcnJheSh0ZW1wbGF0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcGxhdGVZID0gbmV3IEludDhBcnJheSh0ZW1wbGF0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXVzZU1hc2sgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMsIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCB0ZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVYW2tdID0gdGVtcGxhdGVba10ueDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVlba10gPSB0ZW1wbGF0ZVtrXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblggPSBNYXRoLm1pbihtaW5YLCB0ZW1wbGF0ZVtrXS54KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhYID0gTWF0aC5tYXgobWF4WCwgdGVtcGxhdGVba10ueCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluWSA9IE1hdGgubWluKG1pblksIHRlbXBsYXRlW2tdLnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPCB0ZW1wbGF0ZUxlbmd0aCAtIDEgJiYgdGVtcGxhdGVba10ueSA9PT0gdGVtcGxhdGVbayArIDFdLnkgJiYgdGVtcGxhdGVba10ueCA9PT0gdGVtcGxhdGVbayArIDFdLnggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlTWFzayB8PSAxIDw8IHRlbXBsYXRlTGVuZ3RoIC0gMSAtIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXMucHVzaChrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFuZ2luZ0VudHJpZXNMZW5ndGggPSBjaGFuZ2luZ1RlbXBsYXRlRW50cmllcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZVggPSBuZXcgSW50OEFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZVkgPSBuZXcgSW50OEFycmF5KGNoYW5naW5nRW50cmllc0xlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhbmdpbmdUZW1wbGF0ZUJpdCA9IG5ldyBVaW50MTZBcnJheShjaGFuZ2luZ0VudHJpZXNMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY2hhbmdpbmdFbnRyaWVzTGVuZ3RoOyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gY2hhbmdpbmdUZW1wbGF0ZUVudHJpZXNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdpbmdUZW1wbGF0ZVhbY10gPSB0ZW1wbGF0ZVtrXS54O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5naW5nVGVtcGxhdGVZW2NdID0gdGVtcGxhdGVba10ueTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2luZ1RlbXBsYXRlQml0W2NdID0gMSA8PCB0ZW1wbGF0ZUxlbmd0aCAtIDEgLSBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2JiX2xlZnQgPSAtbWluWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzYmJfdG9wID0gLW1pblk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2JiX3JpZ2h0ID0gd2lkdGggLSBtYXhYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBzZXVkb1BpeGVsQ29udGV4dCA9IFJldXNlZENvbnRleHRzW3RlbXBsYXRlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXAgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlLmdldENvbnRleHRzKCdHQicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGx0cCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbHRwID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwc2V1ZG9QaXhlbENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdHAgXj0gc2x0cDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHRwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSBuZXcgVWludDhBcnJheShyb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlc2tpcCAmJiBza2lwW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbal0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA+PSBzYmJfbGVmdCAmJiBqIDwgc2JiX3JpZ2h0ICYmIGkgPj0gc2JiX3RvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgJiByZXVzZU1hc2s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjaGFuZ2luZ0VudHJpZXNMZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkwID0gaSArIGNoYW5naW5nVGVtcGxhdGVZW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGowID0gaiArIGNoYW5naW5nVGVtcGxhdGVYW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCA9IGJpdG1hcFtpMF1bajBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXQgPSBjaGFuZ2luZ1RlbXBsYXRlQml0W2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgfD0gYml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IHRlbXBsYXRlTGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHRlbXBsYXRlTGVuZ3RoOyBrKyssIHNoaWZ0LS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqMCA9IGogKyB0ZW1wbGF0ZVhba107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoajAgPj0gMCAmJiBqMCA8IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkwID0gaSArIHRlbXBsYXRlWVtrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaTAgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0ID0gYml0bWFwW2kwXVtqMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgfD0gYml0IDw8IHNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpeGVsID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBjb250ZXh0TGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbal0gPSBwaXhlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVSZWZpbmVtZW50KHdpZHRoLCBoZWlnaHQsIHRlbXBsYXRlSW5kZXgsIHJlZmVyZW5jZUJpdG1hcCwgb2Zmc2V0WCwgb2Zmc2V0WSwgcHJlZGljdGlvbiwgYXQsIGRlY29kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGluZ1RlbXBsYXRlID0gUmVmaW5lbWVudFRlbXBsYXRlc1t0ZW1wbGF0ZUluZGV4XS5jb2Rpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZUluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nVGVtcGxhdGUgPSBjb2RpbmdUZW1wbGF0ZS5jb25jYXQoW2F0WzBdXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdUZW1wbGF0ZUxlbmd0aCA9IGNvZGluZ1RlbXBsYXRlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdUZW1wbGF0ZVggPSBuZXcgSW50MzJBcnJheShjb2RpbmdUZW1wbGF0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kaW5nVGVtcGxhdGVZID0gbmV3IEludDMyQXJyYXkoY29kaW5nVGVtcGxhdGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjb2RpbmdUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kaW5nVGVtcGxhdGVYW2tdID0gY29kaW5nVGVtcGxhdGVba10ueDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmdUZW1wbGF0ZVlba10gPSBjb2RpbmdUZW1wbGF0ZVtrXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJlbmNlVGVtcGxhdGUgPSBSZWZpbmVtZW50VGVtcGxhdGVzW3RlbXBsYXRlSW5kZXhdLnJlZmVyZW5jZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VUZW1wbGF0ZSA9IHJlZmVyZW5jZVRlbXBsYXRlLmNvbmNhdChbYXRbMV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoID0gcmVmZXJlbmNlVGVtcGxhdGUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmVyZW5jZVRlbXBsYXRlWCA9IG5ldyBJbnQzMkFycmF5KHJlZmVyZW5jZVRlbXBsYXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZlcmVuY2VUZW1wbGF0ZVkgPSBuZXcgSW50MzJBcnJheShyZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCByZWZlcmVuY2VUZW1wbGF0ZUxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlVGVtcGxhdGVYW2tdID0gcmVmZXJlbmNlVGVtcGxhdGVba10ueDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VUZW1wbGF0ZVlba10gPSByZWZlcmVuY2VUZW1wbGF0ZVtrXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJlbmNlV2lkdGggPSByZWZlcmVuY2VCaXRtYXBbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmVyZW5jZUhlaWdodCA9IHJlZmVyZW5jZUJpdG1hcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHNldWRvUGl4ZWxDb250ZXh0ID0gUmVmaW5lbWVudFJldXNlZENvbnRleHRzW3RlbXBsYXRlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0cyA9IGRlY29kaW5nQ29udGV4dC5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoJ0dSJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbHRwID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbHRwID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBwc2V1ZG9QaXhlbENvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdHAgXj0gc2x0cDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobHRwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigncHJlZGljdGlvbiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcC5wdXNoKHJvdyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkwLCBqMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRMYWJlbCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGNvZGluZ1RlbXBsYXRlTGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkwID0gaSArIGNvZGluZ1RlbXBsYXRlWVtrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGowID0gaiArIGNvZGluZ1RlbXBsYXRlWFtrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkwIDwgMCB8fCBqMCA8IDAgfHwgajAgPj0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPDw9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IGNvbnRleHRMYWJlbCA8PCAxIHwgYml0bWFwW2kwXVtqMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgcmVmZXJlbmNlVGVtcGxhdGVMZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTAgPSBpICsgcmVmZXJlbmNlVGVtcGxhdGVZW2tdIC0gb2Zmc2V0WTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGowID0gaiArIHJlZmVyZW5jZVRlbXBsYXRlWFtrXSAtIG9mZnNldFg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpMCA8IDAgfHwgaTAgPj0gcmVmZXJlbmNlSGVpZ2h0IHx8IGowIDwgMCB8fCBqMCA+PSByZWZlcmVuY2VXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA8PD0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dExhYmVsID0gY29udGV4dExhYmVsIDw8IDEgfCByZWZlcmVuY2VCaXRtYXBbaTBdW2owXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaXhlbCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2pdID0gcGl4ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlU3ltYm9sRGljdGlvbmFyeShodWZmbWFuLCByZWZpbmVtZW50LCBzeW1ib2xzLCBudW1iZXJPZk5ld1N5bWJvbHMsIG51bWJlck9mRXhwb3J0ZWRTeW1ib2xzLCBodWZmbWFuVGFibGVzLCB0ZW1wbGF0ZUluZGV4LCBhdCwgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBodWZmbWFuSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodWZmbWFuICYmIHJlZmluZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignc3ltYm9sIHJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld1N5bWJvbHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2xDb2RlTGVuZ3RoID0gKDAsIF91dGlsLmxvZzIpKHN5bWJvbHMubGVuZ3RoICsgbnVtYmVyT2ZOZXdTeW1ib2xzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gZGVjb2RpbmdDb250ZXh0LmRlY29kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dENhY2hlID0gZGVjb2RpbmdDb250ZXh0LmNvbnRleHRDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZUIxLCBzeW1ib2xXaWR0aHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodWZmbWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVCMSA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sV2lkdGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sQ29kZUxlbmd0aCA9IE1hdGgubWF4KHN5bWJvbENvZGVMZW5ndGgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmV3U3ltYm9scy5sZW5ndGggPCBudW1iZXJPZk5ld1N5bWJvbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFIZWlnaHQgPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhSGVpZ2h0LmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICdJQURIJywgZGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEhlaWdodCArPSBkZWx0YUhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFdpZHRoID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0U3ltYm9sID0gaHVmZm1hbiA/IHN5bWJvbFdpZHRocy5sZW5ndGggOiAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhV2lkdGggPSBodWZmbWFuID8gaHVmZm1hblRhYmxlcy50YWJsZURlbHRhV2lkdGguZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRFcnLCBkZWNvZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGFXaWR0aCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50V2lkdGggKz0gZGVsdGFXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxXaWR0aCArPSBjdXJyZW50V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmluZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJPZkluc3RhbmNlcyA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAnSUFBSScsIGRlY29kZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZJbnN0YW5jZXMgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwID0gZGVjb2RlVGV4dFJlZ2lvbihodWZmbWFuLCByZWZpbmVtZW50LCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQsIDAsIG51bWJlck9mSW5zdGFuY2VzLCAxLCBzeW1ib2xzLmNvbmNhdChuZXdTeW1ib2xzKSwgc3ltYm9sQ29kZUxlbmd0aCwgMCwgMCwgMSwgMCwgaHVmZm1hblRhYmxlcywgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCAwLCBodWZmbWFuSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ltYm9sSWQgPSBkZWNvZGVJQUlEKGNvbnRleHRDYWNoZSwgZGVjb2Rlciwgc3ltYm9sQ29kZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJkeCA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAnSUFSRFgnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmR5ID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICdJQVJEWScsIGRlY29kZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xJZCA8IHN5bWJvbHMubGVuZ3RoID8gc3ltYm9sc1tzeW1ib2xJZF0gOiBuZXdTeW1ib2xzW3N5bWJvbElkIC0gc3ltYm9scy5sZW5ndGhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCA9IGRlY29kZVJlZmluZW1lbnQoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sLCByZHgsIHJkeSwgZmFsc2UsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3ltYm9scy5wdXNoKGJpdG1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaHVmZm1hbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sV2lkdGhzLnB1c2goY3VycmVudFdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCA9IGRlY29kZUJpdG1hcChmYWxzZSwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCB0ZW1wbGF0ZUluZGV4LCBmYWxzZSwgbnVsbCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTeW1ib2xzLnB1c2goYml0bWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChodWZmbWFuICYmICFyZWZpbmVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXBTaXplID0gaHVmZm1hblRhYmxlcy50YWJsZUJpdG1hcFNpemUuZGVjb2RlKGh1ZmZtYW5JbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5JbnB1dC5ieXRlQWxpZ24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbGxlY3RpdmVCaXRtYXAgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdG1hcFNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RpdmVCaXRtYXAgPSByZWFkVW5jb21wcmVzc2VkQml0bWFwKGh1ZmZtYW5JbnB1dCwgdG90YWxXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3JpZ2luYWxFbmQgPSBodWZmbWFuSW5wdXQuZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcEVuZCA9IGh1ZmZtYW5JbnB1dC5wb3NpdGlvbiArIGJpdG1hcFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWZmbWFuSW5wdXQuZW5kID0gYml0bWFwRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdGl2ZUJpdG1hcCA9IGRlY29kZU1NUkJpdG1hcChodWZmbWFuSW5wdXQsIHRvdGFsV2lkdGgsIGN1cnJlbnRIZWlnaHQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5JbnB1dC5lbmQgPSBvcmlnaW5hbEVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5JbnB1dC5wb3NpdGlvbiA9IGJpdG1hcEVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJPZlN5bWJvbHNEZWNvZGVkID0gc3ltYm9sV2lkdGhzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RTeW1ib2wgPT09IG51bWJlck9mU3ltYm9sc0RlY29kZWQgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdTeW1ib2xzLnB1c2goY29sbGVjdGl2ZUJpdG1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2kgPSB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4TWluID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4TWF4ID0gdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcFdpZHRoID0gdm9pZCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbEJpdG1hcCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChfaSA9IGZpcnN0U3ltYm9sOyBfaSA8IG51bWJlck9mU3ltYm9sc0RlY29kZWQ7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXBXaWR0aCA9IHN5bWJvbFdpZHRoc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1heCA9IHhNaW4gKyBiaXRtYXBXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xCaXRtYXAgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBjdXJyZW50SGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sQml0bWFwLnB1c2goY29sbGVjdGl2ZUJpdG1hcFt5XS5zdWJhcnJheSh4TWluLCB4TWF4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3U3ltYm9scy5wdXNoKHN5bWJvbEJpdG1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1pbiA9IHhNYXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHBvcnRlZFN5bWJvbHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGbGFnID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWxTeW1ib2xzTGVuZ3RoID0gc3ltYm9scy5sZW5ndGggKyBudW1iZXJPZk5ld1N5bWJvbHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChmbGFncy5sZW5ndGggPCB0b3RhbFN5bWJvbHNMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnVuTGVuZ3RoID0gaHVmZm1hbiA/IHRhYmxlQjEuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRVgnLCBkZWNvZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChydW5MZW5ndGgtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5wdXNoKGN1cnJlbnRGbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmxhZyA9ICFjdXJyZW50RmxhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3ltYm9scy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkU3ltYm9scy5wdXNoKHN5bWJvbHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBudW1iZXJPZk5ld1N5bWJvbHM7IGkrKywgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkU3ltYm9scy5wdXNoKG5ld1N5bWJvbHNbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydGVkU3ltYm9scztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZVRleHRSZWdpb24oaHVmZm1hbiwgcmVmaW5lbWVudCwgd2lkdGgsIGhlaWdodCwgZGVmYXVsdFBpeGVsVmFsdWUsIG51bWJlck9mU3ltYm9sSW5zdGFuY2VzLCBzdHJpcFNpemUsIGlucHV0U3ltYm9scywgc3ltYm9sQ29kZUxlbmd0aCwgdHJhbnNwb3NlZCwgZHNPZmZzZXQsIHJlZmVyZW5jZUNvcm5lciwgY29tYmluYXRpb25PcGVyYXRvciwgaHVmZm1hblRhYmxlcywgcmVmaW5lbWVudFRlbXBsYXRlSW5kZXgsIHJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBsb2dTdHJpcFNpemUsIGh1ZmZtYW5JbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGh1ZmZtYW4gJiYgcmVmaW5lbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXAgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCByb3c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0UGl4ZWxWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tqXSA9IGRlZmF1bHRQaXhlbFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBkZWNvZGluZ0NvbnRleHQuZGVjb2RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0Q2FjaGUgPSBkZWNvZGluZ0NvbnRleHQuY29udGV4dENhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmlwVCA9IGh1ZmZtYW4gPyAtaHVmZm1hblRhYmxlcy50YWJsZURlbHRhVC5kZWNvZGUoaHVmZm1hbklucHV0KSA6IC1kZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRFQnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFUID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVQuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRFQnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcFQgKz0gZGVsdGFUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YUZpcnN0UyA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnRhYmxlRmlyc3RTLmRlY29kZShodWZmbWFuSW5wdXQpIDogZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICdJQUZTJywgZGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RTICs9IGRlbHRhRmlyc3RTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50UyA9IGZpcnN0UztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXBTaXplID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFQgPSBodWZmbWFuID8gaHVmZm1hbklucHV0LnJlYWRCaXRzKGxvZ1N0cmlwU2l6ZSkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBSVQnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gc3RyaXBTaXplICogc3RyaXBUICsgY3VycmVudFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2xJZCA9IGh1ZmZtYW4gPyBodWZmbWFuVGFibGVzLnN5bWJvbElEVGFibGUuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJQUlEKGNvbnRleHRDYWNoZSwgZGVjb2Rlciwgc3ltYm9sQ29kZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcHBseVJlZmluZW1lbnQgPSByZWZpbmVtZW50ICYmIChodWZmbWFuID8gaHVmZm1hbklucHV0LnJlYWRCaXQoKSA6IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAnSUFSSScsIGRlY29kZXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbEJpdG1hcCA9IGlucHV0U3ltYm9sc1tzeW1ib2xJZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2xXaWR0aCA9IHN5bWJvbEJpdG1hcFswXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeW1ib2xIZWlnaHQgPSBzeW1ib2xCaXRtYXAubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBseVJlZmluZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZHcgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBUkRXJywgZGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmRoID0gZGVjb2RlSW50ZWdlcihjb250ZXh0Q2FjaGUsICdJQVJESCcsIGRlY29kZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJkeCA9IGRlY29kZUludGVnZXIoY29udGV4dENhY2hlLCAnSUFSRFgnLCBkZWNvZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZHkgPSBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBUkRZJywgZGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xXaWR0aCArPSByZHc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xIZWlnaHQgKz0gcmRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sQml0bWFwID0gZGVjb2RlUmVmaW5lbWVudChzeW1ib2xXaWR0aCwgc3ltYm9sSGVpZ2h0LCByZWZpbmVtZW50VGVtcGxhdGVJbmRleCwgc3ltYm9sQml0bWFwLCAocmR3ID4+IDEpICsgcmR4LCAocmRoID4+IDEpICsgcmR5LCBmYWxzZSwgcmVmaW5lbWVudEF0LCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFQgPSB0IC0gKHJlZmVyZW5jZUNvcm5lciAmIDEgPyAwIDogc3ltYm9sSGVpZ2h0IC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRTID0gY3VycmVudFMgLSAocmVmZXJlbmNlQ29ybmVyICYgMiA/IHN5bWJvbFdpZHRoIC0gMSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIsIHQyLCBzeW1ib2xSb3c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zcG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbEhlaWdodDsgczIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IGJpdG1hcFtvZmZzZXRTICsgczJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sUm93ID0gc3ltYm9sQml0bWFwW3MyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4V2lkdGggPSBNYXRoLm1pbih3aWR0aCAtIG9mZnNldFQsIHN5bWJvbFdpZHRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHQyID0gMDsgdDIgPCBtYXhXaWR0aDsgdDIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRUICsgdDJdIHw9IHN5bWJvbFJvd1t0Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IG1heFdpZHRoOyB0MisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W29mZnNldFQgKyB0Ml0gXj0gc3ltYm9sUm93W3QyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwib3BlcmF0b3IgXCIuY29uY2F0KGNvbWJpbmF0aW9uT3BlcmF0b3IsIFwiIGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFMgKz0gc3ltYm9sSGVpZ2h0IC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodDIgPSAwOyB0MiA8IHN5bWJvbEhlaWdodDsgdDIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IGJpdG1hcFtvZmZzZXRUICsgdDJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ltYm9sUm93ID0gc3ltYm9sQml0bWFwW3QyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29tYmluYXRpb25PcGVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHMyID0gMDsgczIgPCBzeW1ib2xXaWR0aDsgczIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tvZmZzZXRTICsgczJdIHw9IHN5bWJvbFJvd1tzMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoczIgPSAwOyBzMiA8IHN5bWJvbFdpZHRoOyBzMisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W29mZnNldFMgKyBzMl0gXj0gc3ltYm9sUm93W3MyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwib3BlcmF0b3IgXCIuY29uY2F0KGNvbWJpbmF0aW9uT3BlcmF0b3IsIFwiIGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFMgKz0gc3ltYm9sV2lkdGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFTID0gaHVmZm1hbiA/IGh1ZmZtYW5UYWJsZXMudGFibGVEZWx0YVMuZGVjb2RlKGh1ZmZtYW5JbnB1dCkgOiBkZWNvZGVJbnRlZ2VyKGNvbnRleHRDYWNoZSwgJ0lBRFMnLCBkZWNvZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGFTID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTICs9IGRlbHRhUyArIGRzT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkobW1yLCBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5IZWlnaHQsIG1heFBhdHRlcm5JbmRleCwgdGVtcGxhdGUsIGRlY29kaW5nQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW1yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IC1wYXR0ZXJuV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IC0yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IC0yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sbGVjdGl2ZVdpZHRoID0gKG1heFBhdHRlcm5JbmRleCArIDEpICogcGF0dGVybldpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbGxlY3RpdmVCaXRtYXAgPSBkZWNvZGVCaXRtYXAobW1yLCBjb2xsZWN0aXZlV2lkdGgsIHBhdHRlcm5IZWlnaHQsIHRlbXBsYXRlLCBmYWxzZSwgbnVsbCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybnMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuQml0bWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhNaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1heCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8PSBtYXhQYXR0ZXJuSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuQml0bWFwID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1pbiA9IHBhdHRlcm5XaWR0aCAqIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeE1heCA9IHhNaW4gKyBwYXR0ZXJuV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgcGF0dGVybkhlaWdodDsgeSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5CaXRtYXAucHVzaChjb2xsZWN0aXZlQml0bWFwW3ldLnN1YmFycmF5KHhNaW4sIHhNYXgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJucy5wdXNoKHBhdHRlcm5CaXRtYXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm5zO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlSGFsZnRvbmVSZWdpb24obW1yLCBwYXR0ZXJucywgdGVtcGxhdGUsIHJlZ2lvbldpZHRoLCByZWdpb25IZWlnaHQsIGRlZmF1bHRQaXhlbFZhbHVlLCBlbmFibGVTa2lwLCBjb21iaW5hdGlvbk9wZXJhdG9yLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIGdyaWRPZmZzZXRYLCBncmlkT2Zmc2V0WSwgZ3JpZFZlY3RvclgsIGdyaWRWZWN0b3JZLCBkZWNvZGluZ0NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2lwID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuYWJsZVNraXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignc2tpcCBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5hdGlvbk9wZXJhdG9yICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ29wZXJhdG9yICcgKyBjb21iaW5hdGlvbk9wZXJhdG9yICsgJyBpcyBub3Qgc3VwcG9ydGVkIGluIGhhbGZ0b25lIHJlZ2lvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnaW9uQml0bWFwID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgcm93O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmVnaW9uSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSBuZXcgVWludDhBcnJheShyZWdpb25XaWR0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFBpeGVsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHJlZ2lvbldpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tqXSA9IGRlZmF1bHRQaXhlbFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uQml0bWFwLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bWJlck9mUGF0dGVybnMgPSBwYXR0ZXJucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybjAgPSBwYXR0ZXJuc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuV2lkdGggPSBwYXR0ZXJuMFswXS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkhlaWdodCA9IHBhdHRlcm4wLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzUGVyVmFsdWUgPSAoMCwgX3V0aWwubG9nMikobnVtYmVyT2ZQYXR0ZXJucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtbXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogdGVtcGxhdGUgPD0gMSA/IDMgOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogLTJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogLTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAtMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmF5U2NhbGVCaXRQbGFuZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbXJJbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtbXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbXJJbnB1dCA9IG5ldyBSZWFkZXIoZGVjb2RpbmdDb250ZXh0LmRhdGEsIGRlY29kaW5nQ29udGV4dC5zdGFydCwgZGVjb2RpbmdDb250ZXh0LmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGJpdHNQZXJWYWx1ZSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1tcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgPSBkZWNvZGVNTVJCaXRtYXAobW1ySW5wdXQsIGdyaWRXaWR0aCwgZ3JpZEhlaWdodCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0bWFwID0gZGVjb2RlQml0bWFwKGZhbHNlLCBncmlkV2lkdGgsIGdyaWRIZWlnaHQsIHRlbXBsYXRlLCBmYWxzZSwgc2tpcCwgYXQsIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JheVNjYWxlQml0UGxhbmVzW2ldID0gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWcsIG5nLCBiaXQsIHBhdHRlcm5JbmRleCwgcGF0dGVybkJpdG1hcCwgeCwgeSwgcGF0dGVyblJvdywgcmVnaW9uUm93O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG1nID0gMDsgbWcgPCBncmlkSGVpZ2h0OyBtZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuZyA9IDA7IG5nIDwgZ3JpZFdpZHRoOyBuZysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5JbmRleCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gYml0c1BlclZhbHVlIC0gMTsgaiA+PSAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdCA9IGdyYXlTY2FsZUJpdFBsYW5lc1tqXVttZ11bbmddIF4gYml0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkluZGV4IHw9IGJpdCA8PCBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkJpdG1hcCA9IHBhdHRlcm5zW3BhdHRlcm5JbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBncmlkT2Zmc2V0WCArIG1nICogZ3JpZFZlY3RvclkgKyBuZyAqIGdyaWRWZWN0b3JYID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBncmlkT2Zmc2V0WSArIG1nICogZ3JpZFZlY3RvclggLSBuZyAqIGdyaWRWZWN0b3JZID4+IDg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPj0gMCAmJiB4ICsgcGF0dGVybldpZHRoIDw9IHJlZ2lvbldpZHRoICYmIHkgPj0gMCAmJiB5ICsgcGF0dGVybkhlaWdodCA8PSByZWdpb25IZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuSGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25Sb3cgPSByZWdpb25CaXRtYXBbeSArIGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5Sb3cgPSBwYXR0ZXJuQml0bWFwW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHBhdHRlcm5XaWR0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvblJvd1t4ICsgal0gfD0gcGF0dGVyblJvd1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnaW9uWCA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25ZID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybkhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uWSA9IHkgKyBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lvblkgPCAwIHx8IHJlZ2lvblkgPj0gcmVnaW9uSGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvblJvdyA9IHJlZ2lvbkJpdG1hcFtyZWdpb25ZXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuUm93ID0gcGF0dGVybkJpdG1hcFtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBwYXR0ZXJuV2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb25YID0geCArIGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZ2lvblggPj0gMCAmJiByZWdpb25YIDwgcmVnaW9uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lvblJvd1tyZWdpb25YXSB8PSBwYXR0ZXJuUm93W2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVnaW9uQml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZFNlZ21lbnRIZWFkZXIoZGF0YSwgc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWdtZW50SGVhZGVyID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLm51bWJlciA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3MgPSBkYXRhW3N0YXJ0ICsgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudFR5cGUgPSBmbGFncyAmIDB4M0Y7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghU2VnbWVudFR5cGVzW3NlZ21lbnRUeXBlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdpbnZhbGlkIHNlZ21lbnQgdHlwZTogJyArIHNlZ21lbnRUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEhlYWRlci50eXBlID0gc2VnbWVudFR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLnR5cGVOYW1lID0gU2VnbWVudFR5cGVzW3NlZ21lbnRUeXBlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRIZWFkZXIuZGVmZXJyZWROb25SZXRhaW4gPSAhIShmbGFncyAmIDB4ODApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VBc3NvY2lhdGlvbkZpZWxkU2l6ZSA9ICEhKGZsYWdzICYgMHg0MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJyZWRGbGFncyA9IGRhdGFbc3RhcnQgKyA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZlcnJlZFRvQ291bnQgPSByZWZlcnJlZEZsYWdzID4+IDUgJiA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldGFpbkJpdHMgPSBbcmVmZXJyZWRGbGFncyAmIDMxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9IHN0YXJ0ICsgNjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVycmVkRmxhZ3MgPT09IDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcnJlZFRvQ291bnQgPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gLSAxKSAmIDB4MUZGRkZGRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSByZWZlcnJlZFRvQ291bnQgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluQml0c1swXSA9IGRhdGFbcG9zaXRpb24rK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1ieXRlcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0YWluQml0cy5wdXNoKGRhdGFbcG9zaXRpb24rK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVmZXJyZWRGbGFncyA9PT0gNSB8fCByZWZlcnJlZEZsYWdzID09PSA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgcmVmZXJyZWQtdG8gZmxhZ3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEhlYWRlci5yZXRhaW5CaXRzID0gcmV0YWluQml0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPSBzZWdtZW50SGVhZGVyLm51bWJlciA8PSAyNTYgPyAxIDogc2VnbWVudEhlYWRlci5udW1iZXIgPD0gNjU1MzYgPyAyIDogNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWZlcnJlZFRvID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByZWZlcnJlZFRvQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXIgPSByZWZlcnJlZFRvU2VnbWVudE51bWJlclNpemUgPT09IDEgPyBkYXRhW3Bvc2l0aW9uXSA6IHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZSA9PT0gMiA/ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbikgOiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVycmVkVG8ucHVzaChudW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHJlZmVycmVkVG9TZWdtZW50TnVtYmVyU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEhlYWRlci5yZWZlcnJlZFRvID0gcmVmZXJyZWRUbztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWdlQXNzb2NpYXRpb25GaWVsZFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLnBhZ2VBc3NvY2lhdGlvbiA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRIZWFkZXIucGFnZUFzc29jaWF0aW9uID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLmxlbmd0aCA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudEhlYWRlci5sZW5ndGggPT09IDB4RkZGRkZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudFR5cGUgPT09IDM4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW5lcmljUmVnaW9uSW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyA9IGRhdGFbcG9zaXRpb24gKyBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW5lcmljUmVnaW9uTW1yID0gISEoZ2VuZXJpY1JlZ2lvblNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoUGF0dGVybkxlbmd0aCA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFyY2hQYXR0ZXJuID0gbmV3IFVpbnQ4QXJyYXkoc2VhcmNoUGF0dGVybkxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnZW5lcmljUmVnaW9uTW1yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXR0ZXJuWzBdID0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFBhdHRlcm5bMV0gPSAweEFDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUGF0dGVyblsyXSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYXR0ZXJuWzNdID0gZ2VuZXJpY1JlZ2lvbkluZm8uaGVpZ2h0ID4+IDE2ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUGF0dGVybls0XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoUGF0dGVybls1XSA9IGdlbmVyaWNSZWdpb25JbmZvLmhlaWdodCAmIDB4RkY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gcG9zaXRpb24sIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgc2VhcmNoUGF0dGVybkxlbmd0aCAmJiBzZWFyY2hQYXR0ZXJuW2pdID09PSBkYXRhW2kgKyBqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPT09IHNlYXJjaFBhdHRlcm5MZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50SGVhZGVyLmxlbmd0aCA9IGkgKyBzZWFyY2hQYXR0ZXJuTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlZ21lbnRIZWFkZXIubGVuZ3RoID09PSAweEZGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignc2VnbWVudCBlbmQgd2FzIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgdW5rbm93biBzZWdtZW50IGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudEhlYWRlci5oZWFkZXJFbmQgPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50SGVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZFNlZ21lbnRzKGhlYWRlciwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSBzdGFydDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRIZWFkZXIgPSByZWFkU2VnbWVudEhlYWRlcihkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBzZWdtZW50SGVhZGVyLmhlYWRlckVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBzZWdtZW50SGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZGVyLnJhbmRvbUFjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LnN0YXJ0ID0gcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHNlZ21lbnRIZWFkZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50LmVuZCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VnbWVudEhlYWRlci50eXBlID09PSA1MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIucmFuZG9tQWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc2VnbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50c1tpXS5zdGFydCA9IHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBzZWdtZW50c1tpXS5oZWFkZXIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50c1tpXS5lbmQgPSBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWdtZW50cztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgc3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBzdGFydCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyA4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgc3RhcnQgKyAxMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluYXRpb25PcGVyYXRvcjogZGF0YVtzdGFydCArIDE2XSAmIDdcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uRmllbGRMZW5ndGggPSAxNztcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzU2VnbWVudChzZWdtZW50LCB2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gc2VnbWVudC5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHNlZ21lbnQuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHNlZ21lbnQuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gc2VnbWVudC5lbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncywgYXQsIGksIGF0TGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGhlYWRlci50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdGlvbmFyeSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdGlvbmFyeUZsYWdzID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5odWZmbWFuID0gISEoZGljdGlvbmFyeUZsYWdzICYgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkucmVmaW5lbWVudCA9ICEhKGRpY3Rpb25hcnlGbGFncyAmIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5Lmh1ZmZtYW5ESFNlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDIgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5Lmh1ZmZtYW5EV1NlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDQgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LmJpdG1hcFNpemVTZWxlY3RvciA9IGRpY3Rpb25hcnlGbGFncyA+PiA2ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yID0gZGljdGlvbmFyeUZsYWdzID4+IDcgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LmJpdG1hcENvZGluZ0NvbnRleHRVc2VkID0gISEoZGljdGlvbmFyeUZsYWdzICYgMjU2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5iaXRtYXBDb2RpbmdDb250ZXh0UmV0YWluZWQgPSAhIShkaWN0aW9uYXJ5RmxhZ3MgJiA1MTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LnRlbXBsYXRlID0gZGljdGlvbmFyeUZsYWdzID4+IDEwICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5yZWZpbmVtZW50VGVtcGxhdGUgPSBkaWN0aW9uYXJ5RmxhZ3MgPj4gMTIgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGljdGlvbmFyeS5odWZmbWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdExlbmd0aCA9IGRpY3Rpb25hcnkudGVtcGxhdGUgPT09IDAgPyA0IDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICgwLCBfdXRpbC5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAoMCwgX3V0aWwucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5LmF0ID0gYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdGlvbmFyeS5yZWZpbmVtZW50ICYmICFkaWN0aW9uYXJ5LnJlZmluZW1lbnRUZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAoMCwgX3V0aWwucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogKDAsIF91dGlsLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiArIDEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdGlvbmFyeS5yZWZpbmVtZW50QXQgPSBhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMgPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0aW9uYXJ5Lm51bWJlck9mTmV3U3ltYm9scyA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbZGljdGlvbmFyeSwgaGVhZGVyLm51bWJlciwgaGVhZGVyLnJlZmVycmVkVG8sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0UmVnaW9uID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW4gPSAhISh0ZXh0UmVnaW9uU2VnbWVudEZsYWdzICYgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24ucmVmaW5lbWVudCA9ICEhKHRleHRSZWdpb25TZWdtZW50RmxhZ3MgJiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5sb2dTdHJpcFNpemUgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzID4+IDIgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLnN0cmlwU2l6ZSA9IDEgPDwgdGV4dFJlZ2lvbi5sb2dTdHJpcFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24ucmVmZXJlbmNlQ29ybmVyID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA0ICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi50cmFuc3Bvc2VkID0gISEodGV4dFJlZ2lvblNlZ21lbnRGbGFncyAmIDY0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gdGV4dFJlZ2lvblNlZ21lbnRGbGFncyA+PiA3ICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5kZWZhdWx0UGl4ZWxWYWx1ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gOSAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24uZHNPZmZzZXQgPSB0ZXh0UmVnaW9uU2VnbWVudEZsYWdzIDw8IDE3ID4+IDI3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLnJlZmluZW1lbnRUZW1wbGF0ZSA9IHRleHRSZWdpb25TZWdtZW50RmxhZ3MgPj4gMTUgJiAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0UmVnaW9uLmh1ZmZtYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5GUyA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRFMgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDIgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuRFQgPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDQgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudERXID0gdGV4dFJlZ2lvbkh1ZmZtYW5GbGFncyA+PiA2ICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnRESCA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gOCAmIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLmh1ZmZtYW5SZWZpbmVtZW50RFggPSB0ZXh0UmVnaW9uSHVmZm1hbkZsYWdzID4+IDEwICYgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24uaHVmZm1hblJlZmluZW1lbnREWSA9IHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgPj4gMTIgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFJlZ2lvbi5odWZmbWFuUmVmaW5lbWVudFNpemVTZWxlY3RvciA9ICEhKHRleHRSZWdpb25IdWZmbWFuRmxhZ3MgJiAweDQwMDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRSZWdpb24ucmVmaW5lbWVudCAmJiAhdGV4dFJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogKDAsIF91dGlsLnJlYWRJbnQ4KShkYXRhLCBwb3NpdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6ICgwLCBfdXRpbC5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24gKyAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSZWdpb24ucmVmaW5lbWVudEF0ID0gYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0UmVnaW9uLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFt0ZXh0UmVnaW9uLCBoZWFkZXIucmVmZXJyZWRUbywgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm5EaWN0aW9uYXJ5ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuRGljdGlvbmFyeUZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybkRpY3Rpb25hcnkubW1yID0gISEocGF0dGVybkRpY3Rpb25hcnlGbGFncyAmIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRGljdGlvbmFyeS50ZW1wbGF0ZSA9IHBhdHRlcm5EaWN0aW9uYXJ5RmxhZ3MgPj4gMSAmIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5LnBhdHRlcm5XaWR0aCA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5EaWN0aW9uYXJ5LnBhdHRlcm5IZWlnaHQgPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuRGljdGlvbmFyeS5tYXhQYXR0ZXJuSW5kZXggPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW3BhdHRlcm5EaWN0aW9uYXJ5LCBoZWFkZXIubnVtYmVyLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYWxmdG9uZVJlZ2lvbiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5pbmZvID0gcmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbkZpZWxkTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFsZnRvbmVSZWdpb25GbGFncyA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbGZ0b25lUmVnaW9uLm1tciA9ICEhKGhhbGZ0b25lUmVnaW9uRmxhZ3MgJiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24udGVtcGxhdGUgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDEgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5lbmFibGVTa2lwID0gISEoaGFsZnRvbmVSZWdpb25GbGFncyAmIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5jb21iaW5hdGlvbk9wZXJhdG9yID0gaGFsZnRvbmVSZWdpb25GbGFncyA+PiA0ICYgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24uZGVmYXVsdFBpeGVsVmFsdWUgPSBoYWxmdG9uZVJlZ2lvbkZsYWdzID4+IDcgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkV2lkdGggPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkSGVpZ2h0ID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFggPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICYgMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZE9mZnNldFkgPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pICYgMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFsZnRvbmVSZWdpb24uZ3JpZFZlY3RvclggPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYWxmdG9uZVJlZ2lvbi5ncmlkVmVjdG9yWSA9ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbaGFsZnRvbmVSZWdpb24sIGhlYWRlci5yZWZlcnJlZFRvLCBkYXRhLCBwb3NpdGlvbiwgZW5kXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZW5lcmljUmVnaW9uID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNSZWdpb24uaW5mbyA9IHJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBSZWdpb25TZWdtZW50SW5mb3JtYXRpb25GaWVsZExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljUmVnaW9uLm1tciA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY1JlZ2lvbi50ZW1wbGF0ZSA9IGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgPj4gMSAmIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyaWNSZWdpb24ucHJlZGljdGlvbiA9ICEhKGdlbmVyaWNSZWdpb25TZWdtZW50RmxhZ3MgJiA4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdlbmVyaWNSZWdpb24ubW1yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdExlbmd0aCA9IGdlbmVyaWNSZWdpb24udGVtcGxhdGUgPT09IDAgPyA0IDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhdExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6ICgwLCBfdXRpbC5yZWFkSW50OCkoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAoMCwgX3V0aWwucmVhZEludDgpKGRhdGEsIHBvc2l0aW9uICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmljUmVnaW9uLmF0ID0gYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW2dlbmVyaWNSZWdpb24sIGRhdGEsIHBvc2l0aW9uLCBlbmRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25YOiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25ZOiAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxMilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFnZUluZm8uaGVpZ2h0ID09PSAweEZGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFnZUluZm8uaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VTZWdtZW50RmxhZ3MgPSBkYXRhW3Bvc2l0aW9uICsgMTZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24gKyAxNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvLmxvc3NsZXNzID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5mby5yZWZpbmVtZW50ID0gISEocGFnZVNlZ21lbnRGbGFncyAmIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5mby5kZWZhdWx0UGl4ZWxWYWx1ZSA9IHBhZ2VTZWdtZW50RmxhZ3MgPj4gMiAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3IgPSBwYWdlU2VnbWVudEZsYWdzID4+IDMgJiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5mby5yZXF1aXJlc0J1ZmZlciA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvLmNvbWJpbmF0aW9uT3BlcmF0b3JPdmVycmlkZSA9ICEhKHBhZ2VTZWdtZW50RmxhZ3MgJiA2NCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbcGFnZUluZm9dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1MDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDUxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbaGVhZGVyLm51bWJlciwgZGF0YSwgcG9zaXRpb24sIGVuZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2MjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInNlZ21lbnQgdHlwZSBcIi5jb25jYXQoaGVhZGVyLnR5cGVOYW1lLCBcIihcIikuY29uY2F0KGhlYWRlci50eXBlLCBcIilcIikgKyAnIGlzIG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tOYW1lID0gJ29uJyArIGhlYWRlci50eXBlTmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrTmFtZSBpbiB2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvcltjYWxsYmFja05hbWVdLmFwcGx5KHZpc2l0b3IsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzZWdtZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NlZ21lbnQoc2VnbWVudHNbaV0sIHZpc2l0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VKYmlnMkNodW5rcyhjaHVua3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aXNpdG9yID0gbmV3IFNpbXBsZVNlZ21lbnRWaXNpdG9yKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNodW5rcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gY2h1bmtzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWdtZW50cyA9IHJlYWRTZWdtZW50cyh7fSwgY2h1bmsuZGF0YSwgY2h1bmsuc3RhcnQsIGNodW5rLmVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZpc2l0b3IuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VKYmlnMihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IGRhdGEubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtwb3NpdGlvbl0gIT09IDB4OTcgfHwgZGF0YVtwb3NpdGlvbiArIDFdICE9PSAweDRBIHx8IGRhdGFbcG9zaXRpb24gKyAyXSAhPT0gMHg0MiB8fCBkYXRhW3Bvc2l0aW9uICsgM10gIT09IDB4MzIgfHwgZGF0YVtwb3NpdGlvbiArIDRdICE9PSAweDBEIHx8IGRhdGFbcG9zaXRpb24gKyA1XSAhPT0gMHgwQSB8fCBkYXRhW3Bvc2l0aW9uICsgNl0gIT09IDB4MUEgfHwgZGF0YVtwb3NpdGlvbiArIDddICE9PSAweDBBKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ3BhcnNlSmJpZzIgLSBpbnZhbGlkIGhlYWRlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gZGF0YVtwb3NpdGlvbisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5yYW5kb21BY2Nlc3MgPSAhKGZsYWdzICYgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZsYWdzICYgMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIubnVtYmVyT2ZQYWdlcyA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRzID0gcmVhZFNlZ21lbnRzKGhlYWRlciwgZGF0YSwgcG9zaXRpb24sIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlzaXRvciA9IG5ldyBTaW1wbGVTZWdtZW50VmlzaXRvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc1NlZ21lbnRzKHNlZ21lbnRzLCB2aXNpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmlzaXRvciRjdXJyZW50UGFnZUkgPSB2aXNpdG9yLmN1cnJlbnRQYWdlSW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IF92aXNpdG9yJGN1cnJlbnRQYWdlSS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBfdmlzaXRvciRjdXJyZW50UGFnZUkuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdFBhY2tlZCA9IHZpc2l0b3IuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0RhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gMTI4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYml0UGFja2VkW2srK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhW3ErK10gPSBidWZmZXIgJiBtYXNrID8gMCA6IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YTogaW1nRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTaW1wbGVTZWdtZW50VmlzaXRvcigpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgU2ltcGxlU2VnbWVudFZpc2l0b3IucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgb25QYWdlSW5mb3JtYXRpb246IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uUGFnZUluZm9ybWF0aW9uKGluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5mbyA9IGluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd1NpemUgPSBpbmZvLndpZHRoICsgNyA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkocm93U2l6ZSAqIGluZm8uaGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmRlZmF1bHRQaXhlbFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJ1ZmZlci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0JpdG1hcDogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3JfZHJhd0JpdG1hcChyZWdpb25JbmZvLCBiaXRtYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZUluZm8gPSB0aGlzLmN1cnJlbnRQYWdlSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSByZWdpb25JbmZvLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSByZWdpb25JbmZvLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93U2l6ZSA9IHBhZ2VJbmZvLndpZHRoICsgNyA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21iaW5hdGlvbk9wZXJhdG9yID0gcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlID8gcmVnaW9uSW5mby5jb21iaW5hdGlvbk9wZXJhdG9yIDogcGFnZUluZm8uY29tYmluYXRpb25PcGVyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2swID0gMTI4ID4+IChyZWdpb25JbmZvLnggJiA3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0MCA9IHJlZ2lvbkluZm8ueSAqIHJvd1NpemUgKyAocmVnaW9uSW5mby54ID4+IDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqLCBtYXNrLCBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvbWJpbmF0aW9uT3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0bWFwW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSB8PSBtYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDAgKz0gcm93U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA9IG1hc2swO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYml0bWFwW2ldW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbb2Zmc2V0XSBePSBtYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSAxMjg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDAgKz0gcm93U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKFwib3BlcmF0b3IgXCIuY29uY2F0KGNvbWJpbmF0aW9uT3BlcmF0b3IsIFwiIGlzIG5vdCBzdXBwb3J0ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltbWVkaWF0ZUdlbmVyaWNSZWdpb246IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbihyZWdpb24sIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXAgPSBkZWNvZGVCaXRtYXAocmVnaW9uLm1tciwgcmVnaW9uSW5mby53aWR0aCwgcmVnaW9uSW5mby5oZWlnaHQsIHJlZ2lvbi50ZW1wbGF0ZSwgcmVnaW9uLnByZWRpY3Rpb24sIG51bGwsIHJlZ2lvbi5hdCwgZGVjb2RpbmdDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbjogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25JbW1lZGlhdGVMb3NzbGVzc0dlbmVyaWNSZWdpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvblN5bWJvbERpY3Rpb25hcnk6IGZ1bmN0aW9uIFNpbXBsZVNlZ21lbnRWaXNpdG9yX29uU3ltYm9sRGljdGlvbmFyeShkaWN0aW9uYXJ5LCBjdXJyZW50U2VnbWVudCwgcmVmZXJyZWRTZWdtZW50cywgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodWZmbWFuVGFibGVzLCBodWZmbWFuSW5wdXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdGlvbmFyeS5odWZmbWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5UYWJsZXMgPSBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFNlZ21lbnRzLCB0aGlzLmN1c3RvbVRhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1ZmZtYW5JbnB1dCA9IG5ldyBSZWFkZXIoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbHMgPSB0aGlzLnN5bWJvbHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN5bWJvbHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zeW1ib2xzID0gc3ltYm9scyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dFN5bWJvbHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHJlZmVycmVkU2VnbWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVmZXJyZWRTeW1ib2xzID0gc3ltYm9sc1tyZWZlcnJlZFNlZ21lbnRzW2ldXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJyZWRTeW1ib2xzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFN5bWJvbHMgPSBpbnB1dFN5bWJvbHMuY29uY2F0KHJlZmVycmVkU3ltYm9scyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RpbmdDb250ZXh0ID0gbmV3IERlY29kaW5nQ29udGV4dChkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xzW2N1cnJlbnRTZWdtZW50XSA9IGRlY29kZVN5bWJvbERpY3Rpb25hcnkoZGljdGlvbmFyeS5odWZmbWFuLCBkaWN0aW9uYXJ5LnJlZmluZW1lbnQsIGlucHV0U3ltYm9scywgZGljdGlvbmFyeS5udW1iZXJPZk5ld1N5bWJvbHMsIGRpY3Rpb25hcnkubnVtYmVyT2ZFeHBvcnRlZFN5bWJvbHMsIGh1ZmZtYW5UYWJsZXMsIGRpY3Rpb25hcnkudGVtcGxhdGUsIGRpY3Rpb25hcnkuYXQsIGRpY3Rpb25hcnkucmVmaW5lbWVudFRlbXBsYXRlLCBkaWN0aW9uYXJ5LnJlZmluZW1lbnRBdCwgZGVjb2RpbmdDb250ZXh0LCBodWZmbWFuSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1tZWRpYXRlVGV4dFJlZ2lvbjogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25JbW1lZGlhdGVUZXh0UmVnaW9uKHJlZ2lvbiwgcmVmZXJyZWRTZWdtZW50cywgZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWdpb25JbmZvID0gcmVnaW9uLmluZm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh1ZmZtYW5UYWJsZXMsIGh1ZmZtYW5JbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ltYm9scyA9IHRoaXMuc3ltYm9scztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXRTeW1ib2xzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByZWZlcnJlZFNlZ21lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlZmVycmVkU3ltYm9scyA9IHN5bWJvbHNbcmVmZXJyZWRTZWdtZW50c1tpXV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVycmVkU3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTeW1ib2xzID0gaW5wdXRTeW1ib2xzLmNvbmNhdChyZWZlcnJlZFN5bWJvbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbENvZGVMZW5ndGggPSAoMCwgX3V0aWwubG9nMikoaW5wdXRTeW1ib2xzLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVnaW9uLmh1ZmZtYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVmZm1hbklucHV0ID0gbmV3IFJlYWRlcihkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVmZm1hblRhYmxlcyA9IGdldFRleHRSZWdpb25IdWZmbWFuVGFibGVzKHJlZ2lvbiwgcmVmZXJyZWRTZWdtZW50cywgdGhpcy5jdXN0b21UYWJsZXMsIGlucHV0U3ltYm9scy5sZW5ndGgsIGh1ZmZtYW5JbnB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcCA9IGRlY29kZVRleHRSZWdpb24ocmVnaW9uLmh1ZmZtYW4sIHJlZ2lvbi5yZWZpbmVtZW50LCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlLCByZWdpb24ubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsIHJlZ2lvbi5zdHJpcFNpemUsIGlucHV0U3ltYm9scywgc3ltYm9sQ29kZUxlbmd0aCwgcmVnaW9uLnRyYW5zcG9zZWQsIHJlZ2lvbi5kc09mZnNldCwgcmVnaW9uLnJlZmVyZW5jZUNvcm5lciwgcmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IsIGh1ZmZtYW5UYWJsZXMsIHJlZ2lvbi5yZWZpbmVtZW50VGVtcGxhdGUsIHJlZ2lvbi5yZWZpbmVtZW50QXQsIGRlY29kaW5nQ29udGV4dCwgcmVnaW9uLmxvZ1N0cmlwU2l6ZSwgaHVmZm1hbklucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYXdCaXRtYXAocmVnaW9uSW5mbywgYml0bWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbjogZnVuY3Rpb24gU2ltcGxlU2VnbWVudFZpc2l0b3Jfb25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkltbWVkaWF0ZVRleHRSZWdpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvblBhdHRlcm5EaWN0aW9uYXJ5OiBmdW5jdGlvbiBvblBhdHRlcm5EaWN0aW9uYXJ5KGRpY3Rpb25hcnksIGN1cnJlbnRTZWdtZW50LCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm5zID0gdGhpcy5wYXR0ZXJucztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGF0dGVybnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXR0ZXJucyA9IHBhdHRlcm5zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kaW5nQ29udGV4dCA9IG5ldyBEZWNvZGluZ0NvbnRleHQoZGF0YSwgc3RhcnQsIGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybnNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlUGF0dGVybkRpY3Rpb25hcnkoZGljdGlvbmFyeS5tbXIsIGRpY3Rpb25hcnkucGF0dGVybldpZHRoLCBkaWN0aW9uYXJ5LnBhdHRlcm5IZWlnaHQsIGRpY3Rpb25hcnkubWF4UGF0dGVybkluZGV4LCBkaWN0aW9uYXJ5LnRlbXBsYXRlLCBkZWNvZGluZ0NvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb246IGZ1bmN0aW9uIG9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24ocmVnaW9uLCByZWZlcnJlZFNlZ21lbnRzLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm5zID0gdGhpcy5wYXR0ZXJuc1tyZWZlcnJlZFNlZ21lbnRzWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVnaW9uSW5mbyA9IHJlZ2lvbi5pbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGluZ0NvbnRleHQgPSBuZXcgRGVjb2RpbmdDb250ZXh0KGRhdGEsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRtYXAgPSBkZWNvZGVIYWxmdG9uZVJlZ2lvbihyZWdpb24ubW1yLCBwYXR0ZXJucywgcmVnaW9uLnRlbXBsYXRlLCByZWdpb25JbmZvLndpZHRoLCByZWdpb25JbmZvLmhlaWdodCwgcmVnaW9uLmRlZmF1bHRQaXhlbFZhbHVlLCByZWdpb24uZW5hYmxlU2tpcCwgcmVnaW9uLmNvbWJpbmF0aW9uT3BlcmF0b3IsIHJlZ2lvbi5ncmlkV2lkdGgsIHJlZ2lvbi5ncmlkSGVpZ2h0LCByZWdpb24uZ3JpZE9mZnNldFgsIHJlZ2lvbi5ncmlkT2Zmc2V0WSwgcmVnaW9uLmdyaWRWZWN0b3JYLCByZWdpb24uZ3JpZFZlY3RvclksIGRlY29kaW5nQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmF3Qml0bWFwKHJlZ2lvbkluZm8sIGJpdG1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25JbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uOiBmdW5jdGlvbiBvbkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkltbWVkaWF0ZUhhbGZ0b25lUmVnaW9uLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25UYWJsZXM6IGZ1bmN0aW9uIG9uVGFibGVzKGN1cnJlbnRTZWdtZW50LCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1c3RvbVRhYmxlcyA9IHRoaXMuY3VzdG9tVGFibGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXN0b21UYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21UYWJsZXMgPSBjdXN0b21UYWJsZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21UYWJsZXNbY3VycmVudFNlZ21lbnRdID0gZGVjb2RlVGFibGVzU2VnbWVudChkYXRhLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBIdWZmbWFuTGluZShsaW5lRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVEYXRhLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNPT0IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMb3cgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZml4TGVuZ3RoID0gbGluZURhdGFbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZUxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVmaXhDb2RlID0gbGluZURhdGFbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09PQiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMb3cgPSBsaW5lRGF0YVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeExlbmd0aCA9IGxpbmVEYXRhWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VMZW5ndGggPSBsaW5lRGF0YVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZWZpeENvZGUgPSBsaW5lRGF0YVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG93ZXJSYW5nZSA9IGxpbmVEYXRhWzRdID09PSAnbG93ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSHVmZm1hblRyZWVOb2RlKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTGVhZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZUxlbmd0aCA9IGxpbmUucmFuZ2VMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYW5nZUxvdyA9IGxpbmUucmFuZ2VMb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvd2VyUmFuZ2UgPSBsaW5lLmlzTG93ZXJSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT09CID0gbGluZS5pc09PQjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xlYWYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEh1ZmZtYW5UcmVlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRyZWU6IGZ1bmN0aW9uIGJ1aWxkVHJlZShsaW5lLCBzaGlmdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXQgPSBsaW5lLnByZWZpeENvZGUgPj4gc2hpZnQgJiAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNoaWZ0IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZHJlbltiaXRdID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY2hpbGRyZW5bYml0XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW5bYml0XSA9IG5vZGUgPSBuZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5idWlsZFRyZWUobGluZSwgc2hpZnQgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlTm9kZTogZnVuY3Rpb24gZGVjb2RlTm9kZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0xlYWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNPT0IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0T2Zmc2V0ID0gcmVhZGVyLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yYW5nZUxvdyArICh0aGlzLmlzTG93ZXJSYW5nZSA/IC1odE9mZnNldCA6IGh0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuY2hpbGRyZW5bcmVhZGVyLnJlYWRCaXQoKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgSHVmZm1hbiBkYXRhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuZGVjb2RlTm9kZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEh1ZmZtYW5UYWJsZShsaW5lcywgcHJlZml4Q29kZXNEb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZWZpeENvZGVzRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXNzaWduUHJlZml4Q29kZXMobGluZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3ROb2RlID0gbmV3IEh1ZmZtYW5UcmVlTm9kZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gbGluZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmUucHJlZml4TGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvb3ROb2RlLmJ1aWxkVHJlZShsaW5lLCBsaW5lLnByZWZpeExlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEh1ZmZtYW5UYWJsZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGU6IGZ1bmN0aW9uIGRlY29kZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduUHJlZml4Q29kZXM6IGZ1bmN0aW9uIGFzc2lnblByZWZpeENvZGVzKGxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVzTGVuZ3RoID0gbGluZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhMZW5ndGhNYXggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4TGVuZ3RoTWF4ID0gTWF0aC5tYXgocHJlZml4TGVuZ3RoTWF4LCBsaW5lc1tpXS5wcmVmaXhMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaXN0b2dyYW0gPSBuZXcgVWludDMyQXJyYXkocHJlZml4TGVuZ3RoTWF4ICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZXNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0b2dyYW1bbGluZXNbaV0ucHJlZml4TGVuZ3RoXSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TGVuZ3RoID0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2RlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZW1wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpc3RvZ3JhbVswXSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3VycmVudExlbmd0aCA8PSBwcmVmaXhMZW5ndGhNYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2RlID0gZmlyc3RDb2RlICsgaGlzdG9ncmFtW2N1cnJlbnRMZW5ndGggLSAxXSA8PCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZSA9IGZpcnN0Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFRlbXAgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50VGVtcCA8IGxpbmVzTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZXNbY3VycmVudFRlbXBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGluZS5wcmVmaXhMZW5ndGggPT09IGN1cnJlbnRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnByZWZpeENvZGUgPSBjdXJyZW50Q29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VGVtcCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExlbmd0aCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVUYWJsZXNTZWdtZW50KGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IGRhdGFbc3RhcnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvd2VzdFZhbHVlID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHN0YXJ0ICsgMSkgJiAweEZGRkZGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhpZ2hlc3RWYWx1ZSA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBzdGFydCArIDUpICYgMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgUmVhZGVyKGRhdGEsIHN0YXJ0ICsgOSwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVmaXhTaXplQml0cyA9IChmbGFncyA+PiAxICYgNykgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlU2l6ZUJpdHMgPSAoZmxhZ3MgPj4gNCAmIDcpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWZpeExlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2VMb3cgPSBsb3dlc3RWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeExlbmd0aCA9IHJlYWRlci5yZWFkQml0cyhwcmVmaXhTaXplQml0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocmFuZ2VTaXplQml0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2N1cnJlbnRSYW5nZUxvdywgcHJlZml4TGVuZ3RoLCByYW5nZUxlbmd0aCwgMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UmFuZ2VMb3cgKz0gMSA8PCByYW5nZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGN1cnJlbnRSYW5nZUxvdyA8IGhpZ2hlc3RWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeExlbmd0aCA9IHJlYWRlci5yZWFkQml0cyhwcmVmaXhTaXplQml0cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKG5ldyBIdWZmbWFuTGluZShbbG93ZXN0VmFsdWUgLSAxLCBwcmVmaXhMZW5ndGgsIDMyLCAwLCAnbG93ZXInXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4TGVuZ3RoID0gcmVhZGVyLnJlYWRCaXRzKHByZWZpeFNpemVCaXRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtoaWdoZXN0VmFsdWUsIHByZWZpeExlbmd0aCwgMzIsIDBdKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhMZW5ndGggPSByZWFkZXIucmVhZEJpdHMocHJlZml4U2l6ZUJpdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtwcmVmaXhMZW5ndGgsIDBdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSHVmZm1hblRhYmxlKGxpbmVzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3RhbmRhcmRUYWJsZXNDYWNoZSA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFN0YW5kYXJkVGFibGUobnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGUgPSBzdGFuZGFyZFRhYmxlc0NhY2hlW251bWJlcl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpbmVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWzAsIDEsIDQsIDB4MF0sIFsxNiwgMiwgOCwgMHgyXSwgWzI3MiwgMywgMTYsIDB4Nl0sIFs2NTgwOCwgMywgMzIsIDB4N11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWzAsIDEsIDAsIDB4MF0sIFsxLCAyLCAwLCAweDJdLCBbMiwgMywgMCwgMHg2XSwgWzMsIDQsIDMsIDB4RV0sIFsxMSwgNSwgNiwgMHgxRV0sIFs3NSwgNiwgMzIsIDB4M0VdLCBbNiwgMHgzRl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0yNTYsIDgsIDgsIDB4RkVdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDIsIDAsIDB4Ml0sIFsyLCAzLCAwLCAweDZdLCBbMywgNCwgMywgMHhFXSwgWzExLCA1LCA2LCAweDFFXSwgWy0yNTcsIDgsIDMyLCAweEZGLCAnbG93ZXInXSwgWzc1LCA3LCAzMiwgMHg3RV0sIFs2LCAweDNFXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhFXSwgWzEyLCA1LCA2LCAweDFFXSwgWzc2LCA1LCAzMiwgMHgxRl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0yNTUsIDcsIDgsIDB4N0VdLCBbMSwgMSwgMCwgMHgwXSwgWzIsIDIsIDAsIDB4Ml0sIFszLCAzLCAwLCAweDZdLCBbNCwgNCwgMywgMHhFXSwgWzEyLCA1LCA2LCAweDFFXSwgWy0yNTYsIDcsIDMyLCAweDdGLCAnbG93ZXInXSwgWzc2LCA2LCAzMiwgMHgzRV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0yMDQ4LCA1LCAxMCwgMHgxQ10sIFstMTAyNCwgNCwgOSwgMHg4XSwgWy01MTIsIDQsIDgsIDB4OV0sIFstMjU2LCA0LCA3LCAweEFdLCBbLTEyOCwgNSwgNiwgMHgxRF0sIFstNjQsIDUsIDUsIDB4MUVdLCBbLTMyLCA0LCA1LCAweEJdLCBbMCwgMiwgNywgMHgwXSwgWzEyOCwgMywgNywgMHgyXSwgWzI1NiwgMywgOCwgMHgzXSwgWzUxMiwgNCwgOSwgMHhDXSwgWzEwMjQsIDQsIDEwLCAweERdLCBbLTIwNDksIDYsIDMyLCAweDNFLCAnbG93ZXInXSwgWzIwNDgsIDYsIDMyLCAweDNGXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtbLTEwMjQsIDQsIDksIDB4OF0sIFstNTEyLCAzLCA4LCAweDBdLCBbLTI1NiwgNCwgNywgMHg5XSwgWy0xMjgsIDUsIDYsIDB4MUFdLCBbLTY0LCA1LCA1LCAweDFCXSwgWy0zMiwgNCwgNSwgMHhBXSwgWzAsIDQsIDUsIDB4Ql0sIFszMiwgNSwgNSwgMHgxQ10sIFs2NCwgNSwgNiwgMHgxRF0sIFsxMjgsIDQsIDcsIDB4Q10sIFsyNTYsIDMsIDgsIDB4MV0sIFs1MTIsIDMsIDksIDB4Ml0sIFsxMDI0LCAzLCAxMCwgMHgzXSwgWy0xMDI1LCA1LCAzMiwgMHgxRSwgJ2xvd2VyJ10sIFsyMDQ4LCA1LCAzMiwgMHgxRl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0xNSwgOCwgMywgMHhGQ10sIFstNywgOSwgMSwgMHgxRkNdLCBbLTUsIDgsIDEsIDB4RkRdLCBbLTMsIDksIDAsIDB4MUZEXSwgWy0yLCA3LCAwLCAweDdDXSwgWy0xLCA0LCAwLCAweEFdLCBbMCwgMiwgMSwgMHgwXSwgWzIsIDUsIDAsIDB4MUFdLCBbMywgNiwgMCwgMHgzQV0sIFs0LCAzLCA0LCAweDRdLCBbMjAsIDYsIDEsIDB4M0JdLCBbMjIsIDQsIDQsIDB4Ql0sIFszOCwgNCwgNSwgMHhDXSwgWzcwLCA1LCA2LCAweDFCXSwgWzEzNCwgNSwgNywgMHgxQ10sIFsyNjIsIDYsIDcsIDB4M0NdLCBbMzkwLCA3LCA4LCAweDdEXSwgWzY0NiwgNiwgMTAsIDB4M0RdLCBbLTE2LCA5LCAzMiwgMHgxRkUsICdsb3dlciddLCBbMTY3MCwgOSwgMzIsIDB4MUZGXSwgWzIsIDB4MV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0zMSwgOCwgNCwgMHhGQ10sIFstMTUsIDksIDIsIDB4MUZDXSwgWy0xMSwgOCwgMiwgMHhGRF0sIFstNywgOSwgMSwgMHgxRkRdLCBbLTUsIDcsIDEsIDB4N0NdLCBbLTMsIDQsIDEsIDB4QV0sIFstMSwgMywgMSwgMHgyXSwgWzEsIDMsIDEsIDB4M10sIFszLCA1LCAxLCAweDFBXSwgWzUsIDYsIDEsIDB4M0FdLCBbNywgMywgNSwgMHg0XSwgWzM5LCA2LCAyLCAweDNCXSwgWzQzLCA0LCA1LCAweEJdLCBbNzUsIDQsIDYsIDB4Q10sIFsxMzksIDUsIDcsIDB4MUJdLCBbMjY3LCA1LCA4LCAweDFDXSwgWzUyMywgNiwgOCwgMHgzQ10sIFs3NzksIDcsIDksIDB4N0RdLCBbMTI5MSwgNiwgMTEsIDB4M0RdLCBbLTMyLCA5LCAzMiwgMHgxRkUsICdsb3dlciddLCBbMzMzOSwgOSwgMzIsIDB4MUZGXSwgWzIsIDB4MF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW1stMjEsIDcsIDQsIDB4N0FdLCBbLTUsIDgsIDAsIDB4RkNdLCBbLTQsIDcsIDAsIDB4N0JdLCBbLTMsIDUsIDAsIDB4MThdLCBbLTIsIDIsIDIsIDB4MF0sIFsyLCA1LCAwLCAweDE5XSwgWzMsIDYsIDAsIDB4MzZdLCBbNCwgNywgMCwgMHg3Q10sIFs1LCA4LCAwLCAweEZEXSwgWzYsIDIsIDYsIDB4MV0sIFs3MCwgNSwgNSwgMHgxQV0sIFsxMDIsIDYsIDUsIDB4MzddLCBbMTM0LCA2LCA2LCAweDM4XSwgWzE5OCwgNiwgNywgMHgzOV0sIFszMjYsIDYsIDgsIDB4M0FdLCBbNTgyLCA2LCA5LCAweDNCXSwgWzEwOTQsIDYsIDEwLCAweDNDXSwgWzIxMTgsIDcsIDExLCAweDdEXSwgWy0yMiwgOCwgMzIsIDB4RkUsICdsb3dlciddLCBbNDE2NiwgOCwgMzIsIDB4RkZdLCBbMiwgMHgyXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWzEsIDEsIDAsIDB4MF0sIFsyLCAyLCAxLCAweDJdLCBbNCwgNCwgMCwgMHhDXSwgWzUsIDQsIDEsIDB4RF0sIFs3LCA1LCAxLCAweDFDXSwgWzksIDUsIDIsIDB4MURdLCBbMTMsIDYsIDIsIDB4M0NdLCBbMTcsIDcsIDIsIDB4N0FdLCBbMjEsIDcsIDMsIDB4N0JdLCBbMjksIDcsIDQsIDB4N0NdLCBbNDUsIDcsIDUsIDB4N0RdLCBbNzcsIDcsIDYsIDB4N0VdLCBbMTQxLCA3LCAzMiwgMHg3Rl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzID0gW1sxLCAxLCAwLCAweDBdLCBbMiwgMiwgMCwgMHgyXSwgWzMsIDMsIDEsIDB4Nl0sIFs1LCA1LCAwLCAweDFDXSwgWzYsIDUsIDEsIDB4MURdLCBbOCwgNiwgMSwgMHgzQ10sIFsxMCwgNywgMCwgMHg3QV0sIFsxMSwgNywgMSwgMHg3Ql0sIFsxMywgNywgMiwgMHg3Q10sIFsxNywgNywgMywgMHg3RF0sIFsyNSwgNywgNCwgMHg3RV0sIFs0MSwgOCwgNSwgMHhGRV0sIFs3MywgOCwgMzIsIDB4RkZdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtbMSwgMSwgMCwgMHgwXSwgWzIsIDMsIDAsIDB4NF0sIFszLCA0LCAwLCAweENdLCBbNCwgNSwgMCwgMHgxQ10sIFs1LCA0LCAxLCAweERdLCBbNywgMywgMywgMHg1XSwgWzE1LCA2LCAxLCAweDNBXSwgWzE3LCA2LCAyLCAweDNCXSwgWzIxLCA2LCAzLCAweDNDXSwgWzI5LCA2LCA0LCAweDNEXSwgWzQ1LCA2LCA1LCAweDNFXSwgWzc3LCA3LCA2LCAweDdFXSwgWzE0MSwgNywgMzIsIDB4N0ZdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcyA9IFtbLTIsIDMsIDAsIDB4NF0sIFstMSwgMywgMCwgMHg1XSwgWzAsIDEsIDAsIDB4MF0sIFsxLCAzLCAwLCAweDZdLCBbMiwgMywgMCwgMHg3XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBbWy0yNCwgNywgNCwgMHg3Q10sIFstOCwgNiwgMiwgMHgzQ10sIFstNCwgNSwgMSwgMHgxQ10sIFstMiwgNCwgMCwgMHhDXSwgWy0xLCAzLCAwLCAweDRdLCBbMCwgMSwgMCwgMHgwXSwgWzEsIDMsIDAsIDB4NV0sIFsyLCA0LCAwLCAweERdLCBbMywgNSwgMSwgMHgxRF0sIFs1LCA2LCAyLCAweDNEXSwgWzksIDcsIDQsIDB4N0RdLCBbLTI1LCA3LCAzMiwgMHg3RSwgJ2xvd2VyJ10sIFsyNSwgNywgMzIsIDB4N0ZdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcihcInN0YW5kYXJkIHRhYmxlIEIuXCIuY29uY2F0KG51bWJlciwgXCIgZG9lcyBub3QgZXhpc3RcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gbGluZXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzW2ldID0gbmV3IEh1ZmZtYW5MaW5lKGxpbmVzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgPSBuZXcgSHVmZm1hblRhYmxlKGxpbmVzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJkVGFibGVzQ2FjaGVbbnVtYmVyXSA9IHRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGVyKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJ5dGUgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCaXQ6IGZ1bmN0aW9uIHJlYWRCaXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2hpZnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID49IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEJ5dGUgPSB0aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdCA9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdCA9IHRoaXMuY3VycmVudEJ5dGUgPj4gdGhpcy5zaGlmdCAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaGlmdC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEJpdHM6IGZ1bmN0aW9uIHJlYWRCaXRzKG51bUJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IG51bUJpdHMgLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0gdGhpcy5yZWFkQml0KCkgPDwgaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVBbGlnbjogZnVuY3Rpb24gYnl0ZUFsaWduKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpZnQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBvc2l0aW9uID49IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSByZWZlcnJlZFRvLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IGN1c3RvbVRhYmxlc1tyZWZlcnJlZFRvW2ldXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IGN1cnJlbnRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignY2FuXFwndCBmaW5kIGN1c3RvbSBIdWZmbWFuIHRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRUZXh0UmVnaW9uSHVmZm1hblRhYmxlcyh0ZXh0UmVnaW9uLCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMsIG51bWJlck9mU3ltYm9scywgcmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gMzQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVMZW5ndGggPSByZWFkZXIucmVhZEJpdHMoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMucHVzaChuZXcgSHVmZm1hbkxpbmUoW2ksIGNvZGVMZW5ndGgsIDAsIDBdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydW5Db2Rlc1RhYmxlID0gbmV3IEh1ZmZtYW5UYWJsZShjb2RlcywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMubGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bWJlck9mU3ltYm9sczspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlTGVuZ3RoID0gcnVuQ29kZXNUYWJsZS5kZWNvZGUocmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlTGVuZ3RoID49IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBlYXRlZExlbmd0aCA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlck9mUmVwZWF0cyA9IHZvaWQgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2RlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDMyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdubyBwcmV2aW91cyB2YWx1ZSBpbiBzeW1ib2wgSUQgdGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoMikgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gY29kZXNbaSAtIDFdLnByZWZpeExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoMykgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdGVkTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJPZlJlcGVhdHMgPSByZWFkZXIucmVhZEJpdHMoNykgKyAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXRlZExlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgY29kZSBsZW5ndGggaW4gc3ltYm9sIElEIHRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtYmVyT2ZSZXBlYXRzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLCByZXBlYXRlZExlbmd0aCwgMCwgMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtpLCBjb2RlTGVuZ3RoLCAwLCAwXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuYnl0ZUFsaWduKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ltYm9sSURUYWJsZSA9IG5ldyBIdWZmbWFuVGFibGUoY29kZXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21JbmRleCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVGaXJzdFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEZWx0YVMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEZWx0YVQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGV4dFJlZ2lvbi5odWZmbWFuRlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUZpcnN0UyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRlMgKyA2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRmlyc3RTID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdpbnZhbGlkIEh1ZmZtYW4gRlMgc2VsZWN0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0UmVnaW9uLmh1ZmZtYW5EUykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhUyA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFMgKyA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFTID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21JbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKYmlnMkVycm9yKCdpbnZhbGlkIEh1ZmZtYW4gRFMgc2VsZWN0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0ZXh0UmVnaW9uLmh1ZmZtYW5EVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhVCA9IGdldFN0YW5kYXJkVGFibGUodGV4dFJlZ2lvbi5odWZmbWFuRFQgKyAxMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhVCA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0UmVnaW9uLnJlZmluZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcigncmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbElEVGFibGU6IHN5bWJvbElEVGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVGaXJzdFM6IHRhYmxlRmlyc3RTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFTOiB0YWJsZURlbHRhUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhVDogdGFibGVEZWx0YVRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhkaWN0aW9uYXJ5LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21JbmRleCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEZWx0YUhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhV2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGljdGlvbmFyeS5odWZmbWFuREhTZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRIU2VsZWN0b3IgKyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFIZWlnaHQgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbUluZGV4Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpiaWcyRXJyb3IoJ2ludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhV2lkdGggPSBnZXRTdGFuZGFyZFRhYmxlKGRpY3Rpb25hcnkuaHVmZm1hbkRXU2VsZWN0b3IgKyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGVsdGFXaWR0aCA9IGdldEN1c3RvbUh1ZmZtYW5UYWJsZShjdXN0b21JbmRleCwgcmVmZXJyZWRUbywgY3VzdG9tVGFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSmJpZzJFcnJvcignaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZUJpdG1hcFNpemUsIHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdGlvbmFyeS5iaXRtYXBTaXplU2VsZWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUJpdG1hcFNpemUgPSBnZXRDdXN0b21IdWZmbWFuVGFibGUoY3VzdG9tSW5kZXgsIHJlZmVycmVkVG8sIGN1c3RvbVRhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tSW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVCaXRtYXBTaXplID0gZ2V0U3RhbmRhcmRUYWJsZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnkuYWdncmVnYXRpb25JbnN0YW5jZXNTZWxlY3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzID0gZ2V0Q3VzdG9tSHVmZm1hblRhYmxlKGN1c3RvbUluZGV4LCByZWZlcnJlZFRvLCBjdXN0b21UYWJsZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlcyA9IGdldFN0YW5kYXJkVGFibGUoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVEZWx0YUhlaWdodDogdGFibGVEZWx0YUhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURlbHRhV2lkdGg6IHRhYmxlRGVsdGFXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUJpdG1hcFNpemU6IHRhYmxlQml0bWFwU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlczogdGFibGVBZ2dyZWdhdGVJbnN0YW5jZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVW5jb21wcmVzc2VkQml0bWFwKHJlYWRlciwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAucHVzaChyb3cpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W3hdID0gcmVhZGVyLnJlYWRCaXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuYnl0ZUFsaWduKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVNTVJCaXRtYXAoaW5wdXQsIHdpZHRoLCBoZWlnaHQsIGVuZE9mQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSzogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sdW1uczogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUm93czogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsYWNrSXMxOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVuZE9mQmxvY2s6IGVuZE9mQmxvY2tcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlciA9IG5ldyBfY2NpdHQuQ0NJVFRGYXhEZWNvZGVyKGlucHV0LCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdG1hcCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJ5dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdyA9IG5ldyBVaW50OEFycmF5KHdpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAucHVzaChyb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0ID0gLTE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hpZnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Qnl0ZSA9IGRlY29kZXIucmVhZE5leHRDaGFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Qnl0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Qnl0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9mID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W3hdID0gY3VycmVudEJ5dGUgPj4gc2hpZnQgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9mQmxvY2sgJiYgIWVvZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rRm9yRU9GTGltaXQgPSA1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsb29rRm9yRU9GTGltaXQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2Rlci5yZWFkTmV4dENoYXIoKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0bWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSmJpZzJJbWFnZSgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgSmJpZzJJbWFnZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNodW5rczogZnVuY3Rpb24gcGFyc2VDaHVua3MoY2h1bmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSmJpZzJDaHVua3MoY2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24gcGFyc2UoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcGFyc2VKYmlnID0gcGFyc2VKYmlnMihkYXRhKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YSA9IF9wYXJzZUpiaWcuaW1nRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBfcGFyc2VKYmlnLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBfcGFyc2VKYmlnLmhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1nRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpiaWcySW1hZ2U7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5KYmlnMkltYWdlID0gSmJpZzJJbWFnZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTYyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bcml0aG1ldGljRGVjb2RlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFFlVGFibGUgPSBbe1xuICAgICAgICAgICAgICAgICAgICBxZTogMHg1NjAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAxXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgzNDAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAyLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiA2LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgxODAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAzLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiA5LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwQUMxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiA0LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxMixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDUyMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogNSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDAyMjEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDM4LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAzMyxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4NTYwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogNyxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogNixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMVxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4NTQwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogOCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTQsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDQ4MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDksXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE0LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgzODAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTQsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDMwMDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDExLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxNyxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MjQwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMTIsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE4LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgxQzAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxMyxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjAsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDE2MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDI5LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyMSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4NTYwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMTUsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE0LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAxXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHg1NDAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxNixcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTQsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDUxMDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDE3LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4NDgwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMTgsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE2LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgzODAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAxOSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTcsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDM0MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDIwLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAxOCxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MzAwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMjEsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDE5LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgyODAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAyMixcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMTksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDI0MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDIzLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MjIwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMjQsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDIxLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgxQzAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAyNSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjIsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDE4MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDI2LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyMyxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MTYwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMjcsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDI0LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgxNDAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAyOCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjUsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDEyMDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDI5LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyNixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MTEwMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMzAsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDI3LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwQUMxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAzMSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMjgsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDA5QzEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDMyLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAyOSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDhBMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMzMsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDMwLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwNTIxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAzNCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMzEsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDA0NDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDM1LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAzMixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDJBMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMzYsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDMzLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwMjIxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiAzNyxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMzQsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDAxNDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDM4LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAzNSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDExMSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogMzksXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDM2LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwMDg1LFxuICAgICAgICAgICAgICAgICAgICBubXBzOiA0MCxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogMzcsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDAwNDksXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDQxLFxuICAgICAgICAgICAgICAgICAgICBubHBzOiAzOCxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDAyNSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogNDIsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDM5LFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwMDE1LFxuICAgICAgICAgICAgICAgICAgICBubXBzOiA0MyxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogNDAsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDAwMDksXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDQ0LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiA0MSxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgcWU6IDB4MDAwNSxcbiAgICAgICAgICAgICAgICAgICAgbm1wczogNDUsXG4gICAgICAgICAgICAgICAgICAgIG5scHM6IDQyLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hGbGFnOiAwXG4gICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICBxZTogMHgwMDAxLFxuICAgICAgICAgICAgICAgICAgICBubXBzOiA0NSxcbiAgICAgICAgICAgICAgICAgICAgbmxwczogNDMsXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaEZsYWc6IDBcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIHFlOiAweDU2MDEsXG4gICAgICAgICAgICAgICAgICAgIG5tcHM6IDQ2LFxuICAgICAgICAgICAgICAgICAgICBubHBzOiA0NixcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoRmxhZzogMFxuICAgICAgICAgICAgICAgIH1dO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFyaXRobWV0aWNEZWNvZGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBcml0aG1ldGljRGVjb2RlcihkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFyaXRobWV0aWNEZWNvZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icCA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUVuZCA9IGVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWdoID0gZGF0YVtzdGFydF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG93ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ5dGVJbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpZ2ggPSB0aGlzLmNoaWdoIDw8IDcgJiAweEZGRkYgfCB0aGlzLmNsb3cgPj4gOSAmIDB4N0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG93ID0gdGhpcy5jbG93IDw8IDcgJiAweEZGRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdCAtPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IDB4ODAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFyaXRobWV0aWNEZWNvZGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJieXRlSW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYnl0ZUluKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJwID0gdGhpcy5icDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVticF0gPT09IDB4RkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2JwICsgMV0gPiAweDhGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG93ICs9IDB4RkYwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0ID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnArKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3cgKz0gZGF0YVticF0gPDwgOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0ID0gNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwID0gYnA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG93ICs9IGJwIDwgdGhpcy5kYXRhRW5kID8gZGF0YVticF0gPDwgOCA6IDB4RkYwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3QgPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icCA9IGJwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xvdyA+IDB4RkZGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlnaCArPSB0aGlzLmNsb3cgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3cgJj0gMHhGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZWFkQml0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlYWRCaXQoY29udGV4dHMsIHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3hfaW5kZXggPSBjb250ZXh0c1twb3NdID4+IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjeF9tcHMgPSBjb250ZXh0c1twb3NdICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFlVGFibGVJY3ggPSBRZVRhYmxlW2N4X2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFlSWN4ID0gcWVUYWJsZUljeC5xZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdGhpcy5hIC0gcWVJY3g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpZ2ggPCBxZUljeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPCBxZUljeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBxZUljeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY3hfbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4X2luZGV4ID0gcWVUYWJsZUljeC5ubXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gcWVJY3g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IDEgXiBjeF9tcHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocWVUYWJsZUljeC5zd2l0Y2hGbGFnID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4X21wcyA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5scHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWdoIC09IHFlSWN4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGEgJiAweDgwMDApICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hID0gYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3hfbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA8IHFlSWN4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IDEgXiBjeF9tcHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocWVUYWJsZUljeC5zd2l0Y2hGbGFnID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN4X21wcyA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5scHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBjeF9tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3hfaW5kZXggPSBxZVRhYmxlSWN4Lm5tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnl0ZUluKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPDw9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWdoID0gdGhpcy5jaGlnaCA8PCAxICYgMHhGRkZGIHwgdGhpcy5jbG93ID4+IDE1ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvdyA9IHRoaXMuY2xvdyA8PCAxICYgMHhGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgoYSAmIDB4ODAwMCkgPT09IDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRzW3Bvc10gPSBjeF9pbmRleCA8PCAxIHwgY3hfbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcml0aG1ldGljRGVjb2RlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bcml0aG1ldGljRGVjb2RlciA9IEFyaXRobWV0aWNEZWNvZGVyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNjMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkpwZWdTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2pwZyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY0KTtcblxuICAgICAgICAgICAgICAgIHZhciBKcGVnU3RyZWFtID0gZnVuY3Rpb24gSnBlZ1N0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEpwZWdTdHJlYW0oc3RyZWFtLCBtYXliZUxlbmd0aCwgZGljdCwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0uZ2V0Qnl0ZSgpKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09IDB4RkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXAoLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXliZUxlbmd0aCA9IG1heWJlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWN0ID0gZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBfc3RyZWFtLkRlY29kZVN0cmVhbS5jYWxsKHRoaXMsIG1heWJlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEpwZWdTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShfc3RyZWFtLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSnBlZ1N0cmVhbS5wcm90b3R5cGUsICdieXRlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gSnBlZ1N0cmVhbV9ieXRlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2J5dGVzJywgdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBKcGVnU3RyZWFtLnByb3RvdHlwZS5lbnN1cmVCdWZmZXIgPSBmdW5jdGlvbiAocmVxdWVzdGVkKSB7fTtcblxuICAgICAgICAgICAgICAgICAgICBKcGVnU3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcGVnT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVUcmFuc2Zvcm06IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclRyYW5zZm9ybTogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZUFyciA9IHRoaXMuZGljdC5nZXRBcnJheSgnRGVjb2RlJywgJ0QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9yY2VSR0IgJiYgQXJyYXkuaXNBcnJheShkZWNvZGVBcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNQZXJDb21wb25lbnQgPSB0aGlzLmRpY3QuZ2V0KCdCaXRzUGVyQ29tcG9uZW50JykgfHwgODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlQXJyTGVuZ3RoID0gZGVjb2RlQXJyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEludDMyQXJyYXkoZGVjb2RlQXJyTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtTmVlZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heFZhbHVlID0gKDEgPDwgYml0c1BlckNvbXBvbmVudCkgLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWNvZGVBcnJMZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1baV0gPSAoZGVjb2RlQXJyW2kgKyAxXSAtIGRlY29kZUFycltpXSkgKiAyNTYgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1baSArIDFdID0gZGVjb2RlQXJyW2ldICogbWF4VmFsdWUgfCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1baV0gIT09IDI1NiB8fCB0cmFuc2Zvcm1baSArIDFdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1OZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybU5lZWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnT3B0aW9ucy5kZWNvZGVUcmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkodGhpcy5wYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yVHJhbnNmb3JtID0gdGhpcy5wYXJhbXMuZ2V0KCdDb2xvclRyYW5zZm9ybScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIoY29sb3JUcmFuc2Zvcm0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdPcHRpb25zLmNvbG9yVHJhbnNmb3JtID0gY29sb3JUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIganBlZ0ltYWdlID0gbmV3IF9qcGcuSnBlZ0ltYWdlKGpwZWdPcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ganBlZ0ltYWdlLmdldERhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLmRyYXdXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMuZHJhd0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJHQjogdGhpcy5mb3JjZVJHQixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NvdXJjZVBERjogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb2YgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIEpwZWdTdHJlYW0ucHJvdG90eXBlLmdldElSID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlRGF0YVNjaGVtYSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLmNyZWF0ZU9iamVjdFVSTCkodGhpcy5ieXRlcywgJ2ltYWdlL2pwZWcnLCBmb3JjZURhdGFTY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKcGVnU3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSnBlZ1N0cmVhbSA9IEpwZWdTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSnBlZ0ltYWdlID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgSnBlZ0Vycm9yID0gZnVuY3Rpb24gSnBlZ0Vycm9yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSnBlZ0Vycm9yKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gJ0pQRUcgZXJyb3I6ICcgKyBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBKcGVnRXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIEpwZWdFcnJvci5wcm90b3R5cGUubmFtZSA9ICdKcGVnRXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBKcGVnRXJyb3IuY29uc3RydWN0b3IgPSBKcGVnRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKcGVnRXJyb3I7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEROTE1hcmtlckVycm9yID0gZnVuY3Rpb24gRE5MTWFya2VyRXJyb3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBETkxNYXJrZXJFcnJvcihtZXNzYWdlLCBzY2FuTGluZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNjYW5MaW5lcyA9IHNjYW5MaW5lcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEROTE1hcmtlckVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBETkxNYXJrZXJFcnJvci5wcm90b3R5cGUubmFtZSA9ICdETkxNYXJrZXJFcnJvcic7XG4gICAgICAgICAgICAgICAgICAgIEROTE1hcmtlckVycm9yLmNvbnN0cnVjdG9yID0gRE5MTWFya2VyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBETkxNYXJrZXJFcnJvcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRU9JTWFya2VyRXJyb3IgPSBmdW5jdGlvbiBFT0lNYXJrZXJFcnJvckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEVPSU1hcmtlckVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBFT0lNYXJrZXJFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgRU9JTWFya2VyRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnRU9JTWFya2VyRXJyb3InO1xuICAgICAgICAgICAgICAgICAgICBFT0lNYXJrZXJFcnJvci5jb25zdHJ1Y3RvciA9IEVPSU1hcmtlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU9JTWFya2VyRXJyb3I7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEpwZWdJbWFnZSA9IGZ1bmN0aW9uIEpwZWdJbWFnZUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RaaWdaYWcgPSBuZXcgVWludDhBcnJheShbMCwgMSwgOCwgMTYsIDksIDIsIDMsIDEwLCAxNywgMjQsIDMyLCAyNSwgMTgsIDExLCA0LCA1LCAxMiwgMTksIDI2LCAzMywgNDAsIDQ4LCA0MSwgMzQsIDI3LCAyMCwgMTMsIDYsIDcsIDE0LCAyMSwgMjgsIDM1LCA0MiwgNDksIDU2LCA1NywgNTAsIDQzLCAzNiwgMjksIDIyLCAxNSwgMjMsIDMwLCAzNywgNDQsIDUxLCA1OCwgNTksIDUyLCA0NSwgMzgsIDMxLCAzOSwgNDYsIDUzLCA2MCwgNjEsIDU0LCA0NywgNTUsIDYyLCA2M10pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGN0Q29zMSA9IDQwMTc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RTaW4xID0gNzk5O1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGN0Q29zMyA9IDM0MDY7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RTaW4zID0gMjI3NjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRjdENvczYgPSAxNTY3O1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGN0U2luNiA9IDM3ODQ7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RTcXJ0MiA9IDU3OTM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkY3RTcXJ0MWQyID0gMjg5NjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBKcGVnSW1hZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRkZWNvZGVUcmFuc2Zvcm0gPSBfcmVmLmRlY29kZVRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVUcmFuc2Zvcm0gPSBfcmVmJGRlY29kZVRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkZGVjb2RlVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkY29sb3JUcmFuc2Zvcm0gPSBfcmVmLmNvbG9yVHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yVHJhbnNmb3JtID0gX3JlZiRjb2xvclRyYW5zZm9ybSA9PT0gdm9pZCAwID8gLTEgOiBfcmVmJGNvbG9yVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWNvZGVUcmFuc2Zvcm0gPSBkZWNvZGVUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb2xvclRyYW5zZm9ybSA9IGNvbG9yVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMsIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMTY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW5ndGggPiAwICYmICFjb2RlTGVuZ3Roc1tsZW5ndGggLSAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IGNvZGVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvZGVMZW5ndGhzW2ldOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGNvZGUucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuY2hpbGRyZW5bcC5pbmRleF0gPSB2YWx1ZXNba107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAuaW5kZXggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gY29kZS5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAuaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5wdXNoKHApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb2RlLmxlbmd0aCA8PSBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLnB1c2gocSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHEuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gcTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSArIDEgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5wdXNoKHEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5jaGlsZHJlbltwLmluZGV4XSA9IHEuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVbMF0uY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRCbG9ja0J1ZmZlck9mZnNldChjb21wb25lbnQsIHJvdywgY29sKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gNjQgKiAoKGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lICsgMSkgKiByb3cgKyBjb2wpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlU2NhbihkYXRhLCBvZmZzZXQsIGZyYW1lLCBjb21wb25lbnRzLCByZXNldEludGVydmFsLCBzcGVjdHJhbFN0YXJ0LCBzcGVjdHJhbEVuZCwgc3VjY2Vzc2l2ZVByZXYsIHN1Y2Nlc3NpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZUROTE1hcmtlciA9IGFyZ3VtZW50cy5sZW5ndGggPiA5ICYmIGFyZ3VtZW50c1s5XSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzldIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWN1c1BlckxpbmUgPSBmcmFtZS5tY3VzUGVyTGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmVzc2l2ZSA9IGZyYW1lLnByb2dyZXNzaXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEYXRhID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkQml0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzQ291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNDb3VudC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0c0RhdGEgPj4gYml0c0NvdW50ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzRGF0YSA9IGRhdGFbb2Zmc2V0KytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpdHNEYXRhID09PSAweEZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0Qnl0ZSA9IGRhdGFbb2Zmc2V0KytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0Qnl0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHRCeXRlID09PSAweERDICYmIHBhcnNlRE5MTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYW5MaW5lcyA9IGRhdGFbb2Zmc2V0KytdIDw8IDggfCBkYXRhW29mZnNldCsrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2FuTGluZXMgPiAwICYmIHNjYW5MaW5lcyAhPT0gZnJhbWUuc2NhbkxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBETkxNYXJrZXJFcnJvcignRm91bmQgRE5MIG1hcmtlciAoMHhGRkRDKSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YScsIHNjYW5MaW5lcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuZXh0Qnl0ZSA9PT0gMHhEOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFT0lNYXJrZXJFcnJvcignRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKFwidW5leHBlY3RlZCBtYXJrZXIgXCIuY29uY2F0KChiaXRzRGF0YSA8PCA4IHwgbmV4dEJ5dGUpLnRvU3RyaW5nKDE2KSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0NvdW50ID0gNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0c0RhdGEgPj4+IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZUh1ZmZtYW4odHJlZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gdHJlZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlW3JlYWRCaXQoKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBub2RlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3R5cGVvZihub2RlKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoJ2ludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWNlaXZlKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuIDw8IDEgfCByZWFkQml0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWNlaXZlQW5kRXh0ZW5kKGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRCaXQoKSA9PT0gMSA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHJlY2VpdmUobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID49IDEgPDwgbGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiArICgtMSA8PCBsZW5ndGgpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoY29tcG9uZW50LCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IHQgPT09IDAgPyAwIDogcmVjZWl2ZUFuZEV4dGVuZCh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldF0gPSBjb21wb25lbnQucHJlZCArPSBkaWZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChrIDwgNjQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcyA9IHJzICYgMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gcnMgPj4gNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAxNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB6ID0gZGN0WmlnWmFnW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldCArIHpdID0gcmVjZWl2ZUFuZEV4dGVuZChzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlRENGaXJzdChjb21wb25lbnQsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlREMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWZmID0gdCA9PT0gMCA/IDAgOiByZWNlaXZlQW5kRXh0ZW5kKHQpIDw8IHN1Y2Nlc3NpdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRdID0gY29tcG9uZW50LnByZWQgKz0gZGlmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlRENTdWNjZXNzaXZlKGNvbXBvbmVudCwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRdIHw9IHJlYWRCaXQoKSA8PCBzdWNjZXNzaXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW9icnVuID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQUNGaXJzdChjb21wb25lbnQsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlb2JydW4gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvYnJ1bi0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBzcGVjdHJhbFN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gc3BlY3RyYWxFbmQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoayA8PSBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBycyA9IGRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBycyAmIDE1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IHJzID4+IDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyIDwgMTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlb2JydW4gPSByZWNlaXZlKHIpICsgKDEgPDwgcikgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB6ID0gZGN0WmlnWmFnW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldCArIHpdID0gcmVjZWl2ZUFuZEV4dGVuZChzKSAqICgxIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQUNTdWNjZXNzaXZlKGNvbXBvbmVudCwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBzcGVjdHJhbFN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gc3BlY3RyYWxFbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBycztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChrIDw9IGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFogPSBvZmZzZXQgKyBkY3RaaWdaYWdba107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWduID0gY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSA8IDAgPyAtMSA6IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdWNjZXNzaXZlQUNTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzID0gZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBycyAmIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBycyA+PiA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPCAxNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9icnVuID0gcmVjZWl2ZShyKSArICgxIDw8IHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc2l2ZUFDU3RhdGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoJ2ludmFsaWQgQUNuIGVuY29kaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNOZXh0VmFsdWUgPSByZWNlaXZlQW5kRXh0ZW5kKHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHIgPyAyIDogMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gKz0gc2lnbiAqIChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0tO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IHN1Y2Nlc3NpdmVBQ1N0YXRlID09PSAyID8gMyA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5ibG9ja0RhdGFbb2Zmc2V0Wl0gKz0gc2lnbiAqIChyZWFkQml0KCkgPDwgc3VjY2Vzc2l2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSA9IHN1Y2Nlc3NpdmVBQ05leHRWYWx1ZSA8PCBzdWNjZXNzaXZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50LmJsb2NrRGF0YVtvZmZzZXRaXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhW29mZnNldFpdICs9IHNpZ24gKiAocmVhZEJpdCgpIDw8IHN1Y2Nlc3NpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzaXZlQUNTdGF0ZSA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlb2JydW4tLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW9icnVuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzaXZlQUNTdGF0ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZU1jdShjb21wb25lbnQsIGRlY29kZSwgbWN1LCByb3csIGNvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtY3VSb3cgPSBtY3UgLyBtY3VzUGVyTGluZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1jdUNvbCA9IG1jdSAlIG1jdXNQZXJMaW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja1JvdyA9IG1jdVJvdyAqIGNvbXBvbmVudC52ICsgcm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja0NvbCA9IG1jdUNvbCAqIGNvbXBvbmVudC5oICsgY29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBnZXRCbG9ja0J1ZmZlck9mZnNldChjb21wb25lbnQsIGJsb2NrUm93LCBibG9ja0NvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlKGNvbXBvbmVudCwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlQmxvY2soY29tcG9uZW50LCBkZWNvZGUsIG1jdSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja1JvdyA9IG1jdSAvIGNvbXBvbmVudC5ibG9ja3NQZXJMaW5lIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tDb2wgPSBtY3UgJSBjb21wb25lbnQuYmxvY2tzUGVyTGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0QmxvY2tCdWZmZXJPZmZzZXQoY29tcG9uZW50LCBibG9ja1JvdywgYmxvY2tDb2wpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZShjb21wb25lbnQsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzTGVuZ3RoID0gY29tcG9uZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50LCBpLCBqLCBrLCBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZUZuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3NpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BlY3RyYWxTdGFydCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVGbiA9IHN1Y2Nlc3NpdmVQcmV2ID09PSAwID8gZGVjb2RlRENGaXJzdCA6IGRlY29kZURDU3VjY2Vzc2l2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVGbiA9IHN1Y2Nlc3NpdmVQcmV2ID09PSAwID8gZGVjb2RlQUNGaXJzdCA6IGRlY29kZUFDU3VjY2Vzc2l2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZUZuID0gZGVjb2RlQmFzZWxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtY3UgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVNYXJrZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWN1RXhwZWN0ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzTGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWN1RXhwZWN0ZWQgPSBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckxpbmUgKiBjb21wb25lbnRzWzBdLmJsb2Nrc1BlckNvbHVtbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWN1RXhwZWN0ZWQgPSBtY3VzUGVyTGluZSAqIGZyYW1lLm1jdXNQZXJDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoLCB2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobWN1IDwgbWN1RXhwZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWN1VG9SZWFkID0gcmVzZXRJbnRlcnZhbCA/IE1hdGgubWluKG1jdUV4cGVjdGVkIC0gbWN1LCByZXNldEludGVydmFsKSA6IG1jdUV4cGVjdGVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbXBvbmVudHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW2ldLnByZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVvYnJ1biA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50c0xlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBtY3VUb1JlYWQ7IG4rKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlQmxvY2soY29tcG9uZW50LCBkZWNvZGVGbiwgbWN1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1jdSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IG1jdVRvUmVhZDsgbisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29tcG9uZW50c0xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gY29tcG9uZW50Lmg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IGNvbXBvbmVudC52O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHY7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgaDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVNY3UoY29tcG9uZW50LCBkZWNvZGVGbiwgbWN1LCBqLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWN1Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVNYXJrZXIgPSBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgb2Zmc2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTWFya2VyICYmIGZpbGVNYXJrZXIuaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ2RlY29kZVNjYW4gLSB1bmV4cGVjdGVkIE1DVSBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogJyArIGZpbGVNYXJrZXIuaW52YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXJrZXIgPSBmaWxlTWFya2VyICYmIGZpbGVNYXJrZXIubWFya2VyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXJrZXIgfHwgbWFya2VyIDw9IDB4RkYwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCdtYXJrZXIgd2FzIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXJrZXIgPj0gMHhGRkQwICYmIG1hcmtlciA8PSAweEZGRDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlTWFya2VyID0gZmluZE5leHRGaWxlTWFya2VyKGRhdGEsIG9mZnNldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTWFya2VyICYmIGZpbGVNYXJrZXIuaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnZGVjb2RlU2NhbiAtIHVuZXhwZWN0ZWQgU2NhbiBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogJyArIGZpbGVNYXJrZXIuaW52YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gZmlsZU1hcmtlci5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZmZzZXQgLSBzdGFydE9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShjb21wb25lbnQsIGJsb2NrQnVmZmVyT2Zmc2V0LCBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXQgPSBjb21wb25lbnQucXVhbnRpemF0aW9uVGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhID0gY29tcG9uZW50LmJsb2NrRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2MCwgdjEsIHYyLCB2MywgdjQsIHY1LCB2Niwgdjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcDAsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYsIHA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCdtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgNjQ7IHJvdyArPSA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3ddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMyA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA0ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDUgPSBibG9ja0RhdGFbYmxvY2tCdWZmZXJPZmZzZXQgKyByb3cgKyA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNiA9IGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIHJvdyArIDZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA3ID0gYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgcm93ICsgN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgKj0gcXRbcm93XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocDEgfCBwMiB8IHAzIHwgcDQgfCBwNSB8IHA2IHwgcDcpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBkY3RTcXJ0MiAqIHAwICsgNTEyID4+IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3Jvd10gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDFdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtyb3cgKyAyXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBbcm93ICsgM10gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDRdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtyb3cgKyA1XSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBbcm93ICsgNl0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDddID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDEgKj0gcXRbcm93ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgKj0gcXRbcm93ICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDMgKj0gcXRbcm93ICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDQgKj0gcXRbcm93ICsgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDUgKj0gcXRbcm93ICsgNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDYgKj0gcXRbcm93ICsgNl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDcgKj0gcXRbcm93ICsgN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAgPSBkY3RTcXJ0MiAqIHAwICsgMTI4ID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjEgPSBkY3RTcXJ0MiAqIHA0ICsgMTI4ID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSBwMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MyA9IHA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0ID0gZGN0U3FydDFkMiAqIChwMSAtIHA3KSArIDEyOCA+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY3ID0gZGN0U3FydDFkMiAqIChwMSArIHA3KSArIDEyOCA+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY1ID0gcDMgPDwgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NiA9IHA1IDw8IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAgPSB2MCArIHYxICsgMSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYxID0gdjAgLSB2MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdjIgKiBkY3RTaW42ICsgdjMgKiBkY3RDb3M2ICsgMTI4ID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSB2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAxMjggPj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MyA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjQgPSB2NCArIHY2ICsgMSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY2ID0gdjQgLSB2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NyA9IHY3ICsgdjUgKyAxID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjUgPSB2NyAtIHY1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYwID0gdjAgKyB2MyArIDEgPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MyA9IHYwIC0gdjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjEgPSB2MSArIHYyICsgMSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYyID0gdjEgLSB2MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gdjQgKiBkY3RTaW4zICsgdjcgKiBkY3RDb3MzICsgMjA0OCA+PiAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NCA9IHY0ICogZGN0Q29zMyAtIHY3ICogZGN0U2luMyArIDIwNDggPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjcgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB2NSAqIGRjdFNpbjEgKyB2NiAqIGRjdENvczEgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY1ID0gdjUgKiBkY3RDb3MxIC0gdjYgKiBkY3RTaW4xICsgMjA0OCA+PiAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NiA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcFtyb3ddID0gdjAgKyB2NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDddID0gdjAgLSB2NztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDFdID0gdjEgKyB2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDZdID0gdjEgLSB2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDJdID0gdjIgKyB2NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDVdID0gdjIgLSB2NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDNdID0gdjMgKyB2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwW3JvdyArIDRdID0gdjMgLSB2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgODsgKytjb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMCA9IHBbY29sXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHBbY29sICsgOF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBwW2NvbCArIDE2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMyA9IHBbY29sICsgMjRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA0ID0gcFtjb2wgKyAzMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDUgPSBwW2NvbCArIDQwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNiA9IHBbY29sICsgNDhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA3ID0gcFtjb2wgKyA1Nl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHAxIHwgcDIgfCBwMyB8IHA0IHwgcDUgfCBwNiB8IHA3KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gZGN0U3FydDIgKiBwMCArIDgxOTIgPj4gMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0IDwgLTIwNDAgPyAwIDogdCA+PSAyMDI0ID8gMjU1IDogdCArIDIwNTYgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDhdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMTZdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMjRdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMzJdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDBdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDhdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNTZdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAgPSBkY3RTcXJ0MiAqIHAwICsgMjA0OCA+PiAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MSA9IGRjdFNxcnQyICogcDQgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYyID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjMgPSBwNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NCA9IGRjdFNxcnQxZDIgKiAocDEgLSBwNykgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY3ID0gZGN0U3FydDFkMiAqIChwMSArIHA3KSArIDIwNDggPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjUgPSBwMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NiA9IHA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYwID0gKHYwICsgdjEgKyAxID4+IDEpICsgNDExMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MSA9IHYwIC0gdjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHYyICogZGN0U2luNiArIHYzICogZGN0Q29zNiArIDIwNDggPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSB2MiAqIGRjdENvczYgLSB2MyAqIGRjdFNpbjYgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYzID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NCA9IHY0ICsgdjYgKyAxID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjYgPSB2NCAtIHY2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY3ID0gdjcgKyB2NSArIDEgPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NSA9IHY3IC0gdjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjAgPSB2MCArIHYzICsgMSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYzID0gdjAgLSB2MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2MSA9IHYxICsgdjIgKyAxID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjIgPSB2MSAtIHYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB2NCAqIGRjdFNpbjMgKyB2NyAqIGRjdENvczMgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY0ID0gdjQgKiBkY3RDb3MzIC0gdjcgKiBkY3RTaW4zICsgMjA0OCA+PiAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2NyA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHY1ICogZGN0U2luMSArIHY2ICogZGN0Q29zMSArIDIwNDggPj4gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjUgPSB2NSAqIGRjdENvczEgLSB2NiAqIGRjdFNpbjEgKyAyMDQ4ID4+IDEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY2ID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMCA9IHYwICsgdjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDcgPSB2MCAtIHY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gdjEgKyB2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNiA9IHYxIC0gdjY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSB2MiArIHY1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA1ID0gdjIgLSB2NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMyA9IHYzICsgdjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDQgPSB2MyAtIHY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAwID0gcDAgPCAxNiA/IDAgOiBwMCA+PSA0MDgwID8gMjU1IDogcDAgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHAxIDwgMTYgPyAwIDogcDEgPj0gNDA4MCA/IDI1NSA6IHAxID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBwMiA8IDE2ID8gMCA6IHAyID49IDQwODAgPyAyNTUgOiBwMiA+PiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAzID0gcDMgPCAxNiA/IDAgOiBwMyA+PSA0MDgwID8gMjU1IDogcDMgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNCA9IHA0IDwgMTYgPyAwIDogcDQgPj0gNDA4MCA/IDI1NSA6IHA0ID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDUgPSBwNSA8IDE2ID8gMCA6IHA1ID49IDQwODAgPyAyNTUgOiBwNSA+PiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA2ID0gcDYgPCAxNiA/IDAgOiBwNiA+PSA0MDgwID8gMjU1IDogcDYgPj4gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwNyA9IHA3IDwgMTYgPyAwIDogcDcgPj0gNDA4MCA/IDI1NSA6IHA3ID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sXSA9IHAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrRGF0YVtibG9ja0J1ZmZlck9mZnNldCArIGNvbCArIDhdID0gcDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMTZdID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMjRdID0gcDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgMzJdID0gcDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDBdID0gcDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNDhdID0gcDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tEYXRhW2Jsb2NrQnVmZmVyT2Zmc2V0ICsgY29sICsgNTZdID0gcDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2Nrc1BlckxpbmUgPSBjb21wb25lbnQuYmxvY2tzUGVyTGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja3NQZXJDb2x1bW4gPSBjb21wb25lbnQuYmxvY2tzUGVyQ29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXB1dGF0aW9uQnVmZmVyID0gbmV3IEludDE2QXJyYXkoNjQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBibG9ja1JvdyA9IDA7IGJsb2NrUm93IDwgYmxvY2tzUGVyQ29sdW1uOyBibG9ja1JvdysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYmxvY2tDb2wgPSAwOyBibG9ja0NvbCA8IGJsb2Nrc1BlckxpbmU7IGJsb2NrQ29sKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGdldEJsb2NrQnVmZmVyT2Zmc2V0KGNvbXBvbmVudCwgYmxvY2tSb3csIGJsb2NrQ29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemVBbmRJbnZlcnNlKGNvbXBvbmVudCwgb2Zmc2V0LCBjb21wdXRhdGlvbkJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9uZW50LmJsb2NrRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmROZXh0RmlsZU1hcmtlcihkYXRhLCBjdXJyZW50UG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGN1cnJlbnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBlZWtVaW50MTYocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbcG9zXSA8PCA4IHwgZGF0YVtwb3MgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heFBvcyA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdQb3MgPSBzdGFydFBvcyA8IGN1cnJlbnRQb3MgPyBzdGFydFBvcyA6IGN1cnJlbnRQb3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UG9zID49IG1heFBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudE1hcmtlciA9IHBlZWtVaW50MTYoY3VycmVudFBvcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50TWFya2VyID49IDB4RkZDMCAmJiBjdXJyZW50TWFya2VyIDw9IDB4RkZGRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcjogY3VycmVudE1hcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBjdXJyZW50UG9zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01hcmtlciA9IHBlZWtVaW50MTYobmV3UG9zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCEobmV3TWFya2VyID49IDB4RkZDMCAmJiBuZXdNYXJrZXIgPD0gMHhGRkZFKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK25ld1BvcyA+PSBtYXhQb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWFya2VyID0gcGVla1VpbnQxNihuZXdQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWQ6IGN1cnJlbnRNYXJrZXIudG9TdHJpbmcoMTYpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcjogbmV3TWFya2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogbmV3UG9zXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSnBlZ0ltYWdlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbiBwYXJzZShkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIkZG5sU2NhbkxpbmVzID0gX3JlZjIuZG5sU2NhbkxpbmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbmxTY2FuTGluZXMgPSBfcmVmMiRkbmxTY2FuTGluZXMgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRkbmxTY2FuTGluZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVWludDE2KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhW29mZnNldF0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZERhdGFCbG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZE9mZnNldCA9IG9mZnNldCArIGxlbmd0aCAtIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxlTWFya2VyID0gZmluZE5leHRGaWxlTWFya2VyKGRhdGEsIGVuZE9mZnNldCwgb2Zmc2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZU1hcmtlciAmJiBmaWxlTWFya2VyLmludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgncmVhZERhdGFCbG9jayAtIGluY29ycmVjdCBsZW5ndGgsIGN1cnJlbnQgbWFya2VyIGlzOiAnICsgZmlsZU1hcmtlci5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZE9mZnNldCA9IGZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5ID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIGVuZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBhcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhmcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWN1c1BlckxpbmUgPSBNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4IC8gZnJhbWUubWF4SCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtY3VzUGVyQ29sdW1uID0gTWF0aC5jZWlsKGZyYW1lLnNjYW5MaW5lcyAvIDggLyBmcmFtZS5tYXhWKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZyYW1lLmNvbXBvbmVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IGZyYW1lLmNvbXBvbmVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tzUGVyTGluZSA9IE1hdGguY2VpbChNYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUgLyA4KSAqIGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tzUGVyQ29sdW1uID0gTWF0aC5jZWlsKE1hdGguY2VpbChmcmFtZS5zY2FuTGluZXMgLyA4KSAqIGNvbXBvbmVudC52IC8gZnJhbWUubWF4Vik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tzUGVyTGluZUZvck1jdSA9IG1jdXNQZXJMaW5lICogY29tcG9uZW50Lmg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tzUGVyQ29sdW1uRm9yTWN1ID0gbWN1c1BlckNvbHVtbiAqIGNvbXBvbmVudC52O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2Nrc0J1ZmZlclNpemUgPSA2NCAqIGJsb2Nrc1BlckNvbHVtbkZvck1jdSAqIChibG9ja3NQZXJMaW5lRm9yTWN1ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tEYXRhID0gbmV3IEludDE2QXJyYXkoYmxvY2tzQnVmZmVyU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyTGluZSA9IGJsb2Nrc1BlckxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuYmxvY2tzUGVyQ29sdW1uID0gYmxvY2tzUGVyQ29sdW1uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUubWN1c1BlckxpbmUgPSBtY3VzUGVyTGluZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUubWN1c1BlckNvbHVtbiA9IG1jdXNQZXJDb2x1bW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpmaWYgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZG9iZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZyYW1lLCByZXNldEludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1TT1NNYXJrZXJzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpemF0aW9uVGFibGVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh1ZmZtYW5UYWJsZXNBQyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWZmbWFuVGFibGVzREMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTWFya2VyICE9PSAweEZGRDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcignU09JIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVNYXJrZXIgPSByZWFkVWludDE2KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJMb29wOiB3aGlsZSAoZmlsZU1hcmtlciAhPT0gMHhGRkQ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqLCBsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmlsZU1hcmtlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkUyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRTM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkU1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRTY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkU4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRTk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFQTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkVCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRUM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkVFOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRUY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZGRTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwRGF0YSA9IHJlYWREYXRhQmxvY2soKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlTWFya2VyID09PSAweEZGRTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwcERhdGFbMF0gPT09IDB4NEEgJiYgYXBwRGF0YVsxXSA9PT0gMHg0NiAmJiBhcHBEYXRhWzJdID09PSAweDQ5ICYmIGFwcERhdGFbM10gPT09IDB4NDYgJiYgYXBwRGF0YVs0XSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZpZiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ham9yOiBhcHBEYXRhWzVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vcjogYXBwRGF0YVs2XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVuc2l0eVVuaXRzOiBhcHBEYXRhWzddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEZW5zaXR5OiBhcHBEYXRhWzhdIDw8IDggfCBhcHBEYXRhWzldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlEZW5zaXR5OiBhcHBEYXRhWzEwXSA8PCA4IHwgYXBwRGF0YVsxMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWJXaWR0aDogYXBwRGF0YVsxMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGh1bWJIZWlnaHQ6IGFwcERhdGFbMTNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRodW1iRGF0YTogYXBwRGF0YS5zdWJhcnJheSgxNCwgMTQgKyAzICogYXBwRGF0YVsxMl0gKiBhcHBEYXRhWzEzXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZU1hcmtlciA9PT0gMHhGRkVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBEYXRhWzBdID09PSAweDQxICYmIGFwcERhdGFbMV0gPT09IDB4NjQgJiYgYXBwRGF0YVsyXSA9PT0gMHg2RiAmJiBhcHBEYXRhWzNdID09PSAweDYyICYmIGFwcERhdGFbNF0gPT09IDB4NjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkb2JlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGFwcERhdGFbNV0gPDwgOCB8IGFwcERhdGFbNl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MwOiBhcHBEYXRhWzddIDw8IDggfCBhcHBEYXRhWzhdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzMTogYXBwRGF0YVs5XSA8PCA4IHwgYXBwRGF0YVsxMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtQ29kZTogYXBwRGF0YVsxMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGREI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXphdGlvblRhYmxlc0xlbmd0aCA9IHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpemF0aW9uVGFibGVzRW5kID0gcXVhbnRpemF0aW9uVGFibGVzTGVuZ3RoICsgb2Zmc2V0IC0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgejtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChvZmZzZXQgPCBxdWFudGl6YXRpb25UYWJsZXNFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXphdGlvblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVEYXRhID0gbmV3IFVpbnQxNkFycmF5KDY0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbnRpemF0aW9uVGFibGVTcGVjID4+IDQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA2NDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeiA9IGRjdFppZ1phZ1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGFbel0gPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChxdWFudGl6YXRpb25UYWJsZVNwZWMgPj4gNCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ID0gZGN0WmlnWmFnW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YVt6XSA9IHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcGVnRXJyb3IoJ0RRVCAtIGludmFsaWQgdGFibGUgc3BlYycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemF0aW9uVGFibGVzW3F1YW50aXphdGlvblRhYmxlU3BlYyAmIDE1XSA9IHRhYmxlRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGQzA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZDMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkMyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCdPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5leHRlbmRlZCA9IGZpbGVNYXJrZXIgPT09IDB4RkZDMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5wcm9ncmVzc2l2ZSA9IGZpbGVNYXJrZXIgPT09IDB4RkZDMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5wcmVjaXNpb24gPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29mU2NhbkxpbmVzID0gcmVhZFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnNjYW5MaW5lcyA9IGRubFNjYW5MaW5lcyB8fCBzb2ZTY2FuTGluZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuc2FtcGxlc1BlckxpbmUgPSByZWFkVWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkcyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBkYXRhW29mZnNldCsrXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhWID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb21wb25lbnRzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRJZCA9IGRhdGFbb2Zmc2V0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGggPSBkYXRhW29mZnNldCArIDFdID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gZGF0YVtvZmZzZXQgKyAxXSAmIDE1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXhIIDwgaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SCA9IGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4ViA8IHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFYgPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFJZCA9IGRhdGFbb2Zmc2V0ICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBmcmFtZS5jb21wb25lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IHYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFudGl6YXRpb25JZDogcUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbnRpemF0aW9uVGFibGU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmNvbXBvbmVudElkc1tjb21wb25lbnRJZF0gPSBsIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUubWF4SCA9IG1heEg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUubWF4ViA9IG1heFY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlcGFyZUNvbXBvbmVudHMoZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZDNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHVmZm1hbkxlbmd0aCA9IHJlYWRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDI7IGkgPCBodWZmbWFuTGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHVmZm1hblRhYmxlU3BlYyA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZUxlbmd0aHMgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlTGVuZ3RoU3VtID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7IGorKywgb2Zmc2V0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVMZW5ndGhTdW0gKz0gY29kZUxlbmd0aHNbal0gPSBkYXRhW29mZnNldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaHVmZm1hblZhbHVlcyA9IG5ldyBVaW50OEFycmF5KGNvZGVMZW5ndGhTdW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBjb2RlTGVuZ3RoU3VtOyBqKyssIG9mZnNldCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWZmbWFuVmFsdWVzW2pdID0gZGF0YVtvZmZzZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxNyArIGNvZGVMZW5ndGhTdW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChodWZmbWFuVGFibGVTcGVjID4+IDQgPT09IDAgPyBodWZmbWFuVGFibGVzREMgOiBodWZmbWFuVGFibGVzQUMpW2h1ZmZtYW5UYWJsZVNwZWMgJiAxNV0gPSBidWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3RocywgaHVmZm1hblZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRkREOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldEludGVydmFsID0gcmVhZFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZEQTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VETkxNYXJrZXIgPSArK251bVNPU01hcmtlcnMgPT09IDEgJiYgIWRubFNjYW5MaW5lcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkVWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yc0NvdW50ID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNlbGVjdG9yc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudEluZGV4ID0gZnJhbWUuY29tcG9uZW50SWRzW2RhdGFbb2Zmc2V0KytdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50ID0gZnJhbWUuY29tcG9uZW50c1tjb21wb25lbnRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZVNwZWMgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDID0gaHVmZm1hblRhYmxlc0RDW3RhYmxlU3BlYyA+PiA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDID0gaHVmZm1hblRhYmxlc0FDW3RhYmxlU3BlYyAmIDE1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50cy5wdXNoKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwZWN0cmFsU3RhcnQgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BlY3RyYWxFbmQgPSBkYXRhW29mZnNldCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24gPSBkYXRhW29mZnNldCsrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWQgPSBkZWNvZGVTY2FuKGRhdGEsIG9mZnNldCwgZnJhbWUsIGNvbXBvbmVudHMsIHJlc2V0SW50ZXJ2YWwsIHNwZWN0cmFsU3RhcnQsIHNwZWN0cmFsRW5kLCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiA+PiA0LCBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbiAmIDE1LCBwYXJzZUROTE1hcmtlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBwcm9jZXNzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgRE5MTWFya2VyRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlwiLmNvbmNhdChleC5tZXNzYWdlLCBcIiAtLSBhdHRlbXB0aW5nIHRvIHJlLXBhcnNlIHRoZSBKUEVHIGltYWdlLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZShkYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG5sU2NhbkxpbmVzOiBleC5zY2FuTGluZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4IGluc3RhbmNlb2YgRU9JTWFya2VyRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlwiLmNvbmNhdChleC5tZXNzYWdlLCBcIiAtLSBpZ25vcmluZyB0aGUgcmVzdCBvZiB0aGUgaW1hZ2UgZGF0YS5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbWFya2VyTG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZEQzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGRkY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbb2Zmc2V0XSAhPT0gMHhGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtvZmZzZXQgLSAzXSA9PT0gMHhGRiAmJiBkYXRhW29mZnNldCAtIDJdID49IDB4QzAgJiYgZGF0YVtvZmZzZXQgLSAyXSA8PSAweEZFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCAtPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEZpbGVNYXJrZXIgPSBmaW5kTmV4dEZpbGVNYXJrZXIoZGF0YSwgb2Zmc2V0IC0gMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEZpbGVNYXJrZXIgJiYgbmV4dEZpbGVNYXJrZXIuaW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0pwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICcgKyBuZXh0RmlsZU1hcmtlci5pbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dEZpbGVNYXJrZXIub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnBlZ0Vycm9yKCd1bmtub3duIG1hcmtlciAnICsgZmlsZU1hcmtlci50b1N0cmluZygxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU1hcmtlciA9IHJlYWRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gZnJhbWUuc2FtcGxlc1BlckxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBmcmFtZS5zY2FuTGluZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qZmlmID0gamZpZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkb2JlID0gYWRvYmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnJhbWUuY29tcG9uZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQgPSBmcmFtZS5jb21wb25lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhbnRpemF0aW9uVGFibGUgPSBxdWFudGl6YXRpb25UYWJsZXNbY29tcG9uZW50LnF1YW50aXphdGlvbklkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbnRpemF0aW9uVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5xdWFudGl6YXRpb25UYWJsZSA9IHF1YW50aXphdGlvblRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiBidWlsZENvbXBvbmVudERhdGEoZnJhbWUsIGNvbXBvbmVudCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVg6IGNvbXBvbmVudC5oIC8gZnJhbWUubWF4SCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogY29tcG9uZW50LnYgLyBmcmFtZS5tYXhWLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzUGVyTGluZTogY29tcG9uZW50LmJsb2Nrc1BlckxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3NQZXJDb2x1bW46IGNvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1Db21wb25lbnRzID0gdGhpcy5jb21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfZ2V0TGluZWFyaXplZEJsb2NrRGF0YTogZnVuY3Rpb24gX2dldExpbmVhcml6ZWRCbG9ja0RhdGEod2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1NvdXJjZVBERiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlWCA9IHRoaXMud2lkdGggLyB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZID0gdGhpcy5oZWlnaHQgLyBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCwgY29tcG9uZW50U2NhbGVYLCBjb21wb25lbnRTY2FsZVksIGJsb2Nrc1BlclNjYW5saW5lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4LCB5LCBpLCBqLCBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wb25lbnRzID0gdGhpcy5jb21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YUxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogbnVtQ29tcG9uZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkYXRhTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeFNjYWxlQmxvY2tPZmZzZXQgPSBuZXcgVWludDMyQXJyYXkod2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrM0xTQiA9IDB4ZmZmZmZmZjg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2NhbGVYID0gY29tcG9uZW50LnNjYWxlWCAqIHNjYWxlWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2NhbGVZID0gY29tcG9uZW50LnNjYWxlWSAqIHNjYWxlWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ID0gY29tcG9uZW50Lm91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzUGVyU2NhbmxpbmUgPSBjb21wb25lbnQuYmxvY2tzUGVyTGluZSArIDEgPDwgMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDAgfCB4ICogY29tcG9uZW50U2NhbGVYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNjYWxlQmxvY2tPZmZzZXRbeF0gPSAoaiAmIG1hc2szTFNCKSA8PCAzIHwgaiAmIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSAwIHwgeSAqIGNvbXBvbmVudFNjYWxlWTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gYmxvY2tzUGVyU2NhbmxpbmUgKiAoaiAmIG1hc2szTFNCKSB8IChqICYgNykgPDwgMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldF0gPSBvdXRwdXRbaW5kZXggKyB4U2NhbGVCbG9ja09mZnNldFt4XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG51bUNvbXBvbmVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy5fZGVjb2RlVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1NvdXJjZVBERiAmJiBudW1Db21wb25lbnRzID09PSA0ICYmICF0cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gbmV3IEludDMyQXJyYXkoWy0yNTYsIDI1NSwgLTI1NiwgMjU1LCAtMjU2LCAyNTUsIC0yNTYsIDI1NV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGFMZW5ndGg7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBrID0gMDsgaiA8IG51bUNvbXBvbmVudHM7IGorKywgaSsrLCBrICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gKGRhdGFbaV0gKiB0cmFuc2Zvcm1ba10gPj4gOCkgKyB0cmFuc2Zvcm1bayArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFkb2JlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIXRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1Db21wb25lbnRzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb2xvclRyYW5zZm9ybSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbG9yVHJhbnNmb3JtID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb252ZXJ0WWNjVG9SZ2I6IGZ1bmN0aW9uIGNvbnZlcnRZY2NUb1JnYihkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFksIENiLCBDcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYiA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gWSAtIDE3OS40NTYgKyAxLjQwMiAqIENyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAxXSA9IFkgKyAxMzUuNDU5IC0gMC4zNDQgKiBDYiAtIDAuNzE0ICogQ3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSArIDJdID0gWSAtIDIyNi44MTYgKyAxLjc3MiAqIENiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb252ZXJ0WWNja1RvUmdiOiBmdW5jdGlvbiBjb252ZXJ0WWNja1RvUmdiKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgWSwgQ2IsIENyLCBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWSA9IGRhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENiID0gZGF0YVtpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyID0gZGF0YVtpICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBkYXRhW2kgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAtMTIyLjY3MTk1NDA2ODk0ICsgQ2IgKiAoLTYuNjA2MzU2Njk0MjAzNjRlLTUgKiBDYiArIDAuMDAwNDM3MTMwNDc1OTI2MjMyICogQ3IgLSA1LjQwODA2MTAwNjQ1OTllLTUgKiBZICsgMC4wMDA0ODQ0OTc5NzEyMDI4MSAqIGsgLSAwLjE1NDM2MjE1MTg3MTEyNikgKyBDciAqICgtMC4wMDA5NTc5NjQzNzg0NDU3NzMgKiBDciArIDAuMDAwODE3MDc2OTExMzQ2NjI1ICogWSAtIDAuMDA0NzcyNzE0MDU0MDg3NDcgKiBrICsgMS41MzM4MDI1MzIyMTczNCkgKyBZICogKDAuMDAwOTYxMjUwMTg0MTMwNjg4ICogWSAtIDAuMDAyNjYyNTczMzIyODM5MzMgKiBrICsgMC40ODM1NzA4ODQ1MTI2NSkgKyBrICogKC0wLjAwMDMzNjE5NzE3NzYxODM5NCAqIGsgKyAwLjQ4NDc5MTU2MTQ5MDc3Nik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gMTA3LjI2ODAzOTM5NzcyNCArIENiICogKDIuMTk5MjcxMDQ1MjU3NDFlLTUgKiBDYiAtIDAuMDAwNjQwOTkyMDE4Mjk3OTQ1ICogQ3IgKyAwLjAwMDY1OTM5NzAwMTI0NTU3NyAqIFkgKyAwLjAwMDQyNjEwNTY1MjkzODgzNyAqIGsgLSAwLjE3NjQ5MTc5MjQ2Mjg3NSkgKyBDciAqICgtMC4wMDA3NzgyNjk5NDE1MTM2ODMgKiBDciArIDAuMDAxMzA4NzIyNjE0MDgyNzUgKiBZICsgMC4wMDA3NzA0ODI2MzE4MDExMzIgKiBrIC0gMC4xNTEwNTE0OTI3NzU1NjIpICsgWSAqICgwLjAwMTI2OTM1MzY4MTE0ODQzICogWSAtIDAuMDAyNjUwOTAxODkwMTA4OTggKiBrICsgMC4yNTgwMjkxMDIwNjg0NSkgKyBrICogKC0wLjAwMDMxODkxMzExNzU4ODMyOCAqIGsgLSAwLjIxMzc0MjQwMDMyMzY2NSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gLTIwLjgxMDAxMjU0Njk0NyArIENiICogKC0wLjAwMDU3MDExNTE5Njk3MzY3NyAqIENiIC0gMi42MzQwOTA1MTAwNDU4OWUtNSAqIENyICsgMC4wMDIwNzQxMDg4MTE1MDEyICogWSAtIDAuMDAyODgyNjAyMzY4NTM0NDIgKiBrICsgMC44MTQyNzI5NjgzNTkyOTUpICsgQ3IgKiAoLTEuNTM0OTYwNTc0NDA5NzVlLTUgKiBDciAtIDAuMDAwMTMyNjg5MDQzOTYxNDQ2ICogWSArIDAuMDAwNTYwODMzNjkxMjQyODEyICogayAtIDAuMTk1MTUyMDI3NTM0MDQ5KSArIFkgKiAoMC4wMDE3NDQxODEzMjkyNzU4MiAqIFkgLSAwLjAwMjU1MjQzMzIxNDM5MzQ3ICogayArIDAuMTE2OTM1MDIwNDY1MTQ1KSArIGsgKiAoLTAuMDAwMzQzNTMxOTk2NTEwNTU1ICogayArIDAuMjQxNjUyNjAyMzI0MDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnN1YmFycmF5KDAsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnZlcnRZY2NrVG9DbXlrOiBmdW5jdGlvbiBjb252ZXJ0WWNja1RvQ215ayhkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFksIENiLCBDcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBkYXRhLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFkgPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYiA9IGRhdGFbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDciA9IGRhdGFbaSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gNDM0LjQ1NiAtIFkgLSAxLjQwMiAqIENyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAxXSA9IDExOS41NDEgLSBZICsgMC4zNDQgKiBDYiArIDAuNzE0ICogQ3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaSArIDJdID0gNDgxLjgxNiAtIFkgLSAxLjc3MiAqIENiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jb252ZXJ0Q215a1RvUmdiOiBmdW5jdGlvbiBjb252ZXJ0Q215a1RvUmdiKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYywgbSwgeSwgaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC8gMjU1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbmd0aCA9IGRhdGEubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGRhdGFbaV0gKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9IGRhdGFbaSArIDFdICogc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBkYXRhW2kgKyAyXSAqIHNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gZGF0YVtpICsgM10gKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQrK10gPSAyNTUgKyBjICogKC00LjM4NzMzMjM4NDYwOTk4OCAqIGMgKyA1NC40ODYxNTE5NDE4OTE3NiAqIG0gKyAxOC44MjI5MDUwMjE2NTMwMiAqIHkgKyAyMTIuMjU2NjI0NTE2Mzk1ODUgKiBrIC0gMjg1LjIzMzEwMjYxMzcwMDQpICsgbSAqICgxLjcxNDk3NjM0NzczNjIxMzQgKiBtIC0gNS42MDk2NzM2OTA0MDQ3MzE1ICogeSAtIDE3Ljg3Mzg3MDg2MTQxNTQ0NCAqIGsgLSA1LjQ5NzAwNjQyNzE5NjM2NikgKyB5ICogKC0yLjUyMTczNDAxMzE2ODMwMzMgKiB5IC0gMjEuMjQ4OTIzMzM3MzUzMDczICogayArIDE3LjUxMTkyNzA4NDE4MTMpIC0gayAqICgyMS44NjEyMjE0NzQ2MzYwNSAqIGsgKyAxODkuNDgxODA4MzU5MjI3NDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldCsrXSA9IDI1NSArIGMgKiAoOC44NDEwNDE0MjIwMzYxNDkgKiBjICsgNjAuMTE4MDI3MDQ1NTk3MzY2ICogbSArIDYuODcxNDI1NTkyMDQ5MDA3ICogeSArIDMxLjE1OTEwMDEzMDA1NTkyMiAqIGsgLSA3OS4yOTcwODQ0ODE2NTQ4KSArIG0gKiAoLTE1LjMxMDM2MTMwNjk2NzgxNyAqIG0gKyAxNy41NzUyNTEyNjExMDk0ODIgKiB5ICsgMTMxLjM1MjUwOTEyNDkzOTc2ICogayAtIDE5MC45NDUzMzAyNTg4OTUxKSArIHkgKiAoNC40NDQzMzkxMDI4NTI3MzkgKiB5ICsgOS44NjMyODYxNDkzNDA1ICogayAtIDI0Ljg2NzQxNTgyNTU1ODc4KSAtIGsgKiAoMjAuNzM3MzI1NDcxMTgxMDM0ICogayArIDE4Ny44MDQ1MzcwOTcxOTU3OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0KytdID0gMjU1ICsgYyAqICgwLjg4NDI1MjI0MzAwMDMyOTYgKiBjICsgOC4wNzg2Nzc1MDMxMTI5MjggKiBtICsgMzAuODk5NzgzMDk3MDM3MjkgKiB5IC0gMC4yMzg4MzIzODY4OTE3ODkzNCAqIGsgLSAxNC4xODM1NzY3OTk2NzMyODYpICsgbSAqICgxMC40OTU5MzI3MzQzMjA3MiAqIG0gKyA2My4wMjM3ODQ5NDc1NDA1MiAqIHkgKyA1MC42MDY5NTc2NTYzNjA3MzQgKiBrIC0gMTEyLjIzODg0MjUzNzE5MjQ4KSArIHkgKiAoMC4wMzI5NjA0MTExNDg3MzIxNyAqIHkgKyAxMTUuNjAzODQ0NDk2NDY2NDEgKiBrIC0gMTkzLjU4MjA5MzU2ODYxNTA1KSAtIGsgKiAoMjIuMzM4MTY4MDczMDk4ODYgKiBrICsgMTgwLjEyNjEzOTc0NzA4MzY3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5zdWJhcnJheSgwLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldERhdGE6IGZ1bmN0aW9uIGdldERhdGEoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBfcmVmMy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gX3JlZjMuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRmb3JjZVJHQiA9IF9yZWYzLmZvcmNlUkdCLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZVJHQiA9IF9yZWYzJGZvcmNlUkdCID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGZvcmNlUkdCLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRpc1NvdXJjZVBERiA9IF9yZWYzLmlzU291cmNlUERGLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NvdXJjZVBERiA9IF9yZWYzJGlzU291cmNlUERGID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGlzU291cmNlUERGO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA+IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpwZWdFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgbW9kZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fZ2V0TGluZWFyaXplZEJsb2NrRGF0YSh3aWR0aCwgaGVpZ2h0LCBpc1NvdXJjZVBERik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5udW1Db21wb25lbnRzID09PSAxICYmIGZvcmNlUkdCKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZ2JEYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRhdGFMZW5ndGggKiAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmF5Q29sb3IgPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiRGF0YVtvZmZzZXQrK10gPSBncmF5Q29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JEYXRhW29mZnNldCsrXSA9IGdyYXlDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkRhdGFbb2Zmc2V0KytdID0gZ3JheUNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJnYkRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm51bUNvbXBvbmVudHMgPT09IDMgJiYgdGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubnVtQ29tcG9uZW50cyA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JjZVJHQikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0WWNja1RvUmdiKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydFljY2tUb0NteWsoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9yY2VSR0IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKcGVnSW1hZ2U7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5KcGVnSW1hZ2UgPSBKcGVnSW1hZ2U7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSnB4U3RyZWFtID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2pweCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSnB4U3RyZWFtID0gZnVuY3Rpb24gSnB4U3RyZWFtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSnB4U3RyZWFtKHN0cmVhbSwgbWF5YmVMZW5ndGgsIGRpY3QsIHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heWJlTGVuZ3RoID0gbWF5YmVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9zdHJlYW0uRGVjb2RlU3RyZWFtLmNhbGwodGhpcywgbWF5YmVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSnB4U3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoX3N0cmVhbS5EZWNvZGVTdHJlYW0ucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEpweFN0cmVhbS5wcm90b3R5cGUsICdieXRlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gSnB4U3RyZWFtX2J5dGVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnYnl0ZXMnLCB0aGlzLnN0cmVhbS5nZXRCeXRlcyh0aGlzLm1heWJlTGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIEpweFN0cmVhbS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyID0gZnVuY3Rpb24gKHJlcXVlc3RlZCkge307XG5cbiAgICAgICAgICAgICAgICAgICAgSnB4U3RyZWFtLnByb3RvdHlwZS5yZWFkQmxvY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lb2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqcHhJbWFnZSA9IG5ldyBfanB4LkpweEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBqcHhJbWFnZS5wYXJzZSh0aGlzLmJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGpweEltYWdlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGpweEltYWdlLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBqcHhJbWFnZS5jb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZUNvdW50ID0ganB4SW1hZ2UudGlsZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlsZUNvdW50ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBqcHhJbWFnZS50aWxlc1swXS5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQgKiBjb21wb25lbnRzQ291bnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aWxlQ291bnQ7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZUNvbXBvbmVudHMgPSBqcHhJbWFnZS50aWxlc1trXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVXaWR0aCA9IHRpbGVDb21wb25lbnRzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZUhlaWdodCA9IHRpbGVDb21wb25lbnRzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVMZWZ0ID0gdGlsZUNvbXBvbmVudHMubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVUb3AgPSB0aWxlQ29tcG9uZW50cy50b3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSB0aWxlQ29tcG9uZW50cy5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY1Bvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFQb3NpdGlvbiA9ICh3aWR0aCAqIHRpbGVUb3AgKyB0aWxlTGVmdCkgKiBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdSb3dTaXplID0gd2lkdGggKiBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlUm93U2l6ZSA9IHRpbGVXaWR0aCAqIGNvbXBvbmVudHNDb3VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRpbGVIZWlnaHQ7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd0J5dGVzID0gc3JjLnN1YmFycmF5KHNyY1Bvc2l0aW9uLCBzcmNQb3NpdGlvbiArIHRpbGVSb3dTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc2V0KHJvd0J5dGVzLCBkYXRhUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zaXRpb24gKz0gdGlsZVJvd1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gaW1nUm93U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvZiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpweFN0cmVhbTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkpweFN0cmVhbSA9IEpweFN0cmVhbTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTY2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5KcHhJbWFnZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2FyaXRobWV0aWNfZGVjb2RlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYyKTtcblxuICAgICAgICAgICAgICAgIHZhciBKcHhFcnJvciA9IGZ1bmN0aW9uIEpweEVycm9yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSnB4RXJyb3IobXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnSlBYIGVycm9yOiAnICsgbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSnB4RXJyb3IucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIEpweEVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0pweEVycm9yJztcbiAgICAgICAgICAgICAgICAgICAgSnB4RXJyb3IuY29uc3RydWN0b3IgPSBKcHhFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpweEVycm9yO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBKcHhJbWFnZSA9IGZ1bmN0aW9uIEpweEltYWdlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFN1YmJhbmRzR2FpbkxvZzIgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnTEwnOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xIJzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdITCc6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSEgnOiAyXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSnB4SW1hZ2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhaWxPbkNvcnJ1cHRlZEltYWdlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBKcHhJbWFnZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZTogZnVuY3Rpb24gSnB4SW1hZ2VfcGFyc2UoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWQgPT09IDB4RkY0Rikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQ29kZXN0cmVhbShkYXRhLCAwLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyU2l6ZSA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYm94ID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRib3ggPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gaGVhZGVyU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGJveCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGJveCA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbikgKiA0Mjk0OTY3Mjk2ICsgKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyU2l6ZSArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxib3ggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxib3ggPSBsZW5ndGggLSBwb3NpdGlvbiArIGhlYWRlclNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGJveCA8IGhlYWRlclNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcignSW52YWxpZCBib3ggZmllbGQgc2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFMZW5ndGggPSBsYm94IC0gaGVhZGVyU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGp1bXBEYXRhTGVuZ3RoID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg2QTcwMzI2ODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW1wRGF0YUxlbmd0aCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NjM2RjZDNzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IGRhdGFbcG9zaXRpb25dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JzcGFjZSA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY29sb3JzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5rbm93biBjb2xvcnNwYWNlICcgKyBjb2xvcnNwYWNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnSUNDIHByb2ZpbGUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NkE3MDMyNjM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZUNvZGVzdHJlYW0oZGF0YSwgcG9zaXRpb24sIHBvc2l0aW9uICsgZGF0YUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHg2QTUwMjAyMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uKSAhPT0gMHgwZDBhODcwYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ludmFsaWQgSlAyIHNpZ25hdHVyZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NkE1MDFBMUE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NjY3NDc5NzA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NzI3MjY1NzE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4NzI2NTczMjA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Njk2ODY0NzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlclR5cGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRib3ggPj4gMjQgJiAweEZGLCB0Ym94ID4+IDE2ICYgMHhGRiwgdGJveCA+PiA4ICYgMHhGRiwgdGJveCAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgJyArIHRib3ggKyAnICgnICsgaGVhZGVyVHlwZSArICcpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanVtcERhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGRhdGFMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbWFnZVByb3BlcnRpZXM6IGZ1bmN0aW9uIEpweEltYWdlX3BhcnNlSW1hZ2VQcm9wZXJ0aWVzKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChuZXdCeXRlID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9sZEJ5dGUgPSBuZXdCeXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCeXRlID0gc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBvbGRCeXRlIDw8IDggfCBuZXdCeXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09PSAweEZGNTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhzaXogPSBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZc2l6ID0gc3RyZWFtLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgWE9zaXogPSBzdHJlYW0uZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZT3NpeiA9IHN0cmVhbS5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXAoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIENzaXogPSBzdHJlYW0uZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gWHNpeiAtIFhPc2l6O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBZc2l6IC0gWU9zaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudHNDb3VudCA9IENzaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJpdHNQZXJDb21wb25lbnQgPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdObyBzaXplIG1hcmtlciBmb3VuZCBpbiBKUFggc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2Rlc3RyZWFtOiBmdW5jdGlvbiBKcHhJbWFnZV9wYXJzZUNvZGVzdHJlYW0oZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvTm90UmVjb3ZlciA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gc3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvc2l0aW9uICsgMSA8IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FjZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkY0RjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tYWluSGVhZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkZEOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkY1MTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXouWHNpeiA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXouWXNpeiA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXouWE9zaXogPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAxMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpei5ZT3NpeiA9ICgwLCBfdXRpbC5yZWFkVWludDMyKShkYXRhLCBwb3NpdGlvbiArIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6LlhUc2l6ID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgMjApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXouWVRzaXogPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpei5YVE9zaXogPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAyOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpei5ZVE9zaXogPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZGF0YSwgcG9zaXRpb24gKyAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24gKyAzNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpei5Dc2l6ID0gY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gcG9zaXRpb24gKyAzODtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogKGRhdGFbal0gJiAweDdGKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTaWduZWQ6ICEhKGRhdGFbal0gJiAweDgwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUnNpejogZGF0YVtqICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVJzaXo6IGRhdGFbaiArIDJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlQ29tcG9uZW50RGltZW5zaW9ucyhjb21wb25lbnQsIHNpeik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzLnB1c2goY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuU0laID0gc2l6O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbXBvbmVudHMgPSBjb21wb25lbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuUUNDID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuQ09DID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGNUM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxY2QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FjZCA9IGRhdGFbaisrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNxY2QgJiAweDFGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZFNpemUgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsYXJFeHBvdW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBTUWNkIHZhbHVlICcgKyBzcWNkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjZC5ub1F1YW50aXphdGlvbiA9IHNwcWNkU2l6ZSA9PT0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWNkLnNjYWxhckV4cG91bmRlZCA9IHNjYWxhckV4cG91bmRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcWNkLmd1YXJkQml0cyA9IHNxY2QgPj4gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwcWNkID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcHFjZFNpemUgPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqKytdID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2QubXUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqXSA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkLm11ID0gKGRhdGFbal0gJiAweDcpIDw8IDggfCBkYXRhW2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkcy5wdXNoKHNwcWNkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjZC5TUHFjZHMgPSBzcHFjZHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWFpbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5RQ0QgPSBxY2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLlFDRCA9IHFjZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VycmVudFRpbGUuUUNDID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcWNjID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBwb3NpdGlvbiArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcWNjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LlNJWi5Dc2l6IDwgMjU3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcWNjID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3FjYyA9ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxY2QgPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzcWNkICYgMHgxRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkU2l6ZSA9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhckV4cG91bmRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2RTaXplID0gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyRXhwb3VuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgU1FjZCB2YWx1ZSAnICsgc3FjZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxY2Mubm9RdWFudGl6YXRpb24gPSBzcHFjZFNpemUgPT09IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjYy5zY2FsYXJFeHBvdW5kZWQgPSBzY2FsYXJFeHBvdW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjYy5ndWFyZEJpdHMgPSBzcWNkID4+IDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgbGVuZ3RoICsgcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcHFjZFNpemUgPT09IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqKytdID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BxY2QubXUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHFjZC5lcHNpbG9uID0gZGF0YVtqXSA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkLm11ID0gKGRhdGFbal0gJiAweDcpIDw8IDggfCBkYXRhW2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwcWNkcy5wdXNoKHNwcWNkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFjYy5TUHFjZHMgPSBzcHFjZHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWFpbkhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5RQ0NbY3FjY10gPSBxY2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLlFDQ1tjcWNjXSA9IHFjYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweEZGNTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9ICgwLCBfdXRpbC5yZWFkVWludDE2KShkYXRhLCBwb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IHBvc2l0aW9uICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjb2QgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzID0gISEoc2NvZCAmIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Quc29wTWFya2VyVXNlZCA9ICEhKHNjb2QgJiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kLmVwaE1hcmtlclVzZWQgPSAhIShzY29kICYgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5wcm9ncmVzc2lvbk9yZGVyID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QubGF5ZXJzQ291bnQgPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QueGNiID0gKGRhdGFbaisrXSAmIDB4RikgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QueWNiID0gKGRhdGFbaisrXSAmIDB4RikgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tTdHlsZSA9IGRhdGFbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kLnNlbGVjdGl2ZUFyaXRobWV0aWNDb2RpbmdCeXBhc3MgPSAhIShibG9ja1N0eWxlICYgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzID0gISEoYmxvY2tTdHlsZSAmIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzID0gISEoYmxvY2tTdHlsZSAmIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2QudmVydGljYWxseVN0cmlwZSA9ICEhKGJsb2NrU3R5bGUgJiA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kLnByZWRpY3RhYmxlVGVybWluYXRpb24gPSAhIShibG9ja1N0eWxlICYgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Quc2VnbWVudGF0aW9uU3ltYm9sVXNlZCA9ICEhKGJsb2NrU3R5bGUgJiAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24gPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZC5lbnRyb3B5Q29kZXJXaXRoQ3VzdG9tUHJlY2luY3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RzU2l6ZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBsZW5ndGggKyBwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNTaXplID0gZGF0YVtqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0c1NpemVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUHg6IHByZWNpbmN0c1NpemUgJiAweEYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQeTogcHJlY2luY3RzU2l6ZSA+PiA0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZC5wcmVjaW5jdHNTaXplcyA9IHByZWNpbmN0c1NpemVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuc3VwcG9ydGVkID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZC5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKCdzZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kLnJlc2V0Q29udGV4dFByb2JhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkLnB1c2goJ3Jlc2V0Q29udGV4dFByb2JhYmlsaXRpZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2QudGVybWluYXRpb25PbkVhY2hDb2RpbmdQYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKCd0ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2QudmVydGljYWxseVN0cmlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQucHVzaCgndmVydGljYWxseVN0cmlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZC5wcmVkaWN0YWJsZVRlcm1pbmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZC5wdXNoKCdwcmVkaWN0YWJsZVRlcm1pbmF0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9Ob3RSZWNvdmVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgQ09EIG9wdGlvbnMgKCcgKyB1bnN1cHBvcnRlZC5qb2luKCcsICcpICsgJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0Lm1haW5IZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuQ09EID0gY29kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyZW50VGlsZS5DT0QgPSBjb2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlLkNPQyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkY5MDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmluZGV4ID0gKDAsIF91dGlsLnJlYWRVaW50MTYpKGRhdGEsIHBvc2l0aW9uICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUubGVuZ3RoID0gKDAsIF91dGlsLnJlYWRVaW50MzIpKGRhdGEsIHBvc2l0aW9uICsgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuZGF0YUVuZCA9IHRpbGUubGVuZ3RoICsgcG9zaXRpb24gLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnBhcnRJbmRleCA9IGRhdGFbcG9zaXRpb24gKyA4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS5wYXJ0c0NvdW50ID0gZGF0YVtwb3NpdGlvbiArIDldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1haW5IZWFkZXIgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlsZS5wYXJ0SW5kZXggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuQ09EID0gY29udGV4dC5DT0Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLkNPQyA9IGNvbnRleHQuQ09DLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS5RQ0QgPSBjb250ZXh0LlFDRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuUUNDID0gY29udGV4dC5RQ0Muc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJlbnRUaWxlID0gdGlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4RkY5MzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZSA9IGNvbnRleHQuY3VycmVudFRpbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRpbGUucGFydEluZGV4ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplVGlsZShjb250ZXh0LCB0aWxlLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGFja2V0cyhjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRpbGUuZGF0YUVuZCAtIHBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIHBvc2l0aW9uLCBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjU1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjU3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjU4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjY0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSAoMCwgX3V0aWwucmVhZFVpbnQxNikoZGF0YSwgcG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHhGRjUzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvZGVzdHJlYW0gY29kZSAweEZGNTMgKENPQykgaXMgJyArICdub3QgaW1wbGVtZW50ZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICcgKyBjb2RlLnRvU3RyaW5nKDE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvTm90UmVjb3ZlciB8fCB0aGlzLmZhaWxPbkNvcnJ1cHRlZEltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSlBYOiBUcnlpbmcgdG8gcmVjb3ZlciBmcm9tOiAnICsgZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGlsZXMgPSB0cmFuc2Zvcm1Db21wb25lbnRzKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSBjb250ZXh0LlNJWi5Yc2l6IC0gY29udGV4dC5TSVouWE9zaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWlnaHQgPSBjb250ZXh0LlNJWi5Zc2l6IC0gY29udGV4dC5TSVouWU9zaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzQ291bnQgPSBjb250ZXh0LlNJWi5Dc2l6O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZUNvbXBvbmVudERpbWVuc2lvbnMoY29tcG9uZW50LCBzaXopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC54MCA9IE1hdGguY2VpbChzaXouWE9zaXogLyBjb21wb25lbnQuWFJzaXopO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LngxID0gTWF0aC5jZWlsKHNpei5Yc2l6IC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC55MCA9IE1hdGguY2VpbChzaXouWU9zaXogLyBjb21wb25lbnQuWVJzaXopO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnkxID0gTWF0aC5jZWlsKHNpei5Zc2l6IC8gY29tcG9uZW50LllSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC53aWR0aCA9IGNvbXBvbmVudC54MSAtIGNvbXBvbmVudC54MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5oZWlnaHQgPSBjb21wb25lbnQueTEgLSBjb21wb25lbnQueTA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVUaWxlR3JpZHMoY29udGV4dCwgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1YdGlsZXMgPSBNYXRoLmNlaWwoKHNpei5Yc2l6IC0gc2l6LlhUT3NpeikgLyBzaXouWFRzaXopO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVl0aWxlcyA9IE1hdGguY2VpbCgoc2l6LllzaXogLSBzaXouWVRPc2l6KSAvIHNpei5ZVHNpeik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHEgPSAwOyBxIDwgbnVtWXRpbGVzOyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwID0gMDsgcCA8IG51bVh0aWxlczsgcCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS50eDAgPSBNYXRoLm1heChzaXouWFRPc2l6ICsgcCAqIHNpei5YVHNpeiwgc2l6LlhPc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS50eTAgPSBNYXRoLm1heChzaXouWVRPc2l6ICsgcSAqIHNpei5ZVHNpeiwgc2l6LllPc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS50eDEgPSBNYXRoLm1pbihzaXouWFRPc2l6ICsgKHAgKyAxKSAqIHNpei5YVHNpeiwgc2l6LlhzaXopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnR5MSA9IE1hdGgubWluKHNpei5ZVE9zaXogKyAocSArIDEpICogc2l6LllUc2l6LCBzaXouWXNpeik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUud2lkdGggPSB0aWxlLnR4MSAtIHRpbGUudHgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLmhlaWdodCA9IHRpbGUudHkxIC0gdGlsZS50eTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuY29tcG9uZW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlcy5wdXNoKHRpbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC50aWxlcyA9IHRpbGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjb21wb25lbnRzQ291bnQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IGNvbXBvbmVudHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSB0aWxlcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlQ29tcG9uZW50ID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUgPSB0aWxlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC50Y3gwID0gTWF0aC5jZWlsKHRpbGUudHgwIC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC50Y3kwID0gTWF0aC5jZWlsKHRpbGUudHkwIC8gY29tcG9uZW50LllSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC50Y3gxID0gTWF0aC5jZWlsKHRpbGUudHgxIC8gY29tcG9uZW50LlhSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC50Y3kxID0gTWF0aC5jZWlsKHRpbGUudHkxIC8gY29tcG9uZW50LllSc2l6KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC53aWR0aCA9IHRpbGVDb21wb25lbnQudGN4MSAtIHRpbGVDb21wb25lbnQudGN4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZUNvbXBvbmVudC5oZWlnaHQgPSB0aWxlQ29tcG9uZW50LnRjeTEgLSB0aWxlQ29tcG9uZW50LnRjeTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuY29tcG9uZW50c1tpXSA9IHRpbGVDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0QmxvY2tzRGltZW5zaW9ucyhjb250ZXh0LCBjb21wb25lbnQsIHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RPckNvYyA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29kT3JDb2MuZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5QUHggPSAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuUFB5ID0gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5QUHggPSBjb2RPckNvYy5wcmVjaW5jdHNTaXplc1tyXS5QUHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LlBQeSA9IGNvZE9yQ29jLnByZWNpbmN0c1NpemVzW3JdLlBQeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnhjYl8gPSByID4gMCA/IE1hdGgubWluKGNvZE9yQ29jLnhjYiwgcmVzdWx0LlBQeCAtIDEpIDogTWF0aC5taW4oY29kT3JDb2MueGNiLCByZXN1bHQuUFB4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC55Y2JfID0gciA+IDAgPyBNYXRoLm1pbihjb2RPckNvYy55Y2IsIHJlc3VsdC5QUHkgLSAxKSA6IE1hdGgubWluKGNvZE9yQ29jLnljYiwgcmVzdWx0LlBQeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRQcmVjaW5jdHMoY29udGV4dCwgcmVzb2x1dGlvbiwgZGltZW5zaW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0V2lkdGggPSAxIDw8IGRpbWVuc2lvbnMuUFB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0SGVpZ2h0ID0gMSA8PCBkaW1lbnNpb25zLlBQeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1plcm9SZXMgPSByZXNvbHV0aW9uLnJlc0xldmVsID09PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0V2lkdGhJblN1YmJhbmQgPSAxIDw8IGRpbWVuc2lvbnMuUFB4ICsgKGlzWmVyb1JlcyA/IDAgOiAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RIZWlnaHRJblN1YmJhbmQgPSAxIDw8IGRpbWVuc2lvbnMuUFB5ICsgKGlzWmVyb1JlcyA/IDAgOiAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtcHJlY2luY3Rzd2lkZSA9IHJlc29sdXRpb24udHJ4MSA+IHJlc29sdXRpb24udHJ4MCA/IE1hdGguY2VpbChyZXNvbHV0aW9uLnRyeDEgLyBwcmVjaW5jdFdpZHRoKSAtIE1hdGguZmxvb3IocmVzb2x1dGlvbi50cngwIC8gcHJlY2luY3RXaWR0aCkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0c2hpZ2ggPSByZXNvbHV0aW9uLnRyeTEgPiByZXNvbHV0aW9uLnRyeTAgPyBNYXRoLmNlaWwocmVzb2x1dGlvbi50cnkxIC8gcHJlY2luY3RIZWlnaHQpIC0gTWF0aC5mbG9vcihyZXNvbHV0aW9uLnRyeTAgLyBwcmVjaW5jdEhlaWdodCkgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IG51bXByZWNpbmN0c3dpZGUgKiBudW1wcmVjaW5jdHNoaWdoO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2luY3RXaWR0aDogcHJlY2luY3RXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaW5jdEhlaWdodDogcHJlY2luY3RIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtcHJlY2luY3Rzd2lkZTogbnVtcHJlY2luY3Rzd2lkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1wcmVjaW5jdHNoaWdoOiBudW1wcmVjaW5jdHNoaWdoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXByZWNpbmN0czogbnVtcHJlY2luY3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0V2lkdGhJblN1YmJhbmQ6IHByZWNpbmN0V2lkdGhJblN1YmJhbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6IHByZWNpbmN0SGVpZ2h0SW5TdWJiYW5kXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGRpbWVuc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4Y2JfID0gZGltZW5zaW9ucy54Y2JfO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHljYl8gPSBkaW1lbnNpb25zLnljYl87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrV2lkdGggPSAxIDw8IHhjYl87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrSGVpZ2h0ID0gMSA8PCB5Y2JfO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNieDAgPSBzdWJiYW5kLnRieDAgPj4geGNiXztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYnkwID0gc3ViYmFuZC50YnkwID4+IHljYl87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2J4MSA9IHN1YmJhbmQudGJ4MSArIGNvZGVibG9ja1dpZHRoIC0gMSA+PiB4Y2JfO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNieTEgPSBzdWJiYW5kLnRieTEgKyBjb2RlYmxvY2tIZWlnaHQgLSAxID4+IHljYl87XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RQYXJhbWV0ZXJzID0gc3ViYmFuZC5yZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlYmxvY2tzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgY29kZWJsb2NrLCBwcmVjaW5jdE51bWJlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gY2J5MDsgaiA8IGNieTE7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGNieDA7IGkgPCBjYngxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2J4OiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2J5OiBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJ4MDogY29kZWJsb2NrV2lkdGggKiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJ5MDogY29kZWJsb2NrSGVpZ2h0ICogaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRieDE6IGNvZGVibG9ja1dpZHRoICogKGkgKyAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRieTE6IGNvZGVibG9ja0hlaWdodCAqIChqICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLnRieDBfID0gTWF0aC5tYXgoc3ViYmFuZC50YngwLCBjb2RlYmxvY2sudGJ4MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jay50YnkwXyA9IE1hdGgubWF4KHN1YmJhbmQudGJ5MCwgY29kZWJsb2NrLnRieTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2sudGJ4MV8gPSBNYXRoLm1pbihzdWJiYW5kLnRieDEsIGNvZGVibG9jay50YngxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLnRieTFfID0gTWF0aC5taW4oc3ViYmFuZC50YnkxLCBjb2RlYmxvY2sudGJ5MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaSA9IE1hdGguZmxvb3IoKGNvZGVibG9jay50YngwXyAtIHN1YmJhbmQudGJ4MCkgLyBwcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RXaWR0aEluU3ViYmFuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaiA9IE1hdGguZmxvb3IoKGNvZGVibG9jay50YnkwXyAtIHN1YmJhbmQudGJ5MCkgLyBwcmVjaW5jdFBhcmFtZXRlcnMucHJlY2luY3RIZWlnaHRJblN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaW5jdE51bWJlciA9IHBpICsgcGogKiBwcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3Rzd2lkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLnByZWNpbmN0TnVtYmVyID0gcHJlY2luY3ROdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jay5zdWJiYW5kVHlwZSA9IHN1YmJhbmQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLkxibG9jayA9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVibG9jay50YngxXyA8PSBjb2RlYmxvY2sudGJ4MF8gfHwgY29kZWJsb2NrLnRieTFfIDw9IGNvZGVibG9jay50YnkwXykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2tzLnB1c2goY29kZWJsb2NrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWNpbmN0ID0gcHJlY2luY3RzW3ByZWNpbmN0TnVtYmVyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlY2luY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBwcmVjaW5jdC5jYnhNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaW5jdC5jYnhNaW4gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID4gcHJlY2luY3QuY2J4TWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2luY3QuY2J4TWF4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCBwcmVjaW5jdC5jYnlNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaW5jdC5jYnhNaW4gPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqID4gcHJlY2luY3QuY2J5TWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2luY3QuY2J5TWF4ID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0c1twcmVjaW5jdE51bWJlcl0gPSBwcmVjaW5jdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnhNaW46IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2J5TWluOiBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNieE1heDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnlNYXg6IGpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2sucHJlY2luY3QgPSBwcmVjaW5jdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQuY29kZWJsb2NrUGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2tXaWR0aDogeGNiXyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2tIZWlnaHQ6IHljYl8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtY29kZWJsb2Nrd2lkZTogY2J4MSAtIGNieDAgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWNvZGVibG9ja2hpZ2g6IGNieTEgLSBjYnkwICsgMVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQuY29kZWJsb2NrcyA9IGNvZGVibG9ja3M7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnByZWNpbmN0cyA9IHByZWNpbmN0cztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBwcmVjaW5jdE51bWJlciwgbGF5ZXJOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdENvZGVibG9ja3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJiYW5kcyA9IHJlc29sdXRpb24uc3ViYmFuZHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHN1YmJhbmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYmFuZCA9IHN1YmJhbmRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlYmxvY2tzID0gc3ViYmFuZC5jb2RlYmxvY2tzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gY29kZWJsb2Nrcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlYmxvY2sgPSBjb2RlYmxvY2tzW2pdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlYmxvY2sucHJlY2luY3ROdW1iZXIgIT09IHByZWNpbmN0TnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0Q29kZWJsb2Nrcy5wdXNoKGNvZGVibG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyTnVtYmVyOiBsYXllck51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2tzOiBwcmVjaW5jdENvZGVibG9ja3NcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMYXllclJlc29sdXRpb25Db21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5ZXJzQ291bnQgPSB0aWxlLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPCBjb21wb25lbnRzQ291bnQ7IHErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IE1hdGgubWF4KG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudCwgdGlsZS5jb21wb25lbnRzW3FdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhY2tldCA9IGZ1bmN0aW9uIEpweEltYWdlX25leHRQYWNrZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDsgbCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyByIDw9IG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IGNvbXBvbmVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBrIDwgbnVtcHJlY2luY3RzOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIGssIGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdPdXQgb2YgcGFja2V0cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlc29sdXRpb25MYXllckNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBxID0gMDsgcSA8IGNvbXBvbmVudHNDb3VudDsgcSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gTWF0aC5tYXgobWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50LCB0aWxlLmNvbXBvbmVudHNbcV0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7IHIrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50OyBsKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBpIDwgY29tcG9uZW50c0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHIgPiBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtcHJlY2luY3RzID0gcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGsgPCBudW1wcmVjaW5jdHM7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhY2tldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoJ091dCBvZiBwYWNrZXRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVzb2x1dGlvblBvc2l0aW9uQ29tcG9uZW50TGF5ZXJJdGVyYXRvcihjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZUluZGV4ID0gY29udGV4dC5jdXJyZW50VGlsZS5pbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1t0aWxlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxheWVyc0NvdW50ID0gdGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHNDb3VudCA9IHNpei5Dc2l6O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwsIHIsIGMsIHA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4RGVjb21wb3NpdGlvbkxldmVsc0NvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBNYXRoLm1heChtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQsIGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heE51bVByZWNpbmN0c0luTGV2ZWwgPSBuZXcgSW50MzJBcnJheShtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyID0gMDsgciA8PSBtYXhEZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ7ICsrcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhOdW1QcmVjaW5jdHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgKytjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHV0aW9ucyA9IHRpbGUuY29tcG9uZW50c1tjXS5yZXNvbHV0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA8IHJlc29sdXRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtUHJlY2luY3RzID0gTWF0aC5tYXgobWF4TnVtUHJlY2luY3RzLCByZXNvbHV0aW9uc1tyXS5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bVByZWNpbmN0c0luTGV2ZWxbcl0gPSBtYXhOdW1QcmVjaW5jdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGwgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHAgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyByIDw9IG1heERlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBwIDwgbWF4TnVtUHJlY2luY3RzSW5MZXZlbFtyXTsgcCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyID4gY29tcG9uZW50LmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bXByZWNpbmN0cyA9IHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwID49IG51bXByZWNpbmN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFja2V0ID0gY3JlYXRlUGFja2V0KHJlc29sdXRpb24sIHAsIGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdPdXQgb2YgcGFja2V0cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBvc2l0aW9uQ29tcG9uZW50UmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNTaXplcyA9IGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUodGlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMgPSBwcmVjaW5jdHNTaXplcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRQYWNrZXQgPSBmdW5jdGlvbiBKcHhJbWFnZV9uZXh0UGFja2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBweSA8IHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLm1heE51bUhpZ2g7IHB5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHB4IDwgcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMubWF4TnVtV2lkZTsgcHgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCA9IGNvbXBvbmVudC5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplSW5JbWFnZVNjYWxlID0gcHJlY2luY3RzU2l6ZXMuY29tcG9uZW50c1tjXS5yZXNvbHV0aW9uc1tyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBnZXRQcmVjaW5jdEluZGV4SWZFeGlzdChweCwgcHksIHNpemVJbkltYWdlU2NhbGUsIHByZWNpbmN0c0l0ZXJhdGlvblNpemVzLCByZXNvbHV0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoayA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgbCA8IGxheWVyc0NvdW50Oykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhY2tldCA9IGNyZWF0ZVBhY2tldChyZXNvbHV0aW9uLCBrLCBsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYWNrZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdPdXQgb2YgcGFja2V0cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbXBvbmVudFBvc2l0aW9uUmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGVJbmRleCA9IGNvbnRleHQuY3VycmVudFRpbGUuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXllcnNDb3VudCA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5sYXllcnNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzQ291bnQgPSBzaXouQ3NpejtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNTaXplcyA9IGdldFByZWNpbmN0U2l6ZXNJbkltYWdlU2NhbGUodGlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0UGFja2V0ID0gZnVuY3Rpb24gSnB4SW1hZ2VfbmV4dFBhY2tldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgYyA8IGNvbXBvbmVudHNDb3VudDsgKytjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdHNJdGVyYXRpb25TaXplcyA9IHByZWNpbmN0c1NpemVzLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHkgPCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcy5tYXhOdW1IaWdoOyBweSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcHggPCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcy5tYXhOdW1XaWRlOyBweCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHIgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyByKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplSW5JbWFnZVNjYWxlID0gcHJlY2luY3RzSXRlcmF0aW9uU2l6ZXMucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrID0gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QocHgsIHB5LCBzaXplSW5JbWFnZVNjYWxlLCBwcmVjaW5jdHNJdGVyYXRpb25TaXplcywgcmVzb2x1dGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGwgPCBsYXllcnNDb3VudDspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBjcmVhdGVQYWNrZXQocmVzb2x1dGlvbiwgaywgbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFja2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSnB4RXJyb3IoJ091dCBvZiBwYWNrZXRzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0UHJlY2luY3RJbmRleElmRXhpc3QocHhJbmRleCwgcHlJbmRleCwgc2l6ZUluSW1hZ2VTY2FsZSwgcHJlY2luY3RJdGVyYXRpb25TaXplcywgcmVzb2x1dGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc1ggPSBweEluZGV4ICogcHJlY2luY3RJdGVyYXRpb25TaXplcy5taW5XaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3NZID0gcHlJbmRleCAqIHByZWNpbmN0SXRlcmF0aW9uU2l6ZXMubWluSGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zWCAlIHNpemVJbkltYWdlU2NhbGUud2lkdGggIT09IDAgfHwgcG9zWSAlIHNpemVJbkltYWdlU2NhbGUuaGVpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydFByZWNpbmN0Um93SW5kZXggPSBwb3NZIC8gc2l6ZUluSW1hZ2VTY2FsZS53aWR0aCAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWCAvIHNpemVJbkltYWdlU2NhbGUuaGVpZ2h0ICsgc3RhcnRQcmVjaW5jdFJvd0luZGV4O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0UHJlY2luY3RTaXplc0luSW1hZ2VTY2FsZSh0aWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gdGlsZS5jb21wb25lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW5XaWR0aCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluSGVpZ2h0ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhOdW1XaWRlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhOdW1IaWdoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplUGVyQ29tcG9uZW50ID0gbmV3IEFycmF5KGNvbXBvbmVudHNDb3VudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZVBlclJlc29sdXRpb24gPSBuZXcgQXJyYXkoZGVjb21wb3NpdGlvbkxldmVsc0NvdW50ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbldpZHRoQ3VycmVudENvbXBvbmVudCA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heE51bUhpZ2hDdXJyZW50Q29tcG9uZW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgciA9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb24gPSBjb21wb25lbnQucmVzb2x1dGlvbnNbcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aEN1cnJlbnRSZXNvbHV0aW9uID0gc2NhbGUgKiByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0Q3VycmVudFJlc29sdXRpb24gPSBzY2FsZSAqIHJlc29sdXRpb24ucHJlY2luY3RQYXJhbWV0ZXJzLnByZWNpbmN0SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1pbihtaW5XaWR0aEN1cnJlbnRDb21wb25lbnQsIHdpZHRoQ3VycmVudFJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50ID0gTWF0aC5taW4obWluSGVpZ2h0Q3VycmVudENvbXBvbmVudCwgaGVpZ2h0Q3VycmVudFJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1XaWRlQ3VycmVudENvbXBvbmVudCA9IE1hdGgubWF4KG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LCByZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtSGlnaEN1cnJlbnRDb21wb25lbnQgPSBNYXRoLm1heChtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudCwgcmVzb2x1dGlvbi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVQZXJSZXNvbHV0aW9uW3JdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoQ3VycmVudFJlc29sdXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodEN1cnJlbnRSZXNvbHV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlIDw8PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbldpZHRoID0gTWF0aC5taW4obWluV2lkdGgsIG1pbldpZHRoQ3VycmVudENvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0ID0gTWF0aC5taW4obWluSGVpZ2h0LCBtaW5IZWlnaHRDdXJyZW50Q29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1XaWRlID0gTWF0aC5tYXgobWF4TnVtV2lkZSwgbWF4TnVtV2lkZUN1cnJlbnRDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bUhpZ2ggPSBNYXRoLm1heChtYXhOdW1IaWdoLCBtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZVBlckNvbXBvbmVudFtjXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbnM6IHNpemVQZXJSZXNvbHV0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluV2lkdGhDdXJyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5IZWlnaHQ6IG1pbkhlaWdodEN1cnJlbnRDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heE51bVdpZGU6IG1heE51bVdpZGVDdXJyZW50Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1IaWdoOiBtYXhOdW1IaWdoQ3VycmVudENvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50czogc2l6ZVBlckNvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5XaWR0aDogbWluV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSGVpZ2h0OiBtaW5IZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4TnVtV2lkZTogbWF4TnVtV2lkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhOdW1IaWdoOiBtYXhOdW1IaWdoXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRQYWNrZXRzKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXogPSBjb250ZXh0LlNJWjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50ID0gdGlsZS5jb21wb25lbnRzW2NdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYmFuZHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHIgPSAwOyByIDw9IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudDsgcisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibG9ja3NEaW1lbnNpb25zID0gZ2V0QmxvY2tzRGltZW5zaW9ucyhjb250ZXh0LCBjb21wb25lbnQsIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIDw8IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCAtIHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24udHJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi50cnkwID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3kwIC8gc2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uLnRyeDEgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeDEgLyBzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24udHJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi5yZXNMZXZlbCA9IHI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUHJlY2luY3RzKGNvbnRleHQsIHJlc29sdXRpb24sIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9ucy5wdXNoKHJlc29sdXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViYmFuZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAociA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50eXBlID0gJ0xMJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MCAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MSAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQucmVzb2x1dGlvbiA9IHJlc29sdXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZENvZGVibG9ja3MoY29udGV4dCwgc3ViYmFuZCwgYmxvY2tzRGltZW5zaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi5zdWJiYW5kcyA9IFtzdWJiYW5kXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBic2NhbGUgPSAxIDw8IGRlY29tcG9zaXRpb25MZXZlbHNDb3VudCAtIHIgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdXRpb25TdWJiYW5kcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50eXBlID0gJ0hMJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50eXBlID0gJ0xIJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gYnNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50eXBlID0gJ0hIJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ4MCA9IE1hdGguY2VpbChjb21wb25lbnQudGN4MCAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnRieTAgPSBNYXRoLmNlaWwoY29tcG9uZW50LnRjeTAgLyBic2NhbGUgLSAwLjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZC50YngxID0gTWF0aC5jZWlsKGNvbXBvbmVudC50Y3gxIC8gYnNjYWxlIC0gMC41KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmJhbmQudGJ5MSA9IE1hdGguY2VpbChjb21wb25lbnQudGN5MSAvIGJzY2FsZSAtIDAuNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kLnJlc29sdXRpb24gPSByZXNvbHV0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRDb2RlYmxvY2tzKGNvbnRleHQsIHN1YmJhbmQsIGJsb2Nrc0RpbWVuc2lvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViYmFuZHMucHVzaChzdWJiYW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb25TdWJiYW5kcy5wdXNoKHN1YmJhbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbi5zdWJiYW5kcyA9IHJlc29sdXRpb25TdWJiYW5kcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5yZXNvbHV0aW9ucyA9IHJlc29sdXRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zdWJiYW5kcyA9IHN1YmJhbmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3Jlc3Npb25PcmRlciA9IHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHByb2dyZXNzaW9uT3JkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IExheWVyUmVzb2x1dGlvbkNvbXBvbmVudFBvc2l0aW9uSXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBSZXNvbHV0aW9uTGF5ZXJDb21wb25lbnRQb3NpdGlvbkl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZS5wYWNrZXRzSXRlcmF0b3IgPSBuZXcgUmVzb2x1dGlvblBvc2l0aW9uQ29tcG9uZW50TGF5ZXJJdGVyYXRvcihjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUucGFja2V0c0l0ZXJhdG9yID0gbmV3IFBvc2l0aW9uQ29tcG9uZW50UmVzb2x1dGlvbkxheWVySXRlcmF0b3IoY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWxlLnBhY2tldHNJdGVyYXRvciA9IG5ldyBDb21wb25lbnRQb3NpdGlvblJlc29sdXRpb25MYXllckl0ZXJhdG9yKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKcHhFcnJvcihcIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyIFwiLmNvbmNhdChwcm9ncmVzc2lvbk9yZGVyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZVRpbGVQYWNrZXRzKGNvbnRleHQsIGRhdGEsIG9mZnNldCwgZGF0YUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyU2l6ZSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcE5leHRCaXQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZEJpdHMoY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyU2l6ZSA8IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZGF0YVtvZmZzZXQgKyBwb3NpdGlvbl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBOZXh0Qml0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXIgPDwgNyB8IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplICs9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDggfCBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyU2l6ZSArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIgPT09IDB4RkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBOZXh0Qml0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlclNpemUgLT0gY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciA+Pj4gYnVmZmVyU2l6ZSAmICgxIDw8IGNvdW50KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNraXBNYXJrZXJJZkVxdWFsKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbb2Zmc2V0ICsgcG9zaXRpb24gLSAxXSA9PT0gMHhGRiAmJiBkYXRhW29mZnNldCArIHBvc2l0aW9uXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEJ5dGVzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFbb2Zmc2V0ICsgcG9zaXRpb25dID09PSAweEZGICYmIGRhdGFbb2Zmc2V0ICsgcG9zaXRpb24gKyAxXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEJ5dGVzKDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNraXBCeXRlcyhjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IGNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhbGlnblRvQnl0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChza2lwTmV4dEJpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwTmV4dEJpdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZENvZGluZ3Bhc3NlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZEJpdHMoMSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRCaXRzKDEpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlYWRCaXRzKDIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVhZEJpdHMoNSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcmVhZEJpdHMoNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICsgMzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlSW5kZXggPSBjb250ZXh0LmN1cnJlbnRUaWxlLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGUgPSBjb250ZXh0LnRpbGVzW3RpbGVJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29wTWFya2VyVXNlZCA9IGNvbnRleHQuQ09ELnNvcE1hcmtlclVzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXBoTWFya2VyVXNlZCA9IGNvbnRleHQuQ09ELmVwaE1hcmtlclVzZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFja2V0c0l0ZXJhdG9yID0gdGlsZS5wYWNrZXRzSXRlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3NpdGlvbiA8IGRhdGFMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnblRvQnl0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvcE1hcmtlclVzZWQgJiYgc2tpcE1hcmtlcklmRXF1YWwoMHg5MSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcEJ5dGVzKDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWNrZXQgPSBwYWNrZXRzSXRlcmF0b3IubmV4dFBhY2tldCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFkQml0cygxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5ZXJOdW1iZXIgPSBwYWNrZXQubGF5ZXJOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXVlID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBhY2tldC5jb2RlYmxvY2tzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrID0gcGFja2V0LmNvZGVibG9ja3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaW5jdCA9IGNvZGVibG9jay5wcmVjaW5jdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVibG9ja0NvbHVtbiA9IGNvZGVibG9jay5jYnggLSBwcmVjaW5jdC5jYnhNaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlYmxvY2tSb3cgPSBjb2RlYmxvY2suY2J5IC0gcHJlY2luY3QuY2J5TWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrSW5jbHVkZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0VGltZUluY2x1c2lvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVSZWFkeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZWJsb2NrWydpbmNsdWRlZCddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9ja0luY2x1ZGVkID0gISFyZWFkQml0cygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0ID0gY29kZWJsb2NrLnByZWNpbmN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluY2x1c2lvblRyZWUsIHplcm9CaXRQbGFuZXNUcmVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlY2luY3RbJ2luY2x1c2lvblRyZWUnXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaW9uVHJlZSA9IHByZWNpbmN0LmluY2x1c2lvblRyZWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHByZWNpbmN0LmNieE1heCAtIHByZWNpbmN0LmNieE1pbiArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHByZWNpbmN0LmNieU1heCAtIHByZWNpbmN0LmNieU1pbiArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaW9uVHJlZSA9IG5ldyBJbmNsdXNpb25UcmVlKHdpZHRoLCBoZWlnaHQsIGxheWVyTnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZSA9IG5ldyBUYWdUcmVlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0LmluY2x1c2lvblRyZWUgPSBpbmNsdXNpb25UcmVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpbmN0Lnplcm9CaXRQbGFuZXNUcmVlID0gemVyb0JpdFBsYW5lc1RyZWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmNsdXNpb25UcmVlLnJlc2V0KGNvZGVibG9ja0NvbHVtbiwgY29kZWJsb2NrUm93LCBsYXllck51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZEJpdHMoMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVhZHkgPSAhaW5jbHVzaW9uVHJlZS5uZXh0TGV2ZWwoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2suaW5jbHVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9ja0luY2x1ZGVkID0gZmlyc3RUaW1lSW5jbHVzaW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2lvblRyZWUuaW5jcmVtZW50VmFsdWUobGF5ZXJOdW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvZGVibG9ja0luY2x1ZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFRpbWVJbmNsdXNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm9CaXRQbGFuZXNUcmVlID0gcHJlY2luY3QuemVyb0JpdFBsYW5lc1RyZWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvQml0UGxhbmVzVHJlZS5yZXNldChjb2RlYmxvY2tDb2x1bW4sIGNvZGVibG9ja1Jvdyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRCaXRzKDEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlUmVhZHkgPSAhemVyb0JpdFBsYW5lc1RyZWUubmV4dExldmVsKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlUmVhZHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemVyb0JpdFBsYW5lc1RyZWUuaW5jcmVtZW50VmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jay56ZXJvQml0UGxhbmVzID0gemVyb0JpdFBsYW5lc1RyZWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kaW5ncGFzc2VzID0gcmVhZENvZGluZ3Bhc3NlcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkQml0cygxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLkxibG9jaysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGluZ3Bhc3Nlc0xvZzIgPSAoMCwgX3V0aWwubG9nMikoY29kaW5ncGFzc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHMgPSAoY29kaW5ncGFzc2VzIDwgMSA8PCBjb2RpbmdwYXNzZXNMb2cyID8gY29kaW5ncGFzc2VzTG9nMiAtIDEgOiBjb2RpbmdwYXNzZXNMb2cyKSArIGNvZGVibG9jay5MYmxvY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlZERhdGFMZW5ndGggPSByZWFkQml0cyhiaXRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWUucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2s6IGNvZGVibG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ3Bhc3NlczogY29kaW5ncGFzc2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxlbmd0aDogY29kZWREYXRhTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduVG9CeXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXBoTWFya2VyVXNlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwTWFya2VySWZFcXVhbCgweDkyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFja2V0SXRlbSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVibG9jayA9IHBhY2tldEl0ZW0uY29kZWJsb2NrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlYmxvY2tbJ2RhdGEnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlYmxvY2suZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWJsb2NrLmRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IG9mZnNldCArIHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBvZmZzZXQgKyBwb3NpdGlvbiArIHBhY2tldEl0ZW0uZGF0YUxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGluZ3Bhc3NlczogcGFja2V0SXRlbS5jb2RpbmdwYXNzZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IHBhY2tldEl0ZW0uZGF0YUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvcHlDb2VmZmljaWVudHMoY29lZmZpY2llbnRzLCBsZXZlbFdpZHRoLCBsZXZlbEhlaWdodCwgc3ViYmFuZCwgZGVsdGEsIG1iLCByZXZlcnNpYmxlLCBzZWdtZW50YXRpb25TeW1ib2xVc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDAgPSBzdWJiYW5kLnRieDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTAgPSBzdWJiYW5kLnRieTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBzdWJiYW5kLnRieDEgLSBzdWJiYW5kLnRieDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrcyA9IHN1YmJhbmQuY29kZWJsb2NrcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByaWdodCA9IHN1YmJhbmQudHlwZS5jaGFyQXQoMCkgPT09ICdIJyA/IDEgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvdHRvbSA9IHN1YmJhbmQudHlwZS5jaGFyQXQoMSkgPT09ICdIJyA/IGxldmVsV2lkdGggOiAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjb2RlYmxvY2tzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZWJsb2NrID0gY29kZWJsb2Nrc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tXaWR0aCA9IGNvZGVibG9jay50YngxXyAtIGNvZGVibG9jay50YngwXztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvY2tIZWlnaHQgPSBjb2RlYmxvY2sudGJ5MV8gLSBjb2RlYmxvY2sudGJ5MF87XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tXaWR0aCA9PT0gMCB8fCBibG9ja0hlaWdodCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZWJsb2NrWydkYXRhJ10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0TW9kZWwsIGN1cnJlbnRDb2RpbmdwYXNzVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRNb2RlbCA9IG5ldyBCaXRNb2RlbChibG9ja1dpZHRoLCBibG9ja0hlaWdodCwgY29kZWJsb2NrLnN1YmJhbmRUeXBlLCBjb2RlYmxvY2suemVyb0JpdFBsYW5lcywgbWIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RpbmdwYXNzVHlwZSA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBjb2RlYmxvY2suZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMZW5ndGggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmdwYXNzZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqLCBqaiwgZGF0YUl0ZW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGRhdGEubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhSXRlbSA9IGRhdGFbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsTGVuZ3RoICs9IGRhdGFJdGVtLmVuZCAtIGRhdGFJdGVtLnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RpbmdwYXNzZXMgKz0gZGF0YUl0ZW0uY29kaW5ncGFzc2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGVkRGF0YSA9IG5ldyBVaW50OEFycmF5KHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBkYXRhLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW0gPSBkYXRhW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBkYXRhSXRlbS5kYXRhLnN1YmFycmF5KGRhdGFJdGVtLnN0YXJ0LCBkYXRhSXRlbS5lbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkRGF0YS5zZXQoY2h1bmssIHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gbmV3IF9hcml0aG1ldGljX2RlY29kZXIuQXJpdGhtZXRpY0RlY29kZXIoZW5jb2RlZERhdGEsIDAsIHRvdGFsTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRNb2RlbC5zZXREZWNvZGVyKGRlY29kZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGNvZGluZ3Bhc3NlczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudENvZGluZ3Bhc3NUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0TW9kZWwucnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRNb2RlbC5ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0TW9kZWwucnVuQ2xlYW51cFBhc3MoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWdtZW50YXRpb25TeW1ib2xVc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdE1vZGVsLmNoZWNrU2VnbWVudGF0aW9uU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29kaW5ncGFzc1R5cGUgPSAoY3VycmVudENvZGluZ3Bhc3NUeXBlICsgMSkgJSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBjb2RlYmxvY2sudGJ4MF8gLSB4MCArIChjb2RlYmxvY2sudGJ5MF8gLSB5MCkgKiB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbiA9IGJpdE1vZGVsLmNvZWZmaWNlbnRzU2lnbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFnbml0dWRlID0gYml0TW9kZWwuY29lZmZpY2VudHNNYWduaXR1ZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNEZWNvZGVkID0gYml0TW9kZWwuYml0c0RlY29kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hZ25pdHVkZUNvcnJlY3Rpb24gPSByZXZlcnNpYmxlID8gMCA6IDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaywgbiwgbmI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcmxlYXZlID0gc3ViYmFuZC50eXBlICE9PSAnTEwnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGJsb2NrSGVpZ2h0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IG9mZnNldCAvIHdpZHRoIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsT2Zmc2V0ID0gMiAqIHJvdyAqIChsZXZlbFdpZHRoIC0gd2lkdGgpICsgcmlnaHQgKyBib3R0b207XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IGJsb2NrV2lkdGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG1hZ25pdHVkZVtwb3NpdGlvbl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IChuICsgbWFnbml0dWRlQ29ycmVjdGlvbikgKiBkZWx0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaWduW3Bvc2l0aW9uXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gLW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmIgPSBiaXRzRGVjb2RlZFtwb3NpdGlvbl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IGludGVybGVhdmUgPyBsZXZlbE9mZnNldCArIChvZmZzZXQgPDwgMSkgOiBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2ZXJzaWJsZSAmJiBuYiA+PSBtYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2VmZmljaWVudHNbcG9zXSA9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2llbnRzW3Bvc10gPSBuICogKDEgPDwgbWIgLSBuYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gd2lkdGggLSBibG9ja1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybVRpbGUoY29udGV4dCwgdGlsZSwgYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudCA9IHRpbGUuY29tcG9uZW50c1tjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RpbmdTdHlsZVBhcmFtZXRlcnMgPSBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YW50aXphdGlvblBhcmFtZXRlcnMgPSBjb21wb25lbnQucXVhbnRpemF0aW9uUGFyYW1ldGVycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwcWNkcyA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuU1BxY2RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxhckV4cG91bmRlZCA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuc2NhbGFyRXhwb3VuZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGd1YXJkQml0cyA9IHF1YW50aXphdGlvblBhcmFtZXRlcnMuZ3VhcmRCaXRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ21lbnRhdGlvblN5bWJvbFVzZWQgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMuc2VnbWVudGF0aW9uU3ltYm9sVXNlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVjaXNpb24gPSBjb250ZXh0LmNvbXBvbmVudHNbY10ucHJlY2lzaW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJldmVyc2libGUgPSBjb2RpbmdTdHlsZVBhcmFtZXRlcnMucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IHJldmVyc2libGUgPyBuZXcgUmV2ZXJzaWJsZVRyYW5zZm9ybSgpIDogbmV3IElycmV2ZXJzaWJsZVRyYW5zZm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YmJhbmRDb2VmZmljaWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gZGVjb21wb3NpdGlvbkxldmVsc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb2x1dGlvbiA9IGNvbXBvbmVudC5yZXNvbHV0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSByZXNvbHV0aW9uLnRyeDEgLSByZXNvbHV0aW9uLnRyeDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHJlc29sdXRpb24udHJ5MSAtIHJlc29sdXRpb24udHJ5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29lZmZpY2llbnRzID0gbmV3IEZsb2F0MzJBcnJheSh3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSByZXNvbHV0aW9uLnN1YmJhbmRzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG11LCBlcHNpbG9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2NhbGFyRXhwb3VuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdSA9IHNwcWNkc1swXS5tdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwc2lsb24gPSBzcHFjZHNbMF0uZXBzaWxvbiArIChpID4gMCA/IDEgLSBpIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdSA9IHNwcWNkc1tiXS5tdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwc2lsb24gPSBzcHFjZHNbYl0uZXBzaWxvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJiYW5kID0gcmVzb2x1dGlvbi5zdWJiYW5kc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdhaW5Mb2cyID0gU3ViYmFuZHNHYWluTG9nMltzdWJiYW5kLnR5cGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSByZXZlcnNpYmxlID8gMSA6IE1hdGgucG93KDIsIHByZWNpc2lvbiArIGdhaW5Mb2cyIC0gZXBzaWxvbikgKiAoMSArIG11IC8gMjA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYiA9IGd1YXJkQml0cyArIGVwc2lsb24gLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5Q29lZmZpY2llbnRzKGNvZWZmaWNpZW50cywgd2lkdGgsIGhlaWdodCwgc3ViYmFuZCwgZGVsdGEsIG1iLCByZXZlcnNpYmxlLCBzZWdtZW50YXRpb25TeW1ib2xVc2VkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJiYW5kQ29lZmZpY2llbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogY29lZmZpY2llbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0cmFuc2Zvcm0uY2FsY3VsYXRlKHN1YmJhbmRDb2VmZmljaWVudHMsIGNvbXBvbmVudC50Y3gwLCBjb21wb25lbnQudGN5MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGNvbXBvbmVudC50Y3gwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogY29tcG9uZW50LnRjeTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHJlc3VsdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHJlc3VsdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IHJlc3VsdC5pdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRyYW5zZm9ybUNvbXBvbmVudHMoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpeiA9IGNvbnRleHQuU0laO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBjb250ZXh0LmNvbXBvbmVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0SW1hZ2VzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNvbnRleHQudGlsZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlID0gY29udGV4dC50aWxlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtZWRUaWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IGNvbXBvbmVudHNDb3VudDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkVGlsZXNbY10gPSB0cmFuc2Zvcm1UaWxlKGNvbnRleHQsIHRpbGUsIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aWxlMCA9IHRyYW5zZm9ybWVkVGlsZXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBVaW50OENsYW1wZWRBcnJheSh0aWxlMC5pdGVtcy5sZW5ndGggKiBjb21wb25lbnRzQ291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHRpbGUwLmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogdGlsZTAudG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGlsZTAud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGlsZTAuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogb3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hpZnQsIG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGlsZS5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLm11bHRpcGxlQ29tcG9uZW50VHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3VyQ29tcG9uZW50cyA9IGNvbXBvbmVudHNDb3VudCA9PT0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkwaXRlbXMgPSB0cmFuc2Zvcm1lZFRpbGVzWzBdLml0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTFpdGVtcyA9IHRyYW5zZm9ybWVkVGlsZXNbMV0uaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5Mml0ZW1zID0gdHJhbnNmb3JtZWRUaWxlc1syXS5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkzaXRlbXMgPSBmb3VyQ29tcG9uZW50cyA/IHRyYW5zZm9ybWVkVGlsZXNbM10uaXRlbXMgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IGNvbXBvbmVudHNbMF0ucHJlY2lzaW9uIC0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gKDEyOCA8PCBzaGlmdCkgKyAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnQwID0gdGlsZS5jb21wb25lbnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGEwMSA9IGNvbXBvbmVudHNDb3VudCAtIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpqID0geTBpdGVtcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wb25lbnQwLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBqajsgaisrLCBwb3MgKz0gYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkwID0geTBpdGVtc1tqXSArIG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IHkxaXRlbXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5Mml0ZW1zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNDAyICogeTIgPj4gc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0W3BvcysrXSA9IHkwIC0gMC4zNDQxMyAqIHkxIC0gMC43MTQxNCAqIHkyID4+IHNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFtwb3MrK10gPSB5MCArIDEuNzcyICogeTEgPj4gc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgamo7IGorKywgcG9zICs9IGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MCA9IHkwaXRlbXNbal0gKyBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSB5MWl0ZW1zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyID0geTJpdGVtc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IHkwIC0gKHkyICsgeTEgPj4gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0W3BvcysrXSA9IGcgKyB5MiA+PiBzaGlmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbcG9zKytdID0gZyA+PiBzaGlmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbcG9zKytdID0gZyArIHkxID4+IHNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdXJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBwb3MgPSAzOyBqIDwgamo7IGorKywgcG9zICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbcG9zXSA9IHkzaXRlbXNbal0gKyBvZmZzZXQgPj4gc2hpZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgY29tcG9uZW50c0NvdW50OyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtcyA9IHRyYW5zZm9ybWVkVGlsZXNbY10uaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IGNvbXBvbmVudHNbY10ucHJlY2lzaW9uIC0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9ICgxMjggPDwgc2hpZnQpICsgMC41O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHBvcyA9IGMsIGogPSAwLCBqaiA9IGl0ZW1zLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbcG9zXSA9IGl0ZW1zW2pdICsgb2Zmc2V0ID4+IHNoaWZ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBjb21wb25lbnRzQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRJbWFnZXMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0SW1hZ2VzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdGlhbGl6ZVRpbGUoY29udGV4dCwgdGlsZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ID0gY29udGV4dC5TSVo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcG9uZW50c0NvdW50ID0gc2l6LkNzaXo7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsZSA9IGNvbnRleHQudGlsZXNbdGlsZUluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYyA9IDA7IGMgPCBjb21wb25lbnRzQ291bnQ7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnQgPSB0aWxlLmNvbXBvbmVudHNbY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHFjZE9yUWNjID0gY29udGV4dC5jdXJyZW50VGlsZS5RQ0NbY10gIT09IHVuZGVmaW5lZCA/IGNvbnRleHQuY3VycmVudFRpbGUuUUNDW2NdIDogY29udGV4dC5jdXJyZW50VGlsZS5RQ0Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnF1YW50aXphdGlvblBhcmFtZXRlcnMgPSBxY2RPclFjYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kT3JDb2MgPSBjb250ZXh0LmN1cnJlbnRUaWxlLkNPQ1tjXSAhPT0gdW5kZWZpbmVkID8gY29udGV4dC5jdXJyZW50VGlsZS5DT0NbY10gOiBjb250ZXh0LmN1cnJlbnRUaWxlLkNPRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzID0gY29kT3JDb2M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbGUuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycyA9IGNvbnRleHQuY3VycmVudFRpbGUuQ09EO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRhZ1RyZWUgPSBmdW5jdGlvbiBUYWdUcmVlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRhZ1RyZWUod2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXZlbHNMZW5ndGggPSAoMCwgX3V0aWwubG9nMikoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVscyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXZlbHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnVHJlZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIFRhZ1RyZWVfcmVzZXQoaSwgaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudExldmVsID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50TGV2ZWwgPCB0aGlzLmxldmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGkgKyBqICogbGV2ZWwud2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbC5pdGVtc1tpbmRleF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbGV2ZWwuaXRlbXNbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5pbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPj49IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZXZlbC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRMZXZlbCA9IGN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRWYWx1ZTogZnVuY3Rpb24gVGFnVHJlZV9pbmNyZW1lbnRWYWx1ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbdGhpcy5jdXJyZW50TGV2ZWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMZXZlbDogZnVuY3Rpb24gVGFnVHJlZV9uZXh0TGV2ZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSB0aGlzLmN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwtLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudExldmVsIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFnVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBJbmNsdXNpb25UcmVlID0gZnVuY3Rpb24gSW5jbHVzaW9uVHJlZUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbmNsdXNpb25UcmVlKHdpZHRoLCBoZWlnaHQsIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXZlbHNMZW5ndGggPSAoMCwgX3V0aWwubG9nMikoTWF0aC5tYXgod2lkdGgsIGhlaWdodCkpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVscyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZXZlbHNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gaXRlbXMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbal0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWwgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxldmVscy5wdXNoKGxldmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwod2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5jZWlsKGhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgSW5jbHVzaW9uVHJlZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIEluY2x1c2lvblRyZWVfcmVzZXQoaSwgaiwgc3RvcFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50TGV2ZWwgPCB0aGlzLmxldmVscy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXZlbCA9IHRoaXMubGV2ZWxzW2N1cnJlbnRMZXZlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBpICsgaiAqIGxldmVsLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxldmVsLml0ZW1zW2luZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAweEZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IHN0b3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudExldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID4+PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZXZlbCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWwgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY3JlbWVudFZhbHVlOiBmdW5jdGlvbiBJbmNsdXNpb25UcmVlX2luY3JlbWVudFZhbHVlKHN0b3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmxldmVsc1t0aGlzLmN1cnJlbnRMZXZlbF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLml0ZW1zW2xldmVsLmluZGV4XSA9IHN0b3BWYWx1ZSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlVmFsdWVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wYWdhdGVWYWx1ZXM6IGZ1bmN0aW9uIEluY2x1c2lvblRyZWVfcHJvcGFnYXRlVmFsdWVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWxJbmRleCA9IHRoaXMuY3VycmVudExldmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWwgPSB0aGlzLmxldmVsc1tsZXZlbEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGxldmVsLml0ZW1zW2xldmVsLmluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoLS1sZXZlbEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbbGV2ZWxJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMZXZlbDogZnVuY3Rpb24gSW5jbHVzaW9uVHJlZV9uZXh0TGV2ZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50TGV2ZWwgPSB0aGlzLmN1cnJlbnRMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC5pdGVtc1tsZXZlbC5pbmRleF0gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50TGV2ZWwtLTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudExldmVsIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TGV2ZWwgPSBjdXJyZW50TGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gdGhpcy5sZXZlbHNbY3VycmVudExldmVsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuaXRlbXNbbGV2ZWwuaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5jbHVzaW9uVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBCaXRNb2RlbCA9IGZ1bmN0aW9uIEJpdE1vZGVsQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBVTklGT1JNX0NPTlRFWFQgPSAxNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBSVU5MRU5HVEhfQ09OVEVYVCA9IDE4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExMQW5kTEhDb250ZXh0c0xhYmVsID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDUsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDEsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDgsIDAsIDAsIDAsIDAsIDAsIDIsIDYsIDgsIDAsIDMsIDcsIDgsIDAsIDQsIDcsIDhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBITENvbnRleHRMYWJlbCA9IG5ldyBVaW50OEFycmF5KFswLCAzLCA0LCAwLCA1LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAxLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4LCAwLCAwLCAwLCAwLCAwLCAyLCAzLCA0LCAwLCA2LCA3LCA3LCAwLCA4LCA4LCA4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgSEhDb250ZXh0TGFiZWwgPSBuZXcgVWludDhBcnJheShbMCwgMSwgMiwgMCwgMSwgMiwgMiwgMCwgMiwgMiwgMiwgMCwgMCwgMCwgMCwgMCwgMywgNCwgNSwgMCwgNCwgNSwgNSwgMCwgNSwgNSwgNSwgMCwgMCwgMCwgMCwgMCwgNiwgNywgNywgMCwgNywgNywgNywgMCwgNywgNywgNywgMCwgMCwgMCwgMCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgMCwgMCwgMCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOCwgMCwgOCwgOCwgOF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBCaXRNb2RlbCh3aWR0aCwgaGVpZ2h0LCBzdWJiYW5kLCB6ZXJvQml0UGxhbmVzLCBtYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRMYWJlbFRhYmxlID0gc3ViYmFuZCA9PT0gJ0hIJyA/IEhIQ29udGV4dExhYmVsIDogc3ViYmFuZCA9PT0gJ0hMJyA/IEhMQ29udGV4dExhYmVsIDogTExBbmRMSENvbnRleHRzTGFiZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNpZW50Q291bnQgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZpY2VudHNTaWduID0gbmV3IFVpbnQ4QXJyYXkoY29lZmZpY2llbnRDb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSA9IG1iID4gMTQgPyBuZXcgVWludDMyQXJyYXkoY29lZmZpY2llbnRDb3VudCkgOiBtYiA+IDYgPyBuZXcgVWludDE2QXJyYXkoY29lZmZpY2llbnRDb3VudCkgOiBuZXcgVWludDhBcnJheShjb2VmZmljaWVudENvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdGbGFncyA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzRGVjb2RlZCA9IG5ldyBVaW50OEFycmF5KGNvZWZmaWNpZW50Q291bnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHplcm9CaXRQbGFuZXMgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2VmZmljaWVudENvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2ldID0gemVyb0JpdFBsYW5lcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYml0c0RlY29kZWQgPSBiaXRzRGVjb2RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEJpdE1vZGVsLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXREZWNvZGVyOiBmdW5jdGlvbiBCaXRNb2RlbF9zZXREZWNvZGVyKGRlY29kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVyID0gZGVjb2RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiBCaXRNb2RlbF9yZXNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0cyA9IG5ldyBJbnQ4QXJyYXkoMTkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRzWzBdID0gNCA8PCAxIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0c1tVTklGT1JNX0NPTlRFWFRdID0gNDYgPDwgMSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dHNbUlVOTEVOR1RIX0NPTlRFWFRdID0gMyA8PCAxIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldE5laWdoYm9yc1NpZ25pZmljYW5jZTogZnVuY3Rpb24gQml0TW9kZWxfc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKHJvdywgY29sdW1uLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBjb2x1bW4gPiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmlnaHQgPSBjb2x1bW4gKyAxIDwgd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaW5kZXggLSB3aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaSAtIDFdICs9IDB4MTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpICsgMV0gKz0gMHgxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2ldICs9IDB4MDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocm93ICsgMSA8IGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGluZGV4ICsgd2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2kgLSAxXSArPSAweDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaSArIDFdICs9IDB4MTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpXSArPSAweDA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleCAtIDFdICs9IDB4MDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleCArIDFdICs9IDB4MDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdIHw9IDB4ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5TaWduaWZpY2FuY2VQcm9wYWdhdGlvblBhc3M6IGZ1bmN0aW9uIEJpdE1vZGVsX3J1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzU2lnbiA9IHRoaXMuY29lZmZpY2VudHNTaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVpZ2hib3JzU2lnbmlmaWNhbmNlID0gdGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzaW5nRmxhZ3MgPSB0aGlzLnByb2Nlc3NpbmdGbGFncztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhYmVscyA9IHRoaXMuY29udGV4dExhYmVsVGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRzRGVjb2RlZCA9IHRoaXMuYml0c0RlY29kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWRJbnZlcnNlTWFzayA9IH4xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2VkTWFzayA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hZ25pdHVkZUJpdE1hc2sgPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkwID0gMDsgaTAgPCBoZWlnaHQ7IGkwICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGkwICogd2lkdGggKyBqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaTEgPSAwOyBpMSA8IDQ7IGkxKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gaTAgKyBpMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmPSBwcm9jZXNzZWRJbnZlcnNlTWFzaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIHx8ICFuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwgPSBsYWJlbHNbbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNpc2lvbiA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjaXNpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXhdKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gcHJvY2Vzc2VkTWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZVNpZ25CaXQ6IGZ1bmN0aW9uIEJpdE1vZGVsX2RlY29kZVNpZ25CaXQocm93LCBjb2x1bW4sIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzU2lnbiA9IHRoaXMuY29lZmZpY2VudHNTaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJpYnV0aW9uLCBzaWduMCwgc2lnbjEsIHNpZ25pZmljYW5jZTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0TGFiZWwsIGRlY29kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW5jZTEgPSBjb2x1bW4gPiAwICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4IC0gMV0gIT09IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbiArIDEgPCB3aWR0aCAmJiBjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleCArIDFdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduMSA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCArIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2lnbmlmaWNhbmNlMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uID0gMSAtIHNpZ24xIC0gc2lnbjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNpZ25pZmljYW5jZTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24wID0gY29lZmZpY2VudHNTaWduW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjAgLSBzaWduMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbiA9IDMgKiBjb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW5jZTEgPSByb3cgPiAwICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4IC0gd2lkdGhdICE9PSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cgKyAxIDwgaGVpZ2h0ICYmIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4ICsgd2lkdGhdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduMSA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCArIHdpZHRoXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25pZmljYW5jZTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIHdpZHRoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb24gPSAxIC0gc2lnbjEgLSBzaWduMCArIGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMSAtIHNpZ24xICsgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzaWduaWZpY2FuY2UxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduMCA9IGNvZWZmaWNlbnRzU2lnbltpbmRleCAtIHdpZHRoXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IDEgLSBzaWduMCAtIHNpZ24wICsgaG9yaXpvbnRhbENvbnRyaWJ1dGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IGhvcml6b250YWxDb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJpYnV0aW9uID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDkgKyBjb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gdGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRMYWJlbCA9IDkgLSBjb250cmlidXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkID0gdGhpcy5kZWNvZGVyLnJlYWRCaXQodGhpcy5jb250ZXh0cywgY29udGV4dExhYmVsKSBeIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzOiBmdW5jdGlvbiBCaXRNb2RlbF9ydW5NYWduaXR1ZGVSZWZpbmVtZW50UGFzcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSB0aGlzLmRlY29kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5laWdoYm9yc1NpZ25pZmljYW5jZSA9IHRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0c0RlY29kZWQgPSB0aGlzLmJpdHNEZWNvZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2luZ0ZsYWdzID0gdGhpcy5wcm9jZXNzaW5nRmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzZWRNYXNrID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0TWFnbml0dWRlQml0TWFzayA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoNCA9IHdpZHRoICogNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmRleDAgPSAwLCBpbmRleE5leHQ7IGluZGV4MCA8IGxlbmd0aDsgaW5kZXgwID0gaW5kZXhOZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleE5leHQgPSBNYXRoLm1pbihsZW5ndGgsIGluZGV4MCArIHdpZHRoNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gaW5kZXgwICsgajsgaW5kZXggPCBpbmRleE5leHQ7IGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIHx8IChwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdICYgcHJvY2Vzc2VkTWFzaykgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHRMYWJlbCA9IDE2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSAmIGZpcnN0TWFnbml0dWRlQml0TWFzaykgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gXj0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25pZmljYW5jZSA9IG5laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF0gJiAxMjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TGFiZWwgPSBzaWduaWZpY2FuY2UgPT09IDAgPyAxNSA6IDE0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdCA9IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgY29udGV4dExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdIDw8IDEgfCBiaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4XSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzaW5nRmxhZ3NbaW5kZXhdIHw9IHByb2Nlc3NlZE1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5DbGVhbnVwUGFzczogZnVuY3Rpb24gQml0TW9kZWxfcnVuQ2xlYW51cFBhc3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gdGhpcy5kZWNvZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSB0aGlzLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZWlnaGJvcnNTaWduaWZpY2FuY2UgPSB0aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzTWFnbml0dWRlID0gdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZWZmaWNlbnRzU2lnbiA9IHRoaXMuY29lZmZpY2VudHNTaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFiZWxzID0gdGhpcy5jb250ZXh0TGFiZWxUYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNEZWNvZGVkID0gdGhpcy5iaXRzRGVjb2RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2Nlc3NpbmdGbGFncyA9IHRoaXMucHJvY2Vzc2luZ0ZsYWdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2VkTWFzayA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdE1hZ25pdHVkZUJpdE1hc2sgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb25lUm93RG93biA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHdvUm93c0Rvd24gPSB3aWR0aCAqIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aHJlZVJvd3NEb3duID0gd2lkdGggKiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaU5leHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaTAgPSAwOyBpMCA8IGhlaWdodDsgaTAgPSBpTmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaU5leHQgPSBNYXRoLm1pbihpMCArIDQsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXhCYXNlID0gaTAgKiB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja0FsbEVtcHR5ID0gaTAgKyAzIDwgaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXgwID0gaW5kZXhCYXNlICsgajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxsRW1wdHkgPSBjaGVja0FsbEVtcHR5ICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDBdID09PSAwICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDAgKyBvbmVSb3dEb3duXSA9PT0gMCAmJiBwcm9jZXNzaW5nRmxhZ3NbaW5kZXgwICsgdHdvUm93c0Rvd25dID09PSAwICYmIHByb2Nlc3NpbmdGbGFnc1tpbmRleDAgKyB0aHJlZVJvd3NEb3duXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwICsgb25lUm93RG93bl0gPT09IDAgJiYgbmVpZ2hib3JzU2lnbmlmaWNhbmNlW2luZGV4MCArIHR3b1Jvd3NEb3duXSA9PT0gMCAmJiBuZWlnaGJvcnNTaWduaWZpY2FuY2VbaW5kZXgwICsgdGhyZWVSb3dzRG93bl0gPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkxID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBpbmRleDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBpMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzU2lnbmlmaWNhbnRDb2VmZmljZW50ID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBSVU5MRU5HVEhfQ09OVEVYVCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNTaWduaWZpY2FudENvZWZmaWNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MF0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIG9uZVJvd0Rvd25dKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleDAgKyB0d29Sb3dzRG93bl0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNEZWNvZGVkW2luZGV4MCArIHRocmVlUm93c0Rvd25dKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDEgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkxICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaTAgKyBpMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ICs9IGkxICogd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2VudHNTaWduW2luZGV4XSA9IHNpZ247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmaWNlbnRzTWFnbml0dWRlW2luZGV4XSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ0ZsYWdzW2luZGV4XSB8PSBmaXJzdE1hZ25pdHVkZUJpdE1hc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW5kZXgwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkyID0gaTA7IGkyIDw9IGk7IGkyKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzRGVjb2RlZFtpbmRleF0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gaTAgKyBpMTsgaSA8IGlOZXh0OyBpKyssIGluZGV4ICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2VmZmljZW50c01hZ25pdHVkZVtpbmRleF0gfHwgKHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gJiBwcm9jZXNzZWRNYXNrKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dExhYmVsID0gbGFiZWxzW25laWdoYm9yc1NpZ25pZmljYW5jZVtpbmRleF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjaXNpb24gPSBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIGNvbnRleHRMYWJlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY2lzaW9uID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduID0gdGhpcy5kZWNvZGVTaWduQml0KGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZWZmaWNlbnRzU2lnbltpbmRleF0gPSBzaWduO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29lZmZpY2VudHNNYWduaXR1ZGVbaW5kZXhdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKGksIGosIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdGbGFnc1tpbmRleF0gfD0gZmlyc3RNYWduaXR1ZGVCaXRNYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c0RlY29kZWRbaW5kZXhdKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1NlZ21lbnRhdGlvblN5bWJvbDogZnVuY3Rpb24gQml0TW9kZWxfY2hlY2tTZWdtZW50YXRpb25TeW1ib2woKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGVyID0gdGhpcy5kZWNvZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ltYm9sID0gZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpIDw8IDMgfCBkZWNvZGVyLnJlYWRCaXQoY29udGV4dHMsIFVOSUZPUk1fQ09OVEVYVCkgPDwgMiB8IGRlY29kZXIucmVhZEJpdChjb250ZXh0cywgVU5JRk9STV9DT05URVhUKSA8PCAxIHwgZGVjb2Rlci5yZWFkQml0KGNvbnRleHRzLCBVTklGT1JNX0NPTlRFWFQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzeW1ib2wgIT09IDB4QSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEpweEVycm9yKCdJbnZhbGlkIHNlZ21lbnRhdGlvbiBzeW1ib2wnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQml0TW9kZWw7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgVHJhbnNmb3JtID0gZnVuY3Rpb24gVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybSgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybS5wcm90b3R5cGUuY2FsY3VsYXRlID0gZnVuY3Rpb24gdHJhbnNmb3JtQ2FsY3VsYXRlKHN1YmJhbmRzLCB1MCwgdjApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGwgPSBzdWJiYW5kc1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IHN1YmJhbmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGwgPSB0aGlzLml0ZXJhdGUobGwsIHN1YmJhbmRzW2ldLCB1MCwgdjApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybS5wcm90b3R5cGUuZXh0ZW5kID0gZnVuY3Rpb24gZXh0ZW5kKGJ1ZmZlciwgb2Zmc2V0LCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkxID0gb2Zmc2V0IC0gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajEgPSBvZmZzZXQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpMiA9IG9mZnNldCArIHNpemUgLSAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqMiA9IG9mZnNldCArIHNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2kxLS1dID0gYnVmZmVyW2oxKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltqMisrXSA9IGJ1ZmZlcltpMi0tXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaTEtLV0gPSBidWZmZXJbajErK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2oyKytdID0gYnVmZmVyW2kyLS1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpMS0tXSA9IGJ1ZmZlcltqMSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbajIrK10gPSBidWZmZXJbaTItLV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2kxXSA9IGJ1ZmZlcltqMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2oyXSA9IGJ1ZmZlcltpMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm0ucHJvdG90eXBlLml0ZXJhdGUgPSBmdW5jdGlvbiBUcmFuc2Zvcm1faXRlcmF0ZShsbCwgaGxfbGhfaGgsIHUwLCB2MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsbFdpZHRoID0gbGwud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxsSGVpZ2h0ID0gbGwuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbEl0ZW1zID0gbGwuaXRlbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaGxfbGhfaGgud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGhsX2xoX2hoLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBobF9saF9oaC5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgaywgbCwgdSwgdjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDAsIGkgPSAwOyBpIDwgbGxIZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gaSAqIDIgKiB3aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGxXaWR0aDsgaisrLCBrKyssIGwgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNbbF0gPSBsbEl0ZW1zW2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGxJdGVtcyA9IGxsLml0ZW1zID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyUGFkZGluZyA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd0J1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkod2lkdGggKyAyICogYnVmZmVyUGFkZGluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1MCAmIDEpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHYgPSAwLCBrID0gMDsgdiA8IGhlaWdodDsgdisrLCBrICs9IHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNba10gKj0gMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2ID0gMCwgayA9IDA7IHYgPCBoZWlnaHQ7IHYrKywgayArPSB3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93QnVmZmVyLnNldChpdGVtcy5zdWJhcnJheShrLCBrICsgd2lkdGgpLCBidWZmZXJQYWRkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXh0ZW5kKHJvd0J1ZmZlciwgYnVmZmVyUGFkZGluZywgd2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIocm93QnVmZmVyLCBidWZmZXJQYWRkaW5nLCB3aWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zZXQocm93QnVmZmVyLnN1YmFycmF5KGJ1ZmZlclBhZGRpbmcsIGJ1ZmZlclBhZGRpbmcgKyB3aWR0aCksIGspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUJ1ZmZlcnMgPSAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sQnVmZmVycyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUJ1ZmZlcnM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xCdWZmZXJzLnB1c2gobmV3IEZsb2F0MzJBcnJheShoZWlnaHQgKyAyICogYnVmZmVyUGFkZGluZykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnVmZmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsbCA9IGJ1ZmZlclBhZGRpbmcgKyBoZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodjAgJiAxKSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1ID0gMDsgdSA8IHdpZHRoOyB1KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1t1XSAqPSAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHUgPSAwOyB1IDwgd2lkdGg7IHUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRCdWZmZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1CdWZmZXJzID0gTWF0aC5taW4od2lkdGggLSB1LCBudW1CdWZmZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IHUsIGwgPSBidWZmZXJQYWRkaW5nOyBsIDwgbGw7IGsgKz0gd2lkdGgsIGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgbnVtQnVmZmVyczsgYisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xCdWZmZXJzW2JdW2xdID0gaXRlbXNbayArIGJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEJ1ZmZlciA9IG51bUJ1ZmZlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCdWZmZXItLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb2xCdWZmZXJzW2N1cnJlbnRCdWZmZXJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHRlbmQoYnVmZmVyLCBidWZmZXJQYWRkaW5nLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXIoYnVmZmVyLCBidWZmZXJQYWRkaW5nLCBoZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJ1ZmZlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB1IC0gbnVtQnVmZmVycyArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGwgPSBidWZmZXJQYWRkaW5nOyBsIDwgbGw7IGsgKz0gd2lkdGgsIGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGIgPSAwOyBiIDwgbnVtQnVmZmVyczsgYisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1trICsgYl0gPSBjb2xCdWZmZXJzW2JdW2xdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IGl0ZW1zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgSXJyZXZlcnNpYmxlVHJhbnNmb3JtID0gZnVuY3Rpb24gSXJyZXZlcnNpYmxlVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElycmV2ZXJzaWJsZVRyYW5zZm9ybSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm0uY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgSXJyZXZlcnNpYmxlVHJhbnNmb3JtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNmb3JtLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIElycmV2ZXJzaWJsZVRyYW5zZm9ybS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gaXJyZXZlcnNpYmxlVHJhbnNmb3JtRmlsdGVyKHgsIG9mZnNldCwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IGxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG9mZnNldCB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGosIG4sIGN1cnJlbnQsIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhID0gLTEuNTg2MTM0MzQyMDU5OTI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiZXRhID0gLTAuMDUyOTgwMTE4NTcyOTYxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnYW1tYSA9IDAuODgyOTExMDc1NTMwOTM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IDAuNDQzNTA2ODUyMDQzOTcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBLID0gMS4yMzAxNzQxMDQ5MTQwMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEtfID0gMSAvIEs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IG9mZnNldCAtIDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBsZW4gKyA0OyBuLS07IGogKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2pdICo9IEtfO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBvZmZzZXQgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBkZWx0YSAqIHhbaiAtIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gbGVuICsgMzsgbi0tOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGRlbHRhICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbal0gPSBLICogeFtqXSAtIGN1cnJlbnQgLSBuZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBkZWx0YSAqIHhbaiArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFtqXSA9IEsgKiB4W2pdIC0gY3VycmVudCAtIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBvZmZzZXQgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBnYW1tYSAqIHhbaiAtIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChuID0gbGVuICsgMjsgbi0tOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGdhbW1hICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4tLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGdhbW1hICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBiZXRhICogeFtqIC0gMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBsZW4gKyAxOyBuLS07IGogKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYmV0YSAqIHhbaiArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBiZXRhICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4W2pdIC09IGN1cnJlbnQgKyBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGVuICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBvZmZzZXQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gYWxwaGEgKiB4W2ogLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKG4gPSBsZW47IG4tLTsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYWxwaGEgKiB4W2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbal0gLT0gY3VycmVudCArIG5leHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGFscGhhICogeFtqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFtqXSAtPSBjdXJyZW50ICsgbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSXJyZXZlcnNpYmxlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJldmVyc2libGVUcmFuc2Zvcm0gPSBmdW5jdGlvbiBSZXZlcnNpYmxlVHJhbnNmb3JtQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJldmVyc2libGVUcmFuc2Zvcm0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJldmVyc2libGVUcmFuc2Zvcm0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgUmV2ZXJzaWJsZVRyYW5zZm9ybS5wcm90b3R5cGUuZmlsdGVyID0gZnVuY3Rpb24gcmV2ZXJzaWJsZVRyYW5zZm9ybUZpbHRlcih4LCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW4gPSBsZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqLCBuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gb2Zmc2V0LCBuID0gbGVuICsgMTsgbi0tOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFtqXSAtPSB4W2ogLSAxXSArIHhbaiArIDFdICsgMiA+PiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IG9mZnNldCArIDEsIG4gPSBsZW47IG4tLTsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhbal0gKz0geFtqIC0gMV0gKyB4W2ogKyAxXSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZXZlcnNpYmxlVHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpweEltYWdlO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSnB4SW1hZ2UgPSBKcHhJbWFnZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTY3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jYWxjdWxhdGVTSEE1MTIgPSBleHBvcnRzLmNhbGN1bGF0ZVNIQTM4NCA9IGV4cG9ydHMuY2FsY3VsYXRlU0hBMjU2ID0gZXhwb3J0cy5jYWxjdWxhdGVNRDUgPSBleHBvcnRzLlBERjIwID0gZXhwb3J0cy5QREYxNyA9IGV4cG9ydHMuQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeSA9IGV4cG9ydHMuQVJDRm91ckNpcGhlciA9IGV4cG9ydHMuQUVTMjU2Q2lwaGVyID0gZXhwb3J0cy5BRVMxMjhDaXBoZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIEFSQ0ZvdXJDaXBoZXIgPSBmdW5jdGlvbiBBUkNGb3VyQ2lwaGVyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQVJDRm91ckNpcGhlcihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbmd0aCA9IGtleS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNbaV0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBqICsgdG1wICsga2V5W2kgJSBrZXlMZW5ndGhdICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW2ldID0gc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW2pdID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnMgPSBzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQVJDRm91ckNpcGhlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0QmxvY2s6IGZ1bmN0aW9uIEFSQ0ZvdXJDaXBoZXJfZW5jcnlwdEJsb2NrKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB0aGlzLmEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSB0aGlzLmIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSB0aGlzLnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gYSArIDEgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBzW2FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gYiArIHRtcCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBzW2JdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzW2FdID0gdG1wMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1tiXSA9IHRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2ldID0gZGF0YVtpXSBeIHNbdG1wICsgdG1wMiAmIDB4RkZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYSA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iID0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBBUkNGb3VyQ2lwaGVyLnByb3RvdHlwZS5kZWNyeXB0QmxvY2sgPSBBUkNGb3VyQ2lwaGVyLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBUkNGb3VyQ2lwaGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQVJDRm91ckNpcGhlciA9IEFSQ0ZvdXJDaXBoZXI7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsY3VsYXRlTUQ1ID0gZnVuY3Rpb24gY2FsY3VsYXRlTUQ1Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBuZXcgVWludDhBcnJheShbNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNywgMTIsIDE3LCAyMiwgNSwgOSwgMTQsIDIwLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgMTYsIDIzLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxLCA2LCAxMCwgMTUsIDIxXSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrID0gbmV3IEludDMyQXJyYXkoWy02ODA4NzY5MzYsIC0zODk1NjQ1ODYsIDYwNjEwNTgxOSwgLTEwNDQ1MjUzMzAsIC0xNzY0MTg4OTcsIDEyMDAwODA0MjYsIC0xNDczMjMxMzQxLCAtNDU3MDU5ODMsIDE3NzAwMzU0MTYsIC0xOTU4NDE0NDE3LCAtNDIwNjMsIC0xOTkwNDA0MTYyLCAxODA0NjAzNjgyLCAtNDAzNDExMDEsIC0xNTAyMDAyMjkwLCAxMjM2NTM1MzI5LCAtMTY1Nzk2NTEwLCAtMTA2OTUwMTYzMiwgNjQzNzE3NzEzLCAtMzczODk3MzAyLCAtNzAxNTU4NjkxLCAzODAxNjA4MywgLTY2MDQ3ODMzNSwgLTQwNTUzNzg0OCwgNTY4NDQ2NDM4LCAtMTAxOTgwMzY5MCwgLTE4NzM2Mzk2MSwgMTE2MzUzMTUwMSwgLTE0NDQ2ODE0NjcsIC01MTQwMzc4NCwgMTczNTMyODQ3MywgLTE5MjY2MDc3MzQsIC0zNzg1NTgsIC0yMDIyNTc0NDYzLCAxODM5MDMwNTYyLCAtMzUzMDk1NTYsIC0xNTMwOTkyMDYwLCAxMjcyODkzMzUzLCAtMTU1NDk3NjMyLCAtMTA5NDczMDY0MCwgNjgxMjc5MTc0LCAtMzU4NTM3MjIyLCAtNzIyNTIxOTc5LCA3NjAyOTE4OSwgLTY0MDM2NDQ4NywgLTQyMTgxNTgzNSwgNTMwNzQyNTIwLCAtOTk1MzM4NjUxLCAtMTk4NjMwODQ0LCAxMTI2ODkxNDE1LCAtMTQxNjM1NDkwNSwgLTU3NDM0MDU1LCAxNzAwNDg1NTcxLCAtMTg5NDk4NjYwNiwgLTEwNTE1MjMsIC0yMDU0OTIyNzk5LCAxODczMzEzMzU5LCAtMzA2MTE3NDQsIC0xNTYwMTk4MzgwLCAxMzA5MTUxNjQ5LCAtMTQ1NTIzMDcwLCAtMTEyMDIxMDM3OSwgNzE4Nzg3MjU5LCAtMzQzNDg1NTUxXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGgwID0gMTczMjU4NDE5MyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IC0yNzE3MzM4NzksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSAtMTczMjU4NDE5NCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMyA9IDI3MTczMzg3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWRkZWRMZW5ndGggPSBsZW5ndGggKyA3MiAmIH42MztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWRkZWQgPSBuZXcgVWludDhBcnJheShwYWRkZWRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGosIG47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpXSA9IGRhdGFbb2Zmc2V0KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDB4ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICBuID0gcGFkZGVkTGVuZ3RoIC0gODtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+IDUgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMTMgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4+IDI5ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gbmV3IEludDMyQXJyYXkoMTYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkZGVkTGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqLCBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1tqXSA9IHBhZGRlZFtpXSB8IHBhZGRlZFtpICsgMV0gPDwgOCB8IHBhZGRlZFtpICsgMl0gPDwgMTYgfCBwYWRkZWRbaSArIDNdIDw8IDI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gaDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBoMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gaDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgNjQ7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaiA8IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gYiAmIGMgfCB+YiAmIGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBkICYgYiB8IH5kICYgYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSA1ICogaiArIDEgJiAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqIDwgNDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBiIF4gYyBeIGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gMyAqIGogKyA1ICYgMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gYyBeIChiIHwgfmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IDcgKiBqICYgMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUFyZyA9IGEgKyBmICsga1tqXSArIHdbZ10gfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlID0gcltqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gYiArIChyb3RhdGVBcmcgPDwgcm90YXRlIHwgcm90YXRlQXJnID4+PiAzMiAtIHJvdGF0ZSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgwID0gaDAgKyBhIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IGgxICsgYiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSBoMiArIGMgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgzID0gaDMgKyBkIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCAmIDB4RkYsIGgwID4+IDggJiAweEZGLCBoMCA+PiAxNiAmIDB4RkYsIGgwID4+PiAyNCAmIDB4RkYsIGgxICYgMHhGRiwgaDEgPj4gOCAmIDB4RkYsIGgxID4+IDE2ICYgMHhGRiwgaDEgPj4+IDI0ICYgMHhGRiwgaDIgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+Pj4gMjQgJiAweEZGLCBoMyAmIDB4RkYsIGgzID4+IDggJiAweEZGLCBoMyA+PiAxNiAmIDB4RkYsIGgzID4+PiAyNCAmIDB4RkZdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuY2FsY3VsYXRlTUQ1ID0gY2FsY3VsYXRlTUQ1O1xuXG4gICAgICAgICAgICAgICAgdmFyIFdvcmQ2NCA9IGZ1bmN0aW9uIFdvcmQ2NENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdvcmQ2NChoaWdoSW50ZWdlciwgbG93SW50ZWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdoID0gaGlnaEludGVnZXIgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3dJbnRlZ2VyIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFdvcmQ2NC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQ6IGZ1bmN0aW9uIFdvcmQ2NF9hbmQod29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCAmPSB3b3JkLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgJj0gd29yZC5sb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeG9yOiBmdW5jdGlvbiBXb3JkNjRfeG9yKHdvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2ggXj0gd29yZC5oaWdoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG93IF49IHdvcmQubG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yOiBmdW5jdGlvbiBXb3JkNjRfb3Iod29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCB8PSB3b3JkLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgfD0gd29yZC5sb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRSaWdodDogZnVuY3Rpb24gV29yZDY0X3NoaWZ0UmlnaHQocGxhY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlcyA+PSAzMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvdyA9IHRoaXMuaGlnaCA+Pj4gcGxhY2VzIC0gMzIgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2ggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG93ID0gdGhpcy5sb3cgPj4+IHBsYWNlcyB8IHRoaXMuaGlnaCA8PCAzMiAtIHBsYWNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdoID0gdGhpcy5oaWdoID4+PiBwbGFjZXMgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGlmdExlZnQ6IGZ1bmN0aW9uIFdvcmQ2NF9zaGlmdExlZnQocGxhY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBsYWNlcyA+PSAzMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2ggPSB0aGlzLmxvdyA8PCBwbGFjZXMgLSAzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCA9IHRoaXMuaGlnaCA8PCBwbGFjZXMgfCB0aGlzLmxvdyA+Pj4gMzIgLSBwbGFjZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG93ID0gdGhpcy5sb3cgPDwgcGxhY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVSaWdodDogZnVuY3Rpb24gV29yZDY0X3JvdGF0ZVJpZ2h0KHBsYWNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3csIGhpZ2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2VzICYgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaCA9IHRoaXMubG93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3cgPSB0aGlzLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ID0gdGhpcy5sb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2ggPSB0aGlzLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VzICY9IDMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG93ID0gbG93ID4+PiBwbGFjZXMgfCBoaWdoIDw8IDMyIC0gcGxhY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2ggPj4+IHBsYWNlcyB8IGxvdyA8PCAzMiAtIHBsYWNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBub3Q6IGZ1bmN0aW9uIFdvcmQ2NF9ub3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdoID0gfnRoaXMuaGlnaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvdyA9IH50aGlzLmxvdztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIFdvcmQ2NF9hZGQod29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb3dBZGQgPSAodGhpcy5sb3cgPj4+IDApICsgKHdvcmQubG93ID4+PiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaEFkZCA9ICh0aGlzLmhpZ2ggPj4+IDApICsgKHdvcmQuaGlnaCA+Pj4gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG93QWRkID4gMHhGRkZGRkZGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoQWRkICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgPSBsb3dBZGQgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaCA9IGhpZ2hBZGQgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUbzogZnVuY3Rpb24gV29yZDY0X2NvcHlUbyhieXRlcywgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbb2Zmc2V0XSA9IHRoaXMuaGlnaCA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW29mZnNldCArIDFdID0gdGhpcy5oaWdoID4+IDE2ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tvZmZzZXQgKyAyXSA9IHRoaXMuaGlnaCA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tvZmZzZXQgKyAzXSA9IHRoaXMuaGlnaCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbb2Zmc2V0ICsgNF0gPSB0aGlzLmxvdyA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW29mZnNldCArIDVdID0gdGhpcy5sb3cgPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW29mZnNldCArIDZdID0gdGhpcy5sb3cgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbb2Zmc2V0ICsgN10gPSB0aGlzLmxvdyAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWduOiBmdW5jdGlvbiBXb3JkNjRfYXNzaWduKHdvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2ggPSB3b3JkLmhpZ2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb3cgPSB3b3JkLmxvdztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmQ2NDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsY3VsYXRlU0hBMjU2ID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBMjU2Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcm90cih4LCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geCA+Pj4gbiB8IHggPDwgMzIgLSBuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2goeCwgeSwgeikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggJiB5IF4gfnggJiB6O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFqKHgsIHksIHopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaWdtYSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm90cih4LCAyKSBeIHJvdHIoeCwgMTMpIF4gcm90cih4LCAyMik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaWdtYVByaW1lKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3RyKHgsIDYpIF4gcm90cih4LCAxMSkgXiByb3RyKHgsIDI1KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxpdHRsZVNpZ21hKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByb3RyKHgsIDcpIF4gcm90cih4LCAxOCkgXiB4ID4+PiAzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbGl0dGxlU2lnbWFQcmltZSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcm90cih4LCAxNykgXiByb3RyKHgsIDE5KSBeIHggPj4+IDEwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBbMHg0MjhhMmY5OCwgMHg3MTM3NDQ5MSwgMHhiNWMwZmJjZiwgMHhlOWI1ZGJhNSwgMHgzOTU2YzI1YiwgMHg1OWYxMTFmMSwgMHg5MjNmODJhNCwgMHhhYjFjNWVkNSwgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2RjMywgMHg3MmJlNWQ3NCwgMHg4MGRlYjFmZSwgMHg5YmRjMDZhNywgMHhjMTliZjE3NCwgMHhlNDliNjljMSwgMHhlZmJlNDc4NiwgMHgwZmMxOWRjNiwgMHgyNDBjYTFjYywgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5ODhkYSwgMHg5ODNlNTE1MiwgMHhhODMxYzY2ZCwgMHhiMDAzMjdjOCwgMHhiZjU5N2ZjNywgMHhjNmUwMGJmMywgMHhkNWE3OTE0NywgMHgwNmNhNjM1MSwgMHgxNDI5Mjk2NywgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1MzM4MGQxMywgMHg2NTBhNzM1NCwgMHg3NjZhMGFiYiwgMHg4MWMyYzkyZSwgMHg5MjcyMmM4NSwgMHhhMmJmZThhMSwgMHhhODFhNjY0YiwgMHhjMjRiOGI3MCwgMHhjNzZjNTFhMywgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwgMHgxMDZhYTA3MCwgMHgxOWE0YzExNiwgMHgxZTM3NmMwOCwgMHgyNzQ4Nzc0YywgMHgzNGIwYmNiNSwgMHgzOTFjMGNiMywgMHg0ZWQ4YWE0YSwgMHg1YjljY2E0ZiwgMHg2ODJlNmZmMywgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4NzgxNCwgMHg4Y2M3MDIwOCwgMHg5MGJlZmZmYSwgMHhhNDUwNmNlYiwgMHhiZWY5YTNmNywgMHhjNjcxNzhmMl07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGgwID0gMHg2YTA5ZTY2NyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IDB4YmI2N2FlODUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSAweDNjNmVmMzcyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgzID0gMHhhNTRmZjUzYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNCA9IDB4NTEwZTUyN2YsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDUgPSAweDliMDU2ODhjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg2ID0gMHgxZjgzZDlhYixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNyA9IDB4NWJlMGNkMTk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyA5KSAvIDY0KSAqIDY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBwYWRkZWRMZW5ndGggLSA4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoID4+PiAyOSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAyMSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiAxMyAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+PiA1ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gbGVuZ3RoIDw8IDMgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHcgPSBuZXcgVWludDMyQXJyYXkoNjQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFkZGVkTGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdbal0gPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDE2OyBqIDwgNjQ7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3W2pdID0gbGl0dGxlU2lnbWFQcmltZSh3W2ogLSAyXSkgKyB3W2ogLSA3XSArIGxpdHRsZVNpZ21hKHdbaiAtIDE1XSkgKyB3W2ogLSAxNl0gfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gaDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBoMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gaDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBoNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGg1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gaDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBoNyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDY0OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSBoICsgc2lnbWFQcmltZShlKSArIGNoKGUsIGYsIGcpICsga1tqXSArIHdbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyID0gc2lnbWEoYSkgKyBtYWooYSwgYiwgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnID0gZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBkICsgdDEgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gdDEgKyB0MiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDAgPSBoMCArIGEgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgxID0gaDEgKyBiIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMiA9IGgyICsgYyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDMgPSBoMyArIGQgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg0ID0gaDQgKyBlIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNSA9IGg1ICsgZiB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDYgPSBoNiArIGcgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg3ID0gaDcgKyBoIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KFtoMCA+PiAyNCAmIDB4RkYsIGgwID4+IDE2ICYgMHhGRiwgaDAgPj4gOCAmIDB4RkYsIGgwICYgMHhGRiwgaDEgPj4gMjQgJiAweEZGLCBoMSA+PiAxNiAmIDB4RkYsIGgxID4+IDggJiAweEZGLCBoMSAmIDB4RkYsIGgyID4+IDI0ICYgMHhGRiwgaDIgPj4gMTYgJiAweEZGLCBoMiA+PiA4ICYgMHhGRiwgaDIgJiAweEZGLCBoMyA+PiAyNCAmIDB4RkYsIGgzID4+IDE2ICYgMHhGRiwgaDMgPj4gOCAmIDB4RkYsIGgzICYgMHhGRiwgaDQgPj4gMjQgJiAweEZGLCBoNCA+PiAxNiAmIDB4RkYsIGg0ID4+IDggJiAweEZGLCBoNCAmIDB4RkYsIGg1ID4+IDI0ICYgMHhGRiwgaDUgPj4gMTYgJiAweEZGLCBoNSA+PiA4ICYgMHhGRiwgaDUgJiAweEZGLCBoNiA+PiAyNCAmIDB4RkYsIGg2ID4+IDE2ICYgMHhGRiwgaDYgPj4gOCAmIDB4RkYsIGg2ICYgMHhGRiwgaDcgPj4gMjQgJiAweEZGLCBoNyA+PiAxNiAmIDB4RkYsIGg3ID4+IDggJiAweEZGLCBoNyAmIDB4RkZdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuY2FsY3VsYXRlU0hBMjU2ID0gY2FsY3VsYXRlU0hBMjU2O1xuXG4gICAgICAgICAgICAgICAgdmFyIGNhbGN1bGF0ZVNIQTUxMiA9IGZ1bmN0aW9uIGNhbGN1bGF0ZVNIQTUxMkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoKHJlc3VsdCwgeCwgeSwgeiwgdG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFuZCh5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAubm90KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYW5kKHopO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFqKHJlc3VsdCwgeCwgeSwgeiwgdG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFuZCh5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYW5kKHopO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFzc2lnbih5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hbmQoeik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQueG9yKHRtcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaWdtYShyZXN1bHQsIHgsIHRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3RhdGVSaWdodCgyOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnJvdGF0ZVJpZ2h0KDM0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAucm90YXRlUmlnaHQoMzkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2lnbWFQcmltZShyZXN1bHQsIHgsIHRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnJvdGF0ZVJpZ2h0KDE4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAucm90YXRlUmlnaHQoNDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbGl0dGxlU2lnbWEocmVzdWx0LCB4LCB0bXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucm90YXRlUmlnaHQoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnJvdGF0ZVJpZ2h0KDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLmFzc2lnbih4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5zaGlmdFJpZ2h0KDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lnhvcih0bXApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbGl0dGxlU2lnbWFQcmltZShyZXN1bHQsIHgsIHRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFzc2lnbih4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5yb3RhdGVSaWdodCgxOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuYXNzaWduKHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wLnJvdGF0ZVJpZ2h0KDYxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcC5hc3NpZ24oeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAuc2hpZnRSaWdodCg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC54b3IodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBrID0gW25ldyBXb3JkNjQoMHg0MjhhMmY5OCwgMHhkNzI4YWUyMiksIG5ldyBXb3JkNjQoMHg3MTM3NDQ5MSwgMHgyM2VmNjVjZCksIG5ldyBXb3JkNjQoMHhiNWMwZmJjZiwgMHhlYzRkM2IyZiksIG5ldyBXb3JkNjQoMHhlOWI1ZGJhNSwgMHg4MTg5ZGJiYyksIG5ldyBXb3JkNjQoMHgzOTU2YzI1YiwgMHhmMzQ4YjUzOCksIG5ldyBXb3JkNjQoMHg1OWYxMTFmMSwgMHhiNjA1ZDAxOSksIG5ldyBXb3JkNjQoMHg5MjNmODJhNCwgMHhhZjE5NGY5YiksIG5ldyBXb3JkNjQoMHhhYjFjNWVkNSwgMHhkYTZkODExOCksIG5ldyBXb3JkNjQoMHhkODA3YWE5OCwgMHhhMzAzMDI0MiksIG5ldyBXb3JkNjQoMHgxMjgzNWIwMSwgMHg0NTcwNmZiZSksIG5ldyBXb3JkNjQoMHgyNDMxODViZSwgMHg0ZWU0YjI4YyksIG5ldyBXb3JkNjQoMHg1NTBjN2RjMywgMHhkNWZmYjRlMiksIG5ldyBXb3JkNjQoMHg3MmJlNWQ3NCwgMHhmMjdiODk2ZiksIG5ldyBXb3JkNjQoMHg4MGRlYjFmZSwgMHgzYjE2OTZiMSksIG5ldyBXb3JkNjQoMHg5YmRjMDZhNywgMHgyNWM3MTIzNSksIG5ldyBXb3JkNjQoMHhjMTliZjE3NCwgMHhjZjY5MjY5NCksIG5ldyBXb3JkNjQoMHhlNDliNjljMSwgMHg5ZWYxNGFkMiksIG5ldyBXb3JkNjQoMHhlZmJlNDc4NiwgMHgzODRmMjVlMyksIG5ldyBXb3JkNjQoMHgwZmMxOWRjNiwgMHg4YjhjZDViNSksIG5ldyBXb3JkNjQoMHgyNDBjYTFjYywgMHg3N2FjOWM2NSksIG5ldyBXb3JkNjQoMHgyZGU5MmM2ZiwgMHg1OTJiMDI3NSksIG5ldyBXb3JkNjQoMHg0YTc0ODRhYSwgMHg2ZWE2ZTQ4MyksIG5ldyBXb3JkNjQoMHg1Y2IwYTlkYywgMHhiZDQxZmJkNCksIG5ldyBXb3JkNjQoMHg3NmY5ODhkYSwgMHg4MzExNTNiNSksIG5ldyBXb3JkNjQoMHg5ODNlNTE1MiwgMHhlZTY2ZGZhYiksIG5ldyBXb3JkNjQoMHhhODMxYzY2ZCwgMHgyZGI0MzIxMCksIG5ldyBXb3JkNjQoMHhiMDAzMjdjOCwgMHg5OGZiMjEzZiksIG5ldyBXb3JkNjQoMHhiZjU5N2ZjNywgMHhiZWVmMGVlNCksIG5ldyBXb3JkNjQoMHhjNmUwMGJmMywgMHgzZGE4OGZjMiksIG5ldyBXb3JkNjQoMHhkNWE3OTE0NywgMHg5MzBhYTcyNSksIG5ldyBXb3JkNjQoMHgwNmNhNjM1MSwgMHhlMDAzODI2ZiksIG5ldyBXb3JkNjQoMHgxNDI5Mjk2NywgMHgwYTBlNmU3MCksIG5ldyBXb3JkNjQoMHgyN2I3MGE4NSwgMHg0NmQyMmZmYyksIG5ldyBXb3JkNjQoMHgyZTFiMjEzOCwgMHg1YzI2YzkyNiksIG5ldyBXb3JkNjQoMHg0ZDJjNmRmYywgMHg1YWM0MmFlZCksIG5ldyBXb3JkNjQoMHg1MzM4MGQxMywgMHg5ZDk1YjNkZiksIG5ldyBXb3JkNjQoMHg2NTBhNzM1NCwgMHg4YmFmNjNkZSksIG5ldyBXb3JkNjQoMHg3NjZhMGFiYiwgMHgzYzc3YjJhOCksIG5ldyBXb3JkNjQoMHg4MWMyYzkyZSwgMHg0N2VkYWVlNiksIG5ldyBXb3JkNjQoMHg5MjcyMmM4NSwgMHgxNDgyMzUzYiksIG5ldyBXb3JkNjQoMHhhMmJmZThhMSwgMHg0Y2YxMDM2NCksIG5ldyBXb3JkNjQoMHhhODFhNjY0YiwgMHhiYzQyMzAwMSksIG5ldyBXb3JkNjQoMHhjMjRiOGI3MCwgMHhkMGY4OTc5MSksIG5ldyBXb3JkNjQoMHhjNzZjNTFhMywgMHgwNjU0YmUzMCksIG5ldyBXb3JkNjQoMHhkMTkyZTgxOSwgMHhkNmVmNTIxOCksIG5ldyBXb3JkNjQoMHhkNjk5MDYyNCwgMHg1NTY1YTkxMCksIG5ldyBXb3JkNjQoMHhmNDBlMzU4NSwgMHg1NzcxMjAyYSksIG5ldyBXb3JkNjQoMHgxMDZhYTA3MCwgMHgzMmJiZDFiOCksIG5ldyBXb3JkNjQoMHgxOWE0YzExNiwgMHhiOGQyZDBjOCksIG5ldyBXb3JkNjQoMHgxZTM3NmMwOCwgMHg1MTQxYWI1MyksIG5ldyBXb3JkNjQoMHgyNzQ4Nzc0YywgMHhkZjhlZWI5OSksIG5ldyBXb3JkNjQoMHgzNGIwYmNiNSwgMHhlMTliNDhhOCksIG5ldyBXb3JkNjQoMHgzOTFjMGNiMywgMHhjNWM5NWE2MyksIG5ldyBXb3JkNjQoMHg0ZWQ4YWE0YSwgMHhlMzQxOGFjYiksIG5ldyBXb3JkNjQoMHg1YjljY2E0ZiwgMHg3NzYzZTM3MyksIG5ldyBXb3JkNjQoMHg2ODJlNmZmMywgMHhkNmIyYjhhMyksIG5ldyBXb3JkNjQoMHg3NDhmODJlZSwgMHg1ZGVmYjJmYyksIG5ldyBXb3JkNjQoMHg3OGE1NjM2ZiwgMHg0MzE3MmY2MCksIG5ldyBXb3JkNjQoMHg4NGM4NzgxNCwgMHhhMWYwYWI3MiksIG5ldyBXb3JkNjQoMHg4Y2M3MDIwOCwgMHgxYTY0MzllYyksIG5ldyBXb3JkNjQoMHg5MGJlZmZmYSwgMHgyMzYzMWUyOCksIG5ldyBXb3JkNjQoMHhhNDUwNmNlYiwgMHhkZTgyYmRlOSksIG5ldyBXb3JkNjQoMHhiZWY5YTNmNywgMHhiMmM2NzkxNSksIG5ldyBXb3JkNjQoMHhjNjcxNzhmMiwgMHhlMzcyNTMyYiksIG5ldyBXb3JkNjQoMHhjYTI3M2VjZSwgMHhlYTI2NjE5YyksIG5ldyBXb3JkNjQoMHhkMTg2YjhjNywgMHgyMWMwYzIwNyksIG5ldyBXb3JkNjQoMHhlYWRhN2RkNiwgMHhjZGUwZWIxZSksIG5ldyBXb3JkNjQoMHhmNTdkNGY3ZiwgMHhlZTZlZDE3OCksIG5ldyBXb3JkNjQoMHgwNmYwNjdhYSwgMHg3MjE3NmZiYSksIG5ldyBXb3JkNjQoMHgwYTYzN2RjNSwgMHhhMmM4OThhNiksIG5ldyBXb3JkNjQoMHgxMTNmOTgwNCwgMHhiZWY5MGRhZSksIG5ldyBXb3JkNjQoMHgxYjcxMGIzNSwgMHgxMzFjNDcxYiksIG5ldyBXb3JkNjQoMHgyOGRiNzdmNSwgMHgyMzA0N2Q4NCksIG5ldyBXb3JkNjQoMHgzMmNhYWI3YiwgMHg0MGM3MjQ5MyksIG5ldyBXb3JkNjQoMHgzYzllYmUwYSwgMHgxNWM5YmViYyksIG5ldyBXb3JkNjQoMHg0MzFkNjdjNCwgMHg5YzEwMGQ0YyksIG5ldyBXb3JkNjQoMHg0Y2M1ZDRiZSwgMHhjYjNlNDJiNiksIG5ldyBXb3JkNjQoMHg1OTdmMjk5YywgMHhmYzY1N2UyYSksIG5ldyBXb3JkNjQoMHg1ZmNiNmZhYiwgMHgzYWQ2ZmFlYyksIG5ldyBXb3JkNjQoMHg2YzQ0MTk4YywgMHg0YTQ3NTgxNyldO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhc2goZGF0YSwgb2Zmc2V0LCBsZW5ndGgsIG1vZGUzODQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGUzODQgPSAhIW1vZGUzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaDAsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGg3O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZGUzODQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMCA9IG5ldyBXb3JkNjQoMHg2YTA5ZTY2NywgMHhmM2JjYzkwOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEgPSBuZXcgV29yZDY0KDB4YmI2N2FlODUsIDB4ODRjYWE3M2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyID0gbmV3IFdvcmQ2NCgweDNjNmVmMzcyLCAweGZlOTRmODJiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMyA9IG5ldyBXb3JkNjQoMHhhNTRmZjUzYSwgMHg1ZjFkMzZmMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDQgPSBuZXcgV29yZDY0KDB4NTEwZTUyN2YsIDB4YWRlNjgyZDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg1ID0gbmV3IFdvcmQ2NCgweDliMDU2ODhjLCAweDJiM2U2YzFmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNiA9IG5ldyBXb3JkNjQoMHgxZjgzZDlhYiwgMHhmYjQxYmQ2Yik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDcgPSBuZXcgV29yZDY0KDB4NWJlMGNkMTksIDB4MTM3ZTIxNzkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMCA9IG5ldyBXb3JkNjQoMHhjYmJiOWQ1ZCwgMHhjMTA1OWVkOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEgPSBuZXcgV29yZDY0KDB4NjI5YTI5MmEsIDB4MzY3Y2Q1MDcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyID0gbmV3IFdvcmQ2NCgweDkxNTkwMTVhLCAweDMwNzBkZDE3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMyA9IG5ldyBXb3JkNjQoMHgxNTJmZWNkOCwgMHhmNzBlNTkzOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDQgPSBuZXcgV29yZDY0KDB4NjczMzI2NjcsIDB4ZmZjMDBiMzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg1ID0gbmV3IFdvcmQ2NCgweDhlYjQ0YTg3LCAweDY4NTgxNTExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNiA9IG5ldyBXb3JkNjQoMHhkYjBjMmUwZCwgMHg2NGY5OGZhNyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDcgPSBuZXcgV29yZDY0KDB4NDdiNTQ4MWQsIDB4YmVmYTRmYTQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFkZGVkTGVuZ3RoID0gTWF0aC5jZWlsKChsZW5ndGggKyAxNykgLyAxMjgpICogMTI4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KHBhZGRlZExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2ldID0gZGF0YVtvZmZzZXQrK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRlZFtpKytdID0gMHg4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBwYWRkZWRMZW5ndGggLSAxNjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA+Pj4gMjkgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMjEgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gMTMgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGVkW2krK10gPSBsZW5ndGggPj4gNSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkZWRbaSsrXSA9IGxlbmd0aCA8PCAzICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gbmV3IEFycmF5KDgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3W2ldID0gbmV3IFdvcmQ2NCgwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBuZXcgV29yZDY0KDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBuZXcgV29yZDY0KDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGcgPSBuZXcgV29yZDY0KDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBuZXcgV29yZDY0KDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQxID0gbmV3IFdvcmQ2NCgwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MiA9IG5ldyBXb3JkNjQoMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wMSA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMiA9IG5ldyBXb3JkNjQoMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBhZGRlZExlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3W2pdLmhpZ2ggPSBwYWRkZWRbaV0gPDwgMjQgfCBwYWRkZWRbaSArIDFdIDw8IDE2IHwgcGFkZGVkW2kgKyAyXSA8PCA4IHwgcGFkZGVkW2kgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1tqXS5sb3cgPSBwYWRkZWRbaSArIDRdIDw8IDI0IHwgcGFkZGVkW2kgKyA1XSA8PCAxNiB8IHBhZGRlZFtpICsgNl0gPDwgOCB8IHBhZGRlZFtpICsgN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxNjsgaiA8IDgwOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMyA9IHdbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZVNpZ21hUHJpbWUodG1wMywgd1tqIC0gMl0sIHRtcDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAzLmFkZCh3W2ogLSA3XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdHRsZVNpZ21hKHRtcDEsIHdbaiAtIDE1XSwgdG1wMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDMuYWRkKHRtcDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAzLmFkZCh3W2ogLSAxNl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEuYXNzaWduKGgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLmFzc2lnbihoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5hc3NpZ24oaDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQuYXNzaWduKGgzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmFzc2lnbihoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5hc3NpZ24oaDUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcuYXNzaWduKGg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLmFzc2lnbihoNyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgODA7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MS5hc3NpZ24oaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ21hUHJpbWUodG1wMSwgZSwgdG1wMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxLmFkZCh0bXAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2godG1wMSwgZSwgZiwgZywgdG1wMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxLmFkZCh0bXAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEuYWRkKGtbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MS5hZGQod1tqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ21hKHQyLCBhLCB0bXAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFqKHRtcDEsIGEsIGIsIGMsIHRtcDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Mi5hZGQodG1wMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDMgPSBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoID0gZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLmFkZCh0MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAzLmFzc2lnbih0MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDMuYWRkKHQyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHRtcDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDAuYWRkKGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgxLmFkZChiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMi5hZGQoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDMuYWRkKGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg0LmFkZChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNS5hZGQoZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDYuYWRkKGcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg3LmFkZChoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RlMzg0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgwLmNvcHlUbyhyZXN1bHQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgxLmNvcHlUbyhyZXN1bHQsIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyLmNvcHlUbyhyZXN1bHQsIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMy5jb3B5VG8ocmVzdWx0LCAyNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDQuY29weVRvKHJlc3VsdCwgMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg1LmNvcHlUbyhyZXN1bHQsIDQwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNi5jb3B5VG8ocmVzdWx0LCA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDcuY29weVRvKHJlc3VsdCwgNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheSg0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDAuY29weVRvKHJlc3VsdCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEuY29weVRvKHJlc3VsdCwgOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIuY29weVRvKHJlc3VsdCwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgzLmNvcHlUbyhyZXN1bHQsIDI0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoNC5jb3B5VG8ocmVzdWx0LCAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDUuY29weVRvKHJlc3VsdCwgNDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc2g7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jYWxjdWxhdGVTSEE1MTIgPSBjYWxjdWxhdGVTSEE1MTI7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsY3VsYXRlU0hBMzg0ID0gZnVuY3Rpb24gY2FsY3VsYXRlU0hBMzg0Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFzaChkYXRhLCBvZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVNIQTUxMihkYXRhLCBvZmZzZXQsIGxlbmd0aCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFzaDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLmNhbGN1bGF0ZVNIQTM4NCA9IGNhbGN1bGF0ZVNIQTM4NDtcblxuICAgICAgICAgICAgICAgIHZhciBOdWxsQ2lwaGVyID0gZnVuY3Rpb24gTnVsbENpcGhlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bGxDaXBoZXIoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIE51bGxDaXBoZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdEJsb2NrOiBmdW5jdGlvbiBOdWxsQ2lwaGVyX2RlY3J5cHRCbG9jayhkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsQ2lwaGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBBRVNCYXNlQ2lwaGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBRVNCYXNlQ2lwaGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBRVNCYXNlQ2lwaGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yID09PSBBRVNCYXNlQ2lwaGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Nhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcyA9IG5ldyBVaW50OEFycmF5KFsweDYzLCAweDdjLCAweDc3LCAweDdiLCAweGYyLCAweDZiLCAweDZmLCAweGM1LCAweDMwLCAweDAxLCAweDY3LCAweDJiLCAweGZlLCAweGQ3LCAweGFiLCAweDc2LCAweGNhLCAweDgyLCAweGM5LCAweDdkLCAweGZhLCAweDU5LCAweDQ3LCAweGYwLCAweGFkLCAweGQ0LCAweGEyLCAweGFmLCAweDljLCAweGE0LCAweDcyLCAweGMwLCAweGI3LCAweGZkLCAweDkzLCAweDI2LCAweDM2LCAweDNmLCAweGY3LCAweGNjLCAweDM0LCAweGE1LCAweGU1LCAweGYxLCAweDcxLCAweGQ4LCAweDMxLCAweDE1LCAweDA0LCAweGM3LCAweDIzLCAweGMzLCAweDE4LCAweDk2LCAweDA1LCAweDlhLCAweDA3LCAweDEyLCAweDgwLCAweGUyLCAweGViLCAweDI3LCAweGIyLCAweDc1LCAweDA5LCAweDgzLCAweDJjLCAweDFhLCAweDFiLCAweDZlLCAweDVhLCAweGEwLCAweDUyLCAweDNiLCAweGQ2LCAweGIzLCAweDI5LCAweGUzLCAweDJmLCAweDg0LCAweDUzLCAweGQxLCAweDAwLCAweGVkLCAweDIwLCAweGZjLCAweGIxLCAweDViLCAweDZhLCAweGNiLCAweGJlLCAweDM5LCAweDRhLCAweDRjLCAweDU4LCAweGNmLCAweGQwLCAweGVmLCAweGFhLCAweGZiLCAweDQzLCAweDRkLCAweDMzLCAweDg1LCAweDQ1LCAweGY5LCAweDAyLCAweDdmLCAweDUwLCAweDNjLCAweDlmLCAweGE4LCAweDUxLCAweGEzLCAweDQwLCAweDhmLCAweDkyLCAweDlkLCAweDM4LCAweGY1LCAweGJjLCAweGI2LCAweGRhLCAweDIxLCAweDEwLCAweGZmLCAweGYzLCAweGQyLCAweGNkLCAweDBjLCAweDEzLCAweGVjLCAweDVmLCAweDk3LCAweDQ0LCAweDE3LCAweGM0LCAweGE3LCAweDdlLCAweDNkLCAweDY0LCAweDVkLCAweDE5LCAweDczLCAweDYwLCAweDgxLCAweDRmLCAweGRjLCAweDIyLCAweDJhLCAweDkwLCAweDg4LCAweDQ2LCAweGVlLCAweGI4LCAweDE0LCAweGRlLCAweDVlLCAweDBiLCAweGRiLCAweGUwLCAweDMyLCAweDNhLCAweDBhLCAweDQ5LCAweDA2LCAweDI0LCAweDVjLCAweGMyLCAweGQzLCAweGFjLCAweDYyLCAweDkxLCAweDk1LCAweGU0LCAweDc5LCAweGU3LCAweGM4LCAweDM3LCAweDZkLCAweDhkLCAweGQ1LCAweDRlLCAweGE5LCAweDZjLCAweDU2LCAweGY0LCAweGVhLCAweDY1LCAweDdhLCAweGFlLCAweDA4LCAweGJhLCAweDc4LCAweDI1LCAweDJlLCAweDFjLCAweGE2LCAweGI0LCAweGM2LCAweGU4LCAweGRkLCAweDc0LCAweDFmLCAweDRiLCAweGJkLCAweDhiLCAweDhhLCAweDcwLCAweDNlLCAweGI1LCAweDY2LCAweDQ4LCAweDAzLCAweGY2LCAweDBlLCAweDYxLCAweDM1LCAweDU3LCAweGI5LCAweDg2LCAweGMxLCAweDFkLCAweDllLCAweGUxLCAweGY4LCAweDk4LCAweDExLCAweDY5LCAweGQ5LCAweDhlLCAweDk0LCAweDliLCAweDFlLCAweDg3LCAweGU5LCAweGNlLCAweDU1LCAweDI4LCAweGRmLCAweDhjLCAweGExLCAweDg5LCAweDBkLCAweGJmLCAweGU2LCAweDQyLCAweDY4LCAweDQxLCAweDk5LCAweDJkLCAweDBmLCAweGIwLCAweDU0LCAweGJiLCAweDE2XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faW52X3MgPSBuZXcgVWludDhBcnJheShbMHg1MiwgMHgwOSwgMHg2YSwgMHhkNSwgMHgzMCwgMHgzNiwgMHhhNSwgMHgzOCwgMHhiZiwgMHg0MCwgMHhhMywgMHg5ZSwgMHg4MSwgMHhmMywgMHhkNywgMHhmYiwgMHg3YywgMHhlMywgMHgzOSwgMHg4MiwgMHg5YiwgMHgyZiwgMHhmZiwgMHg4NywgMHgzNCwgMHg4ZSwgMHg0MywgMHg0NCwgMHhjNCwgMHhkZSwgMHhlOSwgMHhjYiwgMHg1NCwgMHg3YiwgMHg5NCwgMHgzMiwgMHhhNiwgMHhjMiwgMHgyMywgMHgzZCwgMHhlZSwgMHg0YywgMHg5NSwgMHgwYiwgMHg0MiwgMHhmYSwgMHhjMywgMHg0ZSwgMHgwOCwgMHgyZSwgMHhhMSwgMHg2NiwgMHgyOCwgMHhkOSwgMHgyNCwgMHhiMiwgMHg3NiwgMHg1YiwgMHhhMiwgMHg0OSwgMHg2ZCwgMHg4YiwgMHhkMSwgMHgyNSwgMHg3MiwgMHhmOCwgMHhmNiwgMHg2NCwgMHg4NiwgMHg2OCwgMHg5OCwgMHgxNiwgMHhkNCwgMHhhNCwgMHg1YywgMHhjYywgMHg1ZCwgMHg2NSwgMHhiNiwgMHg5MiwgMHg2YywgMHg3MCwgMHg0OCwgMHg1MCwgMHhmZCwgMHhlZCwgMHhiOSwgMHhkYSwgMHg1ZSwgMHgxNSwgMHg0NiwgMHg1NywgMHhhNywgMHg4ZCwgMHg5ZCwgMHg4NCwgMHg5MCwgMHhkOCwgMHhhYiwgMHgwMCwgMHg4YywgMHhiYywgMHhkMywgMHgwYSwgMHhmNywgMHhlNCwgMHg1OCwgMHgwNSwgMHhiOCwgMHhiMywgMHg0NSwgMHgwNiwgMHhkMCwgMHgyYywgMHgxZSwgMHg4ZiwgMHhjYSwgMHgzZiwgMHgwZiwgMHgwMiwgMHhjMSwgMHhhZiwgMHhiZCwgMHgwMywgMHgwMSwgMHgxMywgMHg4YSwgMHg2YiwgMHgzYSwgMHg5MSwgMHgxMSwgMHg0MSwgMHg0ZiwgMHg2NywgMHhkYywgMHhlYSwgMHg5NywgMHhmMiwgMHhjZiwgMHhjZSwgMHhmMCwgMHhiNCwgMHhlNiwgMHg3MywgMHg5NiwgMHhhYywgMHg3NCwgMHgyMiwgMHhlNywgMHhhZCwgMHgzNSwgMHg4NSwgMHhlMiwgMHhmOSwgMHgzNywgMHhlOCwgMHgxYywgMHg3NSwgMHhkZiwgMHg2ZSwgMHg0NywgMHhmMSwgMHgxYSwgMHg3MSwgMHgxZCwgMHgyOSwgMHhjNSwgMHg4OSwgMHg2ZiwgMHhiNywgMHg2MiwgMHgwZSwgMHhhYSwgMHgxOCwgMHhiZSwgMHgxYiwgMHhmYywgMHg1NiwgMHgzZSwgMHg0YiwgMHhjNiwgMHhkMiwgMHg3OSwgMHgyMCwgMHg5YSwgMHhkYiwgMHhjMCwgMHhmZSwgMHg3OCwgMHhjZCwgMHg1YSwgMHhmNCwgMHgxZiwgMHhkZCwgMHhhOCwgMHgzMywgMHg4OCwgMHgwNywgMHhjNywgMHgzMSwgMHhiMSwgMHgxMiwgMHgxMCwgMHg1OSwgMHgyNywgMHg4MCwgMHhlYywgMHg1ZiwgMHg2MCwgMHg1MSwgMHg3ZiwgMHhhOSwgMHgxOSwgMHhiNSwgMHg0YSwgMHgwZCwgMHgyZCwgMHhlNSwgMHg3YSwgMHg5ZiwgMHg5MywgMHhjOSwgMHg5YywgMHhlZiwgMHhhMCwgMHhlMCwgMHgzYiwgMHg0ZCwgMHhhZSwgMHgyYSwgMHhmNSwgMHhiMCwgMHhjOCwgMHhlYiwgMHhiYiwgMHgzYywgMHg4MywgMHg1MywgMHg5OSwgMHg2MSwgMHgxNywgMHgyYiwgMHgwNCwgMHg3ZSwgMHhiYSwgMHg3NywgMHhkNiwgMHgyNiwgMHhlMSwgMHg2OSwgMHgxNCwgMHg2MywgMHg1NSwgMHgyMSwgMHgwYywgMHg3ZF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21peCA9IG5ldyBVaW50MzJBcnJheShbMHgwMDAwMDAwMCwgMHgwZTA5MGQwYiwgMHgxYzEyMWExNiwgMHgxMjFiMTcxZCwgMHgzODI0MzQyYywgMHgzNjJkMzkyNywgMHgyNDM2MmUzYSwgMHgyYTNmMjMzMSwgMHg3MDQ4Njg1OCwgMHg3ZTQxNjU1MywgMHg2YzVhNzI0ZSwgMHg2MjUzN2Y0NSwgMHg0ODZjNWM3NCwgMHg0NjY1NTE3ZiwgMHg1NDdlNDY2MiwgMHg1YTc3NGI2OSwgMHhlMDkwZDBiMCwgMHhlZTk5ZGRiYiwgMHhmYzgyY2FhNiwgMHhmMjhiYzdhZCwgMHhkOGI0ZTQ5YywgMHhkNmJkZTk5NywgMHhjNGE2ZmU4YSwgMHhjYWFmZjM4MSwgMHg5MGQ4YjhlOCwgMHg5ZWQxYjVlMywgMHg4Y2NhYTJmZSwgMHg4MmMzYWZmNSwgMHhhOGZjOGNjNCwgMHhhNmY1ODFjZiwgMHhiNGVlOTZkMiwgMHhiYWU3OWJkOSwgMHhkYjNiYmI3YiwgMHhkNTMyYjY3MCwgMHhjNzI5YTE2ZCwgMHhjOTIwYWM2NiwgMHhlMzFmOGY1NywgMHhlZDE2ODI1YywgMHhmZjBkOTU0MSwgMHhmMTA0OTg0YSwgMHhhYjczZDMyMywgMHhhNTdhZGUyOCwgMHhiNzYxYzkzNSwgMHhiOTY4YzQzZSwgMHg5MzU3ZTcwZiwgMHg5ZDVlZWEwNCwgMHg4ZjQ1ZmQxOSwgMHg4MTRjZjAxMiwgMHgzYmFiNmJjYiwgMHgzNWEyNjZjMCwgMHgyN2I5NzFkZCwgMHgyOWIwN2NkNiwgMHgwMzhmNWZlNywgMHgwZDg2NTJlYywgMHgxZjlkNDVmMSwgMHgxMTk0NDhmYSwgMHg0YmUzMDM5MywgMHg0NWVhMGU5OCwgMHg1N2YxMTk4NSwgMHg1OWY4MTQ4ZSwgMHg3M2M3MzdiZiwgMHg3ZGNlM2FiNCwgMHg2ZmQ1MmRhOSwgMHg2MWRjMjBhMiwgMHhhZDc2NmRmNiwgMHhhMzdmNjBmZCwgMHhiMTY0NzdlMCwgMHhiZjZkN2FlYiwgMHg5NTUyNTlkYSwgMHg5YjViNTRkMSwgMHg4OTQwNDNjYywgMHg4NzQ5NGVjNywgMHhkZDNlMDVhZSwgMHhkMzM3MDhhNSwgMHhjMTJjMWZiOCwgMHhjZjI1MTJiMywgMHhlNTFhMzE4MiwgMHhlYjEzM2M4OSwgMHhmOTA4MmI5NCwgMHhmNzAxMjY5ZiwgMHg0ZGU2YmQ0NiwgMHg0M2VmYjA0ZCwgMHg1MWY0YTc1MCwgMHg1ZmZkYWE1YiwgMHg3NWMyODk2YSwgMHg3YmNiODQ2MSwgMHg2OWQwOTM3YywgMHg2N2Q5OWU3NywgMHgzZGFlZDUxZSwgMHgzM2E3ZDgxNSwgMHgyMWJjY2YwOCwgMHgyZmI1YzIwMywgMHgwNThhZTEzMiwgMHgwYjgzZWMzOSwgMHgxOTk4ZmIyNCwgMHgxNzkxZjYyZiwgMHg3NjRkZDY4ZCwgMHg3ODQ0ZGI4NiwgMHg2YTVmY2M5YiwgMHg2NDU2YzE5MCwgMHg0ZTY5ZTJhMSwgMHg0MDYwZWZhYSwgMHg1MjdiZjhiNywgMHg1YzcyZjViYywgMHgwNjA1YmVkNSwgMHgwODBjYjNkZSwgMHgxYTE3YTRjMywgMHgxNDFlYTljOCwgMHgzZTIxOGFmOSwgMHgzMDI4ODdmMiwgMHgyMjMzOTBlZiwgMHgyYzNhOWRlNCwgMHg5NmRkMDYzZCwgMHg5OGQ0MGIzNiwgMHg4YWNmMWMyYiwgMHg4NGM2MTEyMCwgMHhhZWY5MzIxMSwgMHhhMGYwM2YxYSwgMHhiMmViMjgwNywgMHhiY2UyMjUwYywgMHhlNjk1NmU2NSwgMHhlODljNjM2ZSwgMHhmYTg3NzQ3MywgMHhmNDhlNzk3OCwgMHhkZWIxNWE0OSwgMHhkMGI4NTc0MiwgMHhjMmEzNDA1ZiwgMHhjY2FhNGQ1NCwgMHg0MWVjZGFmNywgMHg0ZmU1ZDdmYywgMHg1ZGZlYzBlMSwgMHg1M2Y3Y2RlYSwgMHg3OWM4ZWVkYiwgMHg3N2MxZTNkMCwgMHg2NWRhZjRjZCwgMHg2YmQzZjljNiwgMHgzMWE0YjJhZiwgMHgzZmFkYmZhNCwgMHgyZGI2YThiOSwgMHgyM2JmYTViMiwgMHgwOTgwODY4MywgMHgwNzg5OGI4OCwgMHgxNTkyOWM5NSwgMHgxYjliOTE5ZSwgMHhhMTdjMGE0NywgMHhhZjc1MDc0YywgMHhiZDZlMTA1MSwgMHhiMzY3MWQ1YSwgMHg5OTU4M2U2YiwgMHg5NzUxMzM2MCwgMHg4NTRhMjQ3ZCwgMHg4YjQzMjk3NiwgMHhkMTM0NjIxZiwgMHhkZjNkNmYxNCwgMHhjZDI2NzgwOSwgMHhjMzJmNzUwMiwgMHhlOTEwNTYzMywgMHhlNzE5NWIzOCwgMHhmNTAyNGMyNSwgMHhmYjBiNDEyZSwgMHg5YWQ3NjE4YywgMHg5NGRlNmM4NywgMHg4NmM1N2I5YSwgMHg4OGNjNzY5MSwgMHhhMmYzNTVhMCwgMHhhY2ZhNThhYiwgMHhiZWUxNGZiNiwgMHhiMGU4NDJiZCwgMHhlYTlmMDlkNCwgMHhlNDk2MDRkZiwgMHhmNjhkMTNjMiwgMHhmODg0MWVjOSwgMHhkMmJiM2RmOCwgMHhkY2IyMzBmMywgMHhjZWE5MjdlZSwgMHhjMGEwMmFlNSwgMHg3YTQ3YjEzYywgMHg3NDRlYmMzNywgMHg2NjU1YWIyYSwgMHg2ODVjYTYyMSwgMHg0MjYzODUxMCwgMHg0YzZhODgxYiwgMHg1ZTcxOWYwNiwgMHg1MDc4OTIwZCwgMHgwYTBmZDk2NCwgMHgwNDA2ZDQ2ZiwgMHgxNjFkYzM3MiwgMHgxODE0Y2U3OSwgMHgzMjJiZWQ0OCwgMHgzYzIyZTA0MywgMHgyZTM5Zjc1ZSwgMHgyMDMwZmE1NSwgMHhlYzlhYjcwMSwgMHhlMjkzYmEwYSwgMHhmMDg4YWQxNywgMHhmZTgxYTAxYywgMHhkNGJlODMyZCwgMHhkYWI3OGUyNiwgMHhjOGFjOTkzYiwgMHhjNmE1OTQzMCwgMHg5Y2QyZGY1OSwgMHg5MmRiZDI1MiwgMHg4MGMwYzU0ZiwgMHg4ZWM5Yzg0NCwgMHhhNGY2ZWI3NSwgMHhhYWZmZTY3ZSwgMHhiOGU0ZjE2MywgMHhiNmVkZmM2OCwgMHgwYzBhNjdiMSwgMHgwMjAzNmFiYSwgMHgxMDE4N2RhNywgMHgxZTExNzBhYywgMHgzNDJlNTM5ZCwgMHgzYTI3NWU5NiwgMHgyODNjNDk4YiwgMHgyNjM1NDQ4MCwgMHg3YzQyMGZlOSwgMHg3MjRiMDJlMiwgMHg2MDUwMTVmZiwgMHg2ZTU5MThmNCwgMHg0NDY2M2JjNSwgMHg0YTZmMzZjZSwgMHg1ODc0MjFkMywgMHg1NjdkMmNkOCwgMHgzN2ExMGM3YSwgMHgzOWE4MDE3MSwgMHgyYmIzMTY2YywgMHgyNWJhMWI2NywgMHgwZjg1Mzg1NiwgMHgwMThjMzU1ZCwgMHgxMzk3MjI0MCwgMHgxZDllMmY0YiwgMHg0N2U5NjQyMiwgMHg0OWUwNjkyOSwgMHg1YmZiN2UzNCwgMHg1NWYyNzMzZiwgMHg3ZmNkNTAwZSwgMHg3MWM0NWQwNSwgMHg2M2RmNGExOCwgMHg2ZGQ2NDcxMywgMHhkNzMxZGNjYSwgMHhkOTM4ZDFjMSwgMHhjYjIzYzZkYywgMHhjNTJhY2JkNywgMHhlZjE1ZThlNiwgMHhlMTFjZTVlZCwgMHhmMzA3ZjJmMCwgMHhmZDBlZmZmYiwgMHhhNzc5YjQ5MiwgMHhhOTcwYjk5OSwgMHhiYjZiYWU4NCwgMHhiNTYyYTM4ZiwgMHg5ZjVkODBiZSwgMHg5MTU0OGRiNSwgMHg4MzRmOWFhOCwgMHg4ZDQ2OTdhM10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21peENvbCA9IG5ldyBVaW50OEFycmF5KDI1Nik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMTI4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9taXhDb2xbaV0gPSBpIDw8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9taXhDb2xbaV0gPSBpIDw8IDEgXiAweDFiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJQb3NpdGlvbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBRVNCYXNlQ2lwaGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZXhwYW5kS2V5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9leHBhbmRLZXkoY2lwaGVyS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Nhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2RlY3J5cHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlY3J5cHQoaW5wdXQsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdCwgdSwgdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXQoaW5wdXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBrID0gdGhpcy5fa2V5U2l6ZTsgaiA8IDE2OyArK2osICsraykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbal0gXj0ga2V5W2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiAtIDE7IGkgPj0gMTsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhdGVbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTNdID0gc3RhdGVbOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVs5XSA9IHN0YXRlWzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbNV0gPSBzdGF0ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzFdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBzdGF0ZVsxNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RhdGVbMTBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTRdID0gc3RhdGVbNl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMF0gPSBzdGF0ZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzZdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzJdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBzdGF0ZVsxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RhdGVbMTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0YXRlWzddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTVdID0gc3RhdGVbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMV0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbN10gPSB1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbM10gPSB2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgMTY7ICsrX2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfal0gPSB0aGlzLl9pbnZfc1tzdGF0ZVtfal1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajIgPSAwLCBfayA9IGkgKiAxNjsgX2oyIDwgMTY7ICsrX2oyLCArK19rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2oyXSBePSBrZXlbX2tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajMgPSAwOyBfajMgPCAxNjsgX2ozICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczAgPSB0aGlzLl9taXhbc3RhdGVbX2ozXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMxID0gdGhpcy5fbWl4W3N0YXRlW19qMyArIDFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSB0aGlzLl9taXhbc3RhdGVbX2ozICsgMl1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzMyA9IHRoaXMuX21peFtzdGF0ZVtfajMgKyAzXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHMwIF4gczEgPj4+IDggXiBzMSA8PCAyNCBeIHMyID4+PiAxNiBeIHMyIDw8IDE2IF4gczMgPj4+IDI0IF4gczMgPDwgODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfajNdID0gdCA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qMyArIDFdID0gdCA+PiAxNiAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2ozICsgMl0gPSB0ID4+IDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qMyArIDNdID0gdCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhdGVbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxM10gPSBzdGF0ZVs5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbOV0gPSBzdGF0ZVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbNV0gPSBzdGF0ZVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMV0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhdGVbMTRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RhdGVbMTBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxNF0gPSBzdGF0ZVs2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTBdID0gc3RhdGVbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzZdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMl0gPSB1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhdGVbMTVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ID0gc3RhdGVbMTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbN107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzE1XSA9IHN0YXRlWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMV0gPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVs3XSA9IHU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzNdID0gdjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajQgPSAwOyBfajQgPCAxNjsgKytfajQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qNF0gPSB0aGlzLl9pbnZfc1tzdGF0ZVtfajRdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qNF0gXj0ga2V5W19qNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZW5jcnlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZW5jcnlwdChpbnB1dCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gdGhpcy5fcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQsIHUsIHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2V0KGlucHV0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IDE2OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW2pdIF49IGtleVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgdGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9qNSA9IDA7IF9qNSA8IDE2OyArK19qNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qNV0gPSBzW3N0YXRlW19qNV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxXSA9IHN0YXRlWzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbNV0gPSBzdGF0ZVs5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzldID0gc3RhdGVbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTNdID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdGF0ZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0ZVs2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzJdID0gc3RhdGVbMTBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbNl0gPSBzdGF0ZVsxNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTRdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdGF0ZVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0ZVs3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgPSBzdGF0ZVsxMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVszXSA9IHN0YXRlWzE1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzddID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzExXSA9IHU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxNV0gPSB0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajYgPSAwOyBfajYgPCAxNjsgX2o2ICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczAgPSBzdGF0ZVtfajYgKyAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczEgPSBzdGF0ZVtfajYgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSBzdGF0ZVtfajYgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgczMgPSBzdGF0ZVtfajYgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gczAgXiBzMSBeIHMyIF4gczM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2o2ICsgMF0gXj0gdCBeIHRoaXMuX21peENvbFtzMCBeIHMxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfajYgKyAxXSBePSB0IF4gdGhpcy5fbWl4Q29sW3MxIF4gczJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlW19qNiArIDJdIF49IHQgXiB0aGlzLl9taXhDb2xbczIgXiBzM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2o2ICsgM10gXj0gdCBeIHRoaXMuX21peENvbFtzMyBeIHMwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2o3ID0gMCwgayA9IGkgKiAxNjsgX2o3IDwgMTY7ICsrX2o3LCArK2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfajddIF49IGtleVtrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9qOCA9IDA7IF9qOCA8IDE2OyArK19qOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbX2o4XSA9IHNbc3RhdGVbX2o4XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzFdID0gc3RhdGVbNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzVdID0gc3RhdGVbOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzldID0gc3RhdGVbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxM10gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0ZVs2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMl0gPSBzdGF0ZVsxMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzZdID0gc3RhdGVbMTRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxMF0gPSB2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVsxNF0gPSB1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RhdGVbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUgPSBzdGF0ZVs3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHN0YXRlWzExXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbM10gPSBzdGF0ZVsxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlWzddID0gdjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTFdID0gdTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbMTVdID0gdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfajkgPSAwLCBfazIgPSB0aGlzLl9rZXlTaXplOyBfajkgPCAxNjsgKytfajksICsrX2syKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtfajldIF49IGtleVtfazJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2RlY3J5cHRCbG9jazJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2RlY3J5cHRCbG9jazIoZGF0YSwgZmluYWxpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlclBvc2l0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiA9IHRoaXMuaXY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzb3VyY2VMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2J1ZmZlckxlbmd0aF0gPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytidWZmZXJMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGxhaW4gPSB0aGlzLl9kZWNyeXB0KGJ1ZmZlciwgdGhpcy5fa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhaW5bal0gXj0gaXZbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2ID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocGxhaW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdiA9IGl2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0TGVuZ3RoID0gMTYgKiByZXN1bHQubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5hbGl6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RCbG9jayA9IHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHNMZW4gPSBsYXN0QmxvY2tbMTVdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHNMZW4gPD0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDE1LCBpaSA9IDE2IC0gcHNMZW47IF9pID49IGlpOyAtLV9pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0QmxvY2tbX2ldICE9PSBwc0xlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNMZW4gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRMZW5ndGggLT0gcHNMZW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IGxhc3RCbG9jay5zdWJhcnJheSgwLCAxNiAtIHBzTGVuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXQgPSBuZXcgVWludDhBcnJheShvdXRwdXRMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDAsIF9qMTAgPSAwLCBfaWkgPSByZXN1bHQubGVuZ3RoOyBfaTIgPCBfaWk7ICsrX2kyLCBfajEwICs9IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc2V0KHJlc3VsdFtfaTJdLCBfajEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJkZWNyeXB0QmxvY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdiA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJMZW5ndGggPSB0aGlzLmJ1ZmZlclBvc2l0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdiA9IGl2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGJ1ZmZlckxlbmd0aCA8IDE2ICYmIGkgPCBzb3VyY2VMZW5ndGg7ICsraSwgKytidWZmZXJMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbYnVmZmVyTGVuZ3RoXSA9IGRhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJMZW5ndGggPCAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gYnVmZmVyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pdiA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YmFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjcnlwdEJsb2NrID0gdGhpcy5fZGVjcnlwdEJsb2NrMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVjcnlwdEJsb2NrKGRhdGEsIGZpbmFsaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImVuY3J5cHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5jcnlwdChkYXRhLCBpdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyUG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWl2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdiA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltidWZmZXJMZW5ndGhdID0gZGF0YVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrYnVmZmVyTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyTGVuZ3RoIDwgMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2pdIF49IGl2W2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gdGhpcy5fZW5jcnlwdChidWZmZXIsIHRoaXMuX2tleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2ID0gY2lwaGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY2lwaGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXYgPSBpdjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dExlbmd0aCA9IDE2ICogcmVzdWx0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dCA9IG5ldyBVaW50OEFycmF5KG91dHB1dExlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kzID0gMCwgX2oxMSA9IDAsIGlpID0gcmVzdWx0Lmxlbmd0aDsgX2kzIDwgaWk7ICsrX2kzLCBfajExICs9IDE2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuc2V0KHJlc3VsdFtfaTNdLCBfajExKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQUVTQmFzZUNpcGhlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFFUzEyOENpcGhlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9BRVNCYXNlQ2lwaGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQUVTMTI4Q2lwaGVyLCBfQUVTQmFzZUNpcGhlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFFUzEyOENpcGhlcihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQUVTMTI4Q2lwaGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEFFUzEyOENpcGhlcikuY2FsbCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbiA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9rZXlTaXplID0gMTYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yY29uID0gbmV3IFVpbnQ4QXJyYXkoWzB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGQsIDB4MDEsIDB4MDIsIDB4MDQsIDB4MDgsIDB4MTAsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MWIsIDB4MzYsIDB4NmMsIDB4ZDgsIDB4YWIsIDB4NGQsIDB4OWEsIDB4MmYsIDB4NWUsIDB4YmMsIDB4NjMsIDB4YzYsIDB4OTcsIDB4MzUsIDB4NmEsIDB4ZDQsIDB4YjMsIDB4N2QsIDB4ZmEsIDB4ZWYsIDB4YzUsIDB4OTEsIDB4MzksIDB4NzIsIDB4ZTQsIDB4ZDMsIDB4YmQsIDB4NjEsIDB4YzIsIDB4OWYsIDB4MjUsIDB4NGEsIDB4OTQsIDB4MzMsIDB4NjYsIDB4Y2MsIDB4ODMsIDB4MWQsIDB4M2EsIDB4NzQsIDB4ZTgsIDB4Y2IsIDB4OGRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fa2V5ID0gX3RoaXMuX2V4cGFuZEtleShrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFFUzEyOENpcGhlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2V4cGFuZEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IDE3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmNvbiA9IHRoaXMuX3Jjb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChjaXBoZXJLZXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAxNiwgaSA9IDE7IGogPCBiOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0MSA9IHJlc3VsdFtqIC0gM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDIgPSByZXN1bHRbaiAtIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0NCA9IHJlc3VsdFtqIC0gNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDIgPSBzW3QyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQzID0gc1t0M107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSB0MSBeIHJjb25baV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gdDEgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtqXSA9IHQyIF49IHJlc3VsdFtqIC0gMTZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbal0gPSB0MyBePSByZXN1bHRbaiAtIDE2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gdDQgXj0gcmVzdWx0W2ogLSAxNl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBRVMxMjhDaXBoZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oQUVTQmFzZUNpcGhlcik7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFFUzEyOENpcGhlciA9IEFFUzEyOENpcGhlcjtcblxuICAgICAgICAgICAgICAgIHZhciBBRVMyNTZDaXBoZXIgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQUVTQmFzZUNpcGhlcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhBRVMyNTZDaXBoZXIsIF9BRVNCYXNlQ2lwaGVyMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFFUzI1NkNpcGhlcihrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFFUzI1NkNpcGhlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQUVTMjU2Q2lwaGVyKS5jYWxsKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX2N5Y2xlc09mUmVwZXRpdGlvbiA9IDE0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fa2V5U2l6ZSA9IDIyNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX2tleSA9IF90aGlzMi5fZXhwYW5kS2V5KGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFFUzI1NkNpcGhlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2V4cGFuZEtleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZXhwYW5kS2V5KGNpcGhlcktleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYiA9IDI0MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB0aGlzLl9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoY2lwaGVyS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdDEsIHQyLCB0MywgdDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDMyLCBpID0gMTsgaiA8IGI7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogJSAzMiA9PT0gMTYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHNbdDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyID0gc1t0Ml07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDMgPSBzW3QzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0NCA9IHNbdDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChqICUgMzIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHJlc3VsdFtqIC0gM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDIgPSByZXN1bHRbaiAtIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQzID0gcmVzdWx0W2ogLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0NCA9IHJlc3VsdFtqIC0gNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDEgPSBzW3QxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MiA9IHNbdDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQzID0gc1t0M107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDQgPSBzW3Q0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQxIF4gcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgociA8PD0gMSkgPj0gMjU2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociBeIDB4MWIpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgNDsgKytuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gdDEgXj0gcmVzdWx0W2ogLSAzMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtqXSA9IHQyIF49IHJlc3VsdFtqIC0gMzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbal0gPSB0MyBePSByZXN1bHRbaiAtIDMyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2pdID0gdDQgXj0gcmVzdWx0W2ogLSAzMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBRVMyNTZDaXBoZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oQUVTQmFzZUNpcGhlcik7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFFUzI1NkNpcGhlciA9IEFFUzI1NkNpcGhlcjtcblxuICAgICAgICAgICAgICAgIHZhciBQREYxNyA9IGZ1bmN0aW9uIFBERjE3Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyZUJ5dGVBcnJheXMoYXJyYXkxLCBhcnJheTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheTEubGVuZ3RoICE9PSBhcnJheTIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJheTFbaV0gIT09IGFycmF5MltpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERjE3KCkge31cblxuICAgICAgICAgICAgICAgICAgICBQREYxNy5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja093bmVyUGFzc3dvcmQ6IGZ1bmN0aW9uIFBERjE3X2NoZWNrT3duZXJQYXNzd29yZChwYXNzd29yZCwgb3duZXJWYWxpZGF0aW9uU2FsdCwgdXNlckJ5dGVzLCBvd25lclBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KG93bmVyVmFsaWRhdGlvblNhbHQsIHBhc3N3b3JkLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KHVzZXJCeXRlcywgcGFzc3dvcmQubGVuZ3RoICsgb3duZXJWYWxpZGF0aW9uU2FsdC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVTSEEyNTYoaGFzaERhdGEsIDAsIGhhc2hEYXRhLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCeXRlQXJyYXlzKHJlc3VsdCwgb3duZXJQYXNzd29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tVc2VyUGFzc3dvcmQ6IGZ1bmN0aW9uIFBERjE3X2NoZWNrVXNlclBhc3N3b3JkKHBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJQYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KHVzZXJWYWxpZGF0aW9uU2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wYXJlQnl0ZUFycmF5cyhyZXN1bHQsIHVzZXJQYXNzd29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3duZXJLZXk6IGZ1bmN0aW9uIFBERjE3X2dldE93bmVyS2V5KHBhc3N3b3JkLCBvd25lcktleVNhbHQsIHVzZXJCeXRlcywgb3duZXJFbmNyeXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldChwYXNzd29yZCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KG93bmVyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQodXNlckJ5dGVzLCBwYXNzd29yZC5sZW5ndGggKyBvd25lcktleVNhbHQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sob3duZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRVc2VyS2V5OiBmdW5jdGlvbiBQREYxN19nZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldCh1c2VyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gY2FsY3VsYXRlU0hBMjU2KGhhc2hEYXRhLCAwLCBoYXNoRGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGMTc7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREYxNyA9IFBERjE3O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERjIwID0gZnVuY3Rpb24gUERGMjBDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb25jYXRBcnJheXMoYXJyYXkxLCBhcnJheTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkxLmxlbmd0aCArIGFycmF5Mi5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdC5zZXQoYXJyYXkxLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQuc2V0KGFycmF5MiwgYXJyYXkxLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZVBERjIwSGFzaChwYXNzd29yZCwgaW5wdXQsIHVzZXJCeXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGsgPSBjYWxjdWxhdGVTSEEyNTYoaW5wdXQsIDAsIGlucHV0Lmxlbmd0aCkuc3ViYXJyYXkoMCwgMzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgNjQgfHwgZVtlLmxlbmd0aCAtIDFdID4gaSAtIDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFycmF5TGVuZ3RoID0gcGFzc3dvcmQubGVuZ3RoICsgay5sZW5ndGggKyB1c2VyQnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrMSA9IG5ldyBVaW50OEFycmF5KGFycmF5TGVuZ3RoICogNjQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IGNvbmNhdEFycmF5cyhwYXNzd29yZCwgayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb25jYXRBcnJheXMoYXJyYXksIHVzZXJCeXRlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgcG9zID0gMDsgaiA8IDY0OyBqKyssIHBvcyArPSBhcnJheUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMS5zZXQoYXJyYXksIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNpcGhlciA9IG5ldyBBRVMxMjhDaXBoZXIoay5zdWJhcnJheSgwLCAxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBjaXBoZXIuZW5jcnlwdChrMSwgay5zdWJhcnJheSgxNiwgMzIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluZGVyID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHogPSAwOyB6IDwgMTY7IHorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5kZXIgKj0gMjU2ICUgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluZGVyICU9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmRlciArPSAoZVt6XSA+Pj4gMCkgJSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5kZXIgJT0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjYWxjdWxhdGVTSEEyNTYoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVtYWluZGVyID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjYWxjdWxhdGVTSEEzODQoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVtYWluZGVyID09PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBjYWxjdWxhdGVTSEE1MTIoZSwgMCwgZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGsuc3ViYXJyYXkoMCwgMzIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGMjAoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmVCeXRlQXJyYXlzKGFycmF5MSwgYXJyYXkyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXkxLmxlbmd0aCAhPT0gYXJyYXkyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBQREYyMC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoOiBmdW5jdGlvbiBQREYyMF9oYXNoKHBhc3N3b3JkLCBjb25jYXRCeXRlcywgdXNlckJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGN1bGF0ZVBERjIwSGFzaChwYXNzd29yZCwgY29uY2F0Qnl0ZXMsIHVzZXJCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tPd25lclBhc3N3b3JkOiBmdW5jdGlvbiBQREYyMF9jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVzZXJCeXRlcywgb3duZXJQYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KHBhc3N3b3JkLmxlbmd0aCArIDU2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldChvd25lclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldCh1c2VyQnl0ZXMsIHBhc3N3b3JkLmxlbmd0aCArIG93bmVyVmFsaWRhdGlvblNhbHQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgdXNlckJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tcGFyZUJ5dGVBcnJheXMocmVzdWx0LCBvd25lclBhc3N3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja1VzZXJQYXNzd29yZDogZnVuY3Rpb24gUERGMjBfY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2hEYXRhID0gbmV3IFVpbnQ4QXJyYXkocGFzc3dvcmQubGVuZ3RoICsgOCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQodXNlclZhbGlkYXRpb25TYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBhcmVCeXRlQXJyYXlzKHJlc3VsdCwgdXNlclBhc3N3b3JkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPd25lcktleTogZnVuY3Rpb24gUERGMjBfZ2V0T3duZXJLZXkocGFzc3dvcmQsIG93bmVyS2V5U2FsdCwgdXNlckJ5dGVzLCBvd25lckVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA1Nik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGEuc2V0KHBhc3N3b3JkLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQob3duZXJLZXlTYWx0LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldCh1c2VyQnl0ZXMsIHBhc3N3b3JkLmxlbmd0aCArIG93bmVyS2V5U2FsdC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBjYWxjdWxhdGVQREYyMEhhc2gocGFzc3dvcmQsIGhhc2hEYXRhLCB1c2VyQnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sob3duZXJFbmNyeXB0aW9uLCBmYWxzZSwgbmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRVc2VyS2V5OiBmdW5jdGlvbiBQREYyMF9nZXRVc2VyS2V5KHBhc3N3b3JkLCB1c2VyS2V5U2FsdCwgdXNlckVuY3J5cHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheShwYXNzd29yZC5sZW5ndGggKyA4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YS5zZXQocGFzc3dvcmQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhLnNldCh1c2VyS2V5U2FsdCwgcGFzc3dvcmQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gY2FsY3VsYXRlUERGMjBIYXNoKHBhc3N3b3JkLCBoYXNoRGF0YSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNpcGhlci5kZWNyeXB0QmxvY2sodXNlckVuY3J5cHRpb24sIGZhbHNlLCBuZXcgVWludDhBcnJheSgxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGMjA7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREYyMCA9IFBERjIwO1xuXG4gICAgICAgICAgICAgICAgdmFyIENpcGhlclRyYW5zZm9ybSA9IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybShzdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvciwgc3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3IgPSBzdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IgPSBzdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENpcGhlclRyYW5zZm9ybS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVTdHJlYW06IGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybV9jcmVhdGVTdHJlYW0oc3RyZWFtLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lwaGVyID0gbmV3IHRoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uRGVjcnlwdFN0cmVhbShzdHJlYW0sIGxlbmd0aCwgZnVuY3Rpb24gY2lwaGVyVHJhbnNmb3JtRGVjcnlwdFN0cmVhbShkYXRhLCBmaW5hbGl6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2lwaGVyLmRlY3J5cHRCbG9jayhkYXRhLCBmaW5hbGl6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdFN0cmluZzogZnVuY3Rpb24gQ2lwaGVyVHJhbnNmb3JtX2RlY3J5cHRTdHJpbmcocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXIgPSBuZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjaXBoZXIuZGVjcnlwdEJsb2NrKGRhdGEsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDaXBoZXJUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRQYXNzd29yZEJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoWzB4MjgsIDB4QkYsIDB4NEUsIDB4NUUsIDB4NEUsIDB4NzUsIDB4OEEsIDB4NDEsIDB4NjQsIDB4MDAsIDB4NEUsIDB4NTYsIDB4RkYsIDB4RkEsIDB4MDEsIDB4MDgsIDB4MkUsIDB4MkUsIDB4MDAsIDB4QjYsIDB4RDAsIDB4NjgsIDB4M0UsIDB4ODAsIDB4MkYsIDB4MEMsIDB4QTksIDB4RkUsIDB4NjQsIDB4NTMsIDB4NjksIDB4N0FdKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVFbmNyeXB0aW9uS2V5MjAocmV2aXNpb24sIHBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCBvd25lcktleVNhbHQsIHVCeXRlcywgdXNlclBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJLZXlTYWx0LCBvd25lckVuY3J5cHRpb24sIHVzZXJFbmNyeXB0aW9uLCBwZXJtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhc3N3b3JkTGVuZ3RoID0gTWF0aC5taW4oMTI3LCBwYXNzd29yZC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQuc3ViYXJyYXkoMCwgcGFzc3dvcmRMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGRmQWxnb3JpdGhtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2aXNpb24gPT09IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZBbGdvcml0aG0gPSBuZXcgUERGMjAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmQWxnb3JpdGhtID0gbmV3IFBERjE3KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZBbGdvcml0aG0uY2hlY2tVc2VyUGFzc3dvcmQocGFzc3dvcmQsIHVzZXJWYWxpZGF0aW9uU2FsdCwgdXNlclBhc3N3b3JkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZBbGdvcml0aG0uZ2V0VXNlcktleShwYXNzd29yZCwgdXNlcktleVNhbHQsIHVzZXJFbmNyeXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFzc3dvcmQubGVuZ3RoICYmIHBkZkFsZ29yaXRobS5jaGVja093bmVyUGFzc3dvcmQocGFzc3dvcmQsIG93bmVyVmFsaWRhdGlvblNhbHQsIHVCeXRlcywgb3duZXJQYXNzd29yZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmQWxnb3JpdGhtLmdldE93bmVyS2V5KHBhc3N3b3JkLCBvd25lcktleVNhbHQsIHVCeXRlcywgb3duZXJFbmNyeXB0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcmVwYXJlS2V5RGF0YShmaWxlSWQsIHBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCB1c2VyUGFzc3dvcmQsIGZsYWdzLCByZXZpc2lvbiwga2V5TGVuZ3RoLCBlbmNyeXB0TWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoRGF0YVNpemUgPSA0MCArIG93bmVyUGFzc3dvcmQubGVuZ3RoICsgZmlsZUlkLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoRGF0YSA9IG5ldyBVaW50OEFycmF5KGhhc2hEYXRhU2l6ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gTWF0aC5taW4oMzIsIHBhc3N3b3JkLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpXSA9IHBhc3N3b3JkW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpKytdID0gZGVmYXVsdFBhc3N3b3JkQnl0ZXNbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgbiA9IG93bmVyUGFzc3dvcmQubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaSsrXSA9IG93bmVyUGFzc3dvcmRbal07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSBmbGFncyAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpKytdID0gZmxhZ3MgPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaSsrXSA9IGZsYWdzID4+PiAyNCAmIDB4RkY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIG4gPSBmaWxlSWQubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaSsrXSA9IGZpbGVJZFtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmlzaW9uID49IDQgJiYgIWVuY3J5cHRNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2krK10gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoRGF0YSwgMCwgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5TGVuZ3RoSW5CeXRlcyA9IGtleUxlbmd0aCA+PiAzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2aXNpb24gPj0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCA1MDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2ggPSBjYWxjdWxhdGVNRDUoaGFzaCwgMCwga2V5TGVuZ3RoSW5CeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGlvbktleSA9IGhhc2guc3ViYXJyYXkoMCwga2V5TGVuZ3RoSW5CeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lwaGVyLCBjaGVja0RhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaV0gPSBkZWZhdWx0UGFzc3dvcmRCeXRlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBuID0gZmlsZUlkLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoRGF0YVtpKytdID0gZmlsZUlkW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGVuY3J5cHRpb25LZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGF0YSA9IGNpcGhlci5lbmNyeXB0QmxvY2soY2FsY3VsYXRlTUQ1KGhhc2hEYXRhLCAwLCBpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IGVuY3J5cHRpb25LZXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXJpdmVkS2V5ID0gbmV3IFVpbnQ4QXJyYXkobiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDw9IDE5OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IG47ICsraykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVyaXZlZEtleVtrXSA9IGVuY3J5cHRpb25LZXlba10gXiBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVyID0gbmV3IEFSQ0ZvdXJDaXBoZXIoZGVyaXZlZEtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrRGF0YSA9IGNpcGhlci5lbmNyeXB0QmxvY2soY2hlY2tEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBuID0gY2hlY2tEYXRhLmxlbmd0aDsgaiA8IG47ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBhc3N3b3JkW2pdICE9PSBjaGVja0RhdGFbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihlbmNyeXB0aW9uS2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0RhdGEgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKGRlZmF1bHRQYXNzd29yZEJ5dGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIG4gPSBjaGVja0RhdGEubGVuZ3RoOyBqIDwgbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGFzc3dvcmRbal0gIT09IGNoZWNrRGF0YVtqXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNyeXB0aW9uS2V5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlVXNlclBhc3N3b3JkKHBhc3N3b3JkLCBvd25lclBhc3N3b3JkLCByZXZpc2lvbiwga2V5TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzaERhdGEgPSBuZXcgVWludDhBcnJheSgzMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuO1xuICAgICAgICAgICAgICAgICAgICAgICAgbiA9IE1hdGgubWluKDMyLCBwYXNzd29yZC5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hEYXRhW2ldID0gcGFzc3dvcmRbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGogPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaERhdGFbaSsrXSA9IGRlZmF1bHRQYXNzd29yZEJ5dGVzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoID0gY2FsY3VsYXRlTUQ1KGhhc2hEYXRhLCAwLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlMZW5ndGhJbkJ5dGVzID0ga2V5TGVuZ3RoID4+IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IDUwOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaCA9IGNhbGN1bGF0ZU1ENShoYXNoLCAwLCBoYXNoLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lwaGVyLCB1c2VyUGFzc3dvcmQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXZpc2lvbiA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlclBhc3N3b3JkID0gb3duZXJQYXNzd29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVyaXZlZEtleSA9IG5ldyBVaW50OEFycmF5KGtleUxlbmd0aEluQnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMTk7IGogPj0gMDsgai0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBrZXlMZW5ndGhJbkJ5dGVzOyArK2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcml2ZWRLZXlba10gPSBoYXNoW2tdIF4gajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlciA9IG5ldyBBUkNGb3VyQ2lwaGVyKGRlcml2ZWRLZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyUGFzc3dvcmQgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKHVzZXJQYXNzd29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXIgPSBuZXcgQVJDRm91ckNpcGhlcihoYXNoLnN1YmFycmF5KDAsIGtleUxlbmd0aEluQnl0ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyUGFzc3dvcmQgPSBjaXBoZXIuZW5jcnlwdEJsb2NrKG93bmVyUGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlclBhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGlkZW50aXR5TmFtZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KCdJZGVudGl0eScpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENpcGhlclRyYW5zZm9ybUZhY3RvcnkoZGljdCwgZmlsZUlkLCBwYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlciA9IGRpY3QuZ2V0KCdGaWx0ZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIsICdTdGFuZGFyZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCd1bmtub3duIGVuY3J5cHRpb24gbWV0aG9kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdCA9IGRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxnb3JpdGhtID0gZGljdC5nZXQoJ1YnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGFsZ29yaXRobSkgfHwgYWxnb3JpdGhtICE9PSAxICYmIGFsZ29yaXRobSAhPT0gMiAmJiBhbGdvcml0aG0gIT09IDQgJiYgYWxnb3JpdGhtICE9PSA1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCd1bnN1cHBvcnRlZCBlbmNyeXB0aW9uIGFsZ29yaXRobScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZ29yaXRobSA9IGFsZ29yaXRobTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlMZW5ndGggPSBkaWN0LmdldCgnTGVuZ3RoJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgha2V5TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsZ29yaXRobSA8PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbmd0aCA9IDQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZkRpY3QgPSBkaWN0LmdldCgnQ0YnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbUNyeXB0b05hbWUgPSBkaWN0LmdldCgnU3RtRicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjZkRpY3QpICYmICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN0cmVhbUNyeXB0b05hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZkRpY3Quc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyRGljdCA9IGNmRGljdC5nZXQoc3RyZWFtQ3J5cHRvTmFtZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUxlbmd0aCA9IGhhbmRsZXJEaWN0ICYmIGhhbmRsZXJEaWN0LmdldCgnTGVuZ3RoJykgfHwgMTI4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5TGVuZ3RoIDwgNDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlMZW5ndGggPDw9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihrZXlMZW5ndGgpIHx8IGtleUxlbmd0aCA8IDQwIHx8IGtleUxlbmd0aCAlIDggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ2ludmFsaWQga2V5IGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3duZXJQYXNzd29yZCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnTycpKS5zdWJhcnJheSgwLCAzMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlclBhc3N3b3JkID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KCdVJykpLnN1YmFycmF5KDAsIDMyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGFncyA9IGRpY3QuZ2V0KCdQJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmV2aXNpb24gPSBkaWN0LmdldCgnUicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY3J5cHRNZXRhZGF0YSA9IChhbGdvcml0aG0gPT09IDQgfHwgYWxnb3JpdGhtID09PSA1KSAmJiBkaWN0LmdldCgnRW5jcnlwdE1ldGFkYXRhJykgIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmNyeXB0TWV0YWRhdGEgPSBlbmNyeXB0TWV0YWRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZUlkQnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZmlsZUlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXNzd29yZEJ5dGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2aXNpb24gPT09IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkID0gKDAsIF91dGlsLnV0ZjhTdHJpbmdUb1N0cmluZykocGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5OiAnICsgJ1VuYWJsZSB0byBjb252ZXJ0IFVURjggZW5jb2RlZCBwYXNzd29yZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkQnl0ZXMgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykocGFzc3dvcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jcnlwdGlvbktleTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFsZ29yaXRobSAhPT0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY3J5cHRpb25LZXkgPSBwcmVwYXJlS2V5RGF0YShmaWxlSWRCeXRlcywgcGFzc3dvcmRCeXRlcywgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG93bmVyVmFsaWRhdGlvblNhbHQgPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoJ08nKSkuc3ViYXJyYXkoMzIsIDQwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3duZXJLZXlTYWx0ID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KCdPJykpLnN1YmFycmF5KDQwLCA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVCeXRlcyA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnVScpKS5zdWJhcnJheSgwLCA0OCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJWYWxpZGF0aW9uU2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnVScpKS5zdWJhcnJheSgzMiwgNDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyS2V5U2FsdCA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnVScpKS5zdWJhcnJheSg0MCwgNDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvd25lckVuY3J5cHRpb24gPSAoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoZGljdC5nZXQoJ09FJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VyRW5jcnlwdGlvbiA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkaWN0LmdldCgnVUUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlcm1zID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKGRpY3QuZ2V0KCdQZXJtcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5ID0gY3JlYXRlRW5jcnlwdGlvbktleTIwKHJldmlzaW9uLCBwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCBvd25lclZhbGlkYXRpb25TYWx0LCBvd25lcktleVNhbHQsIHVCeXRlcywgdXNlclBhc3N3b3JkLCB1c2VyVmFsaWRhdGlvblNhbHQsIHVzZXJLZXlTYWx0LCBvd25lckVuY3J5cHRpb24sIHVzZXJFbmNyeXB0aW9uLCBwZXJtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW5jcnlwdGlvbktleSAmJiAhcGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuUGFzc3dvcmRFeGNlcHRpb24oJ05vIHBhc3N3b3JkIGdpdmVuJywgX3V0aWwuUGFzc3dvcmRSZXNwb25zZXMuTkVFRF9QQVNTV09SRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFlbmNyeXB0aW9uS2V5ICYmIHBhc3N3b3JkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZWRQYXNzd29yZCA9IGRlY29kZVVzZXJQYXNzd29yZChwYXNzd29yZEJ5dGVzLCBvd25lclBhc3N3b3JkLCByZXZpc2lvbiwga2V5TGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNyeXB0aW9uS2V5ID0gcHJlcGFyZUtleURhdGEoZmlsZUlkQnl0ZXMsIGRlY29kZWRQYXNzd29yZCwgb3duZXJQYXNzd29yZCwgdXNlclBhc3N3b3JkLCBmbGFncywgcmV2aXNpb24sIGtleUxlbmd0aCwgZW5jcnlwdE1ldGFkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbmNyeXB0aW9uS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKCdJbmNvcnJlY3QgUGFzc3dvcmQnLCBfdXRpbC5QYXNzd29yZFJlc3BvbnNlcy5JTkNPUlJFQ1RfUEFTU1dPUkQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSBlbmNyeXB0aW9uS2V5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxnb3JpdGhtID49IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2YgPSBkaWN0LmdldCgnQ0YnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjZikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Yuc3VwcHJlc3NFbmNyeXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmID0gY2Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG1mID0gZGljdC5nZXQoJ1N0bUYnKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJmID0gZGljdC5nZXQoJ1N0ckYnKSB8fCBpZGVudGl0eU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lZmYgPSBkaWN0LmdldCgnRUZGJykgfHwgdGhpcy5zdG1mO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRPYmplY3RLZXkobnVtLCBnZW4sIGVuY3J5cHRpb25LZXksIGlzQWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gbmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGlvbktleS5sZW5ndGggKyA5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIG4gPSBlbmNyeXB0aW9uS2V5Lmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpXSA9IGVuY3J5cHRpb25LZXlbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpKytdID0gbnVtICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpKytdID0gbnVtID4+IDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5W2krK10gPSBudW0gPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5W2krK10gPSBnZW4gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5W2krK10gPSBnZW4gPj4gOCAmIDB4RkY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Flcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpKytdID0gMHg3MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlbaSsrXSA9IDB4NDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5W2krK10gPSAweDZDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVtpKytdID0gMHg1NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSBjYWxjdWxhdGVNRDUoa2V5LCAwLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoYXNoLnN1YmFycmF5KDAsIE1hdGgubWluKGVuY3J5cHRpb25LZXkubGVuZ3RoICsgNSwgMTYpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IoY2YsIG5hbWUsIG51bSwgZ2VuLCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgY3J5cHQgZmlsdGVyIG5hbWUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcnlwdEZpbHRlciA9IGNmLmdldChuYW1lLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNmbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNyeXB0RmlsdGVyICE9PSBudWxsICYmIGNyeXB0RmlsdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZm0gPSBjcnlwdEZpbHRlci5nZXQoJ0NGTScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNmbSB8fCBjZm0ubmFtZSA9PT0gJ05vbmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yTm9uZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBOdWxsQ2lwaGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmbS5uYW1lID09PSAnVjInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yVjIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVJDRm91ckNpcGhlcihidWlsZE9iamVjdEtleShudW0sIGdlbiwga2V5LCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZm0ubmFtZSA9PT0gJ0FFU1YyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjaXBoZXJUcmFuc2Zvcm1GYWN0b3J5QnVpbGRDaXBoZXJDb25zdHJ1Y3RvckFFU1YyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFFUzEyOENpcGhlcihidWlsZE9iamVjdEtleShudW0sIGdlbiwga2V5LCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmbS5uYW1lID09PSAnQUVTVjMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybUZhY3RvcnlCdWlsZENpcGhlckNvbnN0cnVjdG9yQUVTVjMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQUVTMjU2Q2lwaGVyKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdVbmtub3duIGNyeXB0byBtZXRob2QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENpcGhlclRyYW5zZm9ybUZhY3RvcnkucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2lwaGVyVHJhbnNmb3JtOiBmdW5jdGlvbiBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5X2NyZWF0ZUNpcGhlclRyYW5zZm9ybShudW0sIGdlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFsZ29yaXRobSA9PT0gNCB8fCB0aGlzLmFsZ29yaXRobSA9PT0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShidWlsZENpcGhlckNvbnN0cnVjdG9yKHRoaXMuY2YsIHRoaXMuc3RtZiwgbnVtLCBnZW4sIHRoaXMuZW5jcnlwdGlvbktleSksIGJ1aWxkQ2lwaGVyQ29uc3RydWN0b3IodGhpcy5jZiwgdGhpcy5zdHJmLCBudW0sIGdlbiwgdGhpcy5lbmNyeXB0aW9uS2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGJ1aWxkT2JqZWN0S2V5KG51bSwgZ2VuLCB0aGlzLmVuY3J5cHRpb25LZXksIGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaXBoZXJDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIGJ1aWxkQ2lwaGVyQ2lwaGVyQ29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVJDRm91ckNpcGhlcihrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShjaXBoZXJDb25zdHJ1Y3RvciwgY2lwaGVyQ29uc3RydWN0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkgPSBDaXBoZXJUcmFuc2Zvcm1GYWN0b3J5O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNjggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkNvbG9yU3BhY2UgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlc2l6ZVJnYkltYWdlKHNyYywgZGVzdCwgdzEsIGgxLCB3MiwgaDIsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENPTVBPTkVOVFMgPSAzO1xuICAgICAgICAgICAgICAgICAgICBhbHBoYTAxID0gYWxwaGEwMSAhPT0gMSA/IDAgOiBhbHBoYTAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeFJhdGlvID0gdzEgLyB3MjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHlSYXRpbyA9IGgxIC8gaDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXdJbmRleCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBvbGRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHhTY2FsZWQgPSBuZXcgVWludDE2QXJyYXkodzIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdzFTY2FubGluZSA9IHcxICogQ09NUE9ORU5UUztcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHcyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhTY2FsZWRbaV0gPSBNYXRoLmZsb29yKGkgKiB4UmF0aW8pICogQ09NUE9ORU5UUztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBoMjsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB5ID0gTWF0aC5mbG9vcihfaSAqIHlSYXRpbykgKiB3MVNjYW5saW5lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHcyOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRJbmRleCA9IHB5ICsgeFNjYWxlZFtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbbmV3SW5kZXgrK10gPSBzcmNbb2xkSW5kZXgrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtuZXdJbmRleCsrXSA9IHNyY1tvbGRJbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdJbmRleCArPSBhbHBoYTAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIENvbG9yU3BhY2UgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbG9yU3BhY2UobmFtZSwgbnVtQ29tcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQ29sb3JTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdDYW5ub3QgaW5pdGlhbGl6ZSBDb2xvclNwYWNlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1Db21wcyA9IG51bUNvbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoQ29sb3JTcGFjZSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYihzcmMsIHNyY09mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmdiID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIHJnYiwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZ2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRwdXRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ1Nob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNQYXNzdGhyb3VnaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1Bhc3N0aHJvdWdoKGJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNEZWZhdWx0RGVjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUoZGVjb2RlTWFwLCB0aGlzLm51bUNvbXBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZpbGxSZ2JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZmlsbFJnYihkZXN0LCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCwgd2lkdGgsIGhlaWdodCwgYWN0dWFsSGVpZ2h0LCBicGMsIGNvbXBzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IG9yaWdpbmFsV2lkdGggKiBvcmlnaW5hbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJnYkJ1ZiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wb25lbnRDb2xvcnMgPSAxIDw8IGJwYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5lZWRzUmVzaXppbmcgPSBvcmlnaW5hbEhlaWdodCAhPT0gaGVpZ2h0IHx8IG9yaWdpbmFsV2lkdGggIT09IHdpZHRoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUGFzc3Rocm91Z2goYnBjKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmID0gY29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5udW1Db21wcyA9PT0gMSAmJiBjb3VudCA+IG51bUNvbXBvbmVudENvbG9ycyAmJiB0aGlzLm5hbWUgIT09ICdEZXZpY2VHcmF5JyAmJiB0aGlzLm5hbWUgIT09ICdEZXZpY2VSR0InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxsQ29sb3JzID0gYnBjIDw9IDggPyBuZXcgVWludDhBcnJheShudW1Db21wb25lbnRDb2xvcnMpIDogbmV3IFVpbnQxNkFycmF5KG51bUNvbXBvbmVudENvbG9ycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50Q29sb3JzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxDb2xvcnNbaV0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JNYXAgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkobnVtQ29tcG9uZW50Q29sb3JzICogMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJnYkJ1ZmZlcihhbGxDb2xvcnMsIDAsIG51bUNvbXBvbmVudENvbG9ycywgY29sb3JNYXAsIDAsIGJwYywgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmVlZHNSZXNpemluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXN0UG9zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IGNvdW50OyArK19pMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0gY29tcHNbX2kyXSAqIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IGNvbG9yTWFwW2tleSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBjb2xvck1hcFtrZXkgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcyArPSBhbHBoYTAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmID0gbmV3IFVpbnQ4QXJyYXkoY291bnQgKiAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmdiUG9zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGNvdW50OyArK19pMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2tleSA9IGNvbXBzW19pM10gKiAzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkJ1ZltyZ2JQb3MrK10gPSBjb2xvck1hcFtfa2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW19rZXkgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmW3JnYlBvcysrXSA9IGNvbG9yTWFwW19rZXkgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5lZWRzUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFJnYkJ1ZmZlcihjb21wcywgMCwgd2lkdGggKiBhY3R1YWxIZWlnaHQsIGRlc3QsIDAsIGJwYywgYWxwaGEwMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShjb3VudCAqIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0UmdiQnVmZmVyKGNvbXBzLCAwLCBjb3VudCwgcmdiQnVmLCAwLCBicGMsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJnYkJ1Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5lZWRzUmVzaXppbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVSZ2JJbWFnZShyZ2JCdWYsIGRlc3QsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCB3aWR0aCwgaGVpZ2h0LCBhbHBoYTAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kZXN0UG9zID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JnYlBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTQgPSAwLCBpaSA9IHdpZHRoICogYWN0dWFsSGVpZ2h0OyBfaTQgPCBpaTsgX2k0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtfZGVzdFBvcysrXSA9IHJnYkJ1ZltfcmdiUG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W19kZXN0UG9zKytdID0gcmdiQnVmW19yZ2JQb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbX2Rlc3RQb3MrK10gPSByZ2JCdWZbX3JnYlBvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Rlc3RQb3MgKz0gYWxwaGEwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInVzZXNaZXJvVG9PbmVSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3VzZXNaZXJvVG9PbmVSYW5nZScsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYXJzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZShjcywgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIElSID0gdGhpcy5wYXJzZVRvSVIoY3MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZnJvbUlSKElSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZyb21JUlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tSVIoSVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBBcnJheS5pc0FycmF5KElSKSA/IElSWzBdIDogSVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUdyYXlDUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEZXZpY2VSZ2JDUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUNteWtDUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9ucy5jbXlrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDYWxHcmF5Q1MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaXRlUG9pbnQgPSBJUlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50ID0gSVJbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FtbWEgPSBJUlszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhbEdyYXlDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NhbFJHQkNTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVBvaW50ID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQb2ludCA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gSVJbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeCA9IElSWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsUkdCQ1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEsIG1hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BhdHRlcm5DUyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VQYXR0ZXJuQ1MgPSBJUlsxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlUGF0dGVybkNTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXR0ZXJuQ1MgPSB0aGlzLmZyb21JUihiYXNlUGF0dGVybkNTKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBhdHRlcm5DUyhiYXNlUGF0dGVybkNTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSW5kZXhlZENTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUluZGV4ZWRDUyA9IElSWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaVZhbCA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXAgPSBJUlszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEluZGV4ZWRDUyh0aGlzLmZyb21JUihiYXNlSW5kZXhlZENTKSwgaGlWYWwsIGxvb2t1cCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0FsdGVybmF0ZUNTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQ29tcHMgPSBJUlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWx0ID0gSVJbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbnRGbiA9IElSWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQWx0ZXJuYXRlQ1MobnVtQ29tcHMsIHRoaXMuZnJvbUlSKGFsdCksIHRpbnRGbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xhYkNTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGl0ZVBvaW50ID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQb2ludCA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IElSWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGFiQ1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgcmFuZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVua25vd24gY29sb3JzcGFjZSBuYW1lOiBcIi5jb25jYXQobmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYXJzZVRvSVJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VUb0lSKGNzLCB4cmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZGdW5jdGlvbkZhY3RvcnkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSB4cmVmLmZldGNoSWZSZWYoY3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShjcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY3MubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUdyYXknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZUdyYXlDUyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEZXZpY2VSR0InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JHQic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRGV2aWNlUmdiQ1MnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGV2aWNlQ01ZSyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ01ZSyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRGV2aWNlQ215a0NTJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BhdHRlcm4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydQYXR0ZXJuQ1MnLCBudWxsXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JTcGFjZXMgPSByZXMuZ2V0KCdDb2xvclNwYWNlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShjb2xvclNwYWNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzQ1MgPSBjb2xvclNwYWNlcy5nZXQoY3MubmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzQ1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHJlc0NTKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VUb0lSKHJlc0NTLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcyA9IHJlc0NTO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bnJlY29nbml6ZWQgY29sb3JzcGFjZSBcIi5jb25jYXQoY3MubmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHhyZWYuZmV0Y2hJZlJlZihjc1swXSkubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcywgcGFyYW1zLCBhbHQsIHdoaXRlUG9pbnQsIGJsYWNrUG9pbnQsIGdhbW1hO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEZXZpY2VHcmF5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdHJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdEZXZpY2VHcmF5Q1MnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGV2aWNlUkdCJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSR0InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZVJnYkNTJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUNNWUsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NNWUsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZUNteWtDUyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDYWxHcmF5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgnV2hpdGVQb2ludCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50ID0gcGFyYW1zLmdldEFycmF5KCdCbGFja1BvaW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gcGFyYW1zLmdldCgnR2FtbWEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnQ2FsR3JheUNTJywgd2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ2FsUkdCJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgnV2hpdGVQb2ludCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50ID0gcGFyYW1zLmdldEFycmF5KCdCbGFja1BvaW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhbW1hID0gcGFyYW1zLmdldEFycmF5KCdHYW1tYScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gcGFyYW1zLmdldEFycmF5KCdNYXRyaXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnQ2FsUkdCQ1MnLCB3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSwgbWF0cml4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0lDQ0Jhc2VkJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHhyZWYuZmV0Y2hJZlJlZihjc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUNvbXBzID0gZGljdC5nZXQoJ04nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0ID0gZGljdC5nZXQoJ0FsdGVybmF0ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHRJUiA9IHRoaXMucGFyc2VUb0lSKGFsdCwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsdENTID0gdGhpcy5mcm9tSVIoYWx0SVIsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHRDUy5udW1Db21wcyA9PT0gbnVtQ29tcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWx0SVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUNvbXBzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZUdyYXlDUyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtQ29tcHMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnRGV2aWNlUmdiQ1MnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bUNvbXBzID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ0RldmljZUNteWtDUyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BhdHRlcm4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZVBhdHRlcm5DUyA9IGNzWzFdIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VQYXR0ZXJuQ1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VQYXR0ZXJuQ1MgPSB0aGlzLnBhcnNlVG9JUihiYXNlUGF0dGVybkNTLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydQYXR0ZXJuQ1MnLCBiYXNlUGF0dGVybkNTXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luZGV4ZWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0knOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUluZGV4ZWRDUyA9IHRoaXMucGFyc2VUb0lSKGNzWzFdLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaVZhbCA9IHhyZWYuZmV0Y2hJZlJlZihjc1syXSkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9va3VwID0geHJlZi5mZXRjaElmUmVmKGNzWzNdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShsb29rdXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAgPSBsb29rdXAuZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ0luZGV4ZWRDUycsIGJhc2VJbmRleGVkQ1MsIGhpVmFsLCBsb29rdXBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2VwYXJhdGlvbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGV2aWNlTic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQ29tcHMgPSBBcnJheS5pc0FycmF5KG5hbWUpID8gbmFtZS5sZW5ndGggOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQgPSB0aGlzLnBhcnNlVG9JUihjc1syXSwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGludEZuID0gcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZSh4cmVmLmZldGNoSWZSZWYoY3NbM10pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnQWx0ZXJuYXRlQ1MnLCBudW1Db21wcywgYWx0LCB0aW50Rm5dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGFiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zID0geHJlZi5mZXRjaElmUmVmKGNzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVQb2ludCA9IHBhcmFtcy5nZXRBcnJheSgnV2hpdGVQb2ludCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibGFja1BvaW50ID0gcGFyYW1zLmdldEFycmF5KCdCbGFja1BvaW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IHBhcmFtcy5nZXRBcnJheSgnUmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnTGFiQ1MnLCB3aGl0ZVBvaW50LCBibGFja1BvaW50LCByYW5nZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bmltcGxlbWVudGVkIGNvbG9yIHNwYWNlIG9iamVjdCBcXFwiXCIuY29uY2F0KG1vZGUsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJ1bnJlY29nbml6ZWQgY29sb3Igc3BhY2Ugb2JqZWN0OiBcXFwiXCIuY29uY2F0KGNzLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNEZWZhdWx0RGVjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVmYXVsdERlY29kZShkZWNvZGUsIG51bUNvbXBzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShkZWNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1Db21wcyAqIDIgIT09IGRlY29kZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVGhlIGRlY29kZSBtYXAgaXMgbm90IHRoZSBjb3JyZWN0IGxlbmd0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkZWNvZGUubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZVtpXSAhPT0gMCB8fCBkZWNvZGVbaSArIDFdICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzaW5nbGV0b25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnc2luZ2xldG9ucycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldCBncmF5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnZ3JheScsIG5ldyBEZXZpY2VHcmF5Q1MoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgcmdiKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAncmdiJywgbmV3IERldmljZVJnYkNTKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGNteWsoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdjbXlrJywgbmV3IERldmljZUNteWtDUygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb2xvclNwYWNlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNvbG9yU3BhY2UgPSBDb2xvclNwYWNlO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFsdGVybmF0ZUNTID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0NvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhBbHRlcm5hdGVDUywgX0NvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbHRlcm5hdGVDUyhudW1Db21wcywgYmFzZSwgdGludEZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFsdGVybmF0ZUNTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEFsdGVybmF0ZUNTKS5jYWxsKHRoaXMsICdBbHRlcm5hdGUnLCBudW1Db21wcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnRpbnRGbiA9IHRpbnRGbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy50bXBCdWYgPSBuZXcgRmxvYXQzMkFycmF5KGJhc2UubnVtQ29tcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFsdGVybmF0ZUNTLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcEJ1ZiA9IHRoaXMudG1wQnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbnRGbihzcmMsIHNyY09mZnNldCwgdG1wQnVmLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlLmdldFJnYkl0ZW0odG1wQnVmLCAwLCBkZXN0LCBkZXN0T2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkJ1ZmZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW50Rm4gPSB0aGlzLnRpbnRGbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2UgPSB0aGlzLmJhc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VOdW1Db21wcyA9IGJhc2UubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VzWmVyb1RvT25lUmFuZ2UgPSBiYXNlLnVzZXNaZXJvVG9PbmVSYW5nZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUGFzc3Rocm91Z2ggPSAoYmFzZS5pc1Bhc3N0aHJvdWdoKDgpIHx8ICF1c2VzWmVyb1RvT25lUmFuZ2UpICYmIGFscGhhMDEgPT09IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBpc1Bhc3N0aHJvdWdoID8gZGVzdE9mZnNldCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlQnVmID0gaXNQYXNzdGhyb3VnaCA/IGRlc3QgOiBuZXcgVWludDhDbGFtcGVkQXJyYXkoYmFzZU51bUNvbXBzICogY291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQ29tcHMgPSB0aGlzLm51bUNvbXBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGVkID0gbmV3IEZsb2F0MzJBcnJheShudW1Db21wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW50ZWQgPSBuZXcgRmxvYXQzMkFycmF5KGJhc2VOdW1Db21wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbnVtQ29tcHM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFtqXSA9IHNyY1tzcmNPZmZzZXQrK10gKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGludEZuKHNjYWxlZCwgMCwgdGludGVkLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXNaZXJvVG9PbmVSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBiYXNlTnVtQ29tcHM7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlQnVmW3BvcysrXSA9IHRpbnRlZFtqXSAqIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UuZ2V0UmdiSXRlbSh0aW50ZWQsIDAsIGJhc2VCdWYsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IGJhc2VOdW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQYXNzdGhyb3VnaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZS5nZXRSZ2JCdWZmZXIoYmFzZUJ1ZiwgMCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIGFscGhhMDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRwdXRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJhc2UuZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoICogdGhpcy5iYXNlLm51bUNvbXBzIC8gdGhpcy5udW1Db21wcywgYWxwaGEwMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWx0ZXJuYXRlQ1M7XG4gICAgICAgICAgICAgICAgICAgIH0oQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUGF0dGVybkNTID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0NvbG9yU3BhY2UyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoUGF0dGVybkNTLCBfQ29sb3JTcGFjZTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQYXR0ZXJuQ1MoYmFzZUNTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQYXR0ZXJuQ1MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFBhdHRlcm5DUykuY2FsbCh0aGlzLCAnUGF0dGVybicsIG51bGwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuYmFzZSA9IGJhc2VDUztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUGF0dGVybkNTLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc0RlZmF1bHREZWNvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaXNEZWZhdWx0RGVjb2RlKGRlY29kZU1hcCwgYnBjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ1Nob3VsZCBub3QgY2FsbCBQYXR0ZXJuQ1MuaXNEZWZhdWx0RGVjb2RlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGF0dGVybkNTO1xuICAgICAgICAgICAgICAgICAgICB9KENvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEluZGV4ZWRDUyA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKEluZGV4ZWRDUywgX0NvbG9yU3BhY2UzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSW5kZXhlZENTKGJhc2UsIGhpZ2hWYWwsIGxvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW5kZXhlZENTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihJbmRleGVkQ1MpLmNhbGwodGhpcywgJ0luZGV4ZWQnLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmJhc2UgPSBiYXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5oaWdoVmFsID0gaGlnaFZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZU51bUNvbXBzID0gYmFzZS5udW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYmFzZU51bUNvbXBzICogaGlnaFZhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKGxvb2t1cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmxvb2t1cCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IGxvb2t1cC5nZXRCeXRlcyhsZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5sb29rdXAuc2V0KGJ5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykobG9va3VwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMubG9va3VwID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMubG9va3VwW2ldID0gbG9va3VwLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvb2t1cCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmxvb2t1cCA9IGxvb2t1cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbnJlY29nbml6ZWQgbG9va3VwIHRhYmxlOiBcIi5jb25jYXQobG9va3VwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEluZGV4ZWRDUywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiSXRlbVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMuYmFzZS5udW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gc3JjW3NyY09mZnNldF0gKiBudW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlLmdldFJnYkJ1ZmZlcih0aGlzLmxvb2t1cCwgc3RhcnQsIDEsIGRlc3QsIGRlc3RPZmZzZXQsIDgsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2UgPSB0aGlzLmJhc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IGJhc2UubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXREZWx0YSA9IGJhc2UuZ2V0T3V0cHV0TGVuZ3RoKG51bUNvbXBzLCBhbHBoYTAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cCA9IHRoaXMubG9va3VwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvb2t1cFBvcyA9IHNyY1tzcmNPZmZzZXQrK10gKiBudW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UuZ2V0UmdiQnVmZmVyKGxvb2t1cCwgbG9va3VwUG9zLCAxLCBkZXN0LCBkZXN0T2Zmc2V0LCA4LCBhbHBoYTAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQgKz0gb3V0cHV0RGVsdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dHB1dExlbmd0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGggKiB0aGlzLmJhc2UubnVtQ29tcHMsIGFscGhhMDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNEZWZhdWx0RGVjb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGVjb2RlTWFwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVjb2RlTWFwLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdEZWNvZGUgbWFwIGxlbmd0aCBpcyBub3QgY29ycmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYnBjKSB8fCBicGMgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0JpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlTWFwWzBdID09PSAwICYmIGRlY29kZU1hcFsxXSA9PT0gKDEgPDwgYnBjKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5kZXhlZENTO1xuICAgICAgICAgICAgICAgICAgICB9KENvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgdmFyIERldmljZUdyYXlDUyA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKERldmljZUdyYXlDUywgX0NvbG9yU3BhY2U0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRGV2aWNlR3JheUNTKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEZXZpY2VHcmF5Q1MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihEZXZpY2VHcmF5Q1MpLmNhbGwodGhpcywgJ0RldmljZUdyYXknLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhEZXZpY2VHcmF5Q1MsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IHNyY1tzcmNPZmZzZXRdICogMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXRdID0gZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JCdWZmZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmdiQnVmZmVyKHNyYywgc3JjT2Zmc2V0LCBjb3VudCwgZGVzdCwgZGVzdE9mZnNldCwgYml0cywgYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAyNTUgLyAoKDEgPDwgYml0cykgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGogPSBzcmNPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gZGVzdE9mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gc2NhbGUgKiBzcmNbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcSsrXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ErK10gPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtxKytdID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgKz0gYWxwaGEwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0T3V0cHV0TGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERldmljZUdyYXlDUztcbiAgICAgICAgICAgICAgICAgICAgfShDb2xvclNwYWNlKTtcblxuICAgICAgICAgICAgICAgIHZhciBEZXZpY2VSZ2JDUyA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKERldmljZVJnYkNTLCBfQ29sb3JTcGFjZTUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEZXZpY2VSZ2JDUygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGV2aWNlUmdiQ1MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihEZXZpY2VSZ2JDUykuY2FsbCh0aGlzLCAnRGV2aWNlUkdCJywgMykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoRGV2aWNlUmdiQ1MsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmdiSXRlbShzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXRdID0gc3JjW3NyY09mZnNldF0gKiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gc3JjW3NyY09mZnNldCArIDFdICogMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHNyY1tzcmNPZmZzZXQgKyAyXSAqIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkJ1ZmZlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaXRzID09PSA4ICYmIGFscGhhMDEgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNPZmZzZXQsIHNyY09mZnNldCArIGNvdW50ICogMyksIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gMjU1IC8gKCgxIDw8IGJpdHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqID0gc3JjT2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IGRlc3RPZmZzZXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ErK10gPSBzY2FsZSAqIHNyY1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtxKytdID0gc2NhbGUgKiBzcmNbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbcSsrXSA9IHNjYWxlICogc3JjW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxICs9IGFscGhhMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dHB1dExlbmd0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGgsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKSAvIDMgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNQYXNzdGhyb3VnaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpc1Bhc3N0aHJvdWdoKGJpdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpdHMgPT09IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRGV2aWNlUmdiQ1M7XG4gICAgICAgICAgICAgICAgICAgIH0oQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRGV2aWNlQ215a0NTID0gZnVuY3Rpb24gRGV2aWNlQ215a0NTQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29udmVydFRvUmdiKHNyYywgc3JjT2Zmc2V0LCBzcmNTY2FsZSwgZGVzdCwgZGVzdE9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBzcmNbc3JjT2Zmc2V0XSAqIHNyY1NjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBzcmNbc3JjT2Zmc2V0ICsgMV0gKiBzcmNTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gc3JjW3NyY09mZnNldCArIDJdICogc3JjU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IHNyY1tzcmNPZmZzZXQgKyAzXSAqIHNyY1NjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0T2Zmc2V0XSA9IDI1NSArIGMgKiAoLTQuMzg3MzMyMzg0NjA5OTg4ICogYyArIDU0LjQ4NjE1MTk0MTg5MTc2ICogbSArIDE4LjgyMjkwNTAyMTY1MzAyICogeSArIDIxMi4yNTY2MjQ1MTYzOTU4NSAqIGsgKyAtMjg1LjIzMzEwMjYxMzcwMDQpICsgbSAqICgxLjcxNDk3NjM0NzczNjIxMzQgKiBtIC0gNS42MDk2NzM2OTA0MDQ3MzE1ICogeSArIC0xNy44NzM4NzA4NjE0MTU0NDQgKiBrIC0gNS40OTcwMDY0MjcxOTYzNjYpICsgeSAqICgtMi41MjE3MzQwMTMxNjgzMDMzICogeSAtIDIxLjI0ODkyMzMzNzM1MzA3MyAqIGsgKyAxNy41MTE5MjcwODQxODEzKSArIGsgKiAoLTIxLjg2MTIyMTQ3NDYzNjA1ICogayAtIDE4OS40ODE4MDgzNTkyMjc0Nyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IDI1NSArIGMgKiAoOC44NDEwNDE0MjIwMzYxNDkgKiBjICsgNjAuMTE4MDI3MDQ1NTk3MzY2ICogbSArIDYuODcxNDI1NTkyMDQ5MDA3ICogeSArIDMxLjE1OTEwMDEzMDA1NTkyMiAqIGsgKyAtNzkuMjk3MDg0NDgxNjU0OCkgKyBtICogKC0xNS4zMTAzNjEzMDY5Njc4MTcgKiBtICsgMTcuNTc1MjUxMjYxMTA5NDgyICogeSArIDEzMS4zNTI1MDkxMjQ5Mzk3NiAqIGsgLSAxOTAuOTQ1MzMwMjU4ODk1MSkgKyB5ICogKDQuNDQ0MzM5MTAyODUyNzM5ICogeSArIDkuODYzMjg2MTQ5MzQwNSAqIGsgLSAyNC44Njc0MTU4MjU1NTg3OCkgKyBrICogKC0yMC43MzczMjU0NzExODEwMzQgKiBrIC0gMTg3LjgwNDUzNzA5NzE5NTc4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gMjU1ICsgYyAqICgwLjg4NDI1MjI0MzAwMDMyOTYgKiBjICsgOC4wNzg2Nzc1MDMxMTI5MjggKiBtICsgMzAuODk5NzgzMDk3MDM3MjkgKiB5IC0gMC4yMzg4MzIzODY4OTE3ODkzNCAqIGsgKyAtMTQuMTgzNTc2Nzk5NjczMjg2KSArIG0gKiAoMTAuNDk1OTMyNzM0MzIwNzIgKiBtICsgNjMuMDIzNzg0OTQ3NTQwNTIgKiB5ICsgNTAuNjA2OTU3NjU2MzYwNzM0ICogayAtIDExMi4yMzg4NDI1MzcxOTI0OCkgKyB5ICogKDAuMDMyOTYwNDExMTQ4NzMyMTcgKiB5ICsgMTE1LjYwMzg0NDQ5NjQ2NjQxICogayArIC0xOTMuNTgyMDkzNTY4NjE1MDUpICsgayAqICgtMjIuMzM4MTY4MDczMDk4ODYgKiBrIC0gMTgwLjEyNjEzOTc0NzA4MzY3KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBEZXZpY2VDbXlrQ1MgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhEZXZpY2VDbXlrQ1MsIF9Db2xvclNwYWNlNik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEZXZpY2VDbXlrQ1MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBEZXZpY2VDbXlrQ1MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoRGV2aWNlQ215a0NTKS5jYWxsKHRoaXMsICdEZXZpY2VDTVlLJywgNCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhEZXZpY2VDbXlrQ1MsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9SZ2Ioc3JjLCBzcmNPZmZzZXQsIDEsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1JnYihzcmMsIHNyY09mZnNldCwgc2NhbGUsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY09mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRwdXRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoIC8gNCAqICgzICsgYWxwaGEwMSkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERldmljZUNteWtDUztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERldmljZUNteWtDUztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2FsR3JheUNTID0gZnVuY3Rpb24gQ2FsR3JheUNTQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBID0gc3JjW3NyY09mZnNldF0gKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBRyA9IE1hdGgucG93KEEsIGNzLkcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEwgPSBjcy5ZVyAqIEFHO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IE1hdGgubWF4KDI5NS44ICogTWF0aC5wb3coTCwgMC4zMzMzMzMzMzMzMzMzMzMzMzMpIC0gNDAuOCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXRdID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0T2Zmc2V0ICsgMV0gPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBDYWxHcmF5Q1MgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db2xvclNwYWNlNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhDYWxHcmF5Q1MsIF9Db2xvclNwYWNlNyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDYWxHcmF5Q1Mod2hpdGVQb2ludCwgYmxhY2tQb2ludCwgZ2FtbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2FsR3JheUNTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQ2FsR3JheUNTKS5jYWxsKHRoaXMsICdDYWxHcmF5JywgMSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghd2hpdGVQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsR3JheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgWzAsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnYW1tYSA9IGdhbW1hIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5YVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5ZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5aVyA9IHdoaXRlUG9pbnRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5YQiA9IGJsYWNrUG9pbnRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5ZQiA9IGJsYWNrUG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5aQiA9IGJsYWNrUG9pbnRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5HID0gZ2FtbWE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNC5YVyA8IDAgfHwgX3RoaXM0LlpXIDwgMCB8fCBfdGhpczQuWVcgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciBcIi5jb25jYXQoX3RoaXM0Lm5hbWUpICsgJywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LlhCIDwgMCB8fCBfdGhpczQuWUIgPCAwIHx8IF90aGlzNC5aQiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkludmFsaWQgQmxhY2tQb2ludCBmb3IgXCIuY29uY2F0KF90aGlzNC5uYW1lLCBcIiwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5YQiA9IF90aGlzNC5ZQiA9IF90aGlzNC5aQiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LlhCICE9PSAwIHx8IF90aGlzNC5ZQiAhPT0gMCB8fCBfdGhpczQuWkIgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcIlwiLmNvbmNhdChfdGhpczQubmFtZSwgXCIsIEJsYWNrUG9pbnQ6IFhCOiBcIikuY29uY2F0KF90aGlzNC5YQiwgXCIsIFlCOiBcIikuY29uY2F0KF90aGlzNC5ZQiwgXCIsIFwiKSArIFwiWkI6IFwiLmNvbmNhdChfdGhpczQuWkIsIFwiLCBvbmx5IGRlZmF1bHQgdmFsdWVzIGFyZSBzdXBwb3J0ZWQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczQuRyA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkludmFsaWQgR2FtbWE6IFwiLmNvbmNhdChfdGhpczQuRywgXCIgZm9yIFwiKS5jb25jYXQoX3RoaXM0Lm5hbWUsIFwiLCBcIikgKyAnZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuRyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDYWxHcmF5Q1MsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JJdGVtXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JJdGVtKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC8gKCgxIDw8IGJpdHMpIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY09mZnNldCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RPZmZzZXQgKz0gMyArIGFscGhhMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRwdXRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE91dHB1dExlbmd0aChpbnB1dExlbmd0aCwgYWxwaGEwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0TGVuZ3RoICogKDMgKyBhbHBoYTAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWxHcmF5Q1M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KENvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWxHcmF5Q1M7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENhbFJHQkNTID0gZnVuY3Rpb24gQ2FsUkdCQ1NDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgQlJBREZPUkRfU0NBTEVfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMC44OTUxLCAwLjI2NjQsIC0wLjE2MTQsIC0wLjc1MDIsIDEuNzEzNSwgMC4wMzY3LCAwLjAzODksIC0wLjA2ODUsIDEuMDI5Nl0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgQlJBREZPUkRfU0NBTEVfSU5WRVJTRV9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFswLjk4Njk5MjksIC0wLjE0NzA1NDMsIDAuMTU5OTYyNywgMC40MzIzMDUzLCAwLjUxODM2MDMsIDAuMDQ5MjkxMiwgLTAuMDA4NTI4NywgMC4wNDAwNDI4LCAwLjk2ODQ4NjddKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFNSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYID0gbmV3IEZsb2F0MzJBcnJheShbMy4yNDA0NTQyLCAtMS41MzcxMzg1LCAtMC40OTg1MzE0LCAtMC45NjkyNjYwLCAxLjg3NjAxMDgsIDAuMDQxNTU2MCwgMC4wNTU2NDM0LCAtMC4yMDQwMjU5LCAxLjA1NzIyNTJdKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEZMQVRfV0hJVEVQT0lOVF9NQVRSSVggPSBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAxXSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wTm9ybWFsaXplTWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBDb252ZXJ0TWF0cml4MSA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ZW1wQ29udmVydE1hdHJpeDIgPSBuZXcgRmxvYXQzMkFycmF5KDMpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgREVDT0RFX0xfQ09OU1RBTlQgPSBNYXRoLnBvdygoOCArIDE2KSAvIDExNiwgMykgLyA4LjA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF0cml4UHJvZHVjdChhLCBiLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IGFbMF0gKiBiWzBdICsgYVsxXSAqIGJbMV0gKyBhWzJdICogYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IGFbM10gKiBiWzBdICsgYVs0XSAqIGJbMV0gKyBhWzVdICogYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsyXSA9IGFbNl0gKiBiWzBdICsgYVs3XSAqIGJbMV0gKyBhWzhdICogYlsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRUb0ZsYXQoc291cmNlV2hpdGVQb2ludCwgTE1TLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFswXSA9IExNU1swXSAqIDEgLyBzb3VyY2VXaGl0ZVBvaW50WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzFdID0gTE1TWzFdICogMSAvIHNvdXJjZVdoaXRlUG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMl0gPSBMTVNbMl0gKiAxIC8gc291cmNlV2hpdGVQb2ludFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbnZlcnRUb0Q2NShzb3VyY2VXaGl0ZVBvaW50LCBMTVMsIHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEQ2NVggPSAwLjk1MDQ3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEQ2NVkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEQ2NVogPSAxLjA4ODgzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gTE1TWzBdICogRDY1WCAvIHNvdXJjZVdoaXRlUG9pbnRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMV0gPSBMTVNbMV0gKiBENjVZIC8gc291cmNlV2hpdGVQb2ludFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsyXSA9IExNU1syXSAqIEQ2NVogLyBzb3VyY2VXaGl0ZVBvaW50WzJdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc1JHQlRyYW5zZmVyRnVuY3Rpb24oY29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvciA8PSAwLjAwMzEzMDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRqdXN0VG9SYW5nZSgwLCAxLCAxMi45MiAqIGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkanVzdFRvUmFuZ2UoMCwgMSwgKDEgKyAwLjA1NSkgKiBNYXRoLnBvdyhjb2xvciwgMSAvIDIuNCkgLSAwLjA1NSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGp1c3RUb1JhbmdlKG1pbiwgbWF4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlTChMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLWRlY29kZUwoLUwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoTCA+IDguMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnBvdygoTCArIDE2KSAvIDExNiwgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMICogREVDT0RFX0xfQ09OU1RBTlQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21wZW5zYXRlQmxhY2tQb2ludChzb3VyY2VCbGFja1BvaW50LCBYWVpfRmxhdCwgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlQmxhY2tQb2ludFswXSA9PT0gMCAmJiBzb3VyY2VCbGFja1BvaW50WzFdID09PSAwICYmIHNvdXJjZUJsYWNrUG9pbnRbMl0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBYWVpfRmxhdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMV0gPSBYWVpfRmxhdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMl0gPSBYWVpfRmxhdFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB6ZXJvRGVjb2RlTCA9IGRlY29kZUwoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWF9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWV9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWl9EU1QgPSB6ZXJvRGVjb2RlTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBaX1NSQyA9IGRlY29kZUwoc291cmNlQmxhY2tQb2ludFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWF9TY2FsZSA9ICgxIC0gWF9EU1QpIC8gKDEgLSBYX1NSQyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWF9PZmZzZXQgPSAxIC0gWF9TY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZX1NjYWxlID0gKDEgLSBZX0RTVCkgLyAoMSAtIFlfU1JDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZX09mZnNldCA9IDEgLSBZX1NjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFpfU2NhbGUgPSAoMSAtIFpfRFNUKSAvICgxIC0gWl9TUkMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFpfT2Zmc2V0ID0gMSAtIFpfU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMF0gPSBYWVpfRmxhdFswXSAqIFhfU2NhbGUgKyBYX09mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IFhZWl9GbGF0WzFdICogWV9TY2FsZSArIFlfT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzJdID0gWFlaX0ZsYXRbMl0gKiBaX1NjYWxlICsgWl9PZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIFhZWl9JbiwgcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlV2hpdGVQb2ludFswXSA9PT0gMSAmJiBzb3VyY2VXaGl0ZVBvaW50WzJdID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gWFlaX0luWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IFhZWl9JblsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbMl0gPSBYWVpfSW5bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTE1TID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4UHJvZHVjdChCUkFERk9SRF9TQ0FMRV9NQVRSSVgsIFhZWl9JbiwgTE1TKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBMTVNfRmxhdCA9IHRlbXBOb3JtYWxpemVNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9GbGF0KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgTE1TX0ZsYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4UHJvZHVjdChCUkFERk9SRF9TQ0FMRV9JTlZFUlNFX01BVFJJWCwgTE1TX0ZsYXQsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBub3JtYWxpemVXaGl0ZVBvaW50VG9ENjUoc291cmNlV2hpdGVQb2ludCwgWFlaX0luLCByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBMTVMgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX01BVFJJWCwgWFlaX0luLCBMTVMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExNU19ENjUgPSB0ZW1wTm9ybWFsaXplTWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvRDY1KHNvdXJjZVdoaXRlUG9pbnQsIExNUywgTE1TX0Q2NSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQcm9kdWN0KEJSQURGT1JEX1NDQUxFX0lOVkVSU0VfTUFUUklYLCBMTVNfRDY1LCByZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29udmVydFRvUmdiKGNzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBID0gYWRqdXN0VG9SYW5nZSgwLCAxLCBzcmNbc3JjT2Zmc2V0XSAqIHNjYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCID0gYWRqdXN0VG9SYW5nZSgwLCAxLCBzcmNbc3JjT2Zmc2V0ICsgMV0gKiBzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IGFkanVzdFRvUmFuZ2UoMCwgMSwgc3JjW3NyY09mZnNldCArIDJdICogc2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEFHUiA9IE1hdGgucG93KEEsIGNzLkdSKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCR0cgPSBNYXRoLnBvdyhCLCBjcy5HRyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ0dCID0gTWF0aC5wb3coQywgY3MuR0IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFggPSBjcy5NWEEgKiBBR1IgKyBjcy5NWEIgKiBCR0cgKyBjcy5NWEMgKiBDR0I7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWSA9IGNzLk1ZQSAqIEFHUiArIGNzLk1ZQiAqIEJHRyArIGNzLk1ZQyAqIENHQjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBaID0gY3MuTVpBICogQUdSICsgY3MuTVpCICogQkdHICsgY3MuTVpDICogQ0dCO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhZWiA9IHRlbXBDb252ZXJ0TWF0cml4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFhZWlswXSA9IFg7XG4gICAgICAgICAgICAgICAgICAgICAgICBYWVpbMV0gPSBZO1xuICAgICAgICAgICAgICAgICAgICAgICAgWFlaWzJdID0gWjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYWVpfRmxhdCA9IHRlbXBDb252ZXJ0TWF0cml4MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVdoaXRlUG9pbnRUb0ZsYXQoY3Mud2hpdGVQb2ludCwgWFlaLCBYWVpfRmxhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWFlaX0JsYWNrID0gdGVtcENvbnZlcnRNYXRyaXgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGVuc2F0ZUJsYWNrUG9pbnQoY3MuYmxhY2tQb2ludCwgWFlaX0ZsYXQsIFhZWl9CbGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWFlaX0Q2NSA9IHRlbXBDb252ZXJ0TWF0cml4MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVdoaXRlUG9pbnRUb0Q2NShGTEFUX1dISVRFUE9JTlRfTUFUUklYLCBYWVpfQmxhY2ssIFhZWl9ENjUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFNSR0IgPSB0ZW1wQ29udmVydE1hdHJpeDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXhQcm9kdWN0KFNSR0JfRDY1X1hZWl9UT19SR0JfTUFUUklYLCBYWVpfRDY1LCBTUkdCKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldF0gPSBzUkdCVHJhbnNmZXJGdW5jdGlvbihTUkdCWzBdKSAqIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIDFdID0gc1JHQlRyYW5zZmVyRnVuY3Rpb24oU1JHQlsxXSkgKiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAyXSA9IHNSR0JUcmFuc2ZlckZ1bmN0aW9uKFNSR0JbMl0pICogMjU1O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIENhbFJHQkNTID1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQ29sb3JTcGFjZTgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQ2FsUkdCQ1MsIF9Db2xvclNwYWNlOCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDYWxSR0JDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCBnYW1tYSwgbWF0cml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENhbFJHQkNTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQ2FsUkdCQ1MpLmNhbGwodGhpcywgJ0NhbFJHQicsIDMpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXdoaXRlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIENhbFJHQicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxhY2tQb2ludCA9IGJsYWNrUG9pbnQgfHwgbmV3IEZsb2F0MzJBcnJheSgzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2FtbWEgPSBnYW1tYSB8fCBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeCA9IG1hdHJpeCB8fCBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYVyA9IHdoaXRlUG9pbnRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBZVyA9IHdoaXRlUG9pbnRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBaVyA9IHdoaXRlUG9pbnRbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS53aGl0ZVBvaW50ID0gd2hpdGVQb2ludDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhCID0gYmxhY2tQb2ludFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFlCID0gYmxhY2tQb2ludFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFpCID0gYmxhY2tQb2ludFsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1LmJsYWNrUG9pbnQgPSBibGFja1BvaW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuR1IgPSBnYW1tYVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1LkdHID0gZ2FtbWFbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5HQiA9IGdhbW1hWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVhBID0gbWF0cml4WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVlBID0gbWF0cml4WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVpBID0gbWF0cml4WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVhCID0gbWF0cml4WzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVlCID0gbWF0cml4WzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVpCID0gbWF0cml4WzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVhDID0gbWF0cml4WzZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVlDID0gbWF0cml4WzddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuTVpDID0gbWF0cml4WzhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChYVyA8IDAgfHwgWlcgPCAwIHx8IFlXICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgXCIuY29uY2F0KF90aGlzNS5uYW1lKSArICcsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFhCIDwgMCB8fCBZQiA8IDAgfHwgWkIgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoXCJJbnZhbGlkIEJsYWNrUG9pbnQgZm9yIFwiLmNvbmNhdChfdGhpczUubmFtZSwgXCIgW1wiKS5jb25jYXQoWEIsIFwiLCBcIikuY29uY2F0KFlCLCBcIiwgXCIpLmNvbmNhdChaQiwgXCJdLCBcIikgKyAnZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuYmxhY2tQb2ludCA9IG5ldyBGbG9hdDMyQXJyYXkoMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM1LkdSIDwgMCB8fCBfdGhpczUuR0cgPCAwIHx8IF90aGlzNS5HQiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIkludmFsaWQgR2FtbWEgW1wiLmNvbmNhdChfdGhpczUuR1IsIFwiLCBcIikuY29uY2F0KF90aGlzNS5HRywgXCIsIFwiKS5jb25jYXQoX3RoaXM1LkdCLCBcIl0gZm9yIFwiKSArIFwiXCIuY29uY2F0KF90aGlzNS5uYW1lLCBcIiwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5HUiA9IF90aGlzNS5HRyA9IF90aGlzNS5HQiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDYWxSR0JDUywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZGVzdCwgZGVzdE9mZnNldCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRSZ2JCdWZmZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkJ1ZmZlcihzcmMsIHNyY09mZnNldCwgY291bnQsIGRlc3QsIGRlc3RPZmZzZXQsIGJpdHMsIGFscGhhMDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IDEgLyAoKDEgPDwgYml0cykgLSAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udmVydFRvUmdiKHRoaXMsIHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0LCBzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdE9mZnNldCArPSAzICsgYWxwaGEwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dHB1dExlbmd0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2FsUkdCQ1M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KENvbG9yU3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWxSR0JDUztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgTGFiQ1MgPSBmdW5jdGlvbiBMYWJDU0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZuX2coeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPj0gNiAvIDI5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0geCAqIHggKiB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAxMDggLyA4NDEgKiAoeCAtIDQgLyAyOSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGUodmFsdWUsIGhpZ2gxLCBsb3cyLCBoaWdoMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvdzIgKyB2YWx1ZSAqIChoaWdoMiAtIGxvdzIpIC8gaGlnaDE7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb252ZXJ0VG9SZ2IoY3MsIHNyYywgc3JjT2Zmc2V0LCBtYXhWYWwsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBMcyA9IHNyY1tzcmNPZmZzZXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzID0gc3JjW3NyY09mZnNldCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJzID0gc3JjW3NyY09mZnNldCArIDJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4VmFsICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExzID0gZGVjb2RlKExzLCBtYXhWYWwsIDAsIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgPSBkZWNvZGUoYXMsIG1heFZhbCwgY3MuYW1pbiwgY3MuYW1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnMgPSBkZWNvZGUoYnMsIG1heFZhbCwgY3MuYm1pbiwgY3MuYm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzID0gYXMgPiBjcy5hbWF4ID8gY3MuYW1heCA6IGFzIDwgY3MuYW1pbiA/IGNzLmFtaW4gOiBhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJzID0gYnMgPiBjcy5ibWF4ID8gY3MuYm1heCA6IGJzIDwgY3MuYm1pbiA/IGNzLmJtaW4gOiBicztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNID0gKExzICsgMTYpIC8gMTE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEwgPSBNICsgYXMgLyA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTiA9IE0gLSBicyAvIDIwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBYID0gY3MuWFcgKiBmbl9nKEwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFkgPSBjcy5ZVyAqIGZuX2coTSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWiA9IGNzLlpXICogZm5fZyhOKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByLCBnLCBiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3MuWlcgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9IFggKiAzLjEzMzkgKyBZICogLTEuNjE3MCArIFogKiAtMC40OTA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcgPSBYICogLTAuOTc4NSArIFkgKiAxLjkxNjAgKyBaICogMC4wMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBYICogMC4wNzIwICsgWSAqIC0wLjIyOTAgKyBaICogMS40MDU3O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gWCAqIDMuMjQwNiArIFkgKiAtMS41MzcyICsgWiAqIC0wLjQ5ODY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZyA9IFggKiAtMC45Njg5ICsgWSAqIDEuODc1OCArIFogKiAwLjA0MTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IFggKiAwLjA1NTcgKyBZICogLTAuMjA0MCArIFogKiAxLjA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldF0gPSBNYXRoLnNxcnQocikgKiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyAxXSA9IE1hdGguc3FydChnKSAqIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIDJdID0gTWF0aC5zcXJ0KGIpICogMjU1O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIExhYkNTID1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQ29sb3JTcGFjZTkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoTGFiQ1MsIF9Db2xvclNwYWNlOSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMYWJDUyh3aGl0ZVBvaW50LCBibGFja1BvaW50LCByYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMYWJDUyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKExhYkNTKS5jYWxsKHRoaXMsICdMYWInLCAzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF3aGl0ZVBvaW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1doaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBMYWInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsYWNrUG9pbnQgPSBibGFja1BvaW50IHx8IFswLCAwLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSByYW5nZSB8fCBbLTEwMCwgMTAwLCAtMTAwLCAxMDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWFcgPSB3aGl0ZVBvaW50WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWVcgPSB3aGl0ZVBvaW50WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWlcgPSB3aGl0ZVBvaW50WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuYW1pbiA9IHJhbmdlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuYW1heCA9IHJhbmdlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuYm1pbiA9IHJhbmdlWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuYm1heCA9IHJhbmdlWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWEIgPSBibGFja1BvaW50WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWUIgPSBibGFja1BvaW50WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWkIgPSBibGFja1BvaW50WzJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuWFcgPCAwIHx8IF90aGlzNi5aVyA8IDAgfHwgX3RoaXM2LllXICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzLCBubyBmYWxsYmFjayBhdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuWEIgPCAwIHx8IF90aGlzNi5ZQiA8IDAgfHwgX3RoaXM2LlpCIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdJbnZhbGlkIEJsYWNrUG9pbnQsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuWEIgPSBfdGhpczYuWUIgPSBfdGhpczYuWkIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNi5hbWluID4gX3RoaXM2LmFtYXggfHwgX3RoaXM2LmJtaW4gPiBfdGhpczYuYm1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdJbnZhbGlkIFJhbmdlLCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5hbWluID0gLTEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5hbWF4ID0gMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2LmJtaW4gPSAtMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2LmJtYXggPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhMYWJDUywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFJnYkl0ZW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFJnYkl0ZW0oc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRUb1JnYih0aGlzLCBzcmMsIHNyY09mZnNldCwgZmFsc2UsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmdiQnVmZmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRSZ2JCdWZmZXIoc3JjLCBzcmNPZmZzZXQsIGNvdW50LCBkZXN0LCBkZXN0T2Zmc2V0LCBiaXRzLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4VmFsID0gKDEgPDwgYml0cykgLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9SZ2IodGhpcywgc3JjLCBzcmNPZmZzZXQsIG1heFZhbCwgZGVzdCwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjT2Zmc2V0ICs9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdE9mZnNldCArPSAzICsgYWxwaGEwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dHB1dExlbmd0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoLCBhbHBoYTAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRMZW5ndGggKiAoMyArIGFscGhhMDEpIC8gMyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc0RlZmF1bHREZWNvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGlzRGVmYXVsdERlY29kZShkZWNvZGVNYXAsIGJwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ1c2VzWmVyb1RvT25lUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3VzZXNaZXJvVG9PbmVSYW5nZScsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMYWJDUztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oQ29sb3JTcGFjZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExhYkNTO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTY5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uRmFjdG9yeSA9IGV4cG9ydHMuQW5ub3RhdGlvbkJvcmRlclN0eWxlID0gZXhwb3J0cy5Bbm5vdGF0aW9uID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfb2JqID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9jb2xvcnNwYWNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9vcGVyYXRvcl9saXN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nyk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oc2VsZiwgY2FsbCkgeyBpZiAoY2FsbCAmJiAoX3R5cGVvZihjYWxsKSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkgeyByZXR1cm4gY2FsbDsgfSByZXR1cm4gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkgeyBfZ2V0ID0gUmVmbGVjdC5nZXQ7IH0gZWxzZSB7IF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7IGlmICghYmFzZSkgcmV0dXJuOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpOyBpZiAoZGVzYy5nZXQpIHsgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpOyB9IHJldHVybiBkZXNjLnZhbHVlOyB9OyB9IHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHsgd2hpbGUgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHsgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrOyB9IHJldHVybiBvYmplY3Q7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkZhY3RvcnkgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFubm90YXRpb25GYWN0b3J5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBbm5vdGF0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBbm5vdGF0aW9uRmFjdG9yeSwgbnVsbCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZSh4cmVmLCByZWYsIHBkZk1hbmFnZXIsIGlkRmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGRmTWFuYWdlci5lbnN1cmUodGhpcywgJ19jcmVhdGUnLCBbeHJlZiwgcmVmLCBwZGZNYW5hZ2VyLCBpZEZhY3RvcnldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9jcmVhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2NyZWF0ZSh4cmVmLCByZWYsIHBkZk1hbmFnZXIsIGlkRmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IHhyZWYuZmV0Y2hJZlJlZihyZWYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZGljdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikocmVmKSA/IHJlZi50b1N0cmluZygpIDogJ2Fubm90XycgKyBpZEZhY3RvcnkuY3JlYXRlT2JqSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBkaWN0LmdldCgnU3VidHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoc3VidHlwZSkgPyBzdWJ0eXBlLm5hbWUgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWY6IHhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0OiBkaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiAoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKHJlZikgPyByZWYgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidHlwZTogc3VidHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZk1hbmFnZXI6IHBkZk1hbmFnZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpbmsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlua0Fubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RleHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1dpZGdldCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkVHlwZSA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ0ZUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVHlwZSA9ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkVHlwZSkgPyBmaWVsZFR5cGUubmFtZSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdUeCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0J0bic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSBcIicgKyBmaWVsZFR5cGUgKyAnXCIsICcgKyAnZmFsbGluZyBiYWNrIHRvIGJhc2UgZmllbGQgdHlwZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdpZGdldEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BvcHVwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3F1YXJlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNxdWFyZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NpcmNsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdQb2x5TGluZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1BvbHlnb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUG9seWdvbkFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0luayc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbmtBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdIaWdobGlnaHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVW5kZXJsaW5lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFVuZGVybGluZUFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NxdWlnZ2x5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3RyaWtlT3V0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb24ocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0YW1wJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0YW1wQW5ub3RhdGlvbihwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRmlsZUF0dGFjaG1lbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VidHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0Fubm90YXRpb24gaXMgbWlzc2luZyB0aGUgcmVxdWlyZWQgL1N1YnR5cGUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIGFubm90YXRpb24gdHlwZSBcIicgKyBzdWJ0eXBlICsgJ1wiLCAnICsgJ2ZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBbm5vdGF0aW9uKHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkZhY3Rvcnk7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbkZhY3RvcnkgPSBBbm5vdGF0aW9uRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFRyYW5zZm9ybU1hdHJpeChyZWN0LCBiYm94LCBtYXRyaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IF91dGlsLlV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3goYmJveCwgbWF0cml4KTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgbWluWCA9IGJvdW5kc1swXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pblkgPSBib3VuZHNbMV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBtYXhYID0gYm91bmRzWzJdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4WSA9IGJvdW5kc1szXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobWluWCA9PT0gbWF4WCB8fCBtaW5ZID09PSBtYXhZKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzEsIDAsIDAsIDEsIHJlY3RbMF0sIHJlY3RbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHhSYXRpbyA9IChyZWN0WzJdIC0gcmVjdFswXSkgLyAobWF4WCAtIG1pblgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgeVJhdGlvID0gKHJlY3RbM10gLSByZWN0WzFdKSAvIChtYXhZIC0gbWluWSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbeFJhdGlvLCAwLCAwLCB5UmF0aW8sIHJlY3RbMF0gLSBtaW5YICogeFJhdGlvLCByZWN0WzFdIC0gbWluWSAqIHlSYXRpb107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFubm90YXRpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBwYXJhbXMuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZsYWdzKGRpY3QuZ2V0KCdGJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVjdGFuZ2xlKGRpY3QuZ2V0QXJyYXkoJ1JlY3QnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb2xvcihkaWN0LmdldEFycmF5KCdDJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Qm9yZGVyU3R5bGUoZGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBlYXJhbmNlKGRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5zdWJ0eXBlPT0nSGlnaGxpZ2h0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGdldCBxdWFkIHBvaW50cyBmb3IgYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWFkUG9pbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWRwdHMgPSBkaWN0LmdldCgnUXVhZFBvaW50cycpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgcXVhZHB0cy5sZW5ndGg7IGogKz0gOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOQjogd2UgZG9uJ3QgdHJhbnNmb3JtIHRoZSBxdWFkcG9pbnRzIGhlcmUsIGJ1dCBsYXRlciBvbmNlIHdlIGtub3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIgc3BhY2UgPT4gZGV2aWNlIHNwYWNlIHRyYW5zZm9ybWF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wTGVmdCA9IHt4OiBxdWFkcHRzW2ogKyA0XSwgeTogcXVhZHB0c1tqICsgNV19O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm90dG9tUmlnaHQgPSB7eDogcXVhZHB0c1tqICsgMl0sIHk6IHF1YWRwdHNbaiArIDNdfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWQgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC54ID0gTWF0aC5taW4odG9wTGVmdC54LCBib3R0b21SaWdodC54KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC55ID0gTWF0aC5taW4odG9wTGVmdC55LCBib3R0b21SaWdodC55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZC53aWR0aCA9IE1hdGguYWJzKHRvcExlZnQueCAtIGJvdHRvbVJpZ2h0LngpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkLmhlaWdodCA9IE1hdGguYWJzKHRvcExlZnQueSAtIGJvdHRvbVJpZ2h0LnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkUG9pbnRzLnB1c2gocXVhZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25GbGFnczogdGhpcy5mbGFncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyU3R5bGU6IHRoaXMuYm9yZGVyU3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNBcHBlYXJhbmNlOiAhIXRoaXMuYXBwZWFyYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBhcmFtcy5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdDogdGhpcy5yZWN0YW5nbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGU6IHBhcmFtcy5zdWJ0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkUG9pbnRzOiBxdWFkUG9pbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdobGlnaHRlZFRleHQ6IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBbm5vdGF0aW9uLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfaGFzRmxhZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaGFzRmxhZyhmbGFncywgZmxhZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISEoZmxhZ3MgJiBmbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9pc1ZpZXdhYmxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9pc1ZpZXdhYmxlKGZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSElEREVOKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuTk9WSUVXKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9pc1ByaW50YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaXNQcmludGFibGUoZmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hhc0ZsYWcoZmxhZ3MsIF91dGlsLkFubm90YXRpb25GbGFnLlBSSU5UKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSU5WSVNJQkxFKSAmJiAhdGhpcy5faGFzRmxhZyhmbGFncywgX3V0aWwuQW5ub3RhdGlvbkZsYWcuSElEREVOKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInNldEZsYWdzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEZsYWdzKGZsYWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhZ3MgPSBOdW1iZXIuaXNJbnRlZ2VyKGZsYWdzKSAmJiBmbGFncyA+IDAgPyBmbGFncyA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoYXNGbGFnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0ZsYWcoZmxhZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLCBmbGFnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInNldFJlY3RhbmdsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRSZWN0YW5nbGUocmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlY3RhbmdsZSkgJiYgcmVjdGFuZ2xlLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWN0YW5nbGUgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QocmVjdGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjdGFuZ2xlID0gWzAsIDAsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXRDb2xvclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRDb2xvcihjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmdiQ29sb3IgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjb2xvci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYkl0ZW0oY29sb3IsIDAsIHJnYkNvbG9yLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3IgPSByZ2JDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiSXRlbShjb2xvciwgMCwgcmdiQ29sb3IsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvciA9IHJnYkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3IgPSByZ2JDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2V0Qm9yZGVyU3R5bGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0Qm9yZGVyU3R5bGUoYm9yZGVyU3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZSA9IG5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGJvcmRlclN0eWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvcmRlclN0eWxlLmhhcygnQlMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBib3JkZXJTdHlsZS5nZXQoJ0JTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdFR5cGUgPSBkaWN0LmdldCgnVHlwZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpY3RUeXBlIHx8ICgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRpY3RUeXBlLCAnQm9yZGVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKGRpY3QuZ2V0KCdXJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0U3R5bGUoZGljdC5nZXQoJ1MnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoZGljdC5nZXRBcnJheSgnRCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib3JkZXJTdHlsZS5oYXMoJ0JvcmRlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJyYXkgPSBib3JkZXJTdHlsZS5nZXRBcnJheSgnQm9yZGVyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSAmJiBhcnJheS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyhhcnJheVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhhcnJheVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aChhcnJheVsyXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9yZGVyU3R5bGUuc2V0RGFzaEFycmF5KGFycmF5WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXRBcHBlYXJhbmNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldEFwcGVhcmFuY2UoZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVhcmFuY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwZWFyYW5jZVN0YXRlcyA9IGRpY3QuZ2V0KCdBUCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoYXBwZWFyYW5jZVN0YXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3JtYWxBcHBlYXJhbmNlU3RhdGUgPSBhcHBlYXJhbmNlU3RhdGVzLmdldCgnTicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkobm9ybWFsQXBwZWFyYW5jZVN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzID0gZGljdC5nZXQoJ0FTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShhcykgfHwgIW5vcm1hbEFwcGVhcmFuY2VTdGF0ZS5oYXMoYXMubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZWFyYW5jZSA9IG5vcm1hbEFwcGVhcmFuY2VTdGF0ZS5nZXQoYXMubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcHJlcGFyZVBvcHVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wcmVwYXJlUG9wdXAoZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpY3QuaGFzKCdDJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5jb2xvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuaGFzUG9wdXAgPSBkaWN0LmhhcygnUG9wdXAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLnRpdGxlID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldCgnVCcpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmNvbnRlbnRzID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShkaWN0LmdldCgnQ29udGVudHMnKSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsb2FkUmVzb3VyY2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGxvYWRSZXNvdXJjZXMoa2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hcHBlYXJhbmNlLmRpY3QuZ2V0QXN5bmMoJ1Jlc291cmNlcycpLnRoZW4oZnVuY3Rpb24gKHJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvdXJjZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmplY3RMb2FkZXIgPSBuZXcgX29iai5PYmplY3RMb2FkZXIocmVzb3VyY2VzLCBrZXlzLCByZXNvdXJjZXMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0TG9hZGVyLmxvYWQoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0T3BlcmF0b3JMaXN0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE9wZXJhdG9yTGlzdChldmFsdWF0b3IsIHRhc2ssIHJlbmRlckZvcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmFwcGVhcmFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwZWFyYW5jZURpY3QgPSB0aGlzLmFwcGVhcmFuY2UuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc291cmNlc1Byb21pc2UgPSB0aGlzLmxvYWRSZXNvdXJjZXMoWydFeHRHU3RhdGUnLCAnQ29sb3JTcGFjZScsICdQYXR0ZXJuJywgJ1NoYWRpbmcnLCAnWE9iamVjdCcsICdGb250J10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmJveCA9IGFwcGVhcmFuY2VEaWN0LmdldEFycmF5KCdCQm94JykgfHwgWzAsIDAsIDEsIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gYXBwZWFyYW5jZURpY3QuZ2V0QXJyYXkoJ01hdHJpeCcpIHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IGdldFRyYW5zZm9ybU1hdHJpeChkYXRhLnJlY3QsIGJib3gsIG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZXNQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wTGlzdC5hZGRPcChfdXRpbC5PUFMuYmVnaW5Bbm5vdGF0aW9uLCBbZGF0YS5yZWN0LCB0cmFuc2Zvcm0sIG1hdHJpeF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogX3RoaXMuYXBwZWFyYW5jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogb3BMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcExpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEFubm90YXRpb24sIFtdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmFwcGVhcmFuY2UucmVzZXQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcExpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ2aWV3YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFncyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNWaWV3YWJsZSh0aGlzLmZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInByaW50YWJsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGFncyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzUHJpbnRhYmxlKHRoaXMuZmxhZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbiA9IEFubm90YXRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkJvcmRlclN0eWxlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbm5vdGF0aW9uQm9yZGVyU3R5bGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFubm90YXRpb25Cb3JkZXJTdHlsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhc2hBcnJheSA9IFszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWxDb3JuZXJSYWRpdXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoQW5ub3RhdGlvbkJvcmRlclN0eWxlLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXRXaWR0aFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRXaWR0aCh3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkod2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHdpZHRoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXRTdHlsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRTdHlsZShzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHN0eWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHlsZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5CRVZFTEVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdJJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlID0gX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZSA9IF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXREYXNoQXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gc2V0RGFzaEFycmF5KGRhc2hBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXNoQXJyYXkpICYmIGRhc2hBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxsWmVyb3MgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZGFzaEFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBkYXNoQXJyYXlbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbGlkTnVtYmVyID0gK2VsZW1lbnQgPj0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWROdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFplcm9zID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZCAmJiAhYWxsWmVyb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhc2hBcnJheSA9IGRhc2hBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGFzaEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzZXRIb3Jpem9udGFsQ29ybmVyUmFkaXVzKHJhZGl1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyYWRpdXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWxDb3JuZXJSYWRpdXMgPSByYWRpdXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInNldFZlcnRpY2FsQ29ybmVyUmFkaXVzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldFZlcnRpY2FsQ29ybmVyUmFkaXVzKHJhZGl1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihyYWRpdXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzID0gcmFkaXVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkJvcmRlclN0eWxlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZSA9IEFubm90YXRpb25Cb3JkZXJTdHlsZTtcblxuICAgICAgICAgICAgICAgIHZhciBXaWRnZXRBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhXaWRnZXRBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdpZGdldEFubm90YXRpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXaWRnZXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihXaWRnZXRBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1zLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBfdGhpczIuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuV0lER0VUO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmllbGROYW1lID0gX3RoaXMyLl9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5maWVsZFZhbHVlID0gKDAsIF91dGlsLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnVicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFycmF5OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbHRlcm5hdGl2ZVRleHQgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRpY3QuZ2V0KCdUVScpIHx8ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmRlZmF1bHRBcHBlYXJhbmNlID0gKDAsIF91dGlsLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnREEnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkVHlwZSA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ0ZUJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmllbGRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZmllbGRUeXBlKSA/IGZpZWxkVHlwZS5uYW1lIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZmllbGRSZXNvdXJjZXMgPSAoMCwgX3V0aWwuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0OiBkaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdEUidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmllbGRGbGFncyA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ0ZmJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGRhdGEuZmllbGRGbGFncykgfHwgZGF0YS5maWVsZEZsYWdzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpZWxkRmxhZ3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucmVhZE9ubHkgPSBfdGhpczIuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUkVBRE9OTFkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuZmllbGRUeXBlID09PSAnU2lnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpZWxkVmFsdWUgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zZXRGbGFncyhfdXRpbC5Bbm5vdGF0aW9uRmxhZy5ISURERU4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhXaWRnZXRBbm5vdGF0aW9uLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfY29uc3RydWN0RmllbGROYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jb25zdHJ1Y3RGaWVsZE5hbWUoZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpY3QuaGFzKCdUJykgJiYgIWRpY3QuaGFzKCdQYXJlbnQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWN0LmhhcygnUGFyZW50JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRpY3QuZ2V0KCdUJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkTmFtZSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWN0LmhhcygnVCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE5hbWUudW5zaGlmdCgoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGRpY3QuZ2V0KCdUJykpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29wRGljdCA9IGRpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxvb3BEaWN0LmhhcygnUGFyZW50JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3BEaWN0ID0gbG9vcERpY3QuZ2V0KCdQYXJlbnQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShsb29wRGljdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvb3BEaWN0LmhhcygnVCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lLnVuc2hpZnQoKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShsb29wRGljdC5nZXQoJ1QnKSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpZWxkTmFtZS5qb2luKCcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoYXNGaWVsZEZsYWdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzRmllbGRGbGFnKGZsYWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhKHRoaXMuZGF0YS5maWVsZEZsYWdzICYgZmxhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVyYXRvckxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckZvcm1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldChfZ2V0UHJvdG90eXBlT2YoV2lkZ2V0QW5ub3RhdGlvbi5wcm90b3R5cGUpLCBcImdldE9wZXJhdG9yTGlzdFwiLCB0aGlzKS5jYWxsKHRoaXMsIGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdpZGdldEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgVGV4dFdpZGdldEFubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfV2lkZ2V0QW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFRleHRXaWRnZXRBbm5vdGF0aW9uLCBfV2lkZ2V0QW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRleHRXaWRnZXRBbm5vdGF0aW9uKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dFdpZGdldEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFRleHRXaWRnZXRBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1zLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmRhdGEuZmllbGRWYWx1ZSA9ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoX3RoaXMzLmRhdGEuZmllbGRWYWx1ZSB8fCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFsaWdubWVudCA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ1EnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWxpZ25tZW50KSB8fCBhbGlnbm1lbnQgPCAwIHx8IGFsaWdubWVudCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuZGF0YS50ZXh0QWxpZ25tZW50ID0gYWxpZ25tZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhpbXVtTGVuZ3RoID0gKDAsIF91dGlsLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnTWF4TGVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heGltdW1MZW5ndGgpIHx8IG1heGltdW1MZW5ndGggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heGltdW1MZW5ndGggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5kYXRhLm1heExlbiA9IG1heGltdW1MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmRhdGEubXVsdGlMaW5lID0gX3RoaXMzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLmRhdGEuY29tYiA9IF90aGlzMy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5DT01CKSAmJiAhX3RoaXMzLmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSkgJiYgIV90aGlzMy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5QQVNTV09SRCkgJiYgIV90aGlzMy5oYXNGaWVsZEZsYWcoX3V0aWwuQW5ub3RhdGlvbkZpZWxkRmxhZy5GSUxFU0VMRUNUKSAmJiBfdGhpczMuZGF0YS5tYXhMZW4gIT09IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRleHRXaWRnZXRBbm5vdGF0aW9uLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVyYXRvckxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlcmF0b3JMaXN0KGV2YWx1YXRvciwgdGFzaywgcmVuZGVyRm9ybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlckZvcm1zIHx8IHRoaXMuYXBwZWFyYW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFRleHRXaWRnZXRBbm5vdGF0aW9uLnByb3RvdHlwZSksIFwiZ2V0T3BlcmF0b3JMaXN0XCIsIHRoaXMpLmNhbGwodGhpcywgZXZhbHVhdG9yLCB0YXNrLCByZW5kZXJGb3Jtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3JMaXN0ID0gbmV3IF9vcGVyYXRvcl9saXN0Lk9wZXJhdG9yTGlzdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gbmV3IF9zdHJlYW0uU3RyZWFtKCgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKSh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRvci5nZXRPcGVyYXRvckxpc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiB0aGlzLmZpZWxkUmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0OiBvcGVyYXRvckxpc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0b3JMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUZXh0V2lkZ2V0QW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShXaWRnZXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBCdXR0b25XaWRnZXRBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1dpZGdldEFubm90YXRpb24yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiwgX1dpZGdldEFubm90YXRpb24yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbihwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJ1dHRvbldpZGdldEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEJ1dHRvbldpZGdldEFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0LmRhdGEuY2hlY2tCb3ggPSAhX3RoaXM0Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSAmJiAhX3RoaXM0Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5kYXRhLnJhZGlvQnV0dG9uID0gX3RoaXM0Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSAmJiAhX3RoaXM0Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLlBVU0hCVVRUT04pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5kYXRhLnB1c2hCdXR0b24gPSBfdGhpczQuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9wcm9jZXNzQ2hlY2tCb3gocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF90aGlzNC5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcHJvY2Vzc1JhZGlvQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfdGhpczQuZGF0YS5wdXNoQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcHJvY2Vzc1B1c2hCdXR0b24ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ludmFsaWQgZmllbGQgZmxhZ3MgZm9yIGJ1dHRvbiB3aWRnZXQgYW5ub3RhdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhCdXR0b25XaWRnZXRBbm5vdGF0aW9uLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcHJvY2Vzc0NoZWNrQm94XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9wcm9jZXNzQ2hlY2tCb3gocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5maWVsZFZhbHVlID0gdGhpcy5kYXRhLmZpZWxkVmFsdWUubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXN0b21BcHBlYXJhbmNlID0gcGFyYW1zLmRpY3QuZ2V0KCdBUCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY3VzdG9tQXBwZWFyYW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHBvcnRWYWx1ZU9wdGlvbnNEaWN0ID0gY3VzdG9tQXBwZWFyYW5jZS5nZXQoJ0QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGV4cG9ydFZhbHVlT3B0aW9uc0RpY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwb3J0VmFsdWVzID0gZXhwb3J0VmFsdWVPcHRpb25zRGljdC5nZXRLZXlzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNDb3JyZWN0T3B0aW9uQ291bnQgPSBleHBvcnRWYWx1ZXMubGVuZ3RoID09PSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzQ29ycmVjdE9wdGlvbkNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZXhwb3J0VmFsdWUgPSBleHBvcnRWYWx1ZXNbMF0gPT09ICdPZmYnID8gZXhwb3J0VmFsdWVzWzFdIDogZXhwb3J0VmFsdWVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3Byb2Nlc3NSYWRpb0J1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc1JhZGlvQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEuZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5idXR0b25WYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZFBhcmVudCA9IHBhcmFtcy5kaWN0LmdldCgnUGFyZW50Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGZpZWxkUGFyZW50KSAmJiBmaWVsZFBhcmVudC5oYXMoJ1YnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkUGFyZW50VmFsdWUgPSBmaWVsZFBhcmVudC5nZXQoJ1YnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZpZWxkUGFyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmZpZWxkVmFsdWUgPSBmaWVsZFBhcmVudFZhbHVlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwZWFyYW5jZVN0YXRlcyA9IHBhcmFtcy5kaWN0LmdldCgnQVAnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGFwcGVhcmFuY2VTdGF0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsQXBwZWFyYW5jZVN0YXRlID0gYXBwZWFyYW5jZVN0YXRlcy5nZXQoJ04nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKG5vcm1hbEFwcGVhcmFuY2VTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gbm9ybWFsQXBwZWFyYW5jZVN0YXRlLmdldEtleXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBrZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXlzW2ldICE9PSAnT2ZmJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5idXR0b25WYWx1ZSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9wcm9jZXNzUHVzaEJ1dHRvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJvY2Vzc1B1c2hCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1zLmRpY3QuaGFzKCdBJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29iai5DYXRhbG9nLnBhcnNlRGVzdERpY3Rpb25hcnkoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdERpY3Q6IHBhcmFtcy5kaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqOiB0aGlzLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2NCYXNlVXJsOiBwYXJhbXMucGRmTWFuYWdlci5kb2NCYXNlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJ1dHRvbldpZGdldEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oV2lkZ2V0QW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9XaWRnZXRBbm5vdGF0aW9uMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKENob2ljZVdpZGdldEFubm90YXRpb24sIF9XaWRnZXRBbm5vdGF0aW9uMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENob2ljZVdpZGdldEFubm90YXRpb24ocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNSA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5kYXRhLm9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3B0aW9ucyA9ICgwLCBfdXRpbC5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IHBhcmFtcy5kaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdPcHQnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHBhcmFtcy54cmVmO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG9wdGlvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wdGlvbiA9IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc09wdGlvbkFycmF5ID0gQXJyYXkuaXNBcnJheShvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1LmRhdGEub3B0aW9uc1tpXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRWYWx1ZTogaXNPcHRpb25BcnJheSA/IHhyZWYuZmV0Y2hJZlJlZihvcHRpb25bMF0pIDogb3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlWYWx1ZTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShpc09wdGlvbkFycmF5ID8geHJlZi5mZXRjaElmUmVmKG9wdGlvblsxXSkgOiBvcHRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KF90aGlzNS5kYXRhLmZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5kYXRhLmZpZWxkVmFsdWUgPSBbX3RoaXM1LmRhdGEuZmllbGRWYWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1LmRhdGEuY29tYm8gPSBfdGhpczUuaGFzRmllbGRGbGFnKF91dGlsLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQk8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5kYXRhLm11bHRpU2VsZWN0ID0gX3RoaXM1Lmhhc0ZpZWxkRmxhZyhfdXRpbC5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJU0VMRUNUKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM1O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShXaWRnZXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBUZXh0QW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFRleHRBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUZXh0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUZXh0QW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgREVGQVVMVF9JQ09OX1NJWkUgPSAyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoVGV4dEFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuVEVYVDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuZGF0YS5oYXNBcHBlYXJhbmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5kYXRhLm5hbWUgPSAnTm9JY29uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuZGF0YS5yZWN0WzFdID0gX3RoaXM2LmRhdGEucmVjdFszXSAtIERFRkFVTFRfSUNPTl9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuZGF0YS5yZWN0WzJdID0gX3RoaXM2LmRhdGEucmVjdFswXSArIERFRkFVTFRfSUNPTl9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuZGF0YS5uYW1lID0gcGFyYW1ldGVycy5kaWN0LmhhcygnTmFtZScpID8gcGFyYW1ldGVycy5kaWN0LmdldCgnTmFtZScpLm5hbWUgOiAnTm90ZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2Ll9wcmVwYXJlUG9wdXAocGFyYW1ldGVycy5kaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUZXh0QW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBMaW5rQW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKExpbmtBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMaW5rQW5ub3RhdGlvbihwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM3O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmtBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihMaW5rQW5ub3RhdGlvbikuY2FsbCh0aGlzLCBwYXJhbXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkxJTks7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfb2JqLkNhdGFsb2cucGFyc2VEZXN0RGljdGlvbmFyeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3REaWN0OiBwYXJhbXMuZGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqOiBfdGhpczcuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jQmFzZVVybDogcGFyYW1zLnBkZk1hbmFnZXIuZG9jQmFzZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmtBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvcHVwQW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBvcHVwQW5ub3RhdGlvbiwgX0Fubm90YXRpb240KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9wdXBBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHVwQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczggPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUG9wdXBBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczguZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlBPUFVQO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRJdGVtID0gZGljdC5nZXQoJ1BhcmVudCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJlbnRJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnUG9wdXAgYW5ub3RhdGlvbiBoYXMgYSBtaXNzaW5nIG9yIGludmFsaWQgcGFyZW50IGFubm90YXRpb24uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihfdGhpczgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRTdWJ0eXBlID0gcGFyZW50SXRlbS5nZXQoJ1N1YnR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczguZGF0YS5wYXJlbnRUeXBlID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkocGFyZW50U3VidHlwZSkgPyBwYXJlbnRTdWJ0eXBlLm5hbWUgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5kYXRhLnBhcmVudElkID0gZGljdC5nZXRSYXcoJ1BhcmVudCcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM4LmRhdGEudGl0bGUgPSAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKHBhcmVudEl0ZW0uZ2V0KCdUJykgfHwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5kYXRhLmNvbnRlbnRzID0gKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShwYXJlbnRJdGVtLmdldCgnQ29udGVudHMnKSB8fCAnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEl0ZW0uaGFzKCdDJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM4LmRhdGEuY29sb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5zZXRDb2xvcihwYXJlbnRJdGVtLmdldEFycmF5KCdDJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5kYXRhLmNvbG9yID0gX3RoaXM4LmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX3RoaXM4LnZpZXdhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRGbGFncyA9IHBhcmVudEl0ZW0uZ2V0KCdGJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzOC5faXNWaWV3YWJsZShwYXJlbnRGbGFncykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5zZXRGbGFncyhwYXJlbnRGbGFncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9wdXBBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIExpbmVBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb241KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoTGluZUFubm90YXRpb24sIF9Bbm5vdGF0aW9uNSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmVBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOSA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihMaW5lQW5ub3RhdGlvbikuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5LmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5MSU5FO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOS5kYXRhLmxpbmVDb29yZGluYXRlcyA9IF91dGlsLlV0aWwubm9ybWFsaXplUmVjdChkaWN0LmdldEFycmF5KCdMJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9wcmVwYXJlUG9wdXAoZGljdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGluZUFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgU3F1YXJlQW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFNxdWFyZUFubm90YXRpb24sIF9Bbm5vdGF0aW9uNik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNxdWFyZUFubm90YXRpb24ocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczEwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNxdWFyZUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxMCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihTcXVhcmVBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczEwLmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVBUkU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczEwLl9wcmVwYXJlUG9wdXAocGFyYW1ldGVycy5kaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3F1YXJlQW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBDaXJjbGVBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb243KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQ2lyY2xlQW5ub3RhdGlvbiwgX0Fubm90YXRpb243KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ2lyY2xlQW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2lyY2xlQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczExID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKENpcmNsZUFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTEuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkNJUkNMRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTEuX3ByZXBhcmVQb3B1cChwYXJhbWV0ZXJzLmRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaXJjbGVBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvbHlsaW5lQW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBvbHlsaW5lQW5ub3RhdGlvbiwgX0Fubm90YXRpb244KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9seWxpbmVBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb2x5bGluZUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQb2x5bGluZUFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTIuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlMSU5FO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYXdWZXJ0aWNlcyA9IGRpY3QuZ2V0QXJyYXkoJ1ZlcnRpY2VzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxMi5kYXRhLnZlcnRpY2VzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByYXdWZXJ0aWNlcy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTIuZGF0YS52ZXJ0aWNlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHJhd1ZlcnRpY2VzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogcmF3VmVydGljZXNbaSArIDFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTIuX3ByZXBhcmVQb3B1cChkaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9seWxpbmVBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvbHlnb25Bbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1BvbHlsaW5lQW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBvbHlnb25Bbm5vdGF0aW9uLCBfUG9seWxpbmVBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9seWdvbkFubm90YXRpb24ocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczEzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvbHlnb25Bbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUG9seWdvbkFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTMuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlBPTFlHT047XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb2x5Z29uQW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShQb2x5bGluZUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIElua0Fubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbjkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhJbmtBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbmtBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbmtBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTQgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoSW5rQW5ub3RhdGlvbikuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNC5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuSU5LO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcGFyYW1ldGVycy5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gcGFyYW1ldGVycy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbElua0xpc3RzID0gZGljdC5nZXRBcnJheSgnSW5rTGlzdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTQuZGF0YS5pbmtMaXN0cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gb3JpZ2luYWxJbmtMaXN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTQuZGF0YS5pbmtMaXN0cy5wdXNoKFtdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBvcmlnaW5hbElua0xpc3RzW2ldLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTQuZGF0YS5pbmtMaXN0c1tpXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiB4cmVmLmZldGNoSWZSZWYob3JpZ2luYWxJbmtMaXN0c1tpXVtqXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogeHJlZi5mZXRjaElmUmVmKG9yaWdpbmFsSW5rTGlzdHNbaV1baiArIDFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE0Ll9wcmVwYXJlUG9wdXAoZGljdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElua0Fubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgSGlnaGxpZ2h0QW5ub3RhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhIaWdobGlnaHRBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSGlnaGxpZ2h0QW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSGlnaGxpZ2h0QW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE1ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEhpZ2hsaWdodEFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTUuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLkhJR0hMSUdIVDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTUuX3ByZXBhcmVQb3B1cChwYXJhbWV0ZXJzLmRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBIaWdobGlnaHRBbm5vdGF0aW9uO1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgdmFyIFVuZGVybGluZUFubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbjExKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoVW5kZXJsaW5lQW5ub3RhdGlvbiwgX0Fubm90YXRpb24xMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFVuZGVybGluZUFubm90YXRpb24ocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczE2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFVuZGVybGluZUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihVbmRlcmxpbmVBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE2LmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE2Ll9wcmVwYXJlUG9wdXAocGFyYW1ldGVycy5kaWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVW5kZXJsaW5lQW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBTcXVpZ2dseUFubm90YXRpb24gPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbjEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoU3F1aWdnbHlBbm5vdGF0aW9uLCBfQW5ub3RhdGlvbjEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3F1aWdnbHlBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxNztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTcXVpZ2dseUFubm90YXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihTcXVpZ2dseUFubm90YXRpb24pLmNhbGwodGhpcywgcGFyYW1ldGVycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTcuZGF0YS5hbm5vdGF0aW9uVHlwZSA9IF91dGlsLkFubm90YXRpb25UeXBlLlNRVUlHR0xZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNy5fcHJlcGFyZVBvcHVwKHBhcmFtZXRlcnMuZGljdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxNztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNxdWlnZ2x5QW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgIHZhciBTdHJpa2VPdXRBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb24xMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFN0cmlrZU91dEFubm90YXRpb24sIF9Bbm5vdGF0aW9uMTMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdHJpa2VPdXRBbm5vdGF0aW9uKHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxODtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdHJpa2VPdXRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTggPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoU3RyaWtlT3V0QW5ub3RhdGlvbikuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxOC5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VUO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxOC5fcHJlcGFyZVBvcHVwKHBhcmFtZXRlcnMuZGljdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMxODtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmlrZU91dEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgU3RhbXBBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb24xNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFN0YW1wQW5ub3RhdGlvbiwgX0Fubm90YXRpb24xNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN0YW1wQW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RhbXBBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTkgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoU3RhbXBBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczE5LmRhdGEuYW5ub3RhdGlvblR5cGUgPSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TVEFNUDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTkuX3ByZXBhcmVQb3B1cChwYXJhbWV0ZXJzLmRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdGFtcEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICB2YXIgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb24xNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiwgX0Fubm90YXRpb24xNSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbihwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMjAgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uKS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IG5ldyBfb2JqLkZpbGVTcGVjKHBhcmFtZXRlcnMuZGljdC5nZXQoJ0ZTJyksIHBhcmFtZXRlcnMueHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyMC5kYXRhLmFubm90YXRpb25UeXBlID0gX3V0aWwuQW5ub3RhdGlvblR5cGUuRklMRUFUVEFDSE1FTlQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyMC5kYXRhLmZpbGUgPSBmaWxlLnNlcmlhbGl6YWJsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMjAuX3ByZXBhcmVQb3B1cChwYXJhbWV0ZXJzLmRpY3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGaWxlQXR0YWNobWVudEFubm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbik7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuT3BlcmF0b3JMaXN0ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBRdWV1ZU9wdGltaXplciA9IGZ1bmN0aW9uIFF1ZXVlT3B0aW1pemVyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkU3RhdGUocGFyZW50U3RhdGUsIHBhdHRlcm4sIGNoZWNrRm4sIGl0ZXJhdGVGbiwgcHJvY2Vzc0ZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBwYXJlbnRTdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcGF0dGVybi5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gcGF0dGVybltpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlW2l0ZW1dIHx8IChzdGF0ZVtpdGVtXSA9IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbcGF0dGVybltwYXR0ZXJuLmxlbmd0aCAtIDFdXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZuOiBjaGVja0ZuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdGVGbjogaXRlcmF0ZUZuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NGbjogcHJvY2Vzc0ZuXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlUGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKGlGaXJzdFNhdmUsIGNvdW50LCBmbkFycmF5LCBhcmdzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RQSU1YTyA9IGlGaXJzdFNhdmUgKyAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJnID0gYXJnc0FycmF5W2lGaXJzdFBJTVhPICsgNCAqIGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZU1hc2sgPSBhcmcubGVuZ3RoID09PSAxICYmIGFyZ1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZU1hc2sgJiYgaW1hZ2VNYXNrLndpZHRoID09PSAxICYmIGltYWdlTWFzay5oZWlnaHQgPT09IDEgJiYgKCFpbWFnZU1hc2suZGF0YS5sZW5ndGggfHwgaW1hZ2VNYXNrLmRhdGEubGVuZ3RoID09PSAxICYmIGltYWdlTWFzay5kYXRhWzBdID09PSAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5W2lGaXJzdFBJTVhPICsgNCAqIGldID0gX3V0aWwuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudCAtIGk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgSW5pdGlhbFN0YXRlID0gW107XG4gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsIF91dGlsLk9QUy5yZXN0b3JlXSwgbnVsbCwgZnVuY3Rpb24gaXRlcmF0ZUlubGluZUltYWdlR3JvdXAoY29udGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnRyYW5zZm9ybTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiBmb3VuZElubGluZUltYWdlR3JvdXAoY29udGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1JTl9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9JTUFHRVNfSU5fSU5MSU5FX0lNQUdFU19CTE9DSyA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfV0lEVEggPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIElNQUdFX1BBRERJTkcgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGN1cnIgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFBJSVhPID0gY3VyciAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KSwgTUFYX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgTUlOX0lNQUdFU19JTl9JTkxJTkVfSU1BR0VTX0JMT0NLKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heFggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heExpbmVIZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRYID0gSU1BR0VfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50WSA9IElNQUdFX1BBRERJTkc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gMDsgcSA8IGNvdW50OyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybSArIChxIDw8IDIpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nID0gYXJnc0FycmF5W2lGaXJzdFBJSVhPICsgKHEgPDwgMildWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRYICsgaW1nLndpZHRoID4gTUFYX1dJRFRIKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCBjdXJyZW50WCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRZICs9IG1heExpbmVIZWlnaHQgKyAyICogSU1BR0VfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhMaW5lSGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBjdXJyZW50WCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogY3VycmVudFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IGltZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDogaW1nLmhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRYICs9IGltZy53aWR0aCArIDIgKiBJTUFHRV9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heExpbmVIZWlnaHQgPSBNYXRoLm1heChtYXhMaW5lSGVpZ2h0LCBpbWcuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ1dpZHRoID0gTWF0aC5tYXgobWF4WCwgY3VycmVudFgpICsgSU1BR0VfUEFERElORztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdIZWlnaHQgPSBjdXJyZW50WSArIG1heExpbmVIZWlnaHQgKyBJTUFHRV9QQURESU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0RhdGEgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoaW1nV2lkdGggKiBpbWdIZWlnaHQgKiA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdSb3dTaXplID0gaW1nV2lkdGggPDwgMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gMDsgcSA8IGNvdW50OyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGFyZ3NBcnJheVtpRmlyc3RQSUlYTyArIChxIDw8IDIpXVswXS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3dTaXplID0gbWFwW3FdLncgPDwgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YU9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IG1hcFtxXS54ICsgbWFwW3FdLnkgKiBpbWdXaWR0aCA8PCAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoMCwgcm93U2l6ZSksIG9mZnNldCAtIGltZ1Jvd1NpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gbWFwW3FdLmg7IGsgPCBrazsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YU9mZnNldCArIHJvd1NpemUpLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhT2Zmc2V0ICs9IHJvd1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBpbWdSb3dTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuc2V0KGRhdGEuc3ViYXJyYXkoZGF0YU9mZnNldCAtIHJvd1NpemUsIGRhdGFPZmZzZXQpLCBvZmZzZXQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0IC0gNF0gPSBkYXRhW29mZnNldF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0IC0gM10gPSBkYXRhW29mZnNldCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldCAtIDJdID0gZGF0YVtvZmZzZXQgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgLSAxXSA9IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgcm93U2l6ZV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMV0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgMl0gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyByb3dTaXplICsgM10gPSBkYXRhW29mZnNldCArIHJvd1NpemUgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0IC09IGltZ1Jvd1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBcnJheS5zcGxpY2UoaUZpcnN0U2F2ZSwgY291bnQgKiA0LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpbWdXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGltZ0hlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kOiBfdXRpbC5JbWFnZUtpbmQuUkdCQV8zMkJQUCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpbWdEYXRhXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBtYXBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpRmlyc3RTYXZlICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN0YXRlKEluaXRpYWxTdGF0ZSwgW191dGlsLk9QUy5zYXZlLCBfdXRpbC5PUFMudHJhbnNmb3JtLCBfdXRpbC5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0LCBfdXRpbC5PUFMucmVzdG9yZV0sIG51bGwsIGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZU1hc2tHcm91cChjb250ZXh0LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RTYXZlID0gY29udGV4dC5pQ3VyciAtIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gKGkgLSBpRmlyc3RTYXZlKSAlIDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnNhdmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMudHJhbnNmb3JtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5yZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiBmb3VuZEltYWdlTWFza0dyb3VwKGNvbnRleHQsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLID0gMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX0lNQUdFU19JTl9NQVNLU19CTE9DSyA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfU0FNRV9JTUFHRVNfSU5fTUFTS1NfQkxPQ0sgPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGN1cnIgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFBJTVhPID0gY3VyciAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gaGFuZGxlUGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKGlGaXJzdFNhdmUsIGNvdW50LCBmbkFycmF5LCBhcmdzQXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgLSAoaSAtIGlGaXJzdFNhdmUpICUgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTYW1lSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpVHJhbnNmb3JtLCB0cmFuc2Zvcm1BcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0UElNWE9BcmcwID0gYXJnc0FycmF5W2lGaXJzdFBJTVhPXVswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzFdID09PSAwICYmIGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTYW1lSW1hZ2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFRyYW5zZm9ybUFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaVRyYW5zZm9ybSA9IGlGaXJzdFRyYW5zZm9ybSArIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlQSU1YTyA9IGlGaXJzdFBJTVhPICsgNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IDE7IHEgPCBjb3VudDsgcSsrLCBpVHJhbnNmb3JtICs9IDQsIGlQSU1YTyArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NBcnJheVtpUElNWE9dWzBdICE9PSBmaXJzdFBJTVhPQXJnMCB8fCB0cmFuc2Zvcm1BcmdzWzBdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzAgfHwgdHJhbnNmb3JtQXJnc1sxXSAhPT0gMCB8fCB0cmFuc2Zvcm1BcmdzWzJdICE9PSAwIHx8IHRyYW5zZm9ybUFyZ3NbM10gIT09IGZpcnN0VHJhbnNmb3JtQXJnMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPCBNSU5fSU1BR0VTX0lOX01BU0tTX0JMT0NLKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTYW1lSW1hZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2FtZUltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBNYXRoLm1pbihjb3VudCwgTUFYX1NBTUVfSU1BR0VTX0lOX01BU0tTX0JMT0NLKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlUcmFuc2Zvcm0gPSBpRmlyc3RUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1txIDw8IDFdID0gdHJhbnNmb3JtQXJnc1s0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zWyhxIDw8IDEpICsgMV0gPSB0cmFuc2Zvcm1BcmdzWzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIFtmaXJzdFBJTVhPQXJnMCwgZmlyc3RUcmFuc2Zvcm1BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzMsIHBvc2l0aW9uc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCA9IE1hdGgubWluKGNvdW50LCBNQVhfSU1BR0VTX0lOX01BU0tTX0JMT0NLKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHEgPSAwOyBxIDwgY291bnQ7IHErKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1BcmdzID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybSArIChxIDw8IDIpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tQYXJhbXMgPSBhcmdzQXJyYXlbaUZpcnN0UElNWE8gKyAocSA8PCAyKV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG1hc2tQYXJhbXMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBtYXNrUGFyYW1zLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBtYXNrUGFyYW1zLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtQXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIFtpbWFnZXNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlGaXJzdFNhdmUgKyAxO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3RhdGUoSW5pdGlhbFN0YXRlLCBbX3V0aWwuT1BTLnNhdmUsIF91dGlsLk9QUy50cmFuc2Zvcm0sIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCwgX3V0aWwuT1BTLnJlc3RvcmVdLCBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3NBcnJheSA9IGNvbnRleHQuYXJnc0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGNvbnRleHQuaUN1cnIgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzFdID09PSAwICYmIGFyZ3NBcnJheVtpRmlyc3RUcmFuc2Zvcm1dWzJdID09PSAwO1xuICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoY29udGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zYXZlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5BcnJheVtpXSAhPT0gX3V0aWwuT1BTLnRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFRyYW5zZm9ybSA9IGNvbnRleHQuaUN1cnIgLSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmcwID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFRyYW5zZm9ybUFyZzMgPSBhcmdzQXJyYXlbaUZpcnN0VHJhbnNmb3JtXVszXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc0FycmF5W2ldWzBdICE9PSBmaXJzdFRyYW5zZm9ybUFyZzAgfHwgYXJnc0FycmF5W2ldWzFdICE9PSAwIHx8IGFyZ3NBcnJheVtpXVsyXSAhPT0gMCB8fCBhcmdzQXJyYXlbaV1bM10gIT09IGZpcnN0VHJhbnNmb3JtQXJnMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbkFycmF5W2ldICE9PSBfdXRpbC5PUFMucGFpbnRJbWFnZVhPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RQSVhPID0gY29udGV4dC5pQ3VyciAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFBJWE9BcmcwID0gYXJnc0FycmF5W2lGaXJzdFBJWE9dWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzQXJyYXlbaV1bMF0gIT09IGZpcnN0UElYT0FyZzApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLnJlc3RvcmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChjb250ZXh0LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUlOX0lNQUdFU19JTl9CTE9DSyA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX0lNQUdFU19JTl9CTE9DSyA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IGNvbnRleHQuZm5BcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzQXJyYXkgPSBjb250ZXh0LmFyZ3NBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyID0gY29udGV4dC5pQ3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RTYXZlID0gY3VyciAtIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0VHJhbnNmb3JtID0gY3VyciAtIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0UElYTyA9IGN1cnIgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0UElYT0FyZzAgPSBhcmdzQXJyYXlbaUZpcnN0UElYT11bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmcwID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RUcmFuc2Zvcm1BcmczID0gYXJnc0FycmF5W2lGaXJzdFRyYW5zZm9ybV1bM107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBNYXRoLm1pbihNYXRoLmZsb29yKChpIC0gaUZpcnN0U2F2ZSkgLyA0KSwgTUFYX0lNQUdFU19JTl9CTE9DSyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IE1JTl9JTUFHRVNfSU5fQkxPQ0spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAtIChpIC0gaUZpcnN0U2F2ZSkgJSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlUcmFuc2Zvcm0gPSBpRmlyc3RUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHEgPSAwOyBxIDwgY291bnQ7IHErKywgaVRyYW5zZm9ybSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybUFyZ3MgPSBhcmdzQXJyYXlbaVRyYW5zZm9ybV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25zW3EgPDwgMV0gPSB0cmFuc2Zvcm1BcmdzWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uc1socSA8PCAxKSArIDFdID0gdHJhbnNmb3JtQXJnc1s1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbZmlyc3RQSVhPQXJnMCwgZmlyc3RUcmFuc2Zvcm1BcmcwLCBmaXJzdFRyYW5zZm9ybUFyZzMsIHBvc2l0aW9uc107XG4gICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5LnNwbGljZShpRmlyc3RTYXZlLCBjb3VudCAqIDQsIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmdzQXJyYXkuc3BsaWNlKGlGaXJzdFNhdmUsIGNvdW50ICogNCwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaUZpcnN0U2F2ZSArIDE7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBhZGRTdGF0ZShJbml0aWFsU3RhdGUsIFtfdXRpbC5PUFMuYmVnaW5UZXh0LCBfdXRpbC5PUFMuc2V0Rm9udCwgX3V0aWwuT1BTLnNldFRleHRNYXRyaXgsIF91dGlsLk9QUy5zaG93VGV4dCwgX3V0aWwuT1BTLmVuZFRleHRdLCBudWxsLCBmdW5jdGlvbiAoY29udGV4dCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2F2ZSA9IGNvbnRleHQuaUN1cnIgLSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IChpIC0gaUZpcnN0U2F2ZSkgJSA1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHBvcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5iZWdpblRleHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbkFycmF5W2ldID09PSBfdXRpbC5PUFMuc2V0Rm9udDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuQXJyYXlbaV0gPT09IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5BcnJheVtpXSAhPT0gX3V0aWwuT1BTLnNob3dUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2V0Rm9udCA9IGNvbnRleHQuaUN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RTZXRGb250QXJnMCA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0U2V0Rm9udEFyZzEgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NBcnJheVtpXVswXSAhPT0gZmlyc3RTZXRGb250QXJnMCB8fCBhcmdzQXJyYXlbaV1bMV0gIT09IGZpcnN0U2V0Rm9udEFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5BcnJheVtpXSA9PT0gX3V0aWwuT1BTLmVuZFRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChjb250ZXh0LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUlOX0NIQVJTX0lOX0JMT0NLID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfQ0hBUlNfSU5fQkxPQ0sgPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBjb250ZXh0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gY29udGV4dC5hcmdzQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyciA9IGNvbnRleHQuaUN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0QmVnaW5UZXh0ID0gY3VyciAtIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUZpcnN0U2V0Rm9udCA9IGN1cnIgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdFNldFRleHRNYXRyaXggPSBjdXJyIC0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpRmlyc3RTaG93VGV4dCA9IGN1cnIgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdEVuZFRleHQgPSBjdXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0U2V0Rm9udEFyZzAgPSBhcmdzQXJyYXlbaUZpcnN0U2V0Rm9udF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RTZXRGb250QXJnMSA9IGFyZ3NBcnJheVtpRmlyc3RTZXRGb250XVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IE1hdGgubWluKE1hdGguZmxvb3IoKGkgLSBpRmlyc3RCZWdpblRleHQpIC8gNSksIE1BWF9DSEFSU19JTl9CTE9DSyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8IE1JTl9DSEFSU19JTl9CTE9DSykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpIC0gKGkgLSBpRmlyc3RCZWdpblRleHQpICUgNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlGaXJzdCA9IGlGaXJzdEJlZ2luVGV4dDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlGaXJzdEJlZ2luVGV4dCA+PSA0ICYmIGZuQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF0gPT09IGZuQXJyYXlbaUZpcnN0U2V0Rm9udF0gJiYgZm5BcnJheVtpRmlyc3RCZWdpblRleHQgLSAzXSA9PT0gZm5BcnJheVtpRmlyc3RTZXRUZXh0TWF0cml4XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDJdID09PSBmbkFycmF5W2lGaXJzdFNob3dUZXh0XSAmJiBmbkFycmF5W2lGaXJzdEJlZ2luVGV4dCAtIDFdID09PSBmbkFycmF5W2lGaXJzdEVuZFRleHRdICYmIGFyZ3NBcnJheVtpRmlyc3RCZWdpblRleHQgLSA0XVswXSA9PT0gZmlyc3RTZXRGb250QXJnMCAmJiBhcmdzQXJyYXlbaUZpcnN0QmVnaW5UZXh0IC0gNF1bMV0gPT09IGZpcnN0U2V0Rm9udEFyZzEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlGaXJzdCAtPSA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaUVuZFRleHQgPSBpRmlyc3QgKyA0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBxID0gMTsgcSA8IGNvdW50OyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5LnNwbGljZShpRW5kVGV4dCwgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5LnNwbGljZShpRW5kVGV4dCwgMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaUVuZFRleHQgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlFbmRUZXh0ICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUXVldWVPcHRpbWl6ZXIocXVldWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlDdXJyOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuQXJyYXk6IHF1ZXVlLmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5OiBxdWV1ZS5hcmdzQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdFByb2Nlc3NlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBRdWV1ZU9wdGltaXplci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfb3B0aW1pemU6IGZ1bmN0aW9uIF9vcHRpbWl6ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IHRoaXMucXVldWUuZm5BcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMubGFzdFByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBmbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHRoaXMubWF0Y2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlICYmICFtYXRjaCAmJiBpICsgMSA9PT0gaWkgJiYgIUluaXRpYWxTdGF0ZVtmbkFycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RQcm9jZXNzZWQgPSBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBpaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVyYXRlID0gKDAsIG1hdGNoLml0ZXJhdGVGbikoY29udGV4dCwgaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gKDAsIG1hdGNoLnByb2Nlc3NGbikoY29udGV4dCwgaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBmbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gaWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gKHN0YXRlIHx8IEluaXRpYWxTdGF0ZSlbZm5BcnJheVtpXV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0ZSB8fCBBcnJheS5pc0FycmF5KHN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmlDdXJyID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5jaGVja0ZuICYmICEoMCwgc3RhdGUuY2hlY2tGbikoY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoID0gbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiBwdXNoKGZuLCBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5xdWV1ZS5mbkFycmF5LnB1c2goZm4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUuYXJnc0FycmF5LnB1c2goYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpbWl6ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoOiBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5tYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGhpcy5xdWV1ZS5mbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gKDAsIHRoaXMubWF0Y2gucHJvY2Vzc0ZuKSh0aGlzLmNvbnRleHQsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpbWl6ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0UHJvY2Vzc2VkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFF1ZXVlT3B0aW1pemVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBOdWxsT3B0aW1pemVyID0gZnVuY3Rpb24gTnVsbE9wdGltaXplckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE51bGxPcHRpbWl6ZXIocXVldWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUgPSBxdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE51bGxPcHRpbWl6ZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVzaDogZnVuY3Rpb24gcHVzaChmbiwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucXVldWUuZm5BcnJheS5wdXNoKGZuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoOiBmdW5jdGlvbiBmbHVzaCgpIHt9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdWxsT3B0aW1pemVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBPcGVyYXRvckxpc3QgPSBmdW5jdGlvbiBPcGVyYXRvckxpc3RDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgQ0hVTktfU0laRSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDSFVOS19TSVpFX0FCT1VUID0gQ0hVTktfU0laRSAtIDU7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VHJhbnNmZXJzKHF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IHF1ZXVlLmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5ID0gcXVldWUuYXJnc0FycmF5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBxdWV1ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmbkFycmF5W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJnID0gYXJnc0FycmF5W2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5jYWNoZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2ZlcnMucHVzaChhcmcuZGF0YS5idWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2ZlcnM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBPcGVyYXRvckxpc3QoaW50ZW50LCBtZXNzYWdlSGFuZGxlciwgcGFnZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZuQXJyYXkgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnc0FycmF5ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlSGFuZGxlciAmJiB0aGlzLmludGVudCAhPT0gJ29wbGlzdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGltaXplciA9IG5ldyBRdWV1ZU9wdGltaXplcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpbWl6ZXIgPSBuZXcgTnVsbE9wdGltaXplcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG90YWxMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVudCA9IGludGVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2VpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE9wZXJhdG9yTGlzdC5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFyZ3NBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgdG90YWxMZW5ndGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsTGVuZ3RoICsgdGhpcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRPcDogZnVuY3Rpb24gYWRkT3AoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGltaXplci5wdXNoKGZuLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlaWdodCsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMud2VpZ2h0ID49IENIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmx1c2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLndlaWdodCA+PSBDSFVOS19TSVpFX0FCT1VUICYmIChmbiA9PT0gX3V0aWwuT1BTLnJlc3RvcmUgfHwgZm4gPT09IF91dGlsLk9QUy5lbmRUZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbHVzaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZERlcGVuZGVuY3k6IGZ1bmN0aW9uIGFkZERlcGVuZGVuY3koZGVwZW5kZW5jeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXBlbmRlbmN5IGluIHRoaXMuZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRPcChfdXRpbC5PUFMuZGVwZW5kZW5jeSwgW2RlcGVuZGVuY3ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGREZXBlbmRlbmNpZXM6IGZ1bmN0aW9uIGFkZERlcGVuZGVuY2llcyhkZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZGVwZW5kZW5jaWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRGVwZW5kZW5jeShrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRPcExpc3Q6IGZ1bmN0aW9uIGFkZE9wTGlzdChvcExpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuZGVwZW5kZW5jaWVzLCBvcExpc3QuZGVwZW5kZW5jaWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG9wTGlzdC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkT3Aob3BMaXN0LmZuQXJyYXlbaV0sIG9wTGlzdC5hcmdzQXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRJUjogZnVuY3Rpb24gZ2V0SVIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheTogdGhpcy5mbkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzQXJyYXk6IHRoaXMuYXJnc0FycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IHRoaXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmbHVzaDogZnVuY3Rpb24gZmx1c2gobGFzdENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRpbWl6ZXIuZmx1c2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJzID0gZ2V0VHJhbnNmZXJzKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90b3RhbExlbmd0aCArPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kKCdSZW5kZXJQYWdlQ2h1bmsnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheTogdGhpcy5mbkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5OiB0aGlzLmFyZ3NBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaHVuazogbGFzdENodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBsZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50OiB0aGlzLmludGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRyYW5zZmVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm5BcnJheS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnc0FycmF5Lmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW1pemVyLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPcGVyYXRvckxpc3Q7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5PcGVyYXRvckxpc3QgPSBPcGVyYXRvckxpc3Q7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGFydGlhbEV2YWx1YXRvciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfcmVnZW5lcmF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMikpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY21hcCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9mb250cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTczKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZW5jb2RpbmdzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91bmljb2RlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc4KTtcblxuICAgICAgICAgICAgICAgIHZhciBfcGF0dGVybiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfcGFyc2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9iaWRpID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxODMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9jb2xvcnNwYWNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9nbHlwaGxpc3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX21ldHJpY3MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2Z1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxODUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9qcGVnX3N0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYzKTtcblxuICAgICAgICAgICAgICAgIHZhciBfbXVybXVyaGFzaCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTg3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfb3BlcmF0b3JfbGlzdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcwKTtcblxuICAgICAgICAgICAgICAgIHZhciBfaW1hZ2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4OCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUGFydGlhbEV2YWx1YXRvciA9IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VEYXRhU2NoZW1hOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEltYWdlU2l6ZTogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRm9udEZhY2U6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydDogX3V0aWwuTmF0aXZlSW1hZ2VEZWNvZGluZy5ERUNPREUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnM6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTmF0aXZlSW1hZ2VEZWNvZGVyKF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gX3JlZi54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlcyA9IF9yZWYucmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBfcmVmLmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRmb3JjZURhdGFTY2hlbWEgPSBfcmVmLmZvcmNlRGF0YVNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZURhdGFTY2hlbWEgPSBfcmVmJGZvcmNlRGF0YVNjaGVtYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGZvcmNlRGF0YVNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnkgPSBfcmVmLnBkZkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc291cmNlcyA9IHJlc291cmNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlRGF0YVNjaGVtYSA9IGZvcmNlRGF0YVNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5ID0gcGRmRnVuY3Rpb25GYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTmF0aXZlSW1hZ2VEZWNvZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbkRlY29kZTogZnVuY3Rpb24gY2FuRGVjb2RlKGltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltYWdlIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0gJiYgTmF0aXZlSW1hZ2VEZWNvZGVyLmlzRGVjb2RhYmxlKGltYWdlLCB0aGlzLnhyZWYsIHRoaXMucmVzb3VyY2VzLCB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlOiBmdW5jdGlvbiBkZWNvZGUoaW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IGltYWdlLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yU3BhY2UgPSBkaWN0LmdldCgnQ29sb3JTcGFjZScsICdDUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnBhcnNlKGNvbG9yU3BhY2UsIHRoaXMueHJlZiwgdGhpcy5yZXNvdXJjZXMsIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnSnBlZ0RlY29kZScsIFtpbWFnZS5nZXRJUih0aGlzLmZvcmNlRGF0YVNjaGVtYSksIGNvbG9yU3BhY2UubnVtQ29tcHNdKS50aGVuKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IF9yZWYyLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IF9yZWYyLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9zdHJlYW0uU3RyZWFtKGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBpbWFnZS5kaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBOYXRpdmVJbWFnZURlY29kZXIuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbiAoaW1hZ2UsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IGltYWdlLmRpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWN0LmhhcygnRGVjb2RlUGFybXMnKSB8fCBkaWN0LmhhcygnRFAnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5wYXJzZShkaWN0LmdldCgnQ29sb3JTcGFjZScsICdDUycpLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY3MubmFtZSA9PT0gJ0RldmljZUdyYXknIHx8IGNzLm5hbWUgPT09ICdEZXZpY2VSR0InKSAmJiBjcy5pc0RlZmF1bHREZWNvZGUoZGljdC5nZXRBcnJheSgnRGVjb2RlJywgJ0QnKSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgTmF0aXZlSW1hZ2VEZWNvZGVyLmlzRGVjb2RhYmxlID0gZnVuY3Rpb24gKGltYWdlLCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBpbWFnZS5kaWN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdC5oYXMoJ0RlY29kZVBhcm1zJykgfHwgZGljdC5oYXMoJ0RQJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoZGljdC5nZXQoJ0NvbG9yU3BhY2UnLCAnQ1MnKSwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnBjID0gZGljdC5nZXQoJ0JpdHNQZXJDb21wb25lbnQnLCAnQlBDJykgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoY3MubnVtQ29tcHMgPT09IDEgfHwgY3MubnVtQ29tcHMgPT09IDMpICYmIGNzLmlzRGVmYXVsdERlY29kZShkaWN0LmdldEFycmF5KCdEZWNvZGUnLCAnRCcpLCBicGMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3IoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZNYW5hZ2VyID0gX3JlZjMucGRmTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmID0gX3JlZjMueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyID0gX3JlZjMuaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5kZXggPSBfcmVmMy5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRGYWN0b3J5ID0gX3JlZjMuaWRGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDYWNoZSA9IF9yZWYzLmZvbnRDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdEluQ01hcENhY2hlID0gX3JlZjMuYnVpbHRJbkNNYXBDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRvcHRpb25zID0gX3JlZjMub3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gX3JlZjMkb3B0aW9ucyA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJG9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5ID0gX3JlZjMucGRmRnVuY3Rpb25GYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZNYW5hZ2VyID0gcGRmTWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlkRmFjdG9yeSA9IGlkRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udENhY2hlID0gZm9udENhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsdEluQ01hcENhY2hlID0gYnVpbHRJbkNNYXBDYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwgRGVmYXVsdFBhcnRpYWxFdmFsdWF0b3JPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkgPSBwZGZGdW5jdGlvbkZhY3Rvcnk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hCdWlsdEluQ01hcCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBfdGhpcy5idWlsdEluQ01hcENhY2hlLmdldChuYW1lKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0ZldGNoQnVpbHRJbkNNYXAnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2NvbnRleHQuc2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jb21wcmVzc2lvblR5cGUgIT09IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYnVpbHRJbkNNYXBDYWNoZS5zZXQobmFtZSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmNC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUSU1FX1NMT1RfRFVSQVRJT05fTVMgPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENIRUNLX1RJTUVfRVZFUlkgPSAxMDA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVGltZVNsb3RNYW5hZ2VyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVGltZVNsb3RNYW5hZ2VyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrOiBmdW5jdGlvbiBUaW1lU2xvdE1hbmFnZXJfY2hlY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCsrdGhpcy5jaGVja2VkIDwgQ0hFQ0tfVElNRV9FVkVSWSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2VkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5lbmRUaW1lIDw9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uIFRpbWVTbG90TWFuYWdlcl9yZXNldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFRpbWUgPSBEYXRlLm5vdygpICsgVElNRV9TTE9UX0RVUkFUSU9OX01TO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplQmxlbmRNb2RlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc291cmNlLW92ZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdOb3JtYWwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NvbXBhdGlibGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvdXJjZS1vdmVyJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ011bHRpcGx5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdtdWx0aXBseSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTY3JlZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NjcmVlbic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPdmVybGF5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdvdmVybGF5JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Rhcmtlbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGFya2VuJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xpZ2h0ZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2xpZ2h0ZW4nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29sb3JEb2RnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29sb3ItZG9kZ2UnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ29sb3JCdXJuJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb2xvci1idXJuJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0hhcmRMaWdodCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGFyZC1saWdodCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTb2Z0TGlnaHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvZnQtbGlnaHQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGlmZmVyZW5jZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnZGlmZmVyZW5jZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFeGNsdXNpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2V4Y2x1c2lvbic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdIdWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2h1ZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTYXR1cmF0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzYXR1cmF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NvbG9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb2xvcic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMdW1pbm9zaXR5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdsdW1pbm9zaXR5JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbnN1cHBvcnRlZCBibGVuZCBtb2RlOiAnICsgdmFsdWUubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvdXJjZS1vdmVyJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgVElMSU5HX1BBVFRFUk4gPSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgU0hBRElOR19QQVRURVJOID0gMjtcbiAgICAgICAgICAgICAgICAgICAgUGFydGlhbEV2YWx1YXRvci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZTogZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld09wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IERlZmF1bHRQYXJ0aWFsRXZhbHVhdG9yT3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3RXZhbHVhdG9yID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFdmFsdWF0b3Iub3B0aW9ucyA9IG5ld09wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld0V2YWx1YXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNCbGVuZE1vZGVzOiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2hhc0JsZW5kTW9kZXMocmVzb3VyY2VzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShyZXNvdXJjZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvY2Vzc2VkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvdXJjZXMub2JqSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkW3Jlc291cmNlcy5vYmpJZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlcyA9IFtyZXNvdXJjZXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmID0gdGhpcy54cmVmO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5LCBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBub2Rlcy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhcGhpY1N0YXRlcyA9IG5vZGUuZ2V0KCdFeHRHU3RhdGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZ3JhcGhpY1N0YXRlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmFwaGljU3RhdGVzS2V5cyA9IGdyYXBoaWNTdGF0ZXMuZ2V0S2V5cygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGdyYXBoaWNTdGF0ZXNLZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBncmFwaGljU3RhdGVzS2V5c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhcGhpY1N0YXRlID0gZ3JhcGhpY1N0YXRlcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm0gPSBncmFwaGljU3RhdGUuZ2V0KCdCTScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGJtKSAmJiBibS5uYW1lICE9PSAnTm9ybWFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeE9iamVjdHMgPSBub2RlLmdldCgnWE9iamVjdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoeE9iamVjdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4T2JqZWN0c0tleXMgPSB4T2JqZWN0cy5nZXRLZXlzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB4T2JqZWN0c0tleXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0geE9iamVjdHNLZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhPYmplY3QgPSB4T2JqZWN0cy5nZXRSYXcoa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoeE9iamVjdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc2VkW3hPYmplY3QudG9TdHJpbmcoKV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeE9iamVjdCA9IHhyZWYuZmV0Y2goeE9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4T2JqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeE9iamVjdC5kaWN0Lm9iaklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb2Nlc3NlZFt4T2JqZWN0LmRpY3Qub2JqSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZFt4T2JqZWN0LmRpY3Qub2JqSWRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhSZXNvdXJjZXMgPSB4T2JqZWN0LmRpY3QuZ2V0KCdSZXNvdXJjZXMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHhSZXNvdXJjZXMpICYmICgheFJlc291cmNlcy5vYmpJZCB8fCAhcHJvY2Vzc2VkW3hSZXNvdXJjZXMub2JqSWRdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnB1c2goeFJlc291cmNlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeFJlc291cmNlcy5vYmpJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZWRbeFJlc291cmNlcy5vYmpJZF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZEZvcm1YT2JqZWN0OiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2J1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBzbWFzaywgb3BlcmF0b3JMaXN0LCB0YXNrLCBpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdCA9IHhvYmouZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gZGljdC5nZXRBcnJheSgnTWF0cml4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJib3ggPSBkaWN0LmdldEFycmF5KCdCQm94Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShiYm94KSAmJiBiYm94Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYm94ID0gX3V0aWwuVXRpbC5ub3JtYWxpemVSZWN0KGJib3gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJib3ggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cCA9IGRpY3QuZ2V0KCdHcm91cCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cE9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJib3g6IGJib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFzazogc21hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29sYXRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm9ja291dDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdyb3VwU3VidHlwZSA9IGdyb3VwLmdldCgnUycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JTcGFjZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGdyb3VwU3VidHlwZSwgJ1RyYW5zcGFyZW5jeScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cE9wdGlvbnMuaXNvbGF0ZWQgPSBncm91cC5nZXQoJ0knKSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwT3B0aW9ucy5rbm9ja291dCA9IGdyb3VwLmdldCgnSycpIHx8IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuaGFzKCdDUycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoZ3JvdXAuZ2V0KCdDUycpLCB0aGlzLnhyZWYsIHJlc291cmNlcywgdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNtYXNrICYmIHNtYXNrLmJhY2tkcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlID0gY29sb3JTcGFjZSB8fCBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hc2suYmFja2Ryb3AgPSBjb2xvclNwYWNlLmdldFJnYihzbWFzay5iYWNrZHJvcCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmJlZ2luR3JvdXAsIFtncm91cE9wdGlvbnNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbiwgW21hdHJpeCwgYmJveF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogeG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzazogdGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBkaWN0LmdldCgnUmVzb3VyY2VzJykgfHwgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3Q6IG9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5wYWludEZvcm1YT2JqZWN0RW5kLCBbXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLmVuZEdyb3VwLCBbZ3JvdXBPcHRpb25zXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFBhaW50SW1hZ2VYT2JqZWN0OiBmdW5jdGlvbiBidWlsZFBhaW50SW1hZ2VYT2JqZWN0KF9yZWY1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2VzID0gX3JlZjUucmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZSA9IF9yZWY1LmltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNSRpc0lubGluZSA9IF9yZWY1LmlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0lubGluZSA9IF9yZWY1JGlzSW5saW5lID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY1JGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QgPSBfcmVmNS5vcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5ID0gX3JlZjUuY2FjaGVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQ2FjaGUgPSBfcmVmNS5pbWFnZUNhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNSRmb3JjZURpc2FibGVOYXQgPSBfcmVmNS5mb3JjZURpc2FibGVOYXRpdmVJbWFnZURlY29kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlRGlzYWJsZU5hdGl2ZUltYWdlRGVjb2RlciA9IF9yZWY1JGZvcmNlRGlzYWJsZU5hdCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNSRmb3JjZURpc2FibGVOYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBpbWFnZS5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gZGljdC5nZXQoJ1dpZHRoJywgJ1cnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IGRpY3QuZ2V0KCdIZWlnaHQnLCAnSCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodyAmJiAoMCwgX3V0aWwuaXNOdW0pKHcpKSB8fCAhKGggJiYgKDAsIF91dGlsLmlzTnVtKShoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhJbWFnZVNpemUgPSB0aGlzLm9wdGlvbnMubWF4SW1hZ2VTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heEltYWdlU2l6ZSAhPT0gLTEgJiYgdyAqIGggPiBtYXhJbWFnZVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VNYXNrID0gZGljdC5nZXQoJ0ltYWdlTWFzaycsICdJTScpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdEYXRhLCBhcmdzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltYWdlTWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBkaWN0LmdldCgnV2lkdGgnLCAnVycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZGljdC5nZXQoJ0hlaWdodCcsICdIJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaXRTdHJpZGVMZW5ndGggPSB3aWR0aCArIDcgPj4gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0FycmF5ID0gaW1hZ2UuZ2V0Qnl0ZXMoYml0U3RyaWRlTGVuZ3RoICogaGVpZ2h0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZSA9IGRpY3QuZ2V0QXJyYXkoJ0RlY29kZScsICdEJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEgPSBfaW1hZ2UuUERGSW1hZ2UuY3JlYXRlTWFzayh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdBcnJheTogaW1nQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOiBpbWFnZSBpbnN0YW5jZW9mIF9zdHJlYW0uRGVjb2RlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZURlY29kZTogISFkZWNvZGUgJiYgZGVjb2RlWzBdID4gMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YS5jYWNoZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW2ltZ0RhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCwgYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUNhY2hlW2NhY2hlS2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogX3V0aWwuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb2Z0TWFzayA9IGRpY3QuZ2V0KCdTTWFzaycsICdTTScpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrID0gZGljdC5nZXQoJ01hc2snKSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgU01BTExfSU1BR0VfRElNRU5TSU9OUyA9IDIwMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lubGluZSAmJiAhc29mdE1hc2sgJiYgIW1hc2sgJiYgIShpbWFnZSBpbnN0YW5jZW9mIF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtKSAmJiB3ICsgaCA8IFNNQUxMX0lNQUdFX0RJTUVOU0lPTlMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlT2JqID0gbmV3IF9pbWFnZS5QREZJbWFnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXM6IHJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBpbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lOiBpc0lubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeTogdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEgPSBpbWFnZU9iai5jcmVhdGVJbWFnZURhdGEodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QsIFtpbWdEYXRhXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCA9IGZvcmNlRGlzYWJsZU5hdGl2ZUltYWdlRGVjb2RlciA/IF91dGlsLk5hdGl2ZUltYWdlRGVjb2RpbmcuTk9ORSA6IHRoaXMub3B0aW9ucy5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmpJZCA9ICdpbWdfJyArIHRoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCAhPT0gX3V0aWwuTmF0aXZlSW1hZ2VEZWNvZGluZy5OT05FICYmICFzb2Z0TWFzayAmJiAhbWFzayAmJiBpbWFnZSBpbnN0YW5jZW9mIF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtICYmIE5hdGl2ZUltYWdlRGVjb2Rlci5pc1N1cHBvcnRlZChpbWFnZSwgdGhpcy54cmVmLCByZXNvdXJjZXMsIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnb2JqJywgW29iaklkLCB0aGlzLnBhZ2VJbmRleCwgJ0pwZWdTdHJlYW0nLCBpbWFnZS5nZXRJUih0aGlzLm9wdGlvbnMuZm9yY2VEYXRhU2NoZW1hKV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY3kob2JqSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtvYmpJZCwgdywgaF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnBhaW50SnBlZ1hPYmplY3QsIGFyZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUNhY2hlW2NhY2hlS2V5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IF91dGlsLk9QUy5wYWludEpwZWdYT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBhcmdzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdOYXRpdmUgSlBFRyBkZWNvZGluZyBmYWlsZWQgLS0gdHJ5aW5nIHRvIHJlY292ZXI6ICcgKyAocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMyLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBpbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0lubGluZTogaXNJbmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0OiBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVLZXk6IGNhY2hlS2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQ2FjaGU6IGltYWdlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VEaXNhYmxlTmF0aXZlSW1hZ2VEZWNvZGVyOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hdGl2ZUltYWdlRGVjb2RlciA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCA9PT0gX3V0aWwuTmF0aXZlSW1hZ2VEZWNvZGluZy5ERUNPREUgJiYgKGltYWdlIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0gfHwgbWFzayBpbnN0YW5jZW9mIF9qcGVnX3N0cmVhbS5KcGVnU3RyZWFtIHx8IHNvZnRNYXNrIGluc3RhbmNlb2YgX2pwZWdfc3RyZWFtLkpwZWdTdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlRGVjb2RlciA9IG5ldyBOYXRpdmVJbWFnZURlY29kZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogdGhpcy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiByZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiB0aGlzLmhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZURhdGFTY2hlbWE6IHRoaXMub3B0aW9ucy5mb3JjZURhdGFTY2hlbWEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGREZXBlbmRlbmN5KG9iaklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW29iaklkLCB3LCBoXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbWFnZS5QREZJbWFnZS5idWlsZEltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcjogdGhpcy5oYW5kbGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlczogcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogaW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lOiBpc0lubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVjb2RlcjogbmF0aXZlSW1hZ2VEZWNvZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoaW1hZ2VPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0RhdGEgPSBpbWFnZU9iai5jcmVhdGVJbWFnZURhdGEoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5oYW5kbGVyLnNlbmQoJ29iaicsIFtvYmpJZCwgX3RoaXMyLnBhZ2VJbmRleCwgJ0ltYWdlJywgaW1nRGF0YV0sIFtpbWdEYXRhLmRhdGEuYnVmZmVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byBkZWNvZGUgaW1hZ2U6ICcgKyByZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5oYW5kbGVyLnNlbmQoJ29iaicsIFtvYmpJZCwgX3RoaXMyLnBhZ2VJbmRleCwgJ0ltYWdlJywgbnVsbF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdCwgYXJncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VDYWNoZVtjYWNoZUtleV0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogX3V0aWwuT1BTLnBhaW50SW1hZ2VYT2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogYXJnc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTTWFzazogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9oYW5kbGVTbWFzayhzbWFzaywgcmVzb3VyY2VzLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbWFza0NvbnRlbnQgPSBzbWFzay5nZXQoJ0cnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc21hc2tPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlOiBzbWFzay5nZXQoJ1MnKS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZHJvcDogc21hc2suZ2V0KCdCQycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJPYmogPSBzbWFzay5nZXQoJ1RSJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9mdW5jdGlvbi5pc1BERkZ1bmN0aW9uKSh0cmFuc2Zlck9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVyRm4gPSB0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUodHJhbnNmZXJPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJNYXAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBbMF0gPSBpIC8gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJGbih0bXAsIDAsIHRtcCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zlck1hcFtpXSA9IHRtcFswXSAqIDI1NSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza09wdGlvbnMudHJhbnNmZXJNYXAgPSB0cmFuc2Zlck1hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHJlc291cmNlcywgc21hc2tDb250ZW50LCBzbWFza09wdGlvbnMsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlLmNsb25lKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRpbGluZ1R5cGU6IGZ1bmN0aW9uIGhhbmRsZVRpbGluZ1R5cGUoZm4sIGFyZ3MsIHJlc291cmNlcywgcGF0dGVybiwgcGF0dGVybkRpY3QsIG9wZXJhdG9yTGlzdCwgdGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpbGluZ09wTGlzdCA9IG5ldyBfb3BlcmF0b3JfbGlzdC5PcGVyYXRvckxpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2VzQXJyYXkgPSBbcGF0dGVybkRpY3QuZ2V0KCdSZXNvdXJjZXMnKSwgcmVzb3VyY2VzXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuUmVzb3VyY2VzID0gX3ByaW1pdGl2ZXMuRGljdC5tZXJnZSh0aGlzLnhyZWYsIHJlc291cmNlc0FycmF5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE9wZXJhdG9yTGlzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogcGF0dGVybixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzazogdGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBwYXR0ZXJuUmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3Q6IHRpbGluZ09wTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF9wYXR0ZXJuLmdldFRpbGluZ1BhdHRlcm5JUikoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheTogdGlsaW5nT3BMaXN0LmZuQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzQXJyYXk6IHRpbGluZ09wTGlzdC5hcmdzQXJyYXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcGF0dGVybkRpY3QsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHRpbGluZ1BhdHRlcm5JUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jaWVzKHRpbGluZ09wTGlzdC5kZXBlbmRlbmNpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoZm4sIHRpbGluZ1BhdHRlcm5JUik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMzLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuaGFuZGxlci5zZW5kKCdVbnN1cHBvcnRlZEZlYXR1cmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy51bmtub3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiaGFuZGxlVGlsaW5nVHlwZSAtIGlnbm9yaW5nIHBhdHRlcm46IFxcXCJcIi5jb25jYXQocmVhc29uLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZXRGb250OiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2hhbmRsZVNldEZvbnQocmVzb3VyY2VzLCBmb250QXJncywgZm9udFJlZiwgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnROYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRBcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRBcmdzID0gZm9udEFyZ3Muc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udE5hbWUgPSBmb250QXJnc1swXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRGb250KGZvbnROYW1lLCBmb250UmVmLCByZXNvdXJjZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0cmFuc2xhdGVkLmZvbnQuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZFR5cGUzRGF0YShfdGhpczQsIHJlc291cmNlcywgb3BlcmF0b3JMaXN0LCB0YXNrKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuaGFuZGxlci5zZW5kKCdVbnN1cHBvcnRlZEZlYXR1cmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5mb250XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUcmFuc2xhdGVkRm9udCgnZ19mb250X2Vycm9yJywgbmV3IF9mb250cy5FcnJvckZvbnQoJ1R5cGUzIGZvbnQgbG9hZCBlcnJvcjogJyArIHJlYXNvbiksIHRyYW5zbGF0ZWQuZm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZm9udCA9IHRyYW5zbGF0ZWQuZm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5zZW5kKF90aGlzNC5oYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQubG9hZGVkTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUZXh0OiBmdW5jdGlvbiBoYW5kbGVUZXh0KGNoYXJzLCBzdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250ID0gc3RhdGUuZm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzID0gZm9udC5jaGFyc1RvR2x5cGhzKGNoYXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250LmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzQWRkVG9QYXRoU2V0ID0gISEoc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZGRUb1BhdGhTZXQgfHwgc3RhdGUuZmlsbENvbG9yU3BhY2UubmFtZSA9PT0gJ1BhdHRlcm4nIHx8IGZvbnQuZGlzYWJsZUZvbnRGYWNlIHx8IHRoaXMub3B0aW9ucy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHMoZm9udCwgZ2x5cGhzLCB0aGlzLmhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBocztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRHU3RhdGU6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3Jfc2V0R1N0YXRlKHJlc291cmNlcywgZ1N0YXRlLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczUgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdTdGF0ZU9iaiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnU3RhdGVLZXlzID0gZ1N0YXRlLmdldEtleXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBnU3RhdGVLZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBnU3RhdGUuZ2V0KGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMVyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMQyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMSic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNTCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1JJJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0ZMJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NBJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCB2YWx1ZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNS5oYW5kbGVTZXRGb250KHJlc291cmNlcywgbnVsbCwgdmFsdWVbMF0sIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlKS50aGVuKGZ1bmN0aW9uIChsb2FkZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jeShsb2FkZWROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdTdGF0ZU9iai5wdXNoKFtrZXksIFtsb2FkZWROYW1lLCB2YWx1ZVsxXV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JNJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnU3RhdGVPYmoucHVzaChba2V5LCBub3JtYWxpemVCbGVuZE1vZGUodmFsdWUpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1NNYXNrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodmFsdWUsICdOb25lJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgZmFsc2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczUuaGFuZGxlU01hc2sodmFsdWUsIHJlc291cmNlcywgb3BlcmF0b3JMaXN0LCB0YXNrLCBzdGF0ZU1hbmFnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ1N0YXRlT2JqLnB1c2goW2tleSwgdHJ1ZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5zdXBwb3J0ZWQgU01hc2sgdHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPUCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdvcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdPUE0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQkcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQkcyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1VDUic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdVQ1IyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RSJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RSMic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdIVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTTSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTQSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdBSVMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVEsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAnICsga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1Vua25vd24gZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAnICsga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBnU3RhdGVLZXlzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xvb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdTdGF0ZU9iai5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLnNldEdTdGF0ZSwgW2dTdGF0ZU9ial0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZEZvbnQ6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfbG9hZEZvbnQoZm9udE5hbWUsIGZvbnQsIHJlc291cmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXJyb3JGb250KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBUcmFuc2xhdGVkRm9udCgnZ19mb250X2Vycm9yJywgbmV3IF9mb250cy5FcnJvckZvbnQoJ0ZvbnQgJyArIGZvbnROYW1lICsgJyBpcyBub3QgYXZhaWxhYmxlJyksIGZvbnQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZiA9IHRoaXMueHJlZjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzUmVmKShmb250KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgXCJmb250XCIgb2JqZWN0IHNob3VsZCBiZSBhIHJlZmVyZW5jZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRSZWYgPSBmb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250UmVzID0gcmVzb3VyY2VzLmdldCgnRm9udCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250UmVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250UmVmID0gZm9udFJlcy5nZXRSYXcoZm9udE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdmb250UmVzIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckZvbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9udFJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ2ZvbnRSZWYgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JGb250KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9udENhY2hlLmhhcyhmb250UmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGZvbnRSZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB4cmVmLmZldGNoSWZSZWYoZm9udFJlZik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGZvbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvckZvbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC50cmFuc2xhdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb250LnRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVFdmFsdWF0ZWRGb250ID0gdGhpcy5wcmVFdmFsdWF0ZUZvbnQoZm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcmVFdmFsdWF0ZWRGb250LmRlc2NyaXB0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRSZWZJc1JlZiA9ICgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZm9udFJlZiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRJRDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udElEID0gZm9udFJlZi50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShkZXNjcmlwdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRlc2NyaXB0b3IuZm9udEFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuZm9udEFsaWFzZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRBbGlhc2VzID0gZGVzY3JpcHRvci5mb250QWxpYXNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc2ggPSBwcmVFdmFsdWF0ZWRGb250Lmhhc2g7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRBbGlhc2VzW2hhc2hdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxpYXNGb250UmVmID0gZm9udEFsaWFzZXNbaGFzaF0uYWxpYXNSZWY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250UmVmSXNSZWYgJiYgYWxpYXNGb250UmVmICYmIHRoaXMuZm9udENhY2hlLmhhcyhhbGlhc0ZvbnRSZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250Q2FjaGUucHV0QWxpYXMoZm9udFJlZiwgYWxpYXNGb250UmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb250Q2FjaGUuZ2V0KGZvbnRSZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEFsaWFzZXNbaGFzaF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udElEOiBfZm9udHMuRm9udC5nZXRGb250SUQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250UmVmSXNSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRBbGlhc2VzW2hhc2hdLmFsaWFzUmVmID0gZm9udFJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRJRCA9IGZvbnRBbGlhc2VzW2hhc2hdLmZvbnRJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udFJlZklzUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udENhY2hlLnB1dChmb250UmVmLCBmb250Q2FwYWJpbGl0eS5wcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnRJRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udElEID0gdGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udENhY2hlLnB1dCgnaWRfJyArIGZvbnRJRCwgZm9udENhcGFiaWxpdHkucHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoZm9udElELCAnVGhlIFwiZm9udElEXCIgbXVzdCBiZSBkZWZpbmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQubG9hZGVkTmFtZSA9ICdnXycgKyB0aGlzLnBkZk1hbmFnZXIuZG9jSWQgKyAnX2YnICsgZm9udElEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQudHJhbnNsYXRlZCA9IGZvbnRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0ZWRQcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFByb21pc2UgPSB0aGlzLnRyYW5zbGF0ZUZvbnQocHJlRXZhbHVhdGVkRm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWRGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkRm9udC5mb250VHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZkZvbnRTdGF0cyA9IHhyZWYuc3RhdHMuZm9udFR5cGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZkZvbnRTdGF0c1t0cmFuc2xhdGVkRm9udC5mb250VHlwZV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENhcGFiaWxpdHkucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoZm9udC5sb2FkZWROYW1lLCB0cmFuc2xhdGVkRm9udCwgZm9udCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2LmhhbmRsZXIuc2VuZCgnVW5zdXBwb3J0ZWRGZWF0dXJlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZUlkOiBfdXRpbC5VTlNVUFBPUlRFRF9GRUFUVVJFUy5mb250XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByZUV2YWx1YXRlZEZvbnQuZGVzY3JpcHRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RmlsZTMgPSBkZXNjcmlwdG9yICYmIGRlc2NyaXB0b3IuZ2V0KCdGb250RmlsZTMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gZm9udEZpbGUzICYmIGZvbnRGaWxlMy5nZXQoJ1N1YnR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250VHlwZSA9ICgwLCBfZm9udHMuZ2V0Rm9udFR5cGUpKHByZUV2YWx1YXRlZEZvbnQudHlwZSwgc3VidHlwZSAmJiBzdWJ0eXBlLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWZGb250U3RhdHMgPSB4cmVmLnN0YXRzLmZvbnRUeXBlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWZGb250U3RhdHNbZm9udFR5cGVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENhcGFiaWxpdHkucmVzb2x2ZShuZXcgVHJhbnNsYXRlZEZvbnQoZm9udC5sb2FkZWROYW1lLCBuZXcgX2ZvbnRzLkVycm9yRm9udChyZWFzb24gaW5zdGFuY2VvZiBFcnJvciA/IHJlYXNvbi5tZXNzYWdlIDogcmVhc29uKSwgZm9udCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb250Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkUGF0aDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9idWlsZFBhdGgob3BlcmF0b3JMaXN0LCBmbiwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0SW5kZXggPSBvcGVyYXRvckxpc3QubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3RJbmRleCA8IDAgfHwgb3BlcmF0b3JMaXN0LmZuQXJyYXlbbGFzdEluZGV4XSAhPT0gX3V0aWwuT1BTLmNvbnN0cnVjdFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5jb25zdHJ1Y3RQYXRoLCBbW2ZuXSwgYXJnc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcEFyZ3MgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5W2xhc3RJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wQXJnc1swXS5wdXNoKGZuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkob3BBcmdzWzFdLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlQ29sb3JOOiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX2hhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIGZuLCBhcmdzLCBjcywgcGF0dGVybnMsIHJlc291cmNlcywgdGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuTmFtZSA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwYXR0ZXJuTmFtZSkgJiYgKHBhdHRlcm4gPSBwYXR0ZXJucy5nZXQocGF0dGVybk5hbWUubmFtZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShwYXR0ZXJuKSA/IHBhdHRlcm4uZGljdCA6IHBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlTnVtID0gZGljdC5nZXQoJ1BhdHRlcm5UeXBlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVOdW0gPT09IFRJTElOR19QQVRURVJOKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBjcy5iYXNlID8gY3MuYmFzZS5nZXRSZ2IoYXJncywgMCkgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZShmbiwgY29sb3IsIHJlc291cmNlcywgcGF0dGVybiwgZGljdCwgb3BlcmF0b3JMaXN0LCB0YXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlTnVtID09PSBTSEFESU5HX1BBVFRFUk4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaGFkaW5nID0gZGljdC5nZXQoJ1NoYWRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBkaWN0LmdldEFycmF5KCdNYXRyaXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSBfcGF0dGVybi5QYXR0ZXJuLnBhcnNlU2hhZGluZyhzaGFkaW5nLCBtYXRyaXgsIHRoaXMueHJlZiwgcmVzb3VyY2VzLCB0aGlzLmhhbmRsZXIsIHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgcGF0dGVybi5nZXRJUigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gUGF0dGVyblR5cGU6ICcgKyB0eXBlTnVtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGZuLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3BlcmF0b3JMaXN0OiBmdW5jdGlvbiBnZXRPcGVyYXRvckxpc3QoX3JlZjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM3ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBfcmVmNi5zdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2sgPSBfcmVmNi50YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMgPSBfcmVmNi5yZXNvdXJjZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdCA9IF9yZWY2Lm9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjYkaW5pdGlhbFN0YXRlID0gX3JlZjYuaW5pdGlhbFN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsU3RhdGUgPSBfcmVmNiRpbml0aWFsU3RhdGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmNiRpbml0aWFsU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzID0gcmVzb3VyY2VzIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlIHx8IG5ldyBFdmFsU3RhdGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0T3BlcmF0b3JMaXN0OiBtaXNzaW5nIFwib3BlcmF0b3JMaXN0XCIgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gdGhpcy54cmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4b2JqcyA9IHJlc291cmNlcy5nZXQoJ1hPYmplY3QnKSB8fCBfcHJpbWl0aXZlcy5EaWN0LmVtcHR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm5zID0gcmVzb3VyY2VzLmdldCgnUGF0dGVybicpIHx8IF9wcmltaXRpdmVzLkRpY3QuZW1wdHk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcihpbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmVwcm9jZXNzb3IgPSBuZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKHN0cmVhbSwgeHJlZiwgc3RhdGVNYW5hZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltZVNsb3RNYW5hZ2VyID0gbmV3IFRpbWVTbG90TWFuYWdlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xvc2VQZW5kaW5nUmVzdG9yZU9QUyhhcmd1bWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwcmVwcm9jZXNzb3Iuc2F2ZWRTdGF0ZXNEZXB0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMucmVzdG9yZSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uIG5leHQocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlQm9keShyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZVNsb3RNYW5hZ2VyLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0ge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYXJncyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJlcHJvY2Vzc29yLnJlYWQob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG9wZXJhdGlvbi5hcmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gb3BlcmF0aW9uLmZuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50WE9iamVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBhcmdzWzBdLm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgJiYgaW1hZ2VDYWNoZVtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoaW1hZ2VDYWNoZVtuYW1lXS5mbiwgaW1hZ2VDYWNoZVtuYW1lXS5hcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhvYmogPSB4b2Jqcy5nZXQobmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgheG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh4b2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB4b2JqLmRpY3QuZ2V0KCdTdWJ0eXBlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1hPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUubmFtZSA9PT0gJ0Zvcm0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJ1aWxkRm9ybVhPYmplY3QocmVzb3VyY2VzLCB4b2JqLCBudWxsLCBvcGVyYXRvckxpc3QsIHRhc2ssIHN0YXRlTWFuYWdlci5zdGF0ZS5jbG9uZSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3RYT2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUubmFtZSA9PT0gJ0ltYWdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRQYWludEltYWdlWE9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZTogeG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0OiBvcGVyYXRvckxpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUNhY2hlOiBpbWFnZUNhY2hlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihyZXNvbHZlWE9iamVjdCwgcmVqZWN0WE9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlLm5hbWUgPT09ICdQUycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0lnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlVuaGFuZGxlZCBYT2JqZWN0IHN1YnR5cGUgXCIuY29uY2F0KHR5cGUubmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZi5vcHRpb25zLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlci5zZW5kKCdVbnN1cHBvcnRlZEZlYXR1cmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMudW5rbm93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKShcImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIFhPYmplY3Q6IFxcXCJcIi5jb25jYXQocmVhc29uLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFNpemUgPSBhcmdzWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlU2V0Rm9udChyZXNvdXJjZXMsIGFyZ3MsIG51bGwsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyLnN0YXRlKS50aGVuKGZ1bmN0aW9uIChsb2FkZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkRGVwZW5kZW5jeShsb2FkZWROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0Rm9udCwgW2xvYWRlZE5hbWUsIGZvbnRTaXplXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW5kSW5saW5lSW1hZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZUtleSA9IGFyZ3NbMF0uY2FjaGVLZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVFbnRyeSA9IGltYWdlQ2FjaGVbY2FjaGVLZXldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FjaGVFbnRyeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKGNhY2hlRW50cnkuZm4sIGNhY2hlRW50cnkuYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHNlbGYuYnVpbGRQYWludEltYWdlWE9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXM6IHJlc291cmNlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBhcmdzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmxpbmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3Q6IG9wZXJhdG9yTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlS2V5OiBjYWNoZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQ2FjaGU6IGltYWdlQ2FjaGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93VGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHNlbGYuaGFuZGxlVGV4dChhcmdzWzBdLCBzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dTcGFjZWRUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJyID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbWJpbmVkR2x5cGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJySXRlbSA9IGFycltpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoYXJySXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShjb21iaW5lZEdseXBocywgc2VsZi5oYW5kbGVUZXh0KGFyckl0ZW0sIHN0YXRlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfdXRpbC5pc051bSkoYXJySXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEdseXBocy5wdXNoKGFyckl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IGNvbWJpbmVkR2x5cGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNob3dUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QuYWRkT3AoX3V0aWwuT1BTLm5leHRMaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1swXSA9IHNlbGYuaGFuZGxlVGV4dChhcmdzWzBdLCBzdGF0ZU1hbmFnZXIuc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaG93VGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5uZXh0TGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmcsIFthcmdzLnNoaWZ0KCldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0LmFkZE9wKF91dGlsLk9QUy5zZXRDaGFyU3BhY2luZywgW2FyZ3Muc2hpZnQoKV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzBdID0gc2VsZi5oYW5kbGVUZXh0KGFyZ3NbMF0sIHN0YXRlTWFuYWdlci5zdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNob3dUZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUudGV4dFJlbmRlcmluZ01vZGUgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDb2xvclNwYWNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnBhcnNlKGFyZ3NbMF0sIHhyZWYsIHJlc291cmNlcywgc2VsZi5wZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yU3BhY2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5wYXJzZShhcmdzWzBdLCB4cmVmLCByZXNvdXJjZXMsIHNlbGYucGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLmZpbGxDb2xvclNwYWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gY3MuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzID0gc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxHcmF5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUdyYXk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGFyZ3MsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlci5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRTdHJva2VSR0JDb2xvcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYW5hZ2VyLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0RmlsbENvbG9yTjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuZmlsbENvbG9yU3BhY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNzLm5hbWUgPT09ICdQYXR0ZXJuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChzZWxmLmhhbmRsZUNvbG9yTihvcGVyYXRvckxpc3QsIF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOLCBhcmdzLCBjcywgcGF0dGVybnMsIHJlc291cmNlcywgdGFzaykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGNzLmdldFJnYihhcmdzLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBfdXRpbC5PUFMuc2V0RmlsbFJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3MubmFtZSA9PT0gJ1BhdHRlcm4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHNlbGYuaGFuZGxlQ29sb3JOKG9wZXJhdG9yTGlzdCwgX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTiwgYXJncywgY3MsIHBhdHRlcm5zLCByZXNvdXJjZXMsIHRhc2spKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBjcy5nZXRSZ2IoYXJncywgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNoYWRpbmdGaWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGluZ1JlcyA9IHJlc291cmNlcy5nZXQoJ1NoYWRpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNoYWRpbmdSZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoYWRpbmcgPSBzaGFkaW5nUmVzLmdldChhcmdzWzBdLm5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hhZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdObyBzaGFkaW5nIG9iamVjdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNoYWRpbmdGaWxsID0gX3BhdHRlcm4uUGF0dGVybi5wYXJzZVNoYWRpbmcoc2hhZGluZywgbnVsbCwgeHJlZiwgcmVzb3VyY2VzLCBzZWxmLmhhbmRsZXIsIHNlbGYucGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0dGVybklSID0gc2hhZGluZ0ZpbGwuZ2V0SVIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtwYXR0ZXJuSVJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF91dGlsLk9QUy5zaGFkaW5nRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRHU3RhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0TmFtZSA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRHU3RhdGUgPSByZXNvdXJjZXMuZ2V0KCdFeHRHU3RhdGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGV4dEdTdGF0ZSkgfHwgIWV4dEdTdGF0ZS5oYXMoZGljdE5hbWUubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdTdGF0ZSA9IGV4dEdTdGF0ZS5nZXQoZGljdE5hbWUubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoc2VsZi5zZXRHU3RhdGUocmVzb3VyY2VzLCBnU3RhdGUsIG9wZXJhdG9yTGlzdCwgdGFzaywgc3RhdGVNYW5hZ2VyKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1vdmVUbzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5saW5lVG86XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jbG9zZVBhdGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVpbGRQYXRoKG9wZXJhdG9yTGlzdCwgZm4sIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5idWlsZFBhdGgob3BlcmF0b3JMaXN0LCBmbiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubWFya1BvaW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1hcmtQb2ludFByb3BzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRNYXJrZWRDb250ZW50OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmJlZ2luQ29tcGF0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZENvbXBhdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJncyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBhcmdzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJnc1tpXSBpbnN0YW5jZW9mIF9wcmltaXRpdmVzLkRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGlpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBvcGVyYXRvcjogJyArIGZuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdC5hZGRPcChmbiwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChkZWZlcnJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczcub3B0aW9ucy5pZ25vcmVFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5oYW5kbGVyLnNlbmQoJ1Vuc3VwcG9ydGVkRmVhdHVyZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnVua25vd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nIFxcXCJcIi5jb25jYXQodGFzay5uYW1lLCBcIlxcXCIgXCIpICsgXCJ0YXNrOiBcXFwiXCIuY29uY2F0KHJlYXNvbiwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VGV4dENvbnRlbnQ6IGZ1bmN0aW9uIGdldFRleHRDb250ZW50KF9yZWY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gX3JlZjcuc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrID0gX3JlZjcudGFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzID0gX3JlZjcucmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNyRzdGF0ZU1hbmFnZXIgPSBfcmVmNy5zdGF0ZU1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlciA9IF9yZWY3JHN0YXRlTWFuYWdlciA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY3JHN0YXRlTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjckbm9ybWFsaXplV2hpdGVzID0gX3JlZjcubm9ybWFsaXplV2hpdGVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplV2hpdGVzcGFjZSA9IF9yZWY3JG5vcm1hbGl6ZVdoaXRlcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmNyRub3JtYWxpemVXaGl0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY3JGNvbWJpbmVUZXh0SXRlbSA9IF9yZWY3LmNvbWJpbmVUZXh0SXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVUZXh0SXRlbXMgPSBfcmVmNyRjb21iaW5lVGV4dEl0ZW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjckY29tYmluZVRleHRJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rID0gX3JlZjcuc2luayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjckc2VlblN0eWxlcyA9IF9yZWY3LnNlZW5TdHlsZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZW5TdHlsZXMgPSBfcmVmNyRzZWVuU3R5bGVzID09PSB2b2lkIDAgPyBPYmplY3QuY3JlYXRlKG51bGwpIDogX3JlZjckc2VlblN0eWxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZXMgPSByZXNvdXJjZXMgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hbmFnZXIgPSBzdGF0ZU1hbmFnZXIgfHwgbmV3IFN0YXRlTWFuYWdlcihuZXcgVGV4dFN0YXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBXaGl0ZXNwYWNlUmVnZXhwID0gL1xccy9nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXM6IE9iamVjdC5jcmVhdGUobnVsbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudEl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWR2YW5jZVdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QWR2YW5jZUhlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFkdmFuY2VTY2FsZTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VXaWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFrZVNwYWNlTWluOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFrZU11bHRpU3BhY2VNaW46IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWtlTXVsdGlTcGFjZU1heDogLTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRSdW5CcmVha0FsbG93ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnROYW1lOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgU1BBQ0VfRkFDVE9SID0gMC4zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNVUxUSV9TUEFDRV9GQUNUT1IgPSAxLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1VTFRJX1NQQUNFX0ZBQ1RPUl9NQVggPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeG9ianMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBza2lwRW1wdHlYT2JqcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXByb2Nlc3NvciA9IG5ldyBFdmFsdWF0b3JQcmVwcm9jZXNzb3Ioc3RyZWFtLCB4cmVmLCBzdGF0ZU1hbmFnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0U3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Q29udGVudEl0ZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udCA9IHRleHRTdGF0ZS5mb250O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbnQubG9hZGVkTmFtZSBpbiBzZWVuU3R5bGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlblN0eWxlc1tmb250LmxvYWRlZE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50LnN0eWxlc1tmb250LmxvYWRlZE5hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRGYW1pbHk6IGZvbnQuZmFsbGJhY2tOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VudDogZm9udC5hc2NlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VudDogZm9udC5kZXNjZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsOiAhIWZvbnQudmVydGljYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uZm9udE5hbWUgPSBmb250LmxvYWRlZE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0c20gPSBbdGV4dFN0YXRlLmZvbnRTaXplICogdGV4dFN0YXRlLnRleHRIU2NhbGUsIDAsIDAsIHRleHRTdGF0ZS5mb250U2l6ZSwgMCwgdGV4dFN0YXRlLnRleHRSaXNlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC5pc1R5cGUzRm9udCAmJiB0ZXh0U3RhdGUuZm9udE1hdHJpeCAhPT0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVggJiYgdGV4dFN0YXRlLmZvbnRTaXplID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhIZWlnaHQgPSBmb250LmJib3hbM10gLSBmb250LmJib3hbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaEhlaWdodCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaEhlaWdodCA9IGdseXBoSGVpZ2h0ICogdGV4dFN0YXRlLmZvbnRNYXRyaXhbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNtWzNdICo9IGdseXBoSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRybSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRleHRTdGF0ZS5jdG0sIF91dGlsLlV0aWwudHJhbnNmb3JtKHRleHRTdGF0ZS50ZXh0TWF0cml4LCB0c20pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0udHJhbnNmb3JtID0gdHJtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgPSBNYXRoLnNxcnQodHJtWzJdICogdHJtWzJdICsgdHJtWzNdICogdHJtWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoID0gTWF0aC5zcXJ0KHRybVswXSAqIHRybVswXSArIHRybVsxXSAqIHRybVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS52ZXJ0aWNhbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHRleHRTdGF0ZS50ZXh0TGluZU1hdHJpeFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXhbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZUxpbmVYID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gdGV4dFN0YXRlLmN0bVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHRleHRTdGF0ZS5jdG1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZUN0bVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS50ZXh0QWR2YW5jZVNjYWxlID0gc2NhbGVDdG1YICogc2NhbGVMaW5lWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlV2lkdGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VIZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2VXaWR0aCA9IGZvbnQuc3BhY2VXaWR0aCAvIDEwMDAgKiB0ZXh0U3RhdGUuZm9udFNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYWNlV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoID0gc3BhY2VXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlU3BhY2VNaW4gPSBzcGFjZVdpZHRoICogU1BBQ0VfRkFDVE9SO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWluID0gc3BhY2VXaWR0aCAqIE1VTFRJX1NQQUNFX0ZBQ1RPUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1heCA9IHNwYWNlV2lkdGggKiBNVUxUSV9TUEFDRV9GQUNUT1JfTUFYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLnRleHRSdW5CcmVha0FsbG93ZWQgPSAhZm9udC5pc01vbm9zcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlU3BhY2VNaW4gPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1pbiA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS50ZXh0UnVuQnJlYWtBbGxvd2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dENvbnRlbnRJdGVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VXaGl0ZXNwYWNlKHN0cikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSA9IHN0ci5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgaWkgJiYgKGNvZGUgPSBzdHIuY2hhckNvZGVBdChpKSkgPj0gMHgyMCAmJiBjb2RlIDw9IDB4N0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpIDwgaWkgPyBzdHIucmVwbGFjZShXaGl0ZXNwYWNlUmVnZXhwLCAnICcpIDogc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJ1bkJpZGlUcmFuc2Zvcm0odGV4dENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSB0ZXh0Q2h1bmsuc3RyLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmlkaVJlc3VsdCA9ICgwLCBfYmlkaS5iaWRpKShzdHIsIC0xLCB0ZXh0Q2h1bmsudmVydGljYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyOiBub3JtYWxpemVXaGl0ZXNwYWNlID8gcmVwbGFjZVdoaXRlc3BhY2UoYmlkaVJlc3VsdC5zdHIpIDogYmlkaVJlc3VsdC5zdHIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXI6IGJpZGlSZXN1bHQuZGlyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRleHRDaHVuay53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGV4dENodW5rLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdGV4dENodW5rLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnROYW1lOiB0ZXh0Q2h1bmsuZm9udE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVTZXRGb250KGZvbnROYW1lLCBmb250UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRGb250KGZvbnROYW1lLCBmb250UmVmLCByZXNvdXJjZXMpLnRoZW4oZnVuY3Rpb24gKHRyYW5zbGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5mb250ID0gdHJhbnNsYXRlZC5mb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRNYXRyaXggPSB0cmFuc2xhdGVkLmZvbnQuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRUZXh0Q29udGVudEl0ZW0oY2hhcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSB0ZXh0U3RhdGUuZm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRDaHVuayA9IGVuc3VyZVRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBocyA9IGZvbnQuY2hhcnNUb0dseXBocyhjaGFycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBnbHlwaHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFdpZHRoID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQudmVydGljYWwgJiYgZ2x5cGgudm1ldHJpYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoV2lkdGggPSBnbHlwaC52bWV0cmljWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFdpZHRoID0gZ2x5cGgud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFVuaWNvZGUgPSBnbHlwaC51bmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE5vcm1hbGl6ZWRVbmljb2RlcyA9ICgwLCBfdW5pY29kZS5nZXROb3JtYWxpemVkVW5pY29kZXMpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOb3JtYWxpemVkVW5pY29kZXNbZ2x5cGhVbmljb2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhVbmljb2RlID0gTm9ybWFsaXplZFVuaWNvZGVzW2dseXBoVW5pY29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoVW5pY29kZSA9ICgwLCBfdW5pY29kZS5yZXZlcnNlSWZSdGwpKGdseXBoVW5pY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclNwYWNpbmcgPSB0ZXh0U3RhdGUuY2hhclNwYWNpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaC5pc1NwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmRTcGFjaW5nID0gdGV4dFN0YXRlLndvcmRTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJTcGFjaW5nICs9IHdvcmRTcGFjaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdvcmRTcGFjaW5nID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGYWtlU3BhY2VzKHdvcmRTcGFjaW5nLCB0ZXh0Q2h1bmsuc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdzAgPSBnbHlwaFdpZHRoICogdGV4dFN0YXRlLmZvbnRNYXRyaXhbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggPSAodzAgKiB0ZXh0U3RhdGUuZm9udFNpemUgKyBjaGFyU3BhY2luZykgKiB0ZXh0U3RhdGUudGV4dEhTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCArPSB0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHcxID0gZ2x5cGhXaWR0aCAqIHRleHRTdGF0ZS5mb250TWF0cml4WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gdzEgKiB0ZXh0U3RhdGUuZm9udFNpemUgKyBjaGFyU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgKz0gdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TWF0cml4KHR4LCB0eSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q2h1bmsuc3RyLnB1c2goZ2x5cGhVbmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENodW5rLmxhc3RBZHZhbmNlV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDaHVuay53aWR0aCArPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDaHVuay5sYXN0QWR2YW5jZUhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDaHVuay5oZWlnaHQgKz0gTWF0aC5hYnMoaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0Q2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkRmFrZVNwYWNlcyh3aWR0aCwgc3RyQnVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IHRleHRDb250ZW50SXRlbS5mYWtlU3BhY2VNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IHRleHRDb250ZW50SXRlbS5mYWtlTXVsdGlTcGFjZU1pbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWtlU3BhY2VzID0gTWF0aC5yb3VuZCh3aWR0aCAvIHRleHRDb250ZW50SXRlbS5zcGFjZVdpZHRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZmFrZVNwYWNlcy0tID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLnB1c2goJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZsdXNoVGV4dENvbnRlbnRJdGVtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Q29udGVudEl0ZW0udmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS53aWR0aCAqPSB0ZXh0Q29udGVudEl0ZW0udGV4dEFkdmFuY2VTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgKj0gdGV4dENvbnRlbnRJdGVtLnRleHRBZHZhbmNlU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcy5wdXNoKHJ1bkJpZGlUcmFuc2Zvcm0odGV4dENvbnRlbnRJdGVtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uc3RyLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZW5xdWV1ZUNodW5rKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gdGV4dENvbnRlbnQuaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUodGV4dENvbnRlbnQsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudC5pdGVtcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnQuc3R5bGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lU2xvdE1hbmFnZXIgPSBuZXcgVGltZVNsb3RNYW5hZ2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IGZ1bmN0aW9uIG5leHQocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZUNodW5rKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbcHJvbWlzZSwgc2luay5yZWFkeV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2VCb2R5KHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suZW5zdXJlTm90VGVybWluYXRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lU2xvdE1hbmFnZXIucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIShzdG9wID0gdGltZVNsb3RNYW5hZ2VyLmNoZWNrKCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJlcHJvY2Vzc29yLnJlYWQob3BlcmF0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBvcGVyYXRpb24uZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gb3BlcmF0aW9uLmFyZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWR2YW5jZSwgZGlmZjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmbiB8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGb250OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE5hbWVBcmcgPSBhcmdzWzBdLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZUFyZyA9IGFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRTdGF0ZS5mb250ICYmIGZvbnROYW1lQXJnID09PSB0ZXh0U3RhdGUuZm9udE5hbWUgJiYgZm9udFNpemVBcmcgPT09IHRleHRTdGF0ZS5mb250U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udE5hbWUgPSBmb250TmFtZUFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRTaXplID0gZm9udFNpemVBcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoaGFuZGxlU2V0Rm9udChmb250TmFtZUFyZywgbnVsbCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRUZXh0UmlzZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRSaXNlID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRIU2NhbGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50ZXh0SFNjYWxlID0gYXJnc1swXSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUubGVhZGluZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubW92ZVRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1NhbWVUZXh0TGluZSA9ICF0ZXh0U3RhdGUuZm9udCA/IGZhbHNlIDogKHRleHRTdGF0ZS5mb250LnZlcnRpY2FsID8gYXJnc1swXSA6IGFyZ3NbMV0pID09PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlID0gYXJnc1swXSAtIGFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVUZXh0SXRlbXMgJiYgaXNTYW1lVGV4dExpbmUgJiYgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkICYmIGFkdmFuY2UgPiAwICYmIGFkdmFuY2UgPD0gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gYXJnc1swXSAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLmhlaWdodCArPSBhcmdzWzFdIC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZiA9IGFyZ3NbMF0gLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VXaWR0aCAtIChhcmdzWzFdIC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMoZGlmZiwgdGV4dENvbnRlbnRJdGVtLnN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRMZWFkaW5nTW92ZVRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5sZWFkaW5nID0gLWFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLnRleHRNYXRyaXggPSB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLmNhcnJpYWdlUmV0dXJuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dE1hdHJpeDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSA9IHRleHRTdGF0ZS5jYWxjVGV4dExpbmVNYXRyaXhBZHZhbmNlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5lVGV4dEl0ZW1zICYmIGFkdmFuY2UgIT09IG51bGwgJiYgdGV4dENvbnRlbnRJdGVtLmluaXRpYWxpemVkICYmIGFkdmFuY2UudmFsdWUgPiAwICYmIGFkdmFuY2UudmFsdWUgPD0gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoYWR2YW5jZS53aWR0aCwgYWR2YW5jZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtLndpZHRoICs9IGFkdmFuY2Uud2lkdGggLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50SXRlbS5oZWlnaHQgKz0gYWR2YW5jZS5oZWlnaHQgLSB0ZXh0Q29udGVudEl0ZW0ubGFzdEFkdmFuY2VIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmID0gYWR2YW5jZS53aWR0aCAtIHRleHRDb250ZW50SXRlbS5sYXN0QWR2YW5jZVdpZHRoIC0gKGFkdmFuY2UuaGVpZ2h0IC0gdGV4dENvbnRlbnRJdGVtLmxhc3RBZHZhbmNlSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEZha2VTcGFjZXMoZGlmZiwgdGV4dENvbnRlbnRJdGVtLnN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5zZXRUZXh0TWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuc2V0VGV4dExpbmVNYXRyaXgoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSwgYXJnc1s1XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Q2hhclNwYWNpbmc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS53b3JkU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuYmVnaW5UZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudGV4dExpbmVNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zaG93U3BhY2VkVGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW1zID0gYXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBpdGVtcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1zW2pdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkVGV4dENvbnRlbnRJdGVtKGl0ZW1zW2pdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzTnVtKShpdGVtc1tqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnN1cmVUZXh0Q29udGVudEl0ZW0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHZhbmNlID0gaXRlbXNbal0gKiB0ZXh0U3RhdGUuZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmVha1RleHRSdW4gPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0U3RhdGUuZm9udC52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBhZHZhbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeCgwLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1RleHRSdW4gPSB0ZXh0Q29udGVudEl0ZW0udGV4dFJ1bkJyZWFrQWxsb3dlZCAmJiBhZHZhbmNlID4gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtUZXh0UnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0uaGVpZ2h0ICs9IG9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgPSAtYWR2YW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYWR2YW5jZSAqIHRleHRTdGF0ZS50ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUudHJhbnNsYXRlVGV4dE1hdHJpeChvZmZzZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVha1RleHRSdW4gPSB0ZXh0Q29udGVudEl0ZW0udGV4dFJ1bkJyZWFrQWxsb3dlZCAmJiBhZHZhbmNlID4gdGV4dENvbnRlbnRJdGVtLmZha2VNdWx0aVNwYWNlTWF4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYnJlYWtUZXh0UnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0Q29udGVudEl0ZW0ud2lkdGggKz0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJyZWFrVGV4dFJ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWR2YW5jZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmFrZVNwYWNlcyhhZHZhbmNlLCB0ZXh0Q29udGVudEl0ZW0uc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbShhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5uZXh0TGluZVNob3dUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuY2FycmlhZ2VSZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRUZXh0Q29udGVudEl0ZW0oYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS53b3JkU3BhY2luZyA9IGFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5jaGFyU3BhY2luZyA9IGFyZ3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTdGF0ZS5jYXJyaWFnZVJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRleHRDb250ZW50SXRlbShhcmdzWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludFhPYmplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF4b2Jqcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG9ianMgPSByZXNvdXJjZXMuZ2V0KCdYT2JqZWN0JykgfHwgX3ByaW1pdGl2ZXMuRGljdC5lbXB0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gYXJnc1swXS5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lICYmIHNraXBFbXB0eVhPYmpzW25hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZVhPYmplY3QsIHJlamVjdFhPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4b2JqID0geG9ianMuZ2V0KG5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXhvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlWE9iamVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHhvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHhvYmouZGljdC5nZXQoJ1N1YnR5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZS5uYW1lICE9PSAnRm9ybScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwRW1wdHlYT2Jqc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBzdGF0ZU1hbmFnZXIuc3RhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4T2JqU3RhdGVNYW5hZ2VyID0gbmV3IFN0YXRlTWFuYWdlcihjdXJyZW50U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeCA9IHhvYmouZGljdC5nZXRBcnJheSgnTWF0cml4Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhPYmpTdGF0ZU1hbmFnZXIudHJhbnNmb3JtKG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVDaHVuaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpbmtXcmFwcGVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVJbnZva2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlOiBmdW5jdGlvbiBlbnF1ZXVlKGNodW5rLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5xdWV1ZUludm9rZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUoY2h1bmssIHNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgZGVzaXJlZFNpemUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaW5rLmRlc2lyZWRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQgcmVhZHkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaW5rLnJlYWR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0VGV4dENvbnRlbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogeG9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrOiB0YXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlczogeG9iai5kaWN0LmdldCgnUmVzb3VyY2VzJykgfHwgcmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFuYWdlcjogeE9ialN0YXRlTWFuYWdlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBub3JtYWxpemVXaGl0ZXNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbWJpbmVUZXh0SXRlbXM6IGNvbWJpbmVUZXh0SXRlbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luazogc2lua1dyYXBwZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlblN0eWxlczogc2VlblN0eWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzaW5rV3JhcHBlci5lbnF1ZXVlSW52b2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwRW1wdHlYT2Jqc1tuYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVhPYmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdFhPYmplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhc29uIGluc3RhbmNlb2YgX3V0aWwuQWJvcnRFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxmLm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBYT2JqZWN0OiBcXFwiXCIuY29uY2F0KHJlYXNvbiwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0R1N0YXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdE5hbWUgPSBhcmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0R1N0YXRlID0gcmVzb3VyY2VzLmdldCgnRXh0R1N0YXRlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShleHRHU3RhdGUpIHx8ICEoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWN0TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdTdGF0ZSA9IGV4dEdTdGF0ZS5nZXQoZGljdE5hbWUubmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KShnU3RhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnU3RhdGVGb250ID0gZ1N0YXRlLmdldCgnRm9udCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnU3RhdGVGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U3RhdGUuZm9udE5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFN0YXRlLmZvbnRTaXplID0gZ1N0YXRlRm9udFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQoaGFuZGxlU2V0Rm9udChudWxsLCBnU3RhdGVGb250WzBdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRDb250ZW50Lml0ZW1zLmxlbmd0aCA+PSBzaW5rLmRlc2lyZWRTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dChkZWZlcnJlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbHVzaFRleHRDb250ZW50SXRlbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM4Lm9wdGlvbnMuaWdub3JlRXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRUZXh0Q29udGVudCAtIGlnbm9yaW5nIGVycm9ycyBkdXJpbmcgXFxcIlwiLmNvbmNhdCh0YXNrLm5hbWUsIFwiXFxcIiBcIikgKyBcInRhc2s6IFxcXCJcIi5jb25jYXQocmVhc29uLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoVGV4dENvbnRlbnRJdGVtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnF1ZXVlQ2h1bmsoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0RGF0YVN0cnVjdHVyZXM6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGRpY3QsIGJhc2VEaWN0LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IHRoaXMueHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9Vbmljb2RlID0gZGljdC5nZXQoJ1RvVW5pY29kZScpIHx8IGJhc2VEaWN0LmdldCgnVG9Vbmljb2RlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvVW5pY29kZVByb21pc2UgPSB0b1VuaWNvZGUgPyB0aGlzLnJlYWRUb1VuaWNvZGUodG9Vbmljb2RlKSA6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaWRTeXN0ZW1JbmZvID0gZGljdC5nZXQoJ0NJRFN5c3RlbUluZm8nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoY2lkU3lzdGVtSW5mbykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mbyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeTogKDAsIF91dGlsLnN0cmluZ1RvUERGU3RyaW5nKShjaWRTeXN0ZW1JbmZvLmdldCgnUmVnaXN0cnknKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJpbmc6ICgwLCBfdXRpbC5zdHJpbmdUb1BERlN0cmluZykoY2lkU3lzdGVtSW5mby5nZXQoJ09yZGVyaW5nJykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBsZW1lbnQ6IGNpZFN5c3RlbUluZm8uZ2V0KCdTdXBwbGVtZW50JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lkVG9HaWRNYXAgPSBkaWN0LmdldCgnQ0lEVG9HSURNYXAnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShjaWRUb0dpZE1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuY2lkVG9HaWRNYXAgPSB0aGlzLnJlYWRDaWRUb0dpZE1hcChjaWRUb0dpZE1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUVuY29kaW5nTmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3QuaGFzKCdFbmNvZGluZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gZGljdC5nZXQoJ0VuY29kaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0RpY3QpKGVuY29kaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IGVuY29kaW5nLmdldCgnQmFzZUVuY29kaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRW5jb2RpbmdOYW1lID0gKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUVuY29kaW5nTmFtZSkgPyBiYXNlRW5jb2RpbmdOYW1lLm5hbWUgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RpbmcuaGFzKCdEaWZmZXJlbmNlcycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmZFbmNvZGluZyA9IGVuY29kaW5nLmdldCgnRGlmZmVyZW5jZXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZGlmZkVuY29kaW5nLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB4cmVmLmZldGNoSWZSZWYoZGlmZkVuY29kaW5nW2pdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShkYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlc1tpbmRleCsrXSA9IGRhdGEubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgZW50cnkgaW4gJ0RpZmZlcmVuY2VzJyBhcnJheTogXCIuY29uY2F0KGRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShlbmNvZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VFbmNvZGluZ05hbWUgPSBlbmNvZGluZy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlRW5jb2RpbmdOYW1lICE9PSAnTWFjUm9tYW5FbmNvZGluZycgJiYgYmFzZUVuY29kaW5nTmFtZSAhPT0gJ01hY0V4cGVydEVuY29kaW5nJyAmJiBiYXNlRW5jb2RpbmdOYW1lICE9PSAnV2luQW5zaUVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUVuY29kaW5nTmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZUVuY29kaW5nTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShiYXNlRW5jb2RpbmdOYW1lKS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1N5bWJvbGljRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBfZm9udHMuRm9udEZsYWdzLlN5bWJvbGljKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzTm9uc3ltYm9saWNGb250ID0gISEocHJvcGVydGllcy5mbGFncyAmIF9mb250cy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy50eXBlID09PSAnVHJ1ZVR5cGUnICYmICFpc05vbnN5bWJvbGljRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLldpbkFuc2lFbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1N5bWJvbGljRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLk1hY1JvbWFuRW5jb2Rpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy5maWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC9TeW1ib2wvaS50ZXN0KHByb3BlcnRpZXMubmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBfZW5jb2RpbmdzLlN5bWJvbFNldEVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoL0RpbmdiYXRzL2kudGVzdChwcm9wZXJ0aWVzLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gX2VuY29kaW5ncy5aYXBmRGluZ2JhdHNFbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGlmZmVyZW5jZXMgPSBkaWZmZXJlbmNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUgPSBiYXNlRW5jb2RpbmdOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuaGFzRW5jb2RpbmcgPSAhIWJhc2VFbmNvZGluZ05hbWUgfHwgZGlmZmVyZW5jZXMubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1VuaWNvZGVQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHRvVW5pY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnRvVW5pY29kZSA9IHRvVW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzOS5idWlsZFRvVW5pY29kZShwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh0b1VuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy50b1VuaWNvZGUgPSB0b1VuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGU6IGZ1bmN0aW9uIF9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCFwcm9wZXJ0aWVzLmNvbXBvc2l0ZSwgJ011c3QgYmUgYSBzaW1wbGUgZm9udC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9Vbmljb2RlID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUVuY29kaW5nTmFtZSA9IHByb3BlcnRpZXMuYmFzZUVuY29kaW5nTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyY29kZSBpbiBkaWZmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWUgPSBkaWZmZXJlbmNlc1tjaGFyY29kZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoTmFtZSA9PT0gJy5ub3RkZWYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nW2NoYXJjb2RlXSA9IGdseXBoTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoYXJjb2RlIGluIGVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZSA9IGVuY29kaW5nW2NoYXJjb2RlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhOYW1lID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChnbHlwaE5hbWVbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdHJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoTmFtZS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBwYXJzZUludChnbHlwaE5hbWUuc3Vic3RyaW5nKDEpLCAxNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhOYW1lLmxlbmd0aCA9PT0gNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHBhcnNlSW50KGdseXBoTmFtZS5zdWJzdHJpbmcoMSksIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaE5hbWUubGVuZ3RoID49IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSArZ2x5cGhOYW1lLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlRW5jb2RpbmdOYW1lICYmIGNvZGUgPT09ICtjaGFyY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUVuY29kaW5nID0gKDAsIF9lbmNvZGluZ3MuZ2V0RW5jb2RpbmcpKGJhc2VFbmNvZGluZ05hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlRW5jb2RpbmcgJiYgKGdseXBoTmFtZSA9IGJhc2VFbmNvZGluZ1tjaGFyY29kZV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZShnbHlwaHNVbmljb2RlTWFwW2dseXBoTmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Vbmljb2RlW2NoYXJjb2RlXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZ2x5cGhzVW5pY29kZU1hcFtnbHlwaE5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Ub1VuaWNvZGVNYXAodG9Vbmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZFRvVW5pY29kZTogZnVuY3Rpb24gYnVpbGRUb1VuaWNvZGUocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAgPSAhIXByb3BlcnRpZXMudG9Vbmljb2RlICYmIHByb3BlcnRpZXMudG9Vbmljb2RlLmxlbmd0aCA+IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMuY29tcG9zaXRlICYmIHByb3BlcnRpZXMuaGFzRW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUgPSB0aGlzLl9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGUocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb3BlcnRpZXMudG9Vbmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3BlcnRpZXMuY29tcG9zaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYnVpbGRTaW1wbGVGb250VG9Vbmljb2RlKHByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5jb21wb3NpdGUgJiYgKHByb3BlcnRpZXMuY01hcC5idWlsdEluQ01hcCAmJiAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLnJlZ2lzdHJ5ID09PSAnQWRvYmUnICYmIChwcm9wZXJ0aWVzLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcgPT09ICdHQjEnIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gJ0NOUzEnIHx8IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5vcmRlcmluZyA9PT0gJ0phcGFuMScgfHwgcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nID09PSAnS29yZWExJykpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWdpc3RyeSA9IHByb3BlcnRpZXMuY2lkU3lzdGVtSW5mby5yZWdpc3RyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyaW5nID0gcHJvcGVydGllcy5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1Y3MyQ01hcE5hbWUgPSBfcHJpbWl0aXZlcy5OYW1lLmdldChyZWdpc3RyeSArICctJyArIG9yZGVyaW5nICsgJy1VQ1MyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogdWNzMkNNYXBOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh1Y3MyQ01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNNYXAgPSBwcm9wZXJ0aWVzLmNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9Vbmljb2RlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLmZvckVhY2goZnVuY3Rpb24gKGNoYXJjb2RlLCBjaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2lkID4gMHhmZmZmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1Y3MyID0gdWNzMkNNYXAubG9va3VwKGNpZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodWNzMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhcmNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSgodWNzMi5jaGFyQ29kZUF0KDApIDw8IDgpICsgdWNzMi5jaGFyQ29kZUF0KDEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLlRvVW5pY29kZU1hcCh0b1VuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBfZm9udHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAocHJvcGVydGllcy5maXJzdENoYXIsIHByb3BlcnRpZXMubGFzdENoYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkVG9Vbmljb2RlOiBmdW5jdGlvbiBQYXJ0aWFsRXZhbHVhdG9yX3JlYWRUb1VuaWNvZGUodG9Vbmljb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtYXBPYmogPSB0b1VuaWNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoY21hcE9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogY21hcE9iaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoQnVpbHRJbkNNYXA6IHRoaXMuZmV0Y2hCdWlsdEluQ01hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNNYXA6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoY21hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtYXAgaW5zdGFuY2VvZiBfY21hcC5JZGVudGl0eUNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5JZGVudGl0eVRvVW5pY29kZU1hcCgwLCAweEZGRkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Ub1VuaWNvZGVNYXAoY21hcC5nZXRNYXAoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShjbWFwT2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NtYXAuQ01hcEZhY3RvcnkuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBjbWFwT2JqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmV0Y2hCdWlsdEluQ01hcDogdGhpcy5mZXRjaEJ1aWx0SW5DTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlQ01hcDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChjbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX2ZvbnRzLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsIDB4RkZGRik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBuZXcgQXJyYXkoY21hcC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21hcC5mb3JFYWNoKGZ1bmN0aW9uIChjaGFyQ29kZSwgdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHRva2VuLmxlbmd0aDsgayArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3MSA9IHRva2VuLmNoYXJDb2RlQXQoaykgPDwgOCB8IHRva2VuLmNoYXJDb2RlQXQoayArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodzEgJiAweEY4MDApICE9PSAweEQ4MDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ci5wdXNoKHcxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdzIgPSB0b2tlbi5jaGFyQ29kZUF0KGspIDw8IDggfCB0b2tlbi5jaGFyQ29kZUF0KGsgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLnB1c2goKCh3MSAmIDB4M2ZmKSA8PCAxMCkgKyAodzIgJiAweDNmZikgKyAweDEwMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbY2hhckNvZGVdID0gU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkoU3RyaW5nLCBzdHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Ub1VuaWNvZGVNYXAobWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2lkVG9HaWRNYXA6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfcmVhZENpZFRvR2lkTWFwKGNpZFRvR2lkU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoc0RhdGEgPSBjaWRUb0dpZFN0cmVhbS5nZXRCeXRlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGdseXBoc0RhdGEubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhJRCA9IGdseXBoc0RhdGFbaisrXSA8PCA4IHwgZ2x5cGhzRGF0YVtqXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJRCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGogPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2NvZGVdID0gZ2x5cGhJRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RXaWR0aHM6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfZXh0cmFjdFdpZHRocyhkaWN0LCBkZXNjcmlwdG9yLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSB0aGlzLnhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoc1dpZHRocyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0V2lkdGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNWTWV0cmljcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0Vk1ldHJpY3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpLCBqLCBqaiwgc3RhcnQsIGNvZGUsIHdpZHRocztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGggPSBkaWN0LmhhcygnRFcnKSA/IGRpY3QuZ2V0KCdEVycpIDogMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzID0gZGljdC5nZXQoJ1cnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHdpZHRocy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzW2ldKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNXaWR0aHNbc3RhcnQrK10gPSB4cmVmLmZldGNoSWZSZWYoY29kZVtqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSB4cmVmLmZldGNoSWZSZWYod2lkdGhzWysraV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzV2lkdGhzW2pdID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZtZXRyaWNzID0gZGljdC5nZXRBcnJheSgnRFcyJykgfHwgWzg4MCwgLTEwMDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZNZXRyaWNzID0gW3ZtZXRyaWNzWzFdLCBkZWZhdWx0V2lkdGggKiAwLjUsIHZtZXRyaWNzWzBdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtZXRyaWNzID0gZGljdC5nZXQoJ1cyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2bWV0cmljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gdm1ldHJpY3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpKytdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1tpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29kZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzVk1ldHJpY3Nbc3RhcnQrK10gPSBbeHJlZi5mZXRjaElmUmVmKGNvZGVbaisrXSksIHhyZWYuZmV0Y2hJZlJlZihjb2RlW2orK10pLCB4cmVmLmZldGNoSWZSZWYoY29kZVtqXSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZtZXRyaWMgPSBbeHJlZi5mZXRjaElmUmVmKHZtZXRyaWNzWysraV0pLCB4cmVmLmZldGNoSWZSZWYodm1ldHJpY3NbKytpXSksIHhyZWYuZmV0Y2hJZlJlZih2bWV0cmljc1srK2ldKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGNvZGU7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoc1ZNZXRyaWNzW2pdID0gdm1ldHJpYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdENoYXIgPSBwcm9wZXJ0aWVzLmZpcnN0Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzID0gZGljdC5nZXQoJ1dpZHRocycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBmaXJzdENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gd2lkdGhzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNXaWR0aHNbaisrXSA9IHhyZWYuZmV0Y2hJZlJlZih3aWR0aHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGggPSBwYXJzZUZsb2F0KGRlc2NyaXB0b3IuZ2V0KCdNaXNzaW5nV2lkdGgnKSkgfHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlRm9udE5hbWUgPSBkaWN0LmdldCgnQmFzZUZvbnQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGJhc2VGb250TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWV0cmljcyA9IHRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKGJhc2VGb250TmFtZS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNXaWR0aHMgPSB0aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKG1ldHJpY3Mud2lkdGhzLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGggPSBtZXRyaWNzLmRlZmF1bHRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc01vbm9zcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0V2lkdGggPSBkZWZhdWx0V2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoV2lkdGggPSBnbHlwaHNXaWR0aHNbZ2x5cGhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2x5cGhXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0V2lkdGggPSBnbHlwaFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RXaWR0aCAhPT0gZ2x5cGhXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNb25vc3BhY2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTW9ub3NwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZmxhZ3MgfD0gX2ZvbnRzLkZvbnRGbGFncy5GaXhlZFBpdGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGVmYXVsdFdpZHRoID0gZGVmYXVsdFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMud2lkdGhzID0gZ2x5cGhzV2lkdGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGVmYXVsdFZNZXRyaWNzID0gZGVmYXVsdFZNZXRyaWNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudm1ldHJpY3MgPSBnbHlwaHNWTWV0cmljcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlcmlmRm9udDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9pc1NlcmlmRm9udChiYXNlRm9udE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE5hbWVXb1N0eWxlID0gYmFzZUZvbnROYW1lLnNwbGl0KCctJylbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnROYW1lV29TdHlsZSBpbiAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFNlcmlmRm9udHMpKCkgfHwgZm9udE5hbWVXb1N0eWxlLnNlYXJjaCgvc2VyaWYvZ2kpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRCYXNlRm9udE1ldHJpY3M6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfZ2V0QmFzZUZvbnRNZXRyaWNzKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVmYXVsdFdpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vbm9zcGFjZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGRGb250TWFwID0gKDAsIF9zdGFuZGFyZF9mb250cy5nZXRTdGRGb250TWFwKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXBOYW1lID0gc3RkRm9udE1hcFtuYW1lXSB8fCBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNZXRyaWNzID0gKDAsIF9tZXRyaWNzLmdldE1ldHJpY3MpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShsb29rdXBOYW1lIGluIE1ldHJpY3MpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU2VyaWZGb250KG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBOYW1lID0gJ1RpbWVzLVJvbWFuJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cE5hbWUgPSAnSGVsdmV0aWNhJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFdpZHRocyA9IE1ldHJpY3NbbG9va3VwTmFtZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaFdpZHRocykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdpZHRoID0gZ2x5cGhXaWR0aHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vbm9zcGFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzID0gZ2x5cGhXaWR0aHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V2lkdGg6IGRlZmF1bHRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9ub3NwYWNlOiBtb25vc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoczogd2lkdGhzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBidWlsZENoYXJDb2RlVG9XaWR0aDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl9idWxpbGRDaGFyQ29kZVRvV2lkdGgod2lkdGhzQnlHbHlwaE5hbWUsIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGluZyA9IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IDI1NjsgY2hhckNvZGUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMgJiYgd2lkdGhzQnlHbHlwaE5hbWVbZGlmZmVyZW5jZXNbY2hhckNvZGVdXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhzW2NoYXJDb2RlXSA9IHdpZHRoc0J5R2x5cGhOYW1lW2RpZmZlcmVuY2VzW2NoYXJDb2RlXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyQ29kZSBpbiBlbmNvZGluZyAmJiB3aWR0aHNCeUdseXBoTmFtZVtlbmNvZGluZ1tjaGFyQ29kZV1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHNbY2hhckNvZGVdID0gd2lkdGhzQnlHbHlwaE5hbWVbZW5jb2RpbmdbY2hhckNvZGVdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpZHRocztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmVFdmFsdWF0ZUZvbnQ6IGZ1bmN0aW9uIFBhcnRpYWxFdmFsdWF0b3JfcHJlRXZhbHVhdGVGb250KGRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZURpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZGljdC5nZXQoJ1N1YnR5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdpbnZhbGlkIGZvbnQgU3VidHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb3NpdGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWludDhhcnJheTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlLm5hbWUgPT09ICdUeXBlMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRmID0gZGljdC5nZXQoJ0Rlc2NlbmRhbnRGb250cycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignRGVzY2VuZGFudCBmb250cyBhcmUgbm90IHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IEFycmF5LmlzQXJyYXkoZGYpID8gdGhpcy54cmVmLmZldGNoSWZSZWYoZGZbMF0pIDogZGY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBkaWN0LmdldCgnU3VidHlwZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignaW52YWxpZCBmb250IFN1YnR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBkaWN0LmdldCgnRm9udERlc2NyaXB0b3InKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNoID0gbmV3IF9tdXJtdXJoYXNoLk11cm11ckhhc2gzXzY0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGluZyA9IGJhc2VEaWN0LmdldFJhdygnRW5jb2RpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZShlbmNvZGluZy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNSZWYpKGVuY29kaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaC51cGRhdGUoZW5jb2RpbmcudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzRGljdCkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGVuY29kaW5nLmdldEtleXMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0ga2V5cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gZW5jb2RpbmcuZ2V0UmF3KGtleXNbaV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGVudHJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZShlbnRyeS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1JlZikoZW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2gudXBkYXRlKGVudHJ5LnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShlbnRyeSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmZMZW5ndGggPSBlbnRyeS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmQnVmID0gbmV3IEFycmF5KGRpZmZMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGlmZkxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZkVudHJ5ID0gZW50cnlbal07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkJ1ZltqXSA9IGRpZmZFbnRyeS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNOdW0pKGRpZmZFbnRyeSkgfHwgKDAsIF9wcmltaXRpdmVzLmlzUmVmKShkaWZmRW50cnkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZkJ1ZltqXSA9IGRpZmZFbnRyeS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaC51cGRhdGUoZGlmZkJ1Zi5qb2luKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1VuaWNvZGUgPSBkaWN0LmdldCgnVG9Vbmljb2RlJykgfHwgYmFzZURpY3QuZ2V0KCdUb1VuaWNvZGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKSh0b1VuaWNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdG9Vbmljb2RlLnN0ciB8fCB0b1VuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OGFycmF5ID0gc3RyZWFtLmJ1ZmZlciA/IG5ldyBVaW50OEFycmF5KHN0cmVhbS5idWZmZXIuYnVmZmVyLCAwLCBzdHJlYW0uYnVmZmVyTGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KHN0cmVhbS5ieXRlcy5idWZmZXIsIHN0cmVhbS5zdGFydCwgc3RyZWFtLmVuZCAtIHN0cmVhbS5zdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZSh1aW50OGFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKSh0b1VuaWNvZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZSh0b1VuaWNvZGUubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhzID0gZGljdC5nZXQoJ1dpZHRocycpIHx8IGJhc2VEaWN0LmdldCgnV2lkdGhzJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhhcnJheSA9IG5ldyBVaW50OEFycmF5KG5ldyBVaW50MzJBcnJheSh3aWR0aHMpLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoLnVwZGF0ZSh1aW50OGFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3Q6IGRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VEaWN0OiBiYXNlRGljdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlOiBjb21wb3NpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaDogaGFzaCA/IGhhc2guaGV4ZGlnZXN0KCkgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlRm9udDogZnVuY3Rpb24gUGFydGlhbEV2YWx1YXRvcl90cmFuc2xhdGVGb250KHByZUV2YWx1YXRlZEZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZURpY3QgPSBwcmVFdmFsdWF0ZWRGb250LmJhc2VEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gcHJlRXZhbHVhdGVkRm9udC5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb3NpdGUgPSBwcmVFdmFsdWF0ZWRGb250LmNvbXBvc2l0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByZUV2YWx1YXRlZEZvbnQuZGVzY3JpcHRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHByZUV2YWx1YXRlZEZvbnQudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4Q2hhckluZGV4ID0gY29tcG9zaXRlID8gMHhGRkZGIDogMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ1R5cGUzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvciA9IG5ldyBfcHJpbWl0aXZlcy5EaWN0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQoJ0ZvbnROYW1lJywgX3ByaW1pdGl2ZXMuTmFtZS5nZXQodHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQoJ0ZvbnRCQm94JywgZGljdC5nZXRBcnJheSgnRm9udEJCb3gnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUZvbnROYW1lID0gZGljdC5nZXQoJ0Jhc2VGb250Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoYmFzZUZvbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignQmFzZSBmb250IGlzIG5vdCBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvbnROYW1lID0gYmFzZUZvbnROYW1lLm5hbWUucmVwbGFjZSgvWyxfXS9nLCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldHJpY3MgPSB0aGlzLmdldEJhc2VGb250TWV0cmljcyhiYXNlRm9udE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnROYW1lV29TdHlsZSA9IGJhc2VGb250TmFtZS5zcGxpdCgnLScpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWdzID0gKHRoaXMuaXNTZXJpZkZvbnQoZm9udE5hbWVXb1N0eWxlKSA/IF9mb250cy5Gb250RmxhZ3MuU2VyaWYgOiAwKSB8IChtZXRyaWNzLm1vbm9zcGFjZSA/IF9mb250cy5Gb250RmxhZ3MuRml4ZWRQaXRjaCA6IDApIHwgKCgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3ltYm9sc0ZvbnRzKSgpW2ZvbnROYW1lV29TdHlsZV0gPyBfZm9udHMuRm9udEZsYWdzLlN5bWJvbGljIDogX2ZvbnRzLkZvbnRGbGFncy5Ob25zeW1ib2xpYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogYmFzZUZvbnROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoczogbWV0cmljcy53aWR0aHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdpZHRoOiBtZXRyaWNzLmRlZmF1bHRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGFyOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyOiBtYXhDaGFySW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoZGljdCwgZGljdCwgcHJvcGVydGllcykudGhlbihmdW5jdGlvbiAocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMud2lkdGhzID0gX3RoaXMxMC5idWlsZENoYXJDb2RlVG9XaWR0aChtZXRyaWNzLndpZHRocywgcHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfZm9udHMuRm9udChiYXNlRm9udE5hbWUsIG51bGwsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RDaGFyID0gZGljdC5nZXQoJ0ZpcnN0Q2hhcicpIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RDaGFyID0gZGljdC5nZXQoJ0xhc3RDaGFyJykgfHwgbWF4Q2hhckluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250TmFtZSA9IGRlc2NyaXB0b3IuZ2V0KCdGb250TmFtZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlRm9udCA9IGRpY3QuZ2V0KCdCYXNlRm9udCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoZm9udE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnROYW1lID0gX3ByaW1pdGl2ZXMuTmFtZS5nZXQoZm9udE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNTdHJpbmcpKGJhc2VGb250KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlRm9udCA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KGJhc2VGb250KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSAhPT0gJ1R5cGUzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE5hbWVTdHIgPSBmb250TmFtZSAmJiBmb250TmFtZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUZvbnRTdHIgPSBiYXNlRm9udCAmJiBiYXNlRm9udC5uYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250TmFtZVN0ciAhPT0gYmFzZUZvbnRTdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKShcIlRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzIFxcXCJcIi5jb25jYXQoZm9udE5hbWVTdHIsIFwiXFxcIiBidXQgXCIpICsgXCJzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIEZvbnQncyBCYXNlRm9udCBcXFwiXCIuY29uY2F0KGJhc2VGb250U3RyLCBcIlxcXCIuXCIpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnROYW1lU3RyICYmIGJhc2VGb250U3RyICYmIGJhc2VGb250U3RyLnN0YXJ0c1dpdGgoZm9udE5hbWVTdHIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udE5hbWUgPSBiYXNlRm9udDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnROYW1lID0gZm9udE5hbWUgfHwgYmFzZUZvbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGZvbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ2ludmFsaWQgZm9udCBuYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRGaWxlID0gZGVzY3JpcHRvci5nZXQoJ0ZvbnRGaWxlJywgJ0ZvbnRGaWxlMicsICdGb250RmlsZTMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250RmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udEZpbGUuZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnR5cGUgPSBmb250RmlsZS5kaWN0LmdldCgnU3VidHlwZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VidHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUgPSBzdWJ0eXBlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgxID0gZm9udEZpbGUuZGljdC5nZXQoJ0xlbmd0aDEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgyID0gZm9udEZpbGUuZGljdC5nZXQoJ0xlbmd0aDInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgzID0gZm9udEZpbGUuZGljdC5nZXQoJ0xlbmd0aDMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZvbnROYW1lLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGU6IHN1YnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGZvbnRGaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgxOiBsZW5ndGgxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgyOiBsZW5ndGgyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgzOiBsZW5ndGgzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWROYW1lOiBiYXNlRGljdC5sb2FkZWROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGU6IGNvbXBvc2l0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkZUNoYXJzOiBjb21wb3NpdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeGVkUGl0Y2g6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250TWF0cml4OiBkaWN0LmdldEFycmF5KCdGb250TWF0cml4JykgfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hhcjogZmlyc3RDaGFyIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyOiBsYXN0Q2hhciB8fCBtYXhDaGFySW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJib3g6IGRlc2NyaXB0b3IuZ2V0QXJyYXkoJ0ZvbnRCQm94JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VudDogZGVzY3JpcHRvci5nZXQoJ0FzY2VudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjZW50OiBkZXNjcmlwdG9yLmdldCgnRGVzY2VudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4SGVpZ2h0OiBkZXNjcmlwdG9yLmdldCgnWEhlaWdodCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBIZWlnaHQ6IGRlc2NyaXB0b3IuZ2V0KCdDYXBIZWlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M6IGRlc2NyaXB0b3IuZ2V0KCdGbGFncycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGFsaWNBbmdsZTogZGVzY3JpcHRvci5nZXQoJ0l0YWxpY0FuZ2xlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVHlwZTNGb250OiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNNYXBQcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lkRW5jb2RpbmcgPSBiYXNlRGljdC5nZXQoJ0VuY29kaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKGNpZEVuY29kaW5nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5jaWRFbmNvZGluZyA9IGNpZEVuY29kaW5nLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwUHJvbWlzZSA9IF9jbWFwLkNNYXBGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogY2lkRW5jb2RpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaEJ1aWx0SW5DTWFwOiB0aGlzLmZldGNoQnVpbHRJbkNNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VDTWFwOiBudWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuY01hcCA9IGNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnZlcnRpY2FsID0gcHJvcGVydGllcy5jTWFwLnZlcnRpY2FsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjTWFwUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMTAuZXh0cmFjdERhdGFTdHJ1Y3R1cmVzKGRpY3QsIGJhc2VEaWN0LCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTAuZXh0cmFjdFdpZHRocyhkaWN0LCBkZXNjcmlwdG9yLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gJ1R5cGUzJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5pc1R5cGUzRm9udCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9mb250cy5Gb250KGZvbnROYW1lLm5hbWUsIGZvbnRGaWxlLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzID0gZnVuY3Rpb24gKGZvbnQsIGdseXBocywgaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRQYXRoKGZvbnRDaGFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQucmVuZGVyZXIuaGFzQnVpbHRQYXRoKGZvbnRDaGFyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdjb21tb25vYmonLCBbXCJcIi5jb25jYXQoZm9udC5sb2FkZWROYW1lLCBcIl9wYXRoX1wiKS5jb25jYXQoZm9udENoYXIpLCAnRm9udFBhdGgnLCBmb250LnJlbmRlcmVyLmdldFBhdGhKcyhmb250Q2hhcildKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kaWRJdGVyYXRvckVycm9yID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yID0gZ2x5cGhzW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSBfc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXRoKGdseXBoLmZvbnRDaGFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VudCA9IGdseXBoLmFjY2VudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWNjZW50ICYmIGFjY2VudC5mb250Q2hhcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRQYXRoKGFjY2VudC5mb250Q2hhcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiAmJiBfaXRlcmF0b3IucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZGlkSXRlcmF0b3JFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnRpYWxFdmFsdWF0b3I7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXJ0aWFsRXZhbHVhdG9yID0gUGFydGlhbEV2YWx1YXRvcjtcblxuICAgICAgICAgICAgICAgIHZhciBUcmFuc2xhdGVkRm9udCA9IGZ1bmN0aW9uIFRyYW5zbGF0ZWRGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNsYXRlZEZvbnQobG9hZGVkTmFtZSwgZm9udCwgZGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWROYW1lID0gbG9hZGVkTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udCA9IGZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3QgPSBkaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlM0xvYWRlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRGb250LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQ6IGZ1bmN0aW9uIHNlbmQoaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci5zZW5kKCdjb21tb25vYmonLCBbdGhpcy5sb2FkZWROYW1lLCAnRm9udCcsIHRoaXMuZm9udC5leHBvcnREYXRhKCldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFjazogZnVuY3Rpb24gZmFsbGJhY2soaGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb250LmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udC5kaXNhYmxlRm9udEZhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHMgPSB0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCwgZ2x5cGhzLCBoYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkVHlwZTNEYXRhOiBmdW5jdGlvbiBsb2FkVHlwZTNEYXRhKGV2YWx1YXRvciwgcmVzb3VyY2VzLCBwYXJlbnRPcGVyYXRvckxpc3QsIHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ011c3QgYmUgYSBUeXBlMyBmb250LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnR5cGUzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnR5cGUzTG9hZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlM09wdGlvbnMgPSBPYmplY3QuY3JlYXRlKGV2YWx1YXRvci5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlM09wdGlvbnMuaWdub3JlRXJyb3JzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUzRXZhbHVhdG9yID0gZXZhbHVhdG9yLmNsb25lKHR5cGUzT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zbGF0ZWRGb250ID0gdGhpcy5mb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkQ2hhclByb2NzUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyUHJvY3MgPSB0aGlzLmRpY3QuZ2V0KCdDaGFyUHJvY3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFJlc291cmNlcyA9IHRoaXMuZGljdC5nZXQoJ1Jlc291cmNlcycpIHx8IHJlc291cmNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclByb2NLZXlzID0gY2hhclByb2NzLmdldEtleXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclByb2NPcGVyYXRvckxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9sb29wMiA9IGZ1bmN0aW9uIF9sb29wMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGNoYXJQcm9jS2V5c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZENoYXJQcm9jc1Byb21pc2UgPSBsb2FkQ2hhclByb2NzUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFN0cmVhbSA9IGNoYXJQcm9jcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTNFdmFsdWF0b3IuZ2V0T3BlcmF0b3JMaXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06IGdseXBoU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s6IHRhc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBmb250UmVzb3VyY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogb3BlcmF0b3JMaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyUHJvY09wZXJhdG9yTGlzdFtrZXldID0gb3BlcmF0b3JMaXN0LmdldElSKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50T3BlcmF0b3JMaXN0LmFkZERlcGVuZGVuY2llcyhvcGVyYXRvckxpc3QuZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUeXBlMyBmb250IHJlc291cmNlIFxcXCJcIi5jb25jYXQoa2V5LCBcIlxcXCIgaXMgbm90IGF2YWlsYWJsZS5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvckxpc3QgPSBuZXcgX29wZXJhdG9yX2xpc3QuT3BlcmF0b3JMaXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclByb2NPcGVyYXRvckxpc3Rba2V5XSA9IG9wZXJhdG9yTGlzdC5nZXRJUigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGNoYXJQcm9jS2V5cy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2xvb3AyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlM0xvYWRlZCA9IGxvYWRDaGFyUHJvY3NQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkRm9udC5jaGFyUHJvY09wZXJhdG9yTGlzdCA9IGNoYXJQcm9jT3BlcmF0b3JMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnR5cGUzTG9hZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNsYXRlZEZvbnQ7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFN0YXRlTWFuYWdlciA9IGZ1bmN0aW9uIFN0YXRlTWFuYWdlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN0YXRlTWFuYWdlcihpbml0aWFsU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFN0YXRlTWFuYWdlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzYXZlOiBmdW5jdGlvbiBzYXZlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGQgPSB0aGlzLnN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBvbGQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN0b3JlOiBmdW5jdGlvbiByZXN0b3JlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gdGhpcy5zdGF0ZVN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHByZXY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogZnVuY3Rpb24gdHJhbnNmb3JtKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLmN0bSA9IF91dGlsLlV0aWwudHJhbnNmb3JtKHRoaXMuc3RhdGUuY3RtLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YXRlTWFuYWdlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgVGV4dFN0YXRlID0gZnVuY3Rpb24gVGV4dFN0YXRlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVGV4dFN0YXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdG0gPSBuZXcgRmxvYXQzMkFycmF5KF91dGlsLklERU5USVRZX01BVFJJWCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnROYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udE1hdHJpeCA9IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRMaW5lTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJTcGFjaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud29yZFNwYWNpbmcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dEhTY2FsZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRleHRTdGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUZXh0TWF0cml4OiBmdW5jdGlvbiBUZXh0U3RhdGVfc2V0VGV4dE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLnRleHRNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVswXSA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsxXSA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsyXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVszXSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs0XSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs1XSA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dExpbmVNYXRyaXg6IGZ1bmN0aW9uIFRleHRTdGF0ZV9zZXRUZXh0TWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVswXSA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsxXSA9IGI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsyXSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVszXSA9IGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs0XSA9IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs1XSA9IGY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlVGV4dE1hdHJpeDogZnVuY3Rpb24gVGV4dFN0YXRlX3RyYW5zbGF0ZVRleHRNYXRyaXgoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gdGhpcy50ZXh0TWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bNF0gPSBtWzBdICogeCArIG1bMl0gKiB5ICsgbVs0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtWzVdID0gbVsxXSAqIHggKyBtWzNdICogeSArIG1bNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlVGV4dExpbmVNYXRyaXg6IGZ1bmN0aW9uIFRleHRTdGF0ZV90cmFuc2xhdGVUZXh0TWF0cml4KHgsIHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHRoaXMudGV4dExpbmVNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs0XSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxjVGV4dExpbmVNYXRyaXhBZHZhbmNlOiBmdW5jdGlvbiBUZXh0U3RhdGVfY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZShhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSB0aGlzLmZvbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLnRleHRMaW5lTWF0cml4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoYSA9PT0gbVswXSAmJiBiID09PSBtWzFdICYmIGMgPT09IG1bMl0gJiYgZCA9PT0gbVszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR4RGlmZiA9IGUgLSBtWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eURpZmYgPSBmIC0gbVs1XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250LnZlcnRpY2FsICYmIHR4RGlmZiAhPT0gMCB8fCAhZm9udC52ZXJ0aWNhbCAmJiB0eURpZmYgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3IgPSBhICogZCAtIGIgKiBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnQudmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggPSAtdHlEaWZmICogYyAvIGRlbm9taW5hdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IHR5RGlmZiAqIGEgLyBkZW5vbWluYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCA9IHR4RGlmZiAqIGQgLyBkZW5vbWluYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgPSAtdHhEaWZmICogYiAvIGRlbm9taW5hdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0eCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZvbnQudmVydGljYWwgPyB0eSA6IHR4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxjUmVuZGVyTWF0cml4OiBmdW5jdGlvbiBUZXh0U3RhdGVfY2FsY1JlbmRlTWF0cml4KGN0bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0c20gPSBbdGhpcy5mb250U2l6ZSAqIHRoaXMudGV4dEhTY2FsZSwgMCwgMCwgdGhpcy5mb250U2l6ZSwgMCwgdGhpcy50ZXh0UmlzZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF91dGlsLlV0aWwudHJhbnNmb3JtKGN0bSwgX3V0aWwuVXRpbC50cmFuc2Zvcm0odGhpcy50ZXh0TWF0cml4LCB0c20pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXJyaWFnZVJldHVybjogZnVuY3Rpb24gVGV4dFN0YXRlX2NhcnJpYWdlUmV0dXJuKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoMCwgLXRoaXMubGVhZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb25lOiBmdW5jdGlvbiBUZXh0U3RhdGVfY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsb25lID0gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS50ZXh0TWF0cml4ID0gdGhpcy50ZXh0TWF0cml4LnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUudGV4dExpbmVNYXRyaXggPSB0aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmUuZm9udE1hdHJpeCA9IHRoaXMuZm9udE1hdHJpeC5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9uZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRXZhbFN0YXRlID0gZnVuY3Rpb24gRXZhbFN0YXRlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXZhbFN0YXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdG0gPSBuZXcgRmxvYXQzMkFycmF5KF91dGlsLklERU5USVRZX01BVFJJWCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0UmVuZGVyaW5nTW9kZSA9IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxDb2xvclNwYWNlID0gX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cm9rZUNvbG9yU3BhY2UgPSBfY29sb3JzcGFjZS5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEV2YWxTdGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZTogZnVuY3Rpb24gQ2FudmFzRXh0cmFTdGF0ZV9jbG9uZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV2YWxTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRXZhbHVhdG9yUHJlcHJvY2Vzc29yID0gZnVuY3Rpb24gRXZhbHVhdG9yUHJlcHJvY2Vzc29yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGdldE9QTWFwID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3cnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydKJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRMaW5lQ2FwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2onXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldExpbmVKb2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ00nXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldE1pdGVyTGltaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RGFzaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyaSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2knXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZsYXRuZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dzJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRHU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2F2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydRJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5yZXN0b3JlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NtJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy50cmFuc2Zvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMubW92ZVRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2wnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmxpbmVUbyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5jdXJ2ZVRvLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3YnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3knXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmN1cnZlVG8zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2gnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmNsb3NlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyZSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMucmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1MnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnN0cm9rZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZVN0cm9rZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5maWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0YnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmZpbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZionXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmVvRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5maWxsU3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0IqJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5lb0ZpbGxTdHJva2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuY2xvc2VGaWxsU3Ryb2tlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2IqJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1cnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmNsaXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyonXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmVvQ2xpcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCVCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5UZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VUJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5lbmRUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RjJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRDaGFyU3BhY2luZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUdyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0V29yZFNwYWNpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVHonXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldEhTY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUTCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGVhZGluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUZiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0Rm9udCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUciddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVHMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldFRleHRSaXNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RkJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5tb3ZlVGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydURCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0TGVhZGluZ01vdmVUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RtJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRUZXh0TWF0cml4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1QqJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5uZXh0TGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUaiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2hvd1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVEonXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNob3dTcGFjZWRUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1xcJyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMubmV4dExpbmVTaG93VGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydcIiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZDAnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldENoYXJXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkMSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0Q2hhcldpZHRoQW5kQm91bmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NTJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRTdHJva2VDb2xvclNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NzJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTQyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTQ04nXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUNvbG9yTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAzMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzYyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NuJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsQ29sb3JOLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDMzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0cnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZUdyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0RmlsbEdyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUkcnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JnJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuc2V0U3Ryb2tlQ01ZS0NvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2snXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNldEZpbGxDTVlLQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2gnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnNoYWRpbmdGaWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0JJJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbklubGluZUltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lEJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5iZWdpbkltYWdlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFSSddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuZW5kSW5saW5lSW1hZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRG8nXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLnBhaW50WE9iamVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydNUCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMubWFya1BvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0RQJ10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IF91dGlsLk9QUy5tYXJrUG9pbnRQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCTUMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCREMnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUFyZ3M6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVBcmdzOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VNQyddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuZW5kTWFya2VkQ29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCWCddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBfdXRpbC5PUFMuYmVnaW5Db21wYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJnczogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZUFyZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRVgnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogX3V0aWwuT1BTLmVuZENvbXBhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1BcmdzOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXJnczogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCTSddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0JEJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHJ1ZSddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZhJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmFsJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmFscyddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZhbHNlJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnUnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudWwnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudWxsJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9JTlZBTElEX1BBVEhfT1BTID0gMjA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXZhbHVhdG9yUHJlcHJvY2Vzc29yKHN0cmVhbSwgeHJlZiwgc3RhdGVNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wTWFwID0gZ2V0T1BNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VyID0gbmV3IF9wYXJzZXIuUGFyc2VyKG5ldyBfcGFyc2VyLkxleGVyKHN0cmVhbSwgdGhpcy5vcE1hcCksIGZhbHNlLCB4cmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyID0gc3RhdGVNYW5hZ2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub25Qcm9jZXNzZWRBcmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBFdmFsdWF0b3JQcmVwcm9jZXNzb3IucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHNhdmVkU3RhdGVzRGVwdGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLnN0YXRlU3RhY2subGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24gRXZhbHVhdG9yUHJlcHJvY2Vzc29yX3JlYWQob3BlcmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBvcGVyYXRpb24uYXJncztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLnBhcnNlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21kID0gb2JqLmNtZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcFNwZWMgPSB0aGlzLm9wTWFwW2NtZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BTcGVjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKFwiVW5rbm93biBjb21tYW5kIFxcXCJcIi5jb25jYXQoY21kLCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gb3BTcGVjLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFyZ3MgPSBvcFNwZWMubnVtQXJncztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzTGVuZ3RoID0gYXJncyAhPT0gbnVsbCA/IGFyZ3MubGVuZ3RoIDogMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvcFNwZWMudmFyaWFibGVBcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NMZW5ndGggIT09IG51bUFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vblByb2Nlc3NlZEFyZ3MgPSB0aGlzLm5vblByb2Nlc3NlZEFyZ3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ3NMZW5ndGggPiBudW1BcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25Qcm9jZXNzZWRBcmdzLnB1c2goYXJncy5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NMZW5ndGgtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhcmdzTGVuZ3RoIDwgbnVtQXJncyAmJiBub25Qcm9jZXNzZWRBcmdzLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MudW5zaGlmdChub25Qcm9jZXNzZWRBcmdzLnBvcCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NMZW5ndGgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzTGVuZ3RoIDwgbnVtQXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGlhbE1zZyA9IFwiY29tbWFuZCBcIi5jb25jYXQoY21kLCBcIjogZXhwZWN0ZWQgXCIpLmNvbmNhdChudW1BcmdzLCBcIiBhcmdzLCBcIikgKyBcImJ1dCByZWNlaXZlZCBcIi5jb25jYXQoYXJnc0xlbmd0aCwgXCIgYXJncy5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZuID49IF91dGlsLk9QUy5tb3ZlVG8gJiYgZm4gPD0gX3V0aWwuT1BTLmVuZFBhdGggJiYgKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUyA+IE1BWF9JTlZBTElEX1BBVEhfT1BTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFwiLmNvbmNhdChwYXJ0aWFsTXNnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJTa2lwcGluZyBcIi5jb25jYXQocGFydGlhbE1zZykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NMZW5ndGggPiBudW1BcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKFwiQ29tbWFuZCBcIi5jb25jYXQoY21kLCBcIjogZXhwZWN0ZWQgWzAsIFwiKS5jb25jYXQobnVtQXJncywgXCJdIGFyZ3MsIFwiKSArIFwiYnV0IHJlY2VpdmVkIFwiLmNvbmNhdChhcmdzTGVuZ3RoLCBcIiBhcmdzLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc0NvbW1hbmQoZm4sIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmZuID0gZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYXJncyA9IGFyZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmogIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmdzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2gob2JqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMzMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXByb2Nlc3NDb21tYW5kOiBmdW5jdGlvbiBFdmFsdWF0b3JQcmVwcm9jZXNzb3JfcHJlcHJvY2Vzc0NvbW1hbmQoZm4sIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZuIHwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zYXZlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZU1hbmFnZXIuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucmVzdG9yZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnRyYW5zZm9ybTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybShhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV2YWx1YXRvclByZXByb2Nlc3NvcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ01hcEZhY3RvcnkgPSBleHBvcnRzLklkZW50aXR5Q01hcCA9IGV4cG9ydHMuQ01hcCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3BhcnNlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpOyB9IHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIF9zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBvLl9fcHJvdG9fXyA9IHA7IHJldHVybiBvOyB9OyByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBCVUlMVF9JTl9DTUFQUyA9IFsnQWRvYmUtR0IxLVVDUzInLCAnQWRvYmUtQ05TMS1VQ1MyJywgJ0Fkb2JlLUphcGFuMS1VQ1MyJywgJ0Fkb2JlLUtvcmVhMS1VQ1MyJywgJzc4LUVVQy1IJywgJzc4LUVVQy1WJywgJzc4LUgnLCAnNzgtUktTSi1IJywgJzc4LVJLU0otVicsICc3OC1WJywgJzc4bXMtUktTSi1IJywgJzc4bXMtUktTSi1WJywgJzgzcHYtUktTSi1IJywgJzkwbXMtUktTSi1IJywgJzkwbXMtUktTSi1WJywgJzkwbXNwLVJLU0otSCcsICc5MG1zcC1SS1NKLVYnLCAnOTBwdi1SS1NKLUgnLCAnOTBwdi1SS1NKLVYnLCAnQWRkLUgnLCAnQWRkLVJLU0otSCcsICdBZGQtUktTSi1WJywgJ0FkZC1WJywgJ0Fkb2JlLUNOUzEtMCcsICdBZG9iZS1DTlMxLTEnLCAnQWRvYmUtQ05TMS0yJywgJ0Fkb2JlLUNOUzEtMycsICdBZG9iZS1DTlMxLTQnLCAnQWRvYmUtQ05TMS01JywgJ0Fkb2JlLUNOUzEtNicsICdBZG9iZS1HQjEtMCcsICdBZG9iZS1HQjEtMScsICdBZG9iZS1HQjEtMicsICdBZG9iZS1HQjEtMycsICdBZG9iZS1HQjEtNCcsICdBZG9iZS1HQjEtNScsICdBZG9iZS1KYXBhbjEtMCcsICdBZG9iZS1KYXBhbjEtMScsICdBZG9iZS1KYXBhbjEtMicsICdBZG9iZS1KYXBhbjEtMycsICdBZG9iZS1KYXBhbjEtNCcsICdBZG9iZS1KYXBhbjEtNScsICdBZG9iZS1KYXBhbjEtNicsICdBZG9iZS1Lb3JlYTEtMCcsICdBZG9iZS1Lb3JlYTEtMScsICdBZG9iZS1Lb3JlYTEtMicsICdCNS1IJywgJ0I1LVYnLCAnQjVwYy1IJywgJ0I1cGMtVicsICdDTlMtRVVDLUgnLCAnQ05TLUVVQy1WJywgJ0NOUzEtSCcsICdDTlMxLVYnLCAnQ05TMi1IJywgJ0NOUzItVicsICdFVEhLLUI1LUgnLCAnRVRISy1CNS1WJywgJ0VUZW4tQjUtSCcsICdFVGVuLUI1LVYnLCAnRVRlbm1zLUI1LUgnLCAnRVRlbm1zLUI1LVYnLCAnRVVDLUgnLCAnRVVDLVYnLCAnRXh0LUgnLCAnRXh0LVJLU0otSCcsICdFeHQtUktTSi1WJywgJ0V4dC1WJywgJ0dCLUVVQy1IJywgJ0dCLUVVQy1WJywgJ0dCLUgnLCAnR0ItVicsICdHQkstRVVDLUgnLCAnR0JLLUVVQy1WJywgJ0dCSzJLLUgnLCAnR0JLMkstVicsICdHQktwLUVVQy1IJywgJ0dCS3AtRVVDLVYnLCAnR0JULUVVQy1IJywgJ0dCVC1FVUMtVicsICdHQlQtSCcsICdHQlQtVicsICdHQlRwYy1FVUMtSCcsICdHQlRwYy1FVUMtVicsICdHQnBjLUVVQy1IJywgJ0dCcGMtRVVDLVYnLCAnSCcsICdIS2RsYS1CNS1IJywgJ0hLZGxhLUI1LVYnLCAnSEtkbGItQjUtSCcsICdIS2RsYi1CNS1WJywgJ0hLZ2Njcy1CNS1IJywgJ0hLZ2Njcy1CNS1WJywgJ0hLbTMxNC1CNS1IJywgJ0hLbTMxNC1CNS1WJywgJ0hLbTQ3MS1CNS1IJywgJ0hLbTQ3MS1CNS1WJywgJ0hLc2NzLUI1LUgnLCAnSEtzY3MtQjUtVicsICdIYW5rYWt1JywgJ0hpcmFnYW5hJywgJ0tTQy1FVUMtSCcsICdLU0MtRVVDLVYnLCAnS1NDLUgnLCAnS1NDLUpvaGFiLUgnLCAnS1NDLUpvaGFiLVYnLCAnS1NDLVYnLCAnS1NDbXMtVUhDLUgnLCAnS1NDbXMtVUhDLUhXLUgnLCAnS1NDbXMtVUhDLUhXLVYnLCAnS1NDbXMtVUhDLVYnLCAnS1NDcGMtRVVDLUgnLCAnS1NDcGMtRVVDLVYnLCAnS2F0YWthbmEnLCAnTldQLUgnLCAnTldQLVYnLCAnUktTSi1IJywgJ1JLU0otVicsICdSb21hbicsICdVbmlDTlMtVUNTMi1IJywgJ1VuaUNOUy1VQ1MyLVYnLCAnVW5pQ05TLVVURjE2LUgnLCAnVW5pQ05TLVVURjE2LVYnLCAnVW5pQ05TLVVURjMyLUgnLCAnVW5pQ05TLVVURjMyLVYnLCAnVW5pQ05TLVVURjgtSCcsICdVbmlDTlMtVVRGOC1WJywgJ1VuaUdCLVVDUzItSCcsICdVbmlHQi1VQ1MyLVYnLCAnVW5pR0ItVVRGMTYtSCcsICdVbmlHQi1VVEYxNi1WJywgJ1VuaUdCLVVURjMyLUgnLCAnVW5pR0ItVVRGMzItVicsICdVbmlHQi1VVEY4LUgnLCAnVW5pR0ItVVRGOC1WJywgJ1VuaUpJUy1VQ1MyLUgnLCAnVW5pSklTLVVDUzItSFctSCcsICdVbmlKSVMtVUNTMi1IVy1WJywgJ1VuaUpJUy1VQ1MyLVYnLCAnVW5pSklTLVVURjE2LUgnLCAnVW5pSklTLVVURjE2LVYnLCAnVW5pSklTLVVURjMyLUgnLCAnVW5pSklTLVVURjMyLVYnLCAnVW5pSklTLVVURjgtSCcsICdVbmlKSVMtVVRGOC1WJywgJ1VuaUpJUzIwMDQtVVRGMTYtSCcsICdVbmlKSVMyMDA0LVVURjE2LVYnLCAnVW5pSklTMjAwNC1VVEYzMi1IJywgJ1VuaUpJUzIwMDQtVVRGMzItVicsICdVbmlKSVMyMDA0LVVURjgtSCcsICdVbmlKSVMyMDA0LVVURjgtVicsICdVbmlKSVNQcm8tVUNTMi1IVy1WJywgJ1VuaUpJU1Byby1VQ1MyLVYnLCAnVW5pSklTUHJvLVVURjgtVicsICdVbmlKSVNYMDIxMy1VVEYzMi1IJywgJ1VuaUpJU1gwMjEzLVVURjMyLVYnLCAnVW5pSklTWDAyMTMyMDA0LVVURjMyLUgnLCAnVW5pSklTWDAyMTMyMDA0LVVURjMyLVYnLCAnVW5pS1MtVUNTMi1IJywgJ1VuaUtTLVVDUzItVicsICdVbmlLUy1VVEYxNi1IJywgJ1VuaUtTLVVURjE2LVYnLCAnVW5pS1MtVVRGMzItSCcsICdVbmlLUy1VVEYzMi1WJywgJ1VuaUtTLVVURjgtSCcsICdVbmlLUy1VVEY4LVYnLCAnVicsICdXUC1TeW1ib2wnXTtcblxuICAgICAgICAgICAgICAgIHZhciBDTWFwID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDTWFwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWlsdEluQ01hcCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ01hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVzcGFjZVJhbmdlcyA9IFtbXSwgW10sIFtdLCBbXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZUNNYXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbHRJbkNNYXAgPSBidWlsdEluQ01hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKENNYXAsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFkZENvZGVzcGFjZVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZENvZGVzcGFjZVJhbmdlKG4sIGxvdywgaGlnaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZGVzcGFjZVJhbmdlc1tuIC0gMV0ucHVzaChsb3csIGhpZ2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWFwQ2lkUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWFwQ2lkUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXBbbG93KytdID0gZHN0TG93Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1hcEJmUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWFwQmZSYW5nZShsb3csIGhpZ2gsIGRzdExvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdEJ5dGUgPSBkc3RMb3cubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hcFtsb3crK10gPSBkc3RMb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3RMb3cgPSBkc3RMb3cuc3Vic3RyaW5nKDAsIGxhc3RCeXRlKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoZHN0TG93LmNoYXJDb2RlQXQobGFzdEJ5dGUpICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1hcEJmUmFuZ2VUb0FycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxvdyA8PSBoaWdoICYmIGkgPCBpaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwW2xvd10gPSBhcnJheVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytsb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1hcE9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBtYXBPbmUoc3JjLCBkc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWFwW3NyY10gPSBkc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsb29rdXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbG9va3VwKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcFtjb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbnRhaW5zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnRhaW5zKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcFtjb2RlXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZm9yRWFjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBtYXAubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBbaV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhpLCBtYXBbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pIGluIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKF9pLCBtYXBbX2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2hhckNvZGVPZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSB0aGlzLl9tYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcC5sZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1hcC5pbmRleE9mKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcFtjaGFyQ29kZV0gPT09IHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJDb2RlIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE1hcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZWFkQ2hhckNvZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZENoYXJDb2RlKHN0ciwgb2Zmc2V0LCBvdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZXNwYWNlUmFuZ2VzID0gdGhpcy5jb2Rlc3BhY2VSYW5nZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDAsIG5uID0gY29kZXNwYWNlUmFuZ2VzLmxlbmd0aDsgbiA8IG5uOyBuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAoYyA8PCA4IHwgc3RyLmNoYXJDb2RlQXQob2Zmc2V0ICsgbikpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVzcGFjZVJhbmdlID0gY29kZXNwYWNlUmFuZ2VzW25dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMCwga2sgPSBjb2Rlc3BhY2VSYW5nZS5sZW5ndGg7IGsgPCBrazspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ID0gY29kZXNwYWNlUmFuZ2VbaysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaCA9IGNvZGVzcGFjZVJhbmdlW2srK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA+PSBsb3cgJiYgYyA8PSBoaWdoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5jaGFyY29kZSA9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5sZW5ndGggPSBuICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5jaGFyY29kZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5sZW5ndGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibGVuZ3RoXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tYXAubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNJZGVudGl0eUNNYXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5uYW1lID09PSAnSWRlbnRpdHktSCcgfHwgdGhpcy5uYW1lID09PSAnSWRlbnRpdHktVicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWFwLmxlbmd0aCAhPT0gMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAweDEwMDAwOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYXBbaV0gIT09IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDTWFwO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNNYXAgPSBDTWFwO1xuXG4gICAgICAgICAgICAgICAgdmFyIElkZW50aXR5Q01hcCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9DTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoSWRlbnRpdHlDTWFwLCBfQ01hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElkZW50aXR5Q01hcCh2ZXJ0aWNhbCwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJZGVudGl0eUNNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoSWRlbnRpdHlDTWFwKS5jYWxsKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy52ZXJ0aWNhbCA9IHZlcnRpY2FsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYWRkQ29kZXNwYWNlUmFuZ2UobiwgMCwgMHhmZmZmKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKElkZW50aXR5Q01hcCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWFwQ2lkUmFuZ2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWFwQ2lkUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnc2hvdWxkIG5vdCBjYWxsIG1hcENpZFJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJtYXBCZlJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnc2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm1hcEJmUmFuZ2VUb0FycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnc2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VUb0FycmF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJtYXBPbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbWFwT25lKHNyYywgZHN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ3Nob3VsZCBub3QgY2FsbCBtYXBDaWRPbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImxvb2t1cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBsb29rdXAoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjb2RlKSAmJiBjb2RlIDw9IDB4ZmZmZiA/IGNvZGUgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb250YWluc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb250YWlucyhjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGNvZGUpICYmIGNvZGUgPD0gMHhmZmZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZm9yRWFjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDB4ZmZmZjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhpLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2hhckNvZGVPZlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjaGFyQ29kZU9mKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA8PSAweGZmZmYgPyB2YWx1ZSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0TWFwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1hcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcCA9IG5ldyBBcnJheSgweDEwMDAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSAweGZmZmY7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwW2ldID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDB4MTAwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc0lkZW50aXR5Q01hcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdzaG91bGQgbm90IGFjY2VzcyAuaXNJZGVudGl0eUNNYXAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJZGVudGl0eUNNYXA7XG4gICAgICAgICAgICAgICAgICAgIH0oQ01hcCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLklkZW50aXR5Q01hcCA9IElkZW50aXR5Q01hcDtcblxuICAgICAgICAgICAgICAgIHZhciBCaW5hcnlDTWFwUmVhZGVyID0gZnVuY3Rpb24gQmluYXJ5Q01hcFJlYWRlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhleFRvSW50KGEsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gc2l6ZTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG4gPDwgOCB8IGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGV4VG9TdHIoYSwgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhWzBdLCBhWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhWzBdLCBhWzFdLCBhWzJdLCBhWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYS5zdWJhcnJheSgwLCBzaXplICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkSGV4KGEsIGIsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNpemU7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyArPSBhW2ldICsgYltpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW2ldID0gYyAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID4+PSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5jSGV4KGEsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHNpemU7IGkgPj0gMCAmJiBjID4gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyArPSBhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbaV0gPSBjICYgMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPj49IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX05VTV9TSVpFID0gMTY7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNQVhfRU5DT0RFRF9OVU1fU0laRSA9IDE5O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEJpbmFyeUNNYXBTdHJlYW0oZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG1wQnVmID0gbmV3IFVpbnQ4QXJyYXkoTUFYX0VOQ09ERURfTlVNX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQmluYXJ5Q01hcFN0cmVhbS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkQnl0ZTogZnVuY3Rpb24gcmVhZEJ5dGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE51bWJlcjogZnVuY3Rpb24gcmVhZE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gdGhpcy5yZWFkQnl0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCd1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9ICEoYiAmIDB4ODApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbiA8PCA3IHwgYiAmIDB4N0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWxhc3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFNpZ25lZDogZnVuY3Rpb24gcmVhZFNpZ25lZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuICYgMSA/IH4obiA+Pj4gMSkgOiBuID4+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRIZXg6IGZ1bmN0aW9uIHJlYWRIZXgobnVtLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcywgdGhpcy5wb3MgKyBzaXplICsgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zICs9IHNpemUgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRIZXhOdW1iZXI6IGZ1bmN0aW9uIHJlYWRIZXhOdW1iZXIobnVtLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy50bXBCdWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSB0aGlzLnJlYWRCeXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ3VuZXhwZWN0ZWQgRU9GIGluIGJjbWFwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gIShiICYgMHg4MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3NwKytdID0gYiAmIDB4N0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoIWxhc3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBzaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlclNpemUgPCA4ICYmIHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHN0YWNrWy0tc3BdIDw8IGJ1ZmZlclNpemUgfCBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplICs9IDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1baV0gPSBidWZmZXIgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID4+PSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJTaXplIC09IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRIZXhTaWduZWQ6IGZ1bmN0aW9uIHJlYWRIZXhTaWduZWQobnVtLCBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWFkSGV4TnVtYmVyKG51bSwgc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ24gPSBudW1bc2l6ZV0gJiAxID8gMjU1IDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBzaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IChjICYgMSkgPDwgOCB8IG51bVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtW2ldID0gYyA+PiAxIF4gc2lnbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFN0cmluZzogZnVuY3Rpb24gcmVhZFN0cmluZygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuID0gdGhpcy5yZWFkTnVtYmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMucmVhZE51bWJlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwcm9jZXNzQmluYXJ5Q01hcChkYXRhLCBjTWFwLCBleHRlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBCaW5hcnlDTWFwU3RyZWFtKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXIgPSBzdHJlYW0ucmVhZEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLnZlcnRpY2FsID0gISEoaGVhZGVyICYgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZUNNYXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXIgPSBuZXcgVWludDhBcnJheShNQVhfTlVNX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcCA9IG5ldyBVaW50OEFycmF5KE1BWF9OVU1fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGIgPSBzdHJlYW0ucmVhZEJ5dGUoKSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IGIgPj4gNTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PT0gNykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChiICYgMHgxRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNNYXAgPSBzdHJlYW0ucmVhZFN0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VxdWVuY2UgPSAhIShiICYgMHgxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhU2l6ZSA9IGIgJiAxNTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVNpemUgKyAxID4gTUFYX05VTV9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3NCaW5hcnlDTWFwOiBJbnZhbGlkIGRhdGFTaXplLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVjczJEYXRhU2l6ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJpdGVtc0NvdW50ID0gc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY0hleChlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAuYWRkQ29kZXNwYWNlUmFuZ2UoZGF0YVNpemUgKyAxLCBoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleChzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWROdW1iZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBzdWJpdGVtc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jSGV4KGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIZXgoc3RhcnQsIGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXIsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCBkYXRhU2l6ZSksIGNvZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNIZXgoY2hhciwgZGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHRtcCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KGNoYXIsIHRtcCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IHN0cmVhbS5yZWFkU2lnbmVkKCkgKyAoY29kZSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcE9uZShoZXhUb0ludChjaGFyLCBkYXRhU2l6ZSksIGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleE51bWJlcihlbmQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBzdHJlYW0ucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubWFwQ2lkUmFuZ2UoaGV4VG9JbnQoc3RhcnQsIGRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCBkYXRhU2l6ZSksIGNvZGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNIZXgoZW5kLCBkYXRhU2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXF1ZW5jZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoc3RhcnQsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChzdGFydCwgZW5kLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRIZXgoZW5kLCBzdGFydCwgZGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gc3RyZWFtLnJlYWROdW1iZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBDaWRSYW5nZShoZXhUb0ludChzdGFydCwgZGF0YVNpemUpLCBoZXhUb0ludChlbmQsIGRhdGFTaXplKSwgY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0ucmVhZEhleChjaGFyLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBPbmUoaGV4VG9JbnQoY2hhciwgdWNzMkRhdGFTaXplKSwgaGV4VG9TdHIoY2hhckNvZGUsIGRhdGFTaXplKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3ViaXRlbXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY0hleChjaGFyLCB1Y3MyRGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHRtcCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChjaGFyLCB0bXAsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNIZXgoY2hhckNvZGUsIGRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhTaWduZWQodG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChjaGFyQ29kZSwgdG1wLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubWFwT25lKGhleFRvSW50KGNoYXIsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXgoc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnJlYWRIZXhOdW1iZXIoZW5kLCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEhleChlbmQsIHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBCZlJhbmdlKGhleFRvSW50KHN0YXJ0LCB1Y3MyRGF0YVNpemUpLCBoZXhUb0ludChlbmQsIHVjczJEYXRhU2l6ZSksIGhleFRvU3RyKGNoYXJDb2RlLCBkYXRhU2l6ZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IHN1Yml0ZW1zQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNIZXgoZW5kLCB1Y3MyRGF0YVNpemUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VxdWVuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKHN0YXJ0LCB1Y3MyRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KHN0YXJ0LCBlbmQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydC5zZXQoZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4TnVtYmVyKGVuZCwgdWNzMkRhdGFTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSGV4KGVuZCwgc3RhcnQsIHVjczJEYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5yZWFkSGV4KGNoYXJDb2RlLCBkYXRhU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubWFwQmZSYW5nZShoZXhUb0ludChzdGFydCwgdWNzMkRhdGFTaXplKSwgaGV4VG9JbnQoZW5kLCB1Y3MyRGF0YVNpemUpLCBoZXhUb1N0cihjaGFyQ29kZSwgZGF0YVNpemUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdwcm9jZXNzQmluYXJ5Q01hcDogVW5rbm93biB0eXBlOiAnICsgdHlwZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VDTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZXh0ZW5kKHVzZUNNYXApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY01hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEJpbmFyeUNNYXBSZWFkZXIoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIEJpbmFyeUNNYXBSZWFkZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2VzczogcHJvY2Vzc0JpbmFyeUNNYXBcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJpbmFyeUNNYXBSZWFkZXI7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENNYXBGYWN0b3J5ID0gZnVuY3Rpb24gQ01hcEZhY3RvcnlDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJUb0ludChzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gYSA8PCA4IHwgc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXhwZWN0U3RyaW5nKG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX3V0aWwuaXNTdHJpbmcpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ01hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBzdHJpbmcuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBleHBlY3RJbnQob2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIGludC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlQmZDaGFyKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAnZW5kYmZjaGFyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBzdHJUb0ludChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiA9IGxleGVyLmdldE9iaigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdFN0cmluZyhvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkc3QgPSBvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBPbmUoc3JjLCBkc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAnZW5kYmZyYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaCA9IHN0clRvSW50KG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihvYmopIHx8ICgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHN0TG93ID0gTnVtYmVyLmlzSW50ZWdlcihvYmopID8gU3RyaW5nLmZyb21DaGFyQ29kZShvYmopIDogb2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcEJmUmFuZ2UobG93LCBoaWdoLCBkc3RMb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosICdbJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosICddJykgJiYgISgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcEJmUmFuZ2VUb0FycmF5KGxvdywgaGlnaCwgYXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdJbnZhbGlkIGJmIHJhbmdlLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0NtZCkob2JqLCAnZW5kY2lkY2hhcicpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JjID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RJbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHN0ID0gb2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubWFwT25lKHNyYywgZHN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlQ2lkUmFuZ2UoY01hcCwgbGV4ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosICdlbmRjaWRyYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RTdHJpbmcob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGlnaCA9IHN0clRvSW50KG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0SW50KG9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRzdExvdyA9IG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLm1hcENpZFJhbmdlKGxvdywgaGlnaCwgZHN0TG93KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlQ29kZXNwYWNlUmFuZ2UoY01hcCwgbGV4ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc0VPRikob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzQ21kKShvYmosICdlbmRjb2Rlc3BhY2VyYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwLCBfdXRpbC5pc1N0cmluZykob2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG93ID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBsZXhlci5nZXRPYmooKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF91dGlsLmlzU3RyaW5nKShvYmopKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoaWdoID0gc3RyVG9JbnQob2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLmFkZENvZGVzcGFjZVJhbmdlKG9iai5sZW5ndGgsIGxvdywgaGlnaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBjb2Rlc3BhY2UgcmFuZ2UuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZVdNb2RlKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLnZlcnRpY2FsID0gISFvYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZUNNYXBOYW1lKGNNYXAsIGxleGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0gbGV4ZXIuZ2V0T2JqKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShvYmopICYmICgwLCBfdXRpbC5pc1N0cmluZykob2JqLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5uYW1lID0gb2JqLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbWJlZGRlZFVzZUNNYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9iakxvb3A6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IGxleGVyLmdldE9iaigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNFT0YpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc05hbWUpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoubmFtZSA9PT0gJ1dNb2RlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlV01vZGUoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvYmoubmFtZSA9PT0gJ0NNYXBOYW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ01hcE5hbWUoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91cyA9IG9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNDbWQpKG9iaikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqLmNtZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2VuZGNtYXAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBvYmpMb29wO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndXNlY21hcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShwcmV2aW91cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYmVkZGVkVXNlQ01hcCA9IHByZXZpb3VzLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JlZ2luY29kZXNwYWNlcmFuZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVzcGFjZVJhbmdlKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiZWdpbmJmY2hhcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQmZDaGFyKGNNYXAsIGxleGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdiZWdpbmNpZGNoYXInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNpZENoYXIoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JlZ2luYmZyYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQmZSYW5nZShjTWFwLCBsZXhlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYmVnaW5jaWRyYW5nZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ2lkUmFuZ2UoY01hcCwgbGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBjTWFwIGRhdGE6ICcgKyBleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF1c2VDTWFwICYmIGVtYmVkZGVkVXNlQ01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUNNYXAgPSBlbWJlZGRlZFVzZUNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VDTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dGVuZENNYXAoY01hcCwgZmV0Y2hCdWlsdEluQ01hcCwgdXNlQ01hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY01hcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcCh1c2VDTWFwLCBmZXRjaEJ1aWx0SW5DTWFwKS50aGVuKGZ1bmN0aW9uIChuZXdDTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC51c2VDTWFwID0gbmV3Q01hcDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjTWFwLm51bUNvZGVzcGFjZVJhbmdlcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlQ29kZXNwYWNlUmFuZ2VzID0gY01hcC51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVzZUNvZGVzcGFjZVJhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5jb2Rlc3BhY2VSYW5nZXNbaV0gPSB1c2VDb2Rlc3BhY2VSYW5nZXNbaV0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNNYXAubnVtQ29kZXNwYWNlUmFuZ2VzID0gY01hcC51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwLnVzZUNNYXAuZm9yRWFjaChmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNNYXAuY29udGFpbnMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY01hcC5tYXBPbmUoa2V5LCBjTWFwLnVzZUNNYXAubG9va3VwKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUJ1aWx0SW5DTWFwKG5hbWUsIGZldGNoQnVpbHRJbkNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSAnSWRlbnRpdHktSCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBJZGVudGl0eUNNYXAoZmFsc2UsIDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ0lkZW50aXR5LVYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgSWRlbnRpdHlDTWFwKHRydWUsIDIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFCVUlMVF9JTl9DTUFQUy5pbmNsdWRlcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1Vua25vd24gQ01hcCBuYW1lOiAnICsgbmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZldGNoQnVpbHRJbkNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmZXRjaEJ1aWx0SW5DTWFwKG5hbWUpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY01hcERhdGEgPSBkYXRhLmNNYXBEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvblR5cGUgPSBkYXRhLmNvbXByZXNzaW9uVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY01hcCA9IG5ldyBDTWFwKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXByZXNzaW9uVHlwZSA9PT0gX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlDTWFwUmVhZGVyKCkucHJvY2VzcyhjTWFwRGF0YSwgY01hcCwgZnVuY3Rpb24gKHVzZUNNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBleHRlbmRDTWFwKGNNYXAsIGZldGNoQnVpbHRJbkNNYXAsIHVzZUNNYXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcHJlc3Npb25UeXBlID09PSBfdXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxleGVyID0gbmV3IF9wYXJzZXIuTGV4ZXIobmV3IF9zdHJlYW0uU3RyZWFtKGNNYXBEYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUNNYXAoY01hcCwgbGV4ZXIsIGZldGNoQnVpbHRJbkNNYXAsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1RPRE86IE9ubHkgQklOQVJZL05PTkUgQ01hcCBjb21wcmVzc2lvbiBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZTogZnVuY3Rpb24gY3JlYXRlKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGluZyA9IHBhcmFtcy5lbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmV0Y2hCdWlsdEluQ01hcCA9IHBhcmFtcy5mZXRjaEJ1aWx0SW5DTWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VDTWFwID0gcGFyYW1zLnVzZUNNYXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzTmFtZSkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcChlbmNvZGluZy5uYW1lLCBmZXRjaEJ1aWx0SW5DTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkoZW5jb2RpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjTWFwID0gbmV3IENNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxleGVyID0gbmV3IF9wYXJzZXIuTGV4ZXIoZW5jb2RpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VDTWFwKGNNYXAsIGxleGVyLCBmZXRjaEJ1aWx0SW5DTWFwLCB1c2VDTWFwKS50aGVuKGZ1bmN0aW9uIChwYXJzZWRDTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VkQ01hcC5pc0lkZW50aXR5Q01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCdWlsdEluQ01hcChwYXJzZWRDTWFwLm5hbWUsIGZldGNoQnVpbHRJbkNNYXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkQ01hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignRW5jb2RpbmcgcmVxdWlyZWQuJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ01hcEZhY3RvcnkgPSBDTWFwRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTczICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRGb250VHlwZSA9IGdldEZvbnRUeXBlO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSBleHBvcnRzLlRvVW5pY29kZU1hcCA9IGV4cG9ydHMuRm9udEZsYWdzID0gZXhwb3J0cy5Gb250ID0gZXhwb3J0cy5FcnJvckZvbnQgPSBleHBvcnRzLlNFQUNfQU5BTFlTSVNfRU5BQkxFRCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NmZl9wYXJzZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2dseXBobGlzdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfZW5jb2RpbmdzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9zdGFuZGFyZF9mb250cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc4KTtcblxuICAgICAgICAgICAgICAgIHZhciBfdW5pY29kZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc5KTtcblxuICAgICAgICAgICAgICAgIHZhciBfZm9udF9yZW5kZXJlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgwKTtcblxuICAgICAgICAgICAgICAgIHZhciBfY21hcCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF90eXBlMV9wYXJzZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4MSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuICAgICAgICAgICAgICAgIHZhciBQUklWQVRFX1VTRV9BUkVBUyA9IFtbMHhFMDAwLCAweEY4RkZdLCBbMHgxMDAwMDAsIDB4MTBGRkZEXV07XG4gICAgICAgICAgICAgICAgdmFyIFBERl9HTFlQSF9TUEFDRV9VTklUUyA9IDEwMDA7XG4gICAgICAgICAgICAgICAgdmFyIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5TRUFDX0FOQUxZU0lTX0VOQUJMRUQgPSBTRUFDX0FOQUxZU0lTX0VOQUJMRUQ7XG4gICAgICAgICAgICAgICAgdmFyIEZvbnRGbGFncyA9IHtcbiAgICAgICAgICAgICAgICAgICAgRml4ZWRQaXRjaDogMSxcbiAgICAgICAgICAgICAgICAgICAgU2VyaWY6IDIsXG4gICAgICAgICAgICAgICAgICAgIFN5bWJvbGljOiA0LFxuICAgICAgICAgICAgICAgICAgICBTY3JpcHQ6IDgsXG4gICAgICAgICAgICAgICAgICAgIE5vbnN5bWJvbGljOiAzMixcbiAgICAgICAgICAgICAgICAgICAgSXRhbGljOiA2NCxcbiAgICAgICAgICAgICAgICAgICAgQWxsQ2FwOiA2NTUzNixcbiAgICAgICAgICAgICAgICAgICAgU21hbGxDYXA6IDEzMTA3MixcbiAgICAgICAgICAgICAgICAgICAgRm9yY2VCb2xkOiAyNjIxNDRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuRm9udEZsYWdzID0gRm9udEZsYWdzO1xuICAgICAgICAgICAgICAgIHZhciBNYWNTdGFuZGFyZEdseXBoT3JkZXJpbmcgPSBbJy5ub3RkZWYnLCAnLm51bGwnLCAnbm9ubWFya2luZ3JldHVybicsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVzaW5nbGUnLCAncGFyZW5sZWZ0JywgJ3BhcmVucmlnaHQnLCAnYXN0ZXJpc2snLCAncGx1cycsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ3NsYXNoJywgJ3plcm8nLCAnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJywgJ2ZpdmUnLCAnc2l4JywgJ3NldmVuJywgJ2VpZ2h0JywgJ25pbmUnLCAnY29sb24nLCAnc2VtaWNvbG9uJywgJ2xlc3MnLCAnZXF1YWwnLCAnZ3JlYXRlcicsICdxdWVzdGlvbicsICdhdCcsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLCAnVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onLCAnYnJhY2tldGxlZnQnLCAnYmFja3NsYXNoJywgJ2JyYWNrZXRyaWdodCcsICdhc2NpaWNpcmN1bScsICd1bmRlcnNjb3JlJywgJ2dyYXZlJywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICdBZGllcmVzaXMnLCAnQXJpbmcnLCAnQ2NlZGlsbGEnLCAnRWFjdXRlJywgJ050aWxkZScsICdPZGllcmVzaXMnLCAnVWRpZXJlc2lzJywgJ2FhY3V0ZScsICdhZ3JhdmUnLCAnYWNpcmN1bWZsZXgnLCAnYWRpZXJlc2lzJywgJ2F0aWxkZScsICdhcmluZycsICdjY2VkaWxsYScsICdlYWN1dGUnLCAnZWdyYXZlJywgJ2VjaXJjdW1mbGV4JywgJ2VkaWVyZXNpcycsICdpYWN1dGUnLCAnaWdyYXZlJywgJ2ljaXJjdW1mbGV4JywgJ2lkaWVyZXNpcycsICdudGlsZGUnLCAnb2FjdXRlJywgJ29ncmF2ZScsICdvY2lyY3VtZmxleCcsICdvZGllcmVzaXMnLCAnb3RpbGRlJywgJ3VhY3V0ZScsICd1Z3JhdmUnLCAndWNpcmN1bWZsZXgnLCAndWRpZXJlc2lzJywgJ2RhZ2dlcicsICdkZWdyZWUnLCAnY2VudCcsICdzdGVybGluZycsICdzZWN0aW9uJywgJ2J1bGxldCcsICdwYXJhZ3JhcGgnLCAnZ2VybWFuZGJscycsICdyZWdpc3RlcmVkJywgJ2NvcHlyaWdodCcsICd0cmFkZW1hcmsnLCAnYWN1dGUnLCAnZGllcmVzaXMnLCAnbm90ZXF1YWwnLCAnQUUnLCAnT3NsYXNoJywgJ2luZmluaXR5JywgJ3BsdXNtaW51cycsICdsZXNzZXF1YWwnLCAnZ3JlYXRlcmVxdWFsJywgJ3llbicsICdtdScsICdwYXJ0aWFsZGlmZicsICdzdW1tYXRpb24nLCAncHJvZHVjdCcsICdwaScsICdpbnRlZ3JhbCcsICdvcmRmZW1pbmluZScsICdvcmRtYXNjdWxpbmUnLCAnT21lZ2EnLCAnYWUnLCAnb3NsYXNoJywgJ3F1ZXN0aW9uZG93bicsICdleGNsYW1kb3duJywgJ2xvZ2ljYWxub3QnLCAncmFkaWNhbCcsICdmbG9yaW4nLCAnYXBwcm94ZXF1YWwnLCAnRGVsdGEnLCAnZ3VpbGxlbW90bGVmdCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdub25icmVha2luZ3NwYWNlJywgJ0FncmF2ZScsICdBdGlsZGUnLCAnT3RpbGRlJywgJ09FJywgJ29lJywgJ2VuZGFzaCcsICdlbWRhc2gnLCAncXVvdGVkYmxsZWZ0JywgJ3F1b3RlZGJscmlnaHQnLCAncXVvdGVsZWZ0JywgJ3F1b3RlcmlnaHQnLCAnZGl2aWRlJywgJ2xvemVuZ2UnLCAneWRpZXJlc2lzJywgJ1lkaWVyZXNpcycsICdmcmFjdGlvbicsICdjdXJyZW5jeScsICdndWlsc2luZ2xsZWZ0JywgJ2d1aWxzaW5nbHJpZ2h0JywgJ2ZpJywgJ2ZsJywgJ2RhZ2dlcmRibCcsICdwZXJpb2RjZW50ZXJlZCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncGVydGhvdXNhbmQnLCAnQWNpcmN1bWZsZXgnLCAnRWNpcmN1bWZsZXgnLCAnQWFjdXRlJywgJ0VkaWVyZXNpcycsICdFZ3JhdmUnLCAnSWFjdXRlJywgJ0ljaXJjdW1mbGV4JywgJ0lkaWVyZXNpcycsICdJZ3JhdmUnLCAnT2FjdXRlJywgJ09jaXJjdW1mbGV4JywgJ2FwcGxlJywgJ09ncmF2ZScsICdVYWN1dGUnLCAnVWNpcmN1bWZsZXgnLCAnVWdyYXZlJywgJ2RvdGxlc3NpJywgJ2NpcmN1bWZsZXgnLCAndGlsZGUnLCAnbWFjcm9uJywgJ2JyZXZlJywgJ2RvdGFjY2VudCcsICdyaW5nJywgJ2NlZGlsbGEnLCAnaHVuZ2FydW1sYXV0JywgJ29nb25laycsICdjYXJvbicsICdMc2xhc2gnLCAnbHNsYXNoJywgJ1NjYXJvbicsICdzY2Fyb24nLCAnWmNhcm9uJywgJ3pjYXJvbicsICdicm9rZW5iYXInLCAnRXRoJywgJ2V0aCcsICdZYWN1dGUnLCAneWFjdXRlJywgJ1Rob3JuJywgJ3Rob3JuJywgJ21pbnVzJywgJ211bHRpcGx5JywgJ29uZXN1cGVyaW9yJywgJ3R3b3N1cGVyaW9yJywgJ3RocmVlc3VwZXJpb3InLCAnb25laGFsZicsICdvbmVxdWFydGVyJywgJ3RocmVlcXVhcnRlcnMnLCAnZnJhbmMnLCAnR2JyZXZlJywgJ2dicmV2ZScsICdJZG90YWNjZW50JywgJ1NjZWRpbGxhJywgJ3NjZWRpbGxhJywgJ0NhY3V0ZScsICdjYWN1dGUnLCAnQ2Nhcm9uJywgJ2NjYXJvbicsICdkY3JvYXQnXTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcGVydGllcy5mb250TWF0cml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5mb250TWF0cml4WzBdID09PSBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWFswXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gMC4wMDEgLyBwcm9wZXJ0aWVzLmZvbnRNYXRyaXhbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNXaWR0aHMgPSBwcm9wZXJ0aWVzLndpZHRocztcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBnbHlwaCBpbiBnbHlwaHNXaWR0aHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoc1dpZHRoc1tnbHlwaF0gKj0gc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aCAqPSBzY2FsZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGp1c3RUb1VuaWNvZGUocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW5FbmNvZGluZyA9PT0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgdG9Vbmljb2RlID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHNVbmljb2RlTWFwID0gKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBidWlsdEluRW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaE5hbWUgPSBidWlsdEluRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1VuaWNvZGVbY2hhckNvZGVdID0gU3RyaW5nLmZyb21DaGFyQ29kZSh1bmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMudG9Vbmljb2RlLmFtZW5kKHRvVW5pY29kZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R5cGUxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VidHlwZSA9PT0gJ1R5cGUxQycgPyBfdXRpbC5Gb250VHlwZS5UWVBFMUMgOiBfdXRpbC5Gb250VHlwZS5UWVBFMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0lERm9udFR5cGUwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VidHlwZSA9PT0gJ0NJREZvbnRUeXBlMEMnID8gX3V0aWwuRm9udFR5cGUuQ0lERk9OVFRZUEUwQyA6IF91dGlsLkZvbnRUeXBlLkNJREZPTlRUWVBFMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3BlblR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5PUEVOVFlQRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVHJ1ZVR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5UUlVFVFlQRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0lERm9udFR5cGUyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuQ0lERk9OVFRZUEUyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNTVR5cGUxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuTU1UWVBFMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVHlwZTAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXRpbC5Gb250VHlwZS5UWVBFMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuRm9udFR5cGUuVU5LTk9XTjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlY292ZXJHbHlwaE5hbWUobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhzVW5pY29kZU1hcFtuYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmljb2RlID0gKDAsIF91bmljb2RlLmdldFVuaWNvZGVGb3JHbHlwaCkobmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gZ2x5cGhzVW5pY29kZU1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaHNVbmljb2RlTWFwW2tleV0gPT09IHVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1VuYWJsZSB0byByZWNvdmVyIGEgc3RhbmRhcmQgZ2x5cGggbmFtZSBmb3I6ICcgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIEdseXBoID0gZnVuY3Rpb24gR2x5cGhDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHbHlwaChmb250Q2hhciwgdW5pY29kZSwgYWNjZW50LCB3aWR0aCwgdm1ldHJpYywgb3BlcmF0b3JMaXN0SWQsIGlzU3BhY2UsIGlzSW5Gb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRDaGFyID0gZm9udENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaWNvZGUgPSB1bmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2NlbnQgPSBhY2NlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZtZXRyaWMgPSB2bWV0cmljO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvckxpc3RJZCA9IG9wZXJhdG9yTGlzdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NwYWNlID0gaXNTcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNJbkZvbnQgPSBpc0luRm9udDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEdseXBoLnByb3RvdHlwZS5tYXRjaGVzRm9yQ2FjaGUgPSBmdW5jdGlvbiAoZm9udENoYXIsIHVuaWNvZGUsIGFjY2VudCwgd2lkdGgsIHZtZXRyaWMsIG9wZXJhdG9yTGlzdElkLCBpc1NwYWNlLCBpc0luRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9udENoYXIgPT09IGZvbnRDaGFyICYmIHRoaXMudW5pY29kZSA9PT0gdW5pY29kZSAmJiB0aGlzLmFjY2VudCA9PT0gYWNjZW50ICYmIHRoaXMud2lkdGggPT09IHdpZHRoICYmIHRoaXMudm1ldHJpYyA9PT0gdm1ldHJpYyAmJiB0aGlzLm9wZXJhdG9yTGlzdElkID09PSBvcGVyYXRvckxpc3RJZCAmJiB0aGlzLmlzU3BhY2UgPT09IGlzU3BhY2UgJiYgdGhpcy5pc0luRm9udCA9PT0gaXNJbkZvbnQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdseXBoO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBUb1VuaWNvZGVNYXAgPSBmdW5jdGlvbiBUb1VuaWNvZGVNYXBDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUb1VuaWNvZGVNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21hcCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXAgPSBjbWFwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVG9Vbmljb2RlTWFwLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBsZW5ndGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2hhckNvZGUgaW4gdGhpcy5fbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGNoYXJDb2RlLCB0aGlzLl9tYXBbY2hhckNvZGVdLmNoYXJDb2RlQXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21hcFtpXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFwW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlT2Y6IGZ1bmN0aW9uIGNoYXJDb2RlT2YodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcC5sZW5ndGggPD0gMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFwLmluZGV4T2YodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwW2NoYXJDb2RlXSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYW1lbmQ6IGZ1bmN0aW9uIGFtZW5kKG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGNoYXJDb2RlIGluIG1hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYXBbY2hhckNvZGVdID0gbWFwW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUb1VuaWNvZGVNYXA7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Ub1VuaWNvZGVNYXAgPSBUb1VuaWNvZGVNYXA7XG5cbiAgICAgICAgICAgICAgICB2YXIgSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSBmdW5jdGlvbiBJZGVudGl0eVRvVW5pY29kZU1hcENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElkZW50aXR5VG9Vbmljb2RlTWFwKGZpcnN0Q2hhciwgbGFzdENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RDaGFyID0gZmlyc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0Q2hhciA9IGxhc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgSWRlbnRpdHlUb1VuaWNvZGVNYXAucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGxlbmd0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0Q2hhciArIDEgLSB0aGlzLmZpcnN0Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5maXJzdENoYXIsIGlpID0gdGhpcy5sYXN0Q2hhcjsgaSA8PSBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGksIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3RDaGFyIDw9IGkgJiYgaSA8PSB0aGlzLmxhc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdENoYXIgPD0gaSAmJiBpIDw9IHRoaXMubGFzdENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZU9mOiBmdW5jdGlvbiBjaGFyQ29kZU9mKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcih2KSAmJiB2ID49IHRoaXMuZmlyc3RDaGFyICYmIHYgPD0gdGhpcy5sYXN0Q2hhciA/IHYgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbWVuZDogZnVuY3Rpb24gYW1lbmQobWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnU2hvdWxkIG5vdCBjYWxsIGFtZW5kKCknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElkZW50aXR5VG9Vbmljb2RlTWFwO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuSWRlbnRpdHlUb1VuaWNvZGVNYXAgPSBJZGVudGl0eVRvVW5pY29kZU1hcDtcblxuICAgICAgICAgICAgICAgIHZhciBPcGVuVHlwZUZpbGVCdWlsZGVyID0gZnVuY3Rpb24gT3BlblR5cGVGaWxlQnVpbGRlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyaXRlSW50MTYoZGVzdCwgb2Zmc2V0LCBudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbb2Zmc2V0XSA9IG51bSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd3JpdGVJbnQzMihkZXN0LCBvZmZzZXQsIG51bSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtvZmZzZXRdID0gbnVtID4+IDI0ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbb2Zmc2V0ICsgMV0gPSBudW0gPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtvZmZzZXQgKyAyXSA9IG51bSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Rbb2Zmc2V0ICsgM10gPSBudW0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd3JpdGVEYXRhKGRlc3QsIG9mZnNldCwgZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNldChkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W29mZnNldCsrXSA9IGRhdGEuY2hhckNvZGVBdChpKSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W29mZnNldCsrXSA9IGRhdGFbaV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE9wZW5UeXBlRmlsZUJ1aWxkZXIoc2ZudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZm50ID0gc2ZudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zID0gZnVuY3Rpb24gT3BlblR5cGVGaWxlQnVpbGRlcl9nZXRTZWFyY2hQYXJhbXMoZW50cmllc0NvdW50LCBlbnRyeVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhQb3dlcjIgPSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZzIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG1heFBvd2VyMiBeIGVudHJpZXNDb3VudCkgPiBtYXhQb3dlcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQb3dlcjIgPDw9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nMisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhcmNoUmFuZ2UgPSBtYXhQb3dlcjIgKiBlbnRyeVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlOiBzZWFyY2hSYW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeTogbG9nMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZVNoaWZ0OiBlbnRyeVNpemUgKiBlbnRyaWVzQ291bnQgLSBzZWFyY2hSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgT1RGX0hFQURFUl9TSVpFID0gMTI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPVEZfVEFCTEVfRU5UUllfU0laRSA9IDE2O1xuICAgICAgICAgICAgICAgICAgICBPcGVuVHlwZUZpbGVCdWlsZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvQXJyYXk6IGZ1bmN0aW9uIE9wZW5UeXBlRmlsZUJ1aWxkZXJfdG9BcnJheSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2ZudCA9IHRoaXMuc2ZudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0gdGhpcy50YWJsZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlc05hbWVzID0gT2JqZWN0LmtleXModGFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNOYW1lcy5zb3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVRhYmxlcyA9IHRhYmxlc05hbWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaiwgamosIHRhYmxlLCB0YWJsZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IE9URl9IRUFERVJfU0laRSArIG51bVRhYmxlcyAqIE9URl9UQUJMRV9FTlRSWV9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsZU9mZnNldHMgPSBbb2Zmc2V0XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSA9IHRhYmxlc1t0YWJsZXNOYW1lc1tpXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWRkZWRMZW5ndGggPSAodGFibGUubGVuZ3RoICsgMyAmIH4zKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHBhZGRlZExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVPZmZzZXRzLnB1c2gob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZSA9IG5ldyBVaW50OEFycmF5KG9mZnNldCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtVGFibGVzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUgPSB0YWJsZXNbdGFibGVzTmFtZXNbaV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZURhdGEoZmlsZSwgdGFibGVPZmZzZXRzW2ldLCB0YWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNmbnQgPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZm50ID0gKDAsIF91dGlsLnN0cmluZzMyKSgweDAwMDEwMDAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWzBdID0gc2ZudC5jaGFyQ29kZUF0KDApICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWzFdID0gc2ZudC5jaGFyQ29kZUF0KDEpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWzJdID0gc2ZudC5jaGFyQ29kZUF0KDIpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlWzNdID0gc2ZudC5jaGFyQ29kZUF0KDMpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUludDE2KGZpbGUsIDQsIG51bVRhYmxlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaFBhcmFtcyA9IE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKG51bVRhYmxlcywgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSW50MTYoZmlsZSwgNiwgc2VhcmNoUGFyYW1zLnJhbmdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUludDE2KGZpbGUsIDgsIHNlYXJjaFBhcmFtcy5lbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVJbnQxNihmaWxlLCAxMCwgc2VhcmNoUGFyYW1zLnJhbmdlU2hpZnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IE9URl9IRUFERVJfU0laRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZU5hbWUgPSB0YWJsZXNOYW1lc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVtvZmZzZXRdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMCkgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW29mZnNldCArIDFdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMSkgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW29mZnNldCArIDJdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMikgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlW29mZnNldCArIDNdID0gdGFibGVOYW1lLmNoYXJDb2RlQXQoMykgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hlY2tzdW0gPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHRhYmxlT2Zmc2V0c1tpXSwgamogPSB0YWJsZU9mZnNldHNbaSArIDFdOyBqIDwgamo7IGogKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWQgPSAoMCwgX3V0aWwucmVhZFVpbnQzMikoZmlsZSwgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtICsgcXVhZCA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSW50MzIoZmlsZSwgb2Zmc2V0ICsgNCwgY2hlY2tzdW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUludDMyKGZpbGUsIG9mZnNldCArIDgsIHRhYmxlT2Zmc2V0c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlSW50MzIoZmlsZSwgb2Zmc2V0ICsgMTIsIHRhYmxlc1t0YWJsZU5hbWVdLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBPVEZfVEFCTEVfRU5UUllfU0laRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRUYWJsZTogZnVuY3Rpb24gT3BlblR5cGVGaWxlQnVpbGRlcl9hZGRUYWJsZSh0YWcsIGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnIGluIHRoaXMudGFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGFibGUgJyArIHRhZyArICcgYWxyZWFkeSBleGlzdHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlc1t0YWddID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9wZW5UeXBlRmlsZUJ1aWxkZXI7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEZvbnQgPSBmdW5jdGlvbiBGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRm9udChuYW1lLCBmaWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkZWROYW1lID0gcHJvcGVydGllcy5sb2FkZWROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1R5cGUzRm9udCA9IHByb3BlcnRpZXMuaXNUeXBlM0ZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNpemVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pc3NpbmdGaWxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdseXBoQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1NlcmlmRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBGb250RmxhZ3MuU2VyaWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1N5bWJvbGljRm9udCA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBGb250RmxhZ3MuU3ltYm9saWMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vbm9zcGFjZSA9ICEhKHByb3BlcnRpZXMuZmxhZ3MgJiBGb250RmxhZ3MuRml4ZWRQaXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHByb3BlcnRpZXMudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJ0eXBlID0gcHJvcGVydGllcy5zdWJ0eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhbGxiYWNrTmFtZSA9IHRoaXMuaXNNb25vc3BhY2UgPyAnbW9ub3NwYWNlJyA6IHRoaXMuaXNTZXJpZkZvbnQgPyAnc2VyaWYnIDogJ3NhbnMtc2VyaWYnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWZmZXJlbmNlcyA9IHByb3BlcnRpZXMuZGlmZmVyZW5jZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9zaXRlID0gcHJvcGVydGllcy5jb21wb3NpdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZGVDaGFycyA9IHByb3BlcnRpZXMud2lkZUNoYXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jTWFwID0gcHJvcGVydGllcy5jTWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hc2NlbnQgPSBwcm9wZXJ0aWVzLmFzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzY2VudCA9IHByb3BlcnRpZXMuZGVzY2VudCAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udE1hdHJpeCA9IHByb3BlcnRpZXMuZm9udE1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmJveCA9IHByb3BlcnRpZXMuYmJveDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdEVuY29kaW5nID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvVW5pY29kZSA9IHByb3BlcnRpZXMudG9Vbmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWxsYmFja1RvVW5pY29kZSA9IHByb3BlcnRpZXMuZmFsbGJhY2tUb1VuaWNvZGUgfHwgbmV3IFRvVW5pY29kZU1hcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnR5cGUgPT09ICdUeXBlMycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoYXJDb2RlID0gMDsgY2hhckNvZGUgPCAyNTY7IGNoYXJDb2RlKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0ZvbnRDaGFyW2NoYXJDb2RlXSA9IHRoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdIHx8IHByb3BlcnRpZXMuZGVmYXVsdEVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRUeXBlID0gX3V0aWwuRm9udFR5cGUuVFlQRTM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNpZEVuY29kaW5nID0gcHJvcGVydGllcy5jaWRFbmNvZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWwgPSBwcm9wZXJ0aWVzLnZlcnRpY2FsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudm1ldHJpY3MgPSBwcm9wZXJ0aWVzLnZtZXRyaWNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZNZXRyaWNzID0gcHJvcGVydGllcy5kZWZhdWx0Vk1ldHJpY3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlsZSB8fCBmaWxlLmlzRW1wdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiBcIicgKyBuYW1lICsgJ1wiICgnICsgdGhpcy5sb2FkZWROYW1lICsgJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2dldEZvbnRGaWxlVHlwZSA9IGdldEZvbnRGaWxlVHlwZShmaWxlLCBwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9nZXRGb250RmlsZVR5cGUyID0gX3NsaWNlZFRvQXJyYXkoX2dldEZvbnRGaWxlVHlwZSwgMik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBfZ2V0Rm9udEZpbGVUeXBlMlswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUgPSBfZ2V0Rm9udEZpbGVUeXBlMlsxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgIT09IHRoaXMudHlwZSB8fCBzdWJ0eXBlICE9PSB0aGlzLnN1YnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0luY29uc2lzdGVudCBmb250IGZpbGUgVHlwZS9TdWJUeXBlLCBleHBlY3RlZDogJyArIFwiXCIuY29uY2F0KHRoaXMudHlwZSwgXCIvXCIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIFwiIGJ1dCBmb3VuZDogXCIpLmNvbmNhdCh0eXBlLCBcIi9cIikuY29uY2F0KHN1YnR5cGUsIFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTU1UeXBlMSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ01NVHlwZTEgZm9udCAoJyArIG5hbWUgKyAnKSwgZmFsbGluZyBiYWNrIHRvIFR5cGUxLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R5cGUxJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0lERm9udFR5cGUwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWltZXR5cGUgPSAnZm9udC9vcGVudHlwZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZmID0gc3VidHlwZSA9PT0gJ1R5cGUxQycgfHwgc3VidHlwZSA9PT0gJ0NJREZvbnRUeXBlMEMnID8gbmV3IENGRkZvbnQoZmlsZSwgcHJvcGVydGllcykgOiBuZXcgVHlwZTFGb250KG5hbWUsIGZpbGUsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0V2lkdGhzKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuY29udmVydChuYW1lLCBjZmYsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3BlblR5cGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdUcnVlVHlwZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NJREZvbnRUeXBlMic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbWV0eXBlID0gJ2ZvbnQvb3BlbnR5cGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuY2hlY2tBbmRSZXBhaXIobmFtZSwgZmlsZSwgcHJvcGVydGllcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzT3BlblR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RXaWR0aHMocHJvcGVydGllcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdPcGVuVHlwZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJGb250IFwiLmNvbmNhdCh0eXBlLCBcIiBpcyBub3Qgc3VwcG9ydGVkXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRUeXBlID0gZ2V0Rm9udFR5cGUodHlwZSwgc3VidHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRNYXRyaXggPSBwcm9wZXJ0aWVzLmZvbnRNYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRocyA9IHByb3BlcnRpZXMud2lkdGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0V2lkdGggPSBwcm9wZXJ0aWVzLmRlZmF1bHRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Vbmljb2RlID0gcHJvcGVydGllcy50b1VuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuY29kaW5nID0gcHJvcGVydGllcy5iYXNlRW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYWNNYXAgPSBwcm9wZXJ0aWVzLnNlYWNNYXA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBGb250LmdldEZvbnRJRCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBJRCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gRm9udF9nZXRGb250SUQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhJRCsrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnQxNihiMCwgYjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYjAgPDwgOCkgKyBiMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoYnl0ZXMsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaW5kZXggKyAxXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaW5kZXhdID0gdmFsdWUgPj4+IDg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzaWduZWRJbnQxNihiMCwgYjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IChiMCA8PCA4KSArIGIxO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlICYgMSA8PCAxNSA/IHZhbHVlIC0gMHgxMDAwMCA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW50MzIoYjAsIGIxLCBiMiwgYjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoYjAgPDwgMjQpICsgKGIxIDw8IDE2KSArIChiMiA8PCA4KSArIGIzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaW5nMTYodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc2FmZVN0cmluZzE2KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlID4gMHg3RkZGID8gMHg3RkZGIDogdmFsdWUgPCAtMHg4MDAwID8gLTB4ODAwMCA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1RydWVUeXBlRmlsZShmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnJlYWRVaW50MzIpKGhlYWRlciwgMCkgPT09IDB4MDAwMTAwMDAgfHwgKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09ICd0cnVlJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gZmlsZS5wZWVrQnl0ZXMoNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGhlYWRlcikgPT09ICd0dGNmJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzT3BlblR5cGVGaWxlKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyg0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoaGVhZGVyKSA9PT0gJ09UVE8nO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNUeXBlMUZpbGUoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyWzBdID09PSAweDI1ICYmIGhlYWRlclsxXSA9PT0gMHgyMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyWzBdID09PSAweDgwICYmIGhlYWRlclsxXSA9PT0gMHgwMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0NGRkZpbGUoZmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IGZpbGUucGVla0J5dGVzKDQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyWzBdID49IDEgJiYgaGVhZGVyWzNdID49IDEgJiYgaGVhZGVyWzNdIDw9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0Rm9udEZpbGVUeXBlKGZpbGUsIF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gX3JlZi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnR5cGUgPSBfcmVmLnN1YnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9zaXRlID0gX3JlZi5jb21wb3NpdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZVR5cGUsIGZpbGVTdWJ0eXBlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUcnVlVHlwZUZpbGUoZmlsZSkgfHwgaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICdDSURGb250VHlwZTInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ1RydWVUeXBlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT3BlblR5cGVGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICdDSURGb250VHlwZTInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gJ09wZW5UeXBlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzVHlwZTFGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVHlwZSA9ICdDSURGb250VHlwZTAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gdHlwZSA9PT0gJ01NVHlwZTEnID8gJ01NVHlwZTEnIDogJ1R5cGUxJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ0ZGRmlsZShmaWxlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb3NpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVR5cGUgPSAnQ0lERm9udFR5cGUwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVN1YnR5cGUgPSAnQ0lERm9udFR5cGUwQyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVR5cGUgPSB0eXBlID09PSAnTU1UeXBlMScgPyAnTU1UeXBlMScgOiAnVHlwZTEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3VidHlwZSA9ICdUeXBlMUMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdnZXRGb250RmlsZVR5cGU6IFVuYWJsZSB0byBkZXRlY3QgY29ycmVjdCBmb250IGZpbGUgVHlwZS9TdWJ0eXBlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVUeXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3VidHlwZSA9IHN1YnR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbZmlsZVR5cGUsIGZpbGVTdWJ0eXBlXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkVG9Gb250Q2hhcihlbmNvZGluZywgZ2x5cGhzVW5pY29kZU1hcCwgZGlmZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b0ZvbnRDaGFyID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZW5jb2RpbmcubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShlbmNvZGluZ1tpXSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Gb250Q2hhcltpXSA9IHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBkaWZmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZUZvckdseXBoKShkaWZmZXJlbmNlc1tjaGFyQ29kZV0sIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRm9udENoYXJbK2NoYXJDb2RlXSA9IHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9Gb250Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkanVzdE1hcHBpbmcoY2hhckNvZGVUb0dseXBoSWQsIGhhc0dseXBoLCBuZXdHbHlwaFplcm9JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9Gb250Q2hhciA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVVc2VBcmVhSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGUgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlVXNlT2ZmZXRFbmQgPSBQUklWQVRFX1VTRV9BUkVBU1twcml2YXRlVXNlQXJlYUluZGV4XVsxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgb3JpZ2luYWxDaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsQ2hhckNvZGUgfD0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhJZCA9IGNoYXJDb2RlVG9HbHlwaElkW29yaWdpbmFsQ2hhckNvZGVdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZSA+IHByaXZhdGVVc2VPZmZldEVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlVXNlQXJlYUluZGV4Kys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByaXZhdGVVc2VBcmVhSW5kZXggPj0gUFJJVkFURV9VU0VfQVJFQVMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1JhbiBvdXQgb2Ygc3BhY2UgaW4gZm9udCBwcml2YXRlIHVzZSBhcmVhLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlID0gUFJJVkFURV9VU0VfQVJFQVNbcHJpdmF0ZVVzZUFyZWFJbmRleF1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVVc2VPZmZldEVuZCA9IFBSSVZBVEVfVVNFX0FSRUFTW3ByaXZhdGVVc2VBcmVhSW5kZXhdWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250Q2hhckNvZGUgPSBuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkID0gbmV3R2x5cGhaZXJvSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWFwW2ZvbnRDaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRm9udENoYXJbb3JpZ2luYWxDaGFyQ29kZV0gPSBmb250Q2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9Gb250Q2hhcjogdG9Gb250Q2hhcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZDogbmV3TWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRBdmFpbGFibGVGb250Q2hhckNvZGU6IG5leHRBdmFpbGFibGVGb250Q2hhckNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRSYW5nZXMoZ2x5cGhzLCBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhzW2NoYXJDb2RlXSA+PSBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDaGFyQ29kZTogY2hhckNvZGUgfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkOiBnbHlwaHNbY2hhckNvZGVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2Rlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENoYXJDb2RlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzLnNvcnQoZnVuY3Rpb24gZm9udEdldFJhbmdlc1NvcnQoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmZvbnRDaGFyQ29kZSAtIGIuZm9udENoYXJDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gY29kZXMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMDsgbiA8IGxlbmd0aDspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBjb2Rlc1tuXS5mb250Q2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVJbmRpY2VzID0gW2NvZGVzW25dLmdseXBoSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gc3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobiA8IGxlbmd0aCAmJiBlbmQgKyAxID09PSBjb2Rlc1tuXS5mb250Q2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUluZGljZXMucHVzaChjb2Rlc1tuXS5nbHlwaElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytlbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goW3N0YXJ0LCBlbmQsIGNvZGVJbmRpY2VzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByYW5nZXM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVDbWFwVGFibGUoZ2x5cGhzLCBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZXMgPSBnZXRSYW5nZXMoZ2x5cGhzLCBudW1HbHlwaHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVRhYmxlcyA9IHJhbmdlc1tyYW5nZXMubGVuZ3RoIC0gMV1bMV0gPiAweEZGRkYgPyAyIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwID0gJ1xceDAwXFx4MDAnICsgc3RyaW5nMTYobnVtVGFibGVzKSArICdcXHgwMFxceDAzJyArICdcXHgwMFxceDAxJyArICgwLCBfdXRpbC5zdHJpbmczMikoNCArIG51bVRhYmxlcyAqIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpLCBqLCBqajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gcmFuZ2VzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlc1tpXVswXSA8PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm1wTGVuZ3RoID0gaSArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZXNbaV1bMF0gPCAweEZGRkYgJiYgcmFuZ2VzW2ldWzFdID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbaV1bMV0gPSAweEZGRkU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFpbGluZ1Jhbmdlc0NvdW50ID0gcmFuZ2VzW2ldWzFdIDwgMHhGRkZGID8gMSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VnQ291bnQgPSBibXBMZW5ndGggKyB0cmFpbGluZ1Jhbmdlc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaFBhcmFtcyA9IE9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKHNlZ0NvdW50LCAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydENvdW50ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kQ291bnQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZERlbHRhcyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkUmFuZ2VPZmZzZXRzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzSWRzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmlhcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UsIHN0YXJ0LCBlbmQsIGNvZGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGJtcExlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHJhbmdlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHJhbmdlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q291bnQgKz0gc3RyaW5nMTYoc3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZENvdW50ICs9IHN0cmluZzE2KGVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMgPSByYW5nZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGlndW91cyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxLCBqaiA9IGNvZGVzLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGVzW2pdICE9PSBjb2Rlc1tqIC0gMV0gKyAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aWd1b3VzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGlndW91cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHNlZ0NvdW50IC0gaSkgKiAyICsgYmlhcyAqIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMgKz0gZW5kIC0gc3RhcnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZERlbHRhcyArPSBzdHJpbmcxNigwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRSYW5nZU9mZnNldHMgKz0gc3RyaW5nMTYob2Zmc2V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGNvZGVzLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoc0lkcyArPSBzdHJpbmcxNihjb2Rlc1tqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRDb2RlID0gY29kZXNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkRGVsdGFzICs9IHN0cmluZzE2KHN0YXJ0Q29kZSAtIHN0YXJ0ICYgMHhGRkZGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRSYW5nZU9mZnNldHMgKz0gc3RyaW5nMTYoMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhaWxpbmdSYW5nZXNDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRDb3VudCArPSAnXFx4RkZcXHhGRic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRDb3VudCArPSAnXFx4RkZcXHhGRic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWREZWx0YXMgKz0gJ1xceDAwXFx4MDEnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkUmFuZ2VPZmZzZXRzICs9ICdcXHgwMFxceDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdDMxNCA9ICdcXHgwMFxceDAwJyArIHN0cmluZzE2KDIgKiBzZWdDb3VudCkgKyBzdHJpbmcxNihzZWFyY2hQYXJhbXMucmFuZ2UpICsgc3RyaW5nMTYoc2VhcmNoUGFyYW1zLmVudHJ5KSArIHN0cmluZzE2KHNlYXJjaFBhcmFtcy5yYW5nZVNoaWZ0KSArIGVuZENvdW50ICsgJ1xceDAwXFx4MDAnICsgc3RhcnRDb3VudCArIGlkRGVsdGFzICsgaWRSYW5nZU9mZnNldHMgKyBnbHlwaHNJZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybWF0MzEwMTIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXIzMTAxMiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtVGFibGVzID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYXAgKz0gJ1xceDAwXFx4MDMnICsgJ1xceDAwXFx4MEEnICsgKDAsIF91dGlsLnN0cmluZzMyKSg0ICsgbnVtVGFibGVzICogOCArIDQgKyBmb3JtYXQzMTQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQzMTAxMiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSByYW5nZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHJhbmdlc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSByYW5nZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZXMgPSByYW5nZVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBjb2Rlc1swXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxLCBqaiA9IGNvZGVzLmxlbmd0aDsgaiA8IGpqOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2Rlc1tqXSAhPT0gY29kZXNbaiAtIDFdICsgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHJhbmdlWzBdICsgaiAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0MzEwMTIgKz0gKDAsIF91dGlsLnN0cmluZzMyKShzdGFydCkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGVuZCkgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gY29kZXNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQzMTAxMiArPSAoMCwgX3V0aWwuc3RyaW5nMzIpKHN0YXJ0KSArICgwLCBfdXRpbC5zdHJpbmczMikocmFuZ2VbMV0pICsgKDAsIF91dGlsLnN0cmluZzMyKShjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIzMTAxMiA9ICdcXHgwMFxceDBDJyArICdcXHgwMFxceDAwJyArICgwLCBfdXRpbC5zdHJpbmczMikoZm9ybWF0MzEwMTIubGVuZ3RoICsgMTYpICsgJ1xceDAwXFx4MDBcXHgwMFxceDAwJyArICgwLCBfdXRpbC5zdHJpbmczMikoZm9ybWF0MzEwMTIubGVuZ3RoIC8gMTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY21hcCArICdcXHgwMFxceDA0JyArIHN0cmluZzE2KGZvcm1hdDMxNC5sZW5ndGggKyA0KSArIGZvcm1hdDMxNCArIGhlYWRlcjMxMDEyICsgZm9ybWF0MzEwMTI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZU9TMlRhYmxlKG9zMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShvczIuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVyc2lvbiA9IHN0cmVhbS5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5nZXRCeXRlcyg2MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0aW9uID0gc3RyZWFtLmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVyc2lvbiA8IDQgJiYgc2VsZWN0aW9uICYgMHgwMzAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RDaGFyID0gc3RyZWFtLmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RDaGFyID0gc3RyZWFtLmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGFyID4gbGFzdENoYXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5nZXRCeXRlcyg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c1dpbkFzY2VudCA9IHN0cmVhbS5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzV2luQXNjZW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBvczIuZGF0YVs4XSA9IG9zMi5kYXRhWzldID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgY2hhcnN0cmluZ3MsIG92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVycmlkZSA9IG92ZXJyaWRlIHx8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0c1BlckVtOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlNYXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeU1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2NlbnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY2VudDogMFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bFVuaWNvZGVSYW5nZTEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVsVW5pY29kZVJhbmdlMiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWxVbmljb2RlUmFuZ2UzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bFVuaWNvZGVSYW5nZTQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0Q2hhckluZGV4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0Q2hhckluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY29kZSBpbiBjaGFyc3RyaW5ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlIHw9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q2hhckluZGV4ID4gY29kZSB8fCAhZmlyc3RDaGFySW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2hhckluZGV4ID0gY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hhckluZGV4IDwgY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXJJbmRleCA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSAoMCwgX3VuaWNvZGUuZ2V0VW5pY29kZVJhbmdlRm9yKShjb2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCAzMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxVbmljb2RlUmFuZ2UxIHw9IDEgPDwgcG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24gPCA2NCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxVbmljb2RlUmFuZ2UyIHw9IDEgPDwgcG9zaXRpb24gLSAzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbiA8IDk2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFVuaWNvZGVSYW5nZTMgfD0gMSA8PCBwb3NpdGlvbiAtIDY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uIDwgMTIzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bFVuaWNvZGVSYW5nZTQgfD0gMSA8PCBwb3NpdGlvbiAtIDk2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Q2hhckluZGV4ID4gMHhGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFySW5kZXggPSAweEZGRkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoYXJJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXJJbmRleCA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJib3ggPSBwcm9wZXJ0aWVzLmJib3ggfHwgWzAsIDAsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaXRzUGVyRW0gPSBvdmVycmlkZS51bml0c1BlckVtIHx8IDEgLyAocHJvcGVydGllcy5mb250TWF0cml4IHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IHByb3BlcnRpZXMuYXNjZW50U2NhbGVkID8gMS4wIDogdW5pdHNQZXJFbSAvIFBERl9HTFlQSF9TUEFDRV9VTklUUztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBvQXNjZW50ID0gb3ZlcnJpZGUuYXNjZW50IHx8IE1hdGgucm91bmQoc2NhbGUgKiAocHJvcGVydGllcy5hc2NlbnQgfHwgYmJveFszXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cG9EZXNjZW50ID0gb3ZlcnJpZGUuZGVzY2VudCB8fCBNYXRoLnJvdW5kKHNjYWxlICogKHByb3BlcnRpZXMuZGVzY2VudCB8fCBiYm94WzFdKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBvRGVzY2VudCA+IDAgJiYgcHJvcGVydGllcy5kZXNjZW50ID4gMCAmJiBiYm94WzFdIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cG9EZXNjZW50ID0gLXR5cG9EZXNjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2luQXNjZW50ID0gb3ZlcnJpZGUueU1heCB8fCB0eXBvQXNjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpbkRlc2NlbnQgPSAtb3ZlcnJpZGUueU1pbiB8fCAtdHlwb0Rlc2NlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xceDAwXFx4MDMnICsgJ1xceDAyXFx4MjQnICsgJ1xceDAxXFx4RjQnICsgJ1xceDAwXFx4MDUnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAyXFx4OEEnICsgJ1xceDAyXFx4QkInICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4OEMnICsgJ1xceDAyXFx4OEEnICsgJ1xceDAyXFx4QkInICsgJ1xceDAwXFx4MDAnICsgJ1xceDAxXFx4REYnICsgJ1xceDAwXFx4MzEnICsgJ1xceDAxXFx4MDInICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDBcXHgwNicgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHByb3BlcnRpZXMuZml4ZWRQaXRjaCA/IDB4MDkgOiAweDAwKSArICdcXHgwMFxceDAwXFx4MDBcXHgwMFxceDAwXFx4MDAnICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTEpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTIpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTMpICsgKDAsIF91dGlsLnN0cmluZzMyKSh1bFVuaWNvZGVSYW5nZTQpICsgJ1xceDJBXFx4MzJcXHgzMVxceDJBJyArIHN0cmluZzE2KHByb3BlcnRpZXMuaXRhbGljQW5nbGUgPyAxIDogMCkgKyBzdHJpbmcxNihmaXJzdENoYXJJbmRleCB8fCBwcm9wZXJ0aWVzLmZpcnN0Q2hhcikgKyBzdHJpbmcxNihsYXN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMubGFzdENoYXIpICsgc3RyaW5nMTYodHlwb0FzY2VudCkgKyBzdHJpbmcxNih0eXBvRGVzY2VudCkgKyAnXFx4MDBcXHg2NCcgKyBzdHJpbmcxNih3aW5Bc2NlbnQpICsgc3RyaW5nMTYod2luRGVzY2VudCkgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDAnICsgJ1xceDAwXFx4MDBcXHgwMFxceDAwJyArIHN0cmluZzE2KHByb3BlcnRpZXMueEhlaWdodCkgKyBzdHJpbmcxNihwcm9wZXJ0aWVzLmNhcEhlaWdodCkgKyBzdHJpbmcxNigwKSArIHN0cmluZzE2KGZpcnN0Q2hhckluZGV4IHx8IHByb3BlcnRpZXMuZmlyc3RDaGFyKSArICdcXHgwMFxceDAzJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVBvc3RUYWJsZShwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5nbGUgPSBNYXRoLmZsb29yKHByb3BlcnRpZXMuaXRhbGljQW5nbGUgKiBNYXRoLnBvdygyLCAxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHgwMFxceDAzXFx4MDBcXHgwMCcgKyAoMCwgX3V0aWwuc3RyaW5nMzIpKGFuZ2xlKSArICdcXHgwMFxceDAwJyArICdcXHgwMFxceDAwJyArICgwLCBfdXRpbC5zdHJpbmczMikocHJvcGVydGllcy5maXhlZFBpdGNoKSArICdcXHgwMFxceDAwXFx4MDBcXHgwMCcgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDAnICsgJ1xceDAwXFx4MDBcXHgwMFxceDAwJyArICdcXHgwMFxceDAwXFx4MDBcXHgwMCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVOYW1lVGFibGUobmFtZSwgcHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90byA9IFtbXSwgW11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyaW5ncyA9IFtwcm90b1swXVswXSB8fCAnT3JpZ2luYWwgbGljZW5jZScsIHByb3RvWzBdWzFdIHx8IG5hbWUsIHByb3RvWzBdWzJdIHx8ICdVbmtub3duJywgcHJvdG9bMF1bM10gfHwgJ3VuaXF1ZUlEJywgcHJvdG9bMF1bNF0gfHwgbmFtZSwgcHJvdG9bMF1bNV0gfHwgJ1ZlcnNpb24gMC4xMScsIHByb3RvWzBdWzZdIHx8ICcnLCBwcm90b1swXVs3XSB8fCAnVW5rbm93bicsIHByb3RvWzBdWzhdIHx8ICdVbmtub3duJywgcHJvdG9bMF1bOV0gfHwgJ1Vua25vd24nXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdzVW5pY29kZSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpLCBqLCBqaiwgc3RyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHN0cmluZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IHByb3RvWzFdW2ldIHx8IHN0cmluZ3NbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ1ZlVuaWNvZGUgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gc3RyLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmVW5pY29kZS5wdXNoKHN0cmluZzE2KHN0ci5jaGFyQ29kZUF0KGopKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nc1VuaWNvZGUucHVzaChzdHJCdWZVbmljb2RlLmpvaW4oJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gW3N0cmluZ3MsIHN0cmluZ3NVbmljb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbGF0Zm9ybXMgPSBbJ1xceDAwXFx4MDEnLCAnXFx4MDBcXHgwMyddO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5ncyA9IFsnXFx4MDBcXHgwMCcsICdcXHgwMFxceDAxJ107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFuZ3VhZ2VzID0gWydcXHgwMFxceDAwJywgJ1xceDA0XFx4MDknXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lc1JlY29yZENvdW50ID0gc3RyaW5ncy5sZW5ndGggKiBwbGF0Zm9ybXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVUYWJsZSA9ICdcXHgwMFxceDAwJyArIHN0cmluZzE2KG5hbWVzUmVjb3JkQ291bnQpICsgc3RyaW5nMTYobmFtZXNSZWNvcmRDb3VudCAqIDEyICsgNik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyT2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBwbGF0Zm9ybXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJzID0gbmFtZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IHN0cnMubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBzdHJzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVJlY29yZCA9IHBsYXRmb3Jtc1tpXSArIGVuY29kaW5nc1tpXSArIGxhbmd1YWdlc1tpXSArIHN0cmluZzE2KGopICsgc3RyaW5nMTYoc3RyLmxlbmd0aCkgKyBzdHJpbmcxNihzdHJPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lVGFibGUgKz0gbmFtZVJlY29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyT2Zmc2V0ICs9IHN0ci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lVGFibGUgKz0gc3RyaW5ncy5qb2luKCcnKSArIHN0cmluZ3NVbmljb2RlLmpvaW4oJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVUYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEZvbnQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW1ldHlwZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUZvbnRGYWNlOiBmYWxzZSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHJlbmRlcmVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW5kZXJlciA9IF9mb250X3JlbmRlcmVyLkZvbnRSZW5kZXJlckZhY3RvcnkuY3JlYXRlKHRoaXMsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ3JlbmRlcmVyJywgcmVuZGVyZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0RGF0YTogZnVuY3Rpb24gRm9udF9leHBvcnREYXRhKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHRoaXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSB0aGlzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tUb1N5c3RlbUZvbnQ6IGZ1bmN0aW9uIEZvbnRfZmFsbGJhY2tUb1N5c3RlbUZvbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWlzc2luZ0ZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZSwgdW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VidHlwZSA9IHRoaXMuc3VidHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE5hbWUgPSBuYW1lLnJlcGxhY2UoL1ssX10vZywgJy0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RkRm9udE1hcCA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3RkRm9udE1hcCkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uU3RkRm9udE1hcCA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0Tm9uU3RkRm9udE1hcCkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTdGFuZGFyZEZvbnQgPSAhIXN0ZEZvbnRNYXBbZm9udE5hbWVdIHx8ICEhKG5vblN0ZEZvbnRNYXBbZm9udE5hbWVdICYmIHN0ZEZvbnRNYXBbbm9uU3RkRm9udE1hcFtmb250TmFtZV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250TmFtZSA9IHN0ZEZvbnRNYXBbZm9udE5hbWVdIHx8IG5vblN0ZEZvbnRNYXBbZm9udE5hbWVdIHx8IGZvbnROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYm9sZCA9IGZvbnROYW1lLnNlYXJjaCgvYm9sZC9naSkgIT09IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXRhbGljID0gZm9udE5hbWUuc2VhcmNoKC9vYmxpcXVlL2dpKSAhPT0gLTEgfHwgZm9udE5hbWUuc2VhcmNoKC9pdGFsaWMvZ2kpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsYWNrID0gbmFtZS5zZWFyY2goL0JsYWNrL2cpICE9PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbWVhc3VyZSA9IE9iamVjdC5rZXlzKHRoaXMud2lkdGhzKS5sZW5ndGggPiAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzU3RhbmRhcmRGb250ICYmIHR5cGUgPT09ICdDSURGb250VHlwZTInICYmIHRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aCgnSWRlbnRpdHktJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdseXBoTWFwRm9yU3RhbmRhcmRGb250cyA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyQ29kZSBpbiBHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gR2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvQXJpYWwtP0JsYWNrL2kudGVzdChuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9ICgwLCBfc3RhbmRhcmRfZm9udHMuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrKSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNoYXJDb2RlIGluIFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcFsrY2hhckNvZGVdID0gU3VwcGxlbWVudGFsR2x5cGhNYXBGb3JBcmlhbEJsYWNrW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvQ2FsaWJyaS9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkgPSAoMCwgX3N0YW5kYXJkX2ZvbnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyQ29kZSBpbiBTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaVtjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNJZGVudGl0eVVuaWNvZGUgPSB0aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNJZGVudGl0eVVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Vbmljb2RlLmZvckVhY2goZnVuY3Rpb24gKGNoYXJDb2RlLCB1bmljb2RlQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBbK2NoYXJDb2RlXSA9IHVuaWNvZGVDaGFyQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gbWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvVW5pY29kZSA9IG5ldyBUb1VuaWNvZGVNYXAobWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKC9TeW1ib2wvaS50ZXN0KGZvbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvRm9udENoYXIgPSBidWlsZFRvRm9udENoYXIoX2VuY29kaW5ncy5TeW1ib2xTZXRFbmNvZGluZywgKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKSwgdGhpcy5kaWZmZXJlbmNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgvRGluZ2JhdHMvaS50ZXN0KGZvbnROYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1dpbmdkaW5ncy9pLnRlc3QobmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnTm9uLWVtYmVkZGVkIFdpbmdkaW5ncyBmb250LCBmYWxsaW5nIGJhY2sgdG8gWmFwZkRpbmdiYXRzLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b0ZvbnRDaGFyID0gYnVpbGRUb0ZvbnRDaGFyKF9lbmNvZGluZ3MuWmFwZkRpbmdiYXRzRW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSkoKSwgdGhpcy5kaWZmZXJlbmNlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N0YW5kYXJkRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvRm9udENoYXIgPSBidWlsZFRvRm9udENoYXIodGhpcy5kZWZhdWx0RW5jb2RpbmcsICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCksIHRoaXMuZGlmZmVyZW5jZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNVbmljb2RlTWFwID0gKDAsIF9nbHlwaGxpc3QuZ2V0R2x5cGhzVW5pY29kZSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b1VuaWNvZGUuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIHVuaWNvZGVDaGFyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5jb21wb3NpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhOYW1lID0gX3RoaXMuZGlmZmVyZW5jZXNbY2hhckNvZGVdIHx8IF90aGlzLmRlZmF1bHRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9ICgwLCBfdW5pY29kZS5nZXRVbmljb2RlRm9yR2x5cGgpKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZUNoYXJDb2RlID0gdW5pY29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnRvRm9udENoYXJbY2hhckNvZGVdID0gdW5pY29kZUNoYXJDb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZE5hbWUgPSBmb250TmFtZS5zcGxpdCgnLScpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udFR5cGUgPSBnZXRGb250VHlwZSh0eXBlLCBzdWJ0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0FuZFJlcGFpcjogZnVuY3Rpb24gRm9udF9jaGVja0FuZFJlcGFpcihuYW1lLCBmb250LCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFZBTElEX1RBQkxFUyA9IFsnT1MvMicsICdjbWFwJywgJ2hlYWQnLCAnaGhlYScsICdobXR4JywgJ21heHAnLCAnbmFtZScsICdwb3N0JywgJ2xvY2EnLCAnZ2x5ZicsICdmcGdtJywgJ3ByZXAnLCAnY3Z0ICcsICdDRkYgJ107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVGFibGVzKGZpbGUsIG51bVRhYmxlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydPUy8yJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ2NtYXAnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snaGVhZCddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydoaGVhJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ2htdHgnXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snbWF4cCddID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWyduYW1lJ10gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ3Bvc3QnXSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxlID0gcmVhZFRhYmxlRW50cnkoZm9udCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVkFMSURfVEFCTEVTLmluY2x1ZGVzKHRhYmxlLnRhZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbdGFibGUudGFnXSA9IHRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVGFibGVFbnRyeShmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWcgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykoZmlsZS5nZXRCeXRlcyg0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGVja3N1bSA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGZpbGUuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXZpb3VzUG9zaXRpb24gPSBmaWxlLnBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wb3MgPSBmaWxlLnN0YXJ0ID8gZmlsZS5zdGFydCA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuc2tpcChvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGZpbGUuZ2V0Qnl0ZXMobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wb3MgPSBwcmV2aW91c1Bvc2l0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWcgPT09ICdoZWFkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs4XSA9IGRhdGFbOV0gPSBkYXRhWzEwXSA9IGRhdGFbMTFdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMTddIHw9IDB4MjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiB0YWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bTogY2hlY2tzdW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRPcGVuVHlwZUhlYWRlcih0dGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb246ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKSh0dGYuZ2V0Qnl0ZXMoNCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVGFibGVzOiB0dGYuZ2V0VWludDE2KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hSYW5nZTogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnlTZWxlY3RvcjogdHRmLmdldFVpbnQxNigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VTaGlmdDogdHRmLmdldFVpbnQxNigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcih0dGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR0Y1RhZyA9ICgwLCBfdXRpbC5ieXRlc1RvU3RyaW5nKSh0dGMuZ2V0Qnl0ZXMoNCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0dGNUYWcgPT09ICd0dGNmJywgJ011c3QgYmUgYSBUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWpvclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW5vclZlcnNpb24gPSB0dGMuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Gb250cyA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0VGFibGUgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUZvbnRzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRhYmxlLnB1c2godHRjLmdldEludDMyKCkgPj4+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Y1RhZzogdHRjVGFnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFqb3JWZXJzaW9uOiBtYWpvclZlcnNpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5vclZlcnNpb246IG1pbm9yVmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUZvbnRzOiBudW1Gb250cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFRhYmxlOiBvZmZzZXRUYWJsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobWFqb3JWZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlci5kc2lnVGFnID0gdHRjLmdldEludDMyKCkgPj4+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmRzaWdMZW5ndGggPSB0dGMuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZHNpZ09mZnNldCA9IHR0Yy5nZXRJbnQzMigpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJJbnZhbGlkIFRydWVUeXBlIENvbGxlY3Rpb24gbWFqb3JWZXJzaW9uOiBcIi5jb25jYXQobWFqb3JWZXJzaW9uLCBcIi5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25EYXRhKHR0YywgZm9udE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWFkVHJ1ZVR5cGVDb2xsZWN0aSA9IHJlYWRUcnVlVHlwZUNvbGxlY3Rpb25IZWFkZXIodHRjKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUZvbnRzID0gX3JlYWRUcnVlVHlwZUNvbGxlY3RpLm51bUZvbnRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0VGFibGUgPSBfcmVhZFRydWVUeXBlQ29sbGVjdGkub2Zmc2V0VGFibGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1Gb250czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dGMucG9zID0gKHR0Yy5zdGFydCB8fCAwKSArIG9mZnNldFRhYmxlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvdGVudGlhbEhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcih0dGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvdGVudGlhbFRhYmxlcyA9IHJlYWRUYWJsZXModHRjLCBwb3RlbnRpYWxIZWFkZXIubnVtVGFibGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwb3RlbnRpYWxUYWJsZXNbJ25hbWUnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250IG11c3QgY29udGFpbiBhIFwibmFtZVwiIHRhYmxlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVRhYmxlID0gcmVhZE5hbWVUYWJsZShwb3RlbnRpYWxUYWJsZXNbJ25hbWUnXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IG5hbWVUYWJsZS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDAsIGtrID0gbmFtZVRhYmxlW2pdLmxlbmd0aDsgayA8IGtrOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVFbnRyeSA9IG5hbWVUYWJsZVtqXVtrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZUVudHJ5ICYmIG5hbWVFbnRyeS5yZXBsYWNlKC9cXHMvZywgJycpID09PSBmb250TmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IHBvdGVudGlhbEhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXM6IHBvdGVudGlhbFRhYmxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIlRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiBcXFwiXCIuY29uY2F0KGZvbnROYW1lLCBcIlxcXCIgZm9udC5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRDbWFwVGFibGUoY21hcCwgZm9udCwgaXNTeW1ib2xpY0ZvbnQsIGhhc0VuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY21hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdObyBjbWFwIHRhYmxlIGF2YWlsYWJsZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1JZDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdJZDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Nob3J0Q21hcDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VnbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gKGZvbnQuc3RhcnQgPyBmb250LnN0YXJ0IDogMCkgKyBjbWFwLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgPSBzdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVRhYmxlcyA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3RlbnRpYWxUYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbkJyZWFrID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1UYWJsZXM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBsYXRmb3JtSWQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nSWQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGZvbnQuZ2V0SW50MzIoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VUYWJsZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG90ZW50aWFsVGFibGUgJiYgcG90ZW50aWFsVGFibGUucGxhdGZvcm1JZCA9PT0gcGxhdGZvcm1JZCAmJiBwb3RlbnRpYWxUYWJsZS5lbmNvZGluZ0lkID09PSBlbmNvZGluZ0lkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwbGF0Zm9ybUlkID09PSAwICYmIGVuY29kaW5nSWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBsYXRmb3JtSWQgPT09IDEgJiYgZW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZVRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGxhdGZvcm1JZCA9PT0gMyAmJiBlbmNvZGluZ0lkID09PSAxICYmIChoYXNFbmNvZGluZyB8fCAhcG90ZW50aWFsVGFibGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlVGFibGUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1N5bWJvbGljRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5CcmVhayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc1N5bWJvbGljRm9udCAmJiBwbGF0Zm9ybUlkID09PSAzICYmIGVuY29kaW5nSWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VUYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuQnJlYWsgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3RlbnRpYWxUYWJsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1JZDogcGxhdGZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdJZDogZW5jb2RpbmdJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBvZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FuQnJlYWspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3RlbnRpYWxUYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgPSBzdGFydCArIHBvdGVudGlhbFRhYmxlLm9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcG90ZW50aWFsVGFibGUgfHwgZm9udC5wZWVrQnl0ZSgpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybUlkOiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ0lkOiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nczogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzU2hvcnRDbWFwOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzU2hvcnRDbWFwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBwaW5ncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiwgZ2x5cGhJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgMjU2OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBmb250LmdldEJ5dGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlOiBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkOiBpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNTaG9ydENtYXAgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ0NvdW50ID0gZm9udC5nZXRVaW50MTYoKSA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5nZXRCeXRlcyg2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWdJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGZvbnQuZ2V0VWludDE2KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChzZWdJbmRleCA9IDA7IHNlZ0luZGV4IDwgc2VnQ291bnQ7IHNlZ0luZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWdtZW50c1tzZWdJbmRleF0uc3RhcnQgPSBmb250LmdldFVpbnQxNigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRzW3NlZ0luZGV4XS5kZWx0YSA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRzQ291bnQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlT2Zmc2V0ID0gZm9udC5nZXRVaW50MTYoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmFuZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vZmZzZXRJbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0SW5kZXggPSAocmFuZ2VPZmZzZXQgPj4gMSkgLSAoc2VnQ291bnQgLSBzZWdJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5vZmZzZXRJbmRleCA9IG9mZnNldEluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldHNDb3VudCA9IE1hdGgubWF4KG9mZnNldHNDb3VudCwgb2Zmc2V0SW5kZXggKyBzZWdtZW50LmVuZCAtIHNlZ21lbnQuc3RhcnQgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG9mZnNldHNDb3VudDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKGZvbnQuZ2V0VWludDE2KCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHNlZ0luZGV4ID0gMDsgc2VnSW5kZXggPCBzZWdDb3VudDsgc2VnSW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZ21lbnQgPSBzZWdtZW50c1tzZWdJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBzZWdtZW50LnN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBzZWdtZW50LmVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGEgPSBzZWdtZW50LmRlbHRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldEluZGV4ID0gc2VnbWVudC5vZmZzZXRJbmRleDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHN0YXJ0OyBqIDw9IGVuZDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IG9mZnNldEluZGV4IDwgMCA/IGogOiBvZmZzZXRzW29mZnNldEluZGV4ICsgaiAtIHN0YXJ0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IGdseXBoSWQgKyBkZWx0YSAmIDB4RkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZTogaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQ6IGdseXBoSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0Q29kZSA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnlDb3VudCA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBlbnRyeUNvdW50OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckNvZGUgPSBmaXJzdENvZGUgKyBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZTogY2hhckNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQ6IGdseXBoSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnY21hcCB0YWJsZSBoYXMgdW5zdXBwb3J0ZWQgZm9ybWF0OiAnICsgZm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1JZDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdJZDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc1Nob3J0Q21hcDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5jaGFyQ29kZSAtIGIuY2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBtYXBwaW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmdzW2kgLSAxXS5jaGFyQ29kZSA9PT0gbWFwcGluZ3NbaV0uY2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5ncy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtSWQ6IHBvdGVudGlhbFRhYmxlLnBsYXRmb3JtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ0lkOiBwb3RlbnRpYWxUYWJsZS5lbmNvZGluZ0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ3M6IG1hcHBpbmdzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzU2hvcnRDbWFwOiBoYXNTaG9ydENtYXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzYW5pdGl6ZU1ldHJpY3MoZm9udCwgaGVhZGVyLCBtZXRyaWNzLCBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRyaWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5kYXRhID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgPSAoZm9udC5zdGFydCA/IGZvbnQuc3RhcnQgOiAwKSArIGhlYWRlci5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1PZk1ldHJpY3MgPSBmb250LmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW1PZk1ldHJpY3MgPiBudW1HbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnVGhlIG51bU9mTWV0cmljcyAoJyArIG51bU9mTWV0cmljcyArICcpIHNob3VsZCBub3QgYmUgJyArICdncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoJyArIG51bUdseXBocyArICcpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1PZk1ldHJpY3MgPSBudW1HbHlwaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZGF0YVszNF0gPSAobnVtT2ZNZXRyaWNzICYgMHhmZjAwKSA+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmRhdGFbMzVdID0gbnVtT2ZNZXRyaWNzICYgMHgwMGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bU9mU2lkZWJlYXJpbmdzID0gbnVtR2x5cGhzIC0gbnVtT2ZNZXRyaWNzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtTWlzc2luZyA9IG51bU9mU2lkZWJlYXJpbmdzIC0gKG1ldHJpY3MubGVuZ3RoIC0gbnVtT2ZNZXRyaWNzICogNCA+PiAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtTWlzc2luZyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyaWVzID0gbmV3IFVpbnQ4QXJyYXkobWV0cmljcy5sZW5ndGggKyBudW1NaXNzaW5nICogMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzLnNldChtZXRyaWNzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljcy5kYXRhID0gZW50cmllcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGgoc291cmNlLCBzb3VyY2VTdGFydCwgc291cmNlRW5kLCBkZXN0LCBkZXN0U3RhcnQsIGhpbnRzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoUHJvZmlsZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVPZkluc3RydWN0aW9uczogMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VFbmQgLSBzb3VyY2VTdGFydCA8PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlmID0gc291cmNlLnN1YmFycmF5KHNvdXJjZVN0YXJ0LCBzb3VyY2VFbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udG91cnNDb3VudCA9IHNpZ25lZEludDE2KGdseWZbMF0sIGdseWZbMV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250b3Vyc0NvdW50IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udG91cnNDb3VudCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVTaWduZWRJbnQxNihnbHlmLCAwLCBjb250b3Vyc0NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KGdseWYsIGRlc3RTdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5Zi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnc0NvdW50ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29udG91cnNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kUG9pbnQgPSBnbHlmW2pdIDw8IDggfCBnbHlmW2ogKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzQ291bnQgPSBlbmRQb2ludCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zU3RhcnQgPSBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zTGVuZ3RoID0gZ2x5ZltqXSA8PCA4IHwgZ2x5ZltqICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoUHJvZmlsZS5zaXplT2ZJbnN0cnVjdGlvbnMgPSBpbnN0cnVjdGlvbnNMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMiArIGluc3RydWN0aW9uc0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RydWN0aW9uc0VuZCA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZGluYXRlc0xlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZsYWdzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsYWcgPSBnbHlmW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnICYgMHhDMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseWZbaiAtIDFdID0gZmxhZyAmIDB4M0Y7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4eUxlbmd0aCA9IChmbGFnICYgMiA/IDEgOiBmbGFnICYgMTYgPyAwIDogMikgKyAoZmxhZyAmIDQgPyAxIDogZmxhZyAmIDMyID8gMCA6IDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNMZW5ndGggKz0geHlMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFnICYgOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXBlYXQgPSBnbHlmW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSByZXBlYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZXNMZW5ndGggKz0gcmVwZWF0ICogeHlMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRpbmF0ZXNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaFByb2ZpbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhEYXRhTGVuZ3RoID0gaiArIGNvb3JkaW5hdGVzTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaERhdGFMZW5ndGggPiBnbHlmLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGludHNWYWxpZCAmJiBpbnN0cnVjdGlvbnNMZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNldChnbHlmLnN1YmFycmF5KDAsIGluc3RydWN0aW9uc1N0YXJ0KSwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KFswLCAwXSwgZGVzdFN0YXJ0ICsgaW5zdHJ1Y3Rpb25zU3RhcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5zZXQoZ2x5Zi5zdWJhcnJheShpbnN0cnVjdGlvbnNFbmQsIGdseXBoRGF0YUxlbmd0aCksIGRlc3RTdGFydCArIGluc3RydWN0aW9uc1N0YXJ0ICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaERhdGFMZW5ndGggLT0gaW5zdHJ1Y3Rpb25zTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5Zi5sZW5ndGggLSBnbHlwaERhdGFMZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhEYXRhTGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoICsgMyAmIH4zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFByb2ZpbGUubGVuZ3RoID0gZ2x5cGhEYXRhTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoUHJvZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlmLmxlbmd0aCAtIGdseXBoRGF0YUxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoRGF0YUxlbmd0aCA9IGdseXBoRGF0YUxlbmd0aCArIDMgJiB+MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KGdseWYuc3ViYXJyYXkoMCwgZ2x5cGhEYXRhTGVuZ3RoKSwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoUHJvZmlsZS5sZW5ndGggPSBnbHlwaERhdGFMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5zZXQoZ2x5ZiwgZGVzdFN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhQcm9maWxlLmxlbmd0aCA9IGdseWYubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhQcm9maWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNhbml0aXplSGVhZChoZWFkLCBudW1HbHlwaHMsIGxvY2FMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBoZWFkLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gaW50MzIoZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPj4gMTYgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCB2ZXJzaW9uIGluIGhlYWQgdGFibGU6ICcgKyB2ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsxXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzJdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbM10gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4VG9Mb2NGb3JtYXQgPSBpbnQxNihkYXRhWzUwXSwgZGF0YVs1MV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleFRvTG9jRm9ybWF0IDwgMCB8fCBpbmRleFRvTG9jRm9ybWF0ID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdBdHRlbXB0aW5nIHRvIGZpeCBpbnZhbGlkIGluZGV4VG9Mb2NGb3JtYXQgaW4gaGVhZCB0YWJsZTogJyArIGluZGV4VG9Mb2NGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUdseXBoc1BsdXNPbmUgPSBudW1HbHlwaHMgKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYUxlbmd0aCA9PT0gbnVtR2x5cGhzUGx1c09uZSA8PCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs1MF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNTFdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYUxlbmd0aCA9PT0gbnVtR2x5cGhzUGx1c09uZSA8PCAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVs1MF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbNTFdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdDb3VsZCBub3QgZml4IGluZGV4VG9Mb2NGb3JtYXQ6ICcgKyBpbmRleFRvTG9jRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNhbml0aXplR2x5cGhMb2NhdGlvbnMobG9jYSwgZ2x5ZiwgbnVtR2x5cGhzLCBpc0dseXBoTG9jYXRpb25zTG9uZywgaGludHNWYWxpZCwgZHVwRmlyc3RFbnRyeSwgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtU2l6ZSwgaXRlbURlY29kZSwgaXRlbUVuY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNHbHlwaExvY2F0aW9uc0xvbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURlY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRGVjb2RlTG9uZyhkYXRhLCBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRW5jb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGVMb25nKGRhdGEsIG9mZnNldCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+Pj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgMV0gPSB2YWx1ZSA+PiAxNiAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtvZmZzZXQgKyAyXSA9IHZhbHVlID4+IDggJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0ICsgM10gPSB2YWx1ZSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNpemUgPSAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA5IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVuY29kZSA9IGZ1bmN0aW9uIGZvbnRJdGVtRW5jb2RlKGRhdGEsIG9mZnNldCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldF0gPSB2YWx1ZSA+PiA5ICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldCArIDFdID0gdmFsdWUgPj4gMSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUdseXBoc091dCA9IGR1cEZpcnN0RW50cnkgPyBudW1HbHlwaHMgKyAxIDogbnVtR2x5cGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbG9jYURhdGEgPSBsb2NhLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhRGF0YVNpemUgPSBpdGVtU2l6ZSAqICgxICsgbnVtR2x5cGhzT3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYURhdGEgPSBuZXcgVWludDhBcnJheShsb2NhRGF0YVNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhRGF0YS5zZXQobG9jYS5kYXRhLnN1YmFycmF5KDAsIGxvY2FEYXRhU2l6ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhLmRhdGEgPSBsb2NhRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9sZEdseWZEYXRhID0gZ2x5Zi5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkR2x5ZkRhdGFMZW5ndGggPSBvbGRHbHlmRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdHbHlmRGF0YSA9IG5ldyBVaW50OEFycmF5KG9sZEdseWZEYXRhTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0T2Zmc2V0ID0gaXRlbURlY29kZShsb2NhRGF0YSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZU9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaXNzaW5nR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgMCwgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gaXRlbVNpemU7IGkgPCBudW1HbHlwaHM7IGkrKywgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZE9mZnNldCA9IGl0ZW1EZWNvZGUobG9jYURhdGEsIGopO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRPZmZzZXQgPiBvbGRHbHlmRGF0YUxlbmd0aCAmJiAob2xkR2x5ZkRhdGFMZW5ndGggKyAzICYgfjMpID09PSBlbmRPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQgPSBvbGRHbHlmRGF0YUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9mZnNldCA+IG9sZEdseWZEYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSBlbmRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFByb2ZpbGUgPSBzYW5pdGl6ZUdseXBoKG9sZEdseWZEYXRhLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBuZXdHbHlmRGF0YSwgd3JpdGVPZmZzZXQsIGhpbnRzVmFsaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld0xlbmd0aCA9IGdseXBoUHJvZmlsZS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW5nR2x5cGhzW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoUHJvZmlsZS5zaXplT2ZJbnN0cnVjdGlvbnMgPiBtYXhTaXplT2ZJbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnMgPSBnbHlwaFByb2ZpbGUuc2l6ZU9mSW5zdHJ1Y3Rpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZU9mZnNldCArPSBuZXdMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRW5jb2RlKGxvY2FEYXRhLCBqLCB3cml0ZU9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydE9mZnNldCA9IGVuZE9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZU9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpbXBsZUdseXBoID0gbmV3IFVpbnQ4QXJyYXkoWzAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGogPSBpdGVtU2l6ZTsgaSA8IG51bUdseXBoc091dDsgaSsrLCBqICs9IGl0ZW1TaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVuY29kZShsb2NhRGF0YSwgaiwgc2ltcGxlR2x5cGgubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5Zi5kYXRhID0gc2ltcGxlR2x5cGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZHVwRmlyc3RFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0RW50cnlMZW5ndGggPSBpdGVtRGVjb2RlKGxvY2FEYXRhLCBpdGVtU2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdHbHlmRGF0YS5sZW5ndGggPiBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlmLmRhdGEgPSBuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlmLmRhdGEgPSBuZXcgVWludDhBcnJheShmaXJzdEVudHJ5TGVuZ3RoICsgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseWYuZGF0YS5zZXQobmV3R2x5ZkRhdGEuc3ViYXJyYXkoMCwgd3JpdGVPZmZzZXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5Zi5kYXRhLnNldChuZXdHbHlmRGF0YS5zdWJhcnJheSgwLCBmaXJzdEVudHJ5TGVuZ3RoKSwgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUVuY29kZShsb2NhLmRhdGEsIGxvY2FEYXRhLmxlbmd0aCAtIGl0ZW1TaXplLCB3cml0ZU9mZnNldCArIGZpcnN0RW50cnlMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5Zi5kYXRhID0gbmV3R2x5ZkRhdGEuc3ViYXJyYXkoMCwgd3JpdGVPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdHbHlwaHM6IG1pc3NpbmdHbHlwaHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplT2ZJbnN0cnVjdGlvbnM6IG1heFNpemVPZkluc3RydWN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRQb3N0U2NyaXB0VGFibGUocG9zdCwgcHJvcGVydGllcywgbWF4cE51bUdseXBocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAoZm9udC5zdGFydCA/IGZvbnQuc3RhcnQgOiAwKSArIHBvc3Qub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LnBvcyA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gcG9zdC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBzdGFydCArIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBmb250LmdldEludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQuZ2V0Qnl0ZXMoMjgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhOYW1lcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMTAwMDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhOYW1lcyA9IE1hY1N0YW5kYXJkR2x5cGhPcmRlcmluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwMDIwMDAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1HbHlwaHMgPSBmb250LmdldFVpbnQxNigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUdseXBocyAhPT0gbWF4cE51bUdseXBocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhOYW1lSW5kZXhlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDMyNzY4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWVJbmRleGVzLnB1c2goaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1c3RvbU5hbWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGZvbnQucG9zIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdMZW5ndGggPSBmb250LmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IHN0cmluZ0xlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyaW5nTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZltpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZm9udC5nZXRCeXRlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tTmFtZXMucHVzaChzdHJCdWYuam9pbignJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IGdseXBoTmFtZUluZGV4ZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCAyNTgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZXMucHVzaChNYWNTdGFuZGFyZEdseXBoT3JkZXJpbmdbal0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goY3VzdG9tTmFtZXNbaiAtIDI1OF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDAwMzAwMDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmtub3duL3Vuc3VwcG9ydGVkIHBvc3QgdGFibGUgdmVyc2lvbiAnICsgdmVyc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmRlZmF1bHRFbmNvZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWVzID0gcHJvcGVydGllcy5kZWZhdWx0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdseXBoTmFtZXMgPSBnbHlwaE5hbWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZE5hbWVUYWJsZShuYW1lVGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gKGZvbnQuc3RhcnQgPyBmb250LnN0YXJ0IDogMCkgKyBuYW1lVGFibGUub2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LnBvcyA9IHN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBbW10sIFtdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG5hbWVUYWJsZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBzdGFydCArIGxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBGT1JNQVRfMF9IRUFERVJfTEVOR1RIID0gNjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICE9PSAwIHx8IGxlbmd0aCA8IEZPUk1BVF8wX0hFQURFUl9MRU5HVEgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1SZWNvcmRzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ3NTdGFydCA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBOQU1FX1JFQ09SRF9MRU5HVEggPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1SZWNvcmRzICYmIGZvbnQucG9zICsgTkFNRV9SRUNPUkRfTEVOR1RIIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZzogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZTogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmb250LmdldFVpbnQxNigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogZm9udC5nZXRVaW50MTYoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGZvbnQuZ2V0VWludDE2KClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyLnBsYXRmb3JtID09PSAxICYmIHIuZW5jb2RpbmcgPT09IDAgJiYgci5sYW5ndWFnZSA9PT0gMCB8fCByLnBsYXRmb3JtID09PSAzICYmIHIuZW5jb2RpbmcgPT09IDEgJiYgci5sYW5ndWFnZSA9PT0gMHg0MDkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzLnB1c2gocik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHJlY29yZHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHJlY29yZHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQubGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IHN0YXJ0ICsgc3RyaW5nc1N0YXJ0ICsgcmVjb3JkLm9mZnNldDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBvcyArIHJlY29yZC5sZW5ndGggPiBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUluZGV4ID0gcmVjb3JkLm5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQuZW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSByZWNvcmQubGVuZ3RoOyBqIDwgamo7IGogKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdldFVpbnQxNigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc1sxXVtuYW1lSW5kZXhdID0gc3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc1swXVtuYW1lSW5kZXhdID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGZvbnQuZ2V0Qnl0ZXMocmVjb3JkLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hbWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBUVE9wc1N0YWNrRGVsdGFzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIC0yLCAtMiwgLTIsIC0yLCAwLCAwLCAtMiwgLTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMCwgMCwgLTEsIDAsIC0xLCAtMSwgLTEsIC0xLCAxLCAtMSwgLTk5OSwgMCwgMSwgMCwgLTEsIC0yLCAwLCAtMSwgLTIsIC0xLCAtMSwgMCwgLTEsIC0xLCAwLCAwLCAtOTk5LCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTIsIC05OTksIC0yLCAtMiwgLTk5OSwgMCwgLTIsIC0yLCAwLCAwLCAtMiwgMCwgLTIsIDAsIDAsIDAsIC0yLCAtMSwgLTEsIDEsIDEsIDAsIDAsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAtMSwgMCwgLTEsIC0xLCAwLCAtOTk5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAtMiwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTk5OSwgLTEsIC0xLCAtMiwgLTIsIDAsIDAsIDAsIDAsIC0xLCAtMSwgLTk5OSwgLTIsIC0yLCAwLCAwLCAtMSwgLTIsIC0yLCAwLCAwLCAwLCAtMSwgLTEsIC0xLCAtMl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzYW5pdGl6ZVRUUHJvZ3JhbSh0YWJsZSwgdHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGFibGUuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RW5kZiA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmZiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbHN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmdW5jdGlvbnNDYWxsZWQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbkZERUYgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmTGV2ZWwgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5FTFNFID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaSA9IGRhdGEubGVuZ3RoOyBpIDwgaWk7KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3AgPSBkYXRhW2krK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcCA9PT0gMHg0MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBkYXRhW2krK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHg0MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBkYXRhW2krK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IG4gKiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBkYXRhW2krK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGIgPDwgOCB8IGRhdGFbaSsrXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvcCAmIDB4RjgpID09PSAweEIwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG9wIC0gMHhCMCArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChkYXRhW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgob3AgJiAweEY4KSA9PT0gMHhCOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBvcCAtIDB4QjggKyAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBuICogMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gZGF0YVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChiIDw8IDggfCBkYXRhW2krK10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgyQiAmJiAhdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbkZERUYgJiYgIWluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jSWQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZnVuY0lkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdUVDogQ0FMTCBlbXB0eSBzdGFjayAob3IgaW52YWxpZCBlbnRyeSkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dENvbnRleHQuZnVuY3Rpb25zVXNlZFtmdW5jSWRdID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmNJZCBpbiB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3U3RhY2tMZW5ndGggPSBzdGFjay5sZW5ndGggKyB0dENvbnRleHQuZnVuY3Rpb25zU3RhY2tEZWx0YXNbZnVuY0lkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdGFja0xlbmd0aCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogQ0FMTCBpbnZhbGlkIGZ1bmN0aW9ucyBzdGFjayBkZWx0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLmxlbmd0aCA9IG5ld1N0YWNrTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdW5jSWQgaW4gdHRDb250ZXh0LmZ1bmN0aW9uc0RlZmluZWQgJiYgIWZ1bmN0aW9uc0NhbGxlZC5pbmNsdWRlcyhmdW5jSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbHN0YWNrLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1RvcDogc3RhY2subGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc0NhbGxlZC5wdXNoKGZ1bmNJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMgPSB0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtmdW5jSWRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1RUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dENvbnRleHQuaGludHNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBjLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHBjLmk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDJDICYmICF0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGIHx8IGluRUxTRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1RUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkZERUYgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3REZWZmID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jSWQgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZFtmdW5jSWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiBpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MkQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5GREVGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluRkRFRiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RW5kZiA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGMgPSBjYWxsc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogRU5ERiBiYWQgc3RhY2snKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jSWQgPSBmdW5jdGlvbnNDYWxsZWQucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwYy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gcGMuaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW2Z1bmNJZF0gPSBzdGFjay5sZW5ndGggLSBwYy5zdGFja1RvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDg5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluRkRFRiB8fCBpbkVMU0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogbmVzdGVkIElERUZzIG5vdCBhbGxvd2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5GREVGID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RGVmZiA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDU4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytpZkxldmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvcCA9PT0gMHgxQikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluRUxTRSA9IGlmTGV2ZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9wID09PSAweDU5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluRUxTRSA9PT0gaWZMZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbkVMU0UgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0taWZMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAob3AgPT09IDB4MUMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluRkRFRiAmJiAhaW5FTFNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBvZmZzZXQgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWluRkRFRiAmJiAhaW5FTFNFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrRGVsdGEgPSBvcCA8PSAweDhFID8gVFRPcHNTdGFja0RlbHRhc1tvcF0gOiBvcCA+PSAweEMwICYmIG9wIDw9IDB4REYgPyAtMSA6IG9wID49IDB4RTAgPyAtMiA6IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AgPj0gMHg3MSAmJiBvcCA8PSAweDc1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKG4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhID0gLW4gKiAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrRGVsdGEgPCAwICYmIHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGErKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhY2tEZWx0YSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChOYU4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyA9IHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBbZGF0YV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudC5wdXNoKG5ldyBVaW50OEFycmF5KGkgLSBkYXRhLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3REZWZmID4gbGFzdEVuZGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQucHVzaChuZXcgVWludDhBcnJheShbMHgyMiwgMHgyRF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRUVFRhYmxlKHRhYmxlLCBjb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGVja0ludmFsaWRGdW5jdGlvbnModHRDb250ZXh0LCBtYXhGdW5jdGlvbkRlZnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR0Q29udGV4dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dENvbnRleHQuZnVuY3Rpb25zRGVmaW5lZC5sZW5ndGggPiBtYXhGdW5jdGlvbkRlZnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHR0Q29udGV4dC5mdW5jdGlvbnNVc2VkLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID4gbWF4RnVuY3Rpb25EZWZzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogJyArIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR0Q29udGV4dC5oaW50c1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHRDb250ZXh0LmZ1bmN0aW9uc1VzZWRbal0gJiYgIXR0Q29udGV4dC5mdW5jdGlvbnNEZWZpbmVkW2pdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUVDogdW5kZWZpbmVkIGZ1bmN0aW9uOiAnICsgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHRDb250ZXh0LmhpbnRzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmb2xkVFRUYWJsZSh0YWJsZSwgY29udGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqLCBqajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBjb250ZW50Lmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdMZW5ndGggKz0gY29udGVudFtqXS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0xlbmd0aCA9IG5ld0xlbmd0aCArIDMgJiB+MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBuZXcgVWludDhBcnJheShuZXdMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDAsIGpqID0gY29udGVudC5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNldChjb250ZW50W2pdLCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSBjb250ZW50W2pdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGUuZGF0YSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLmxlbmd0aCA9IG5ld0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtcyhmcGdtLCBwcmVwLCBjdnQsIG1heEZ1bmN0aW9uRGVmcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHRDb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zRGVmaW5lZDogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNVc2VkOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1N0YWNrRGVsdGFzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaW50c1ZhbGlkOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZwZ20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbml0aXplVFRQcm9ncmFtKGZwZ20sIHR0Q29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVUVFByb2dyYW0ocHJlcCwgdHRDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcGdtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ludmFsaWRGdW5jdGlvbnModHRDb250ZXh0LCBtYXhGdW5jdGlvbkRlZnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN2dCAmJiBjdnQubGVuZ3RoICYgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN2dERhdGEgPSBuZXcgVWludDhBcnJheShjdnQubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdnREYXRhLnNldChjdnQuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdnQuZGF0YSA9IGN2dERhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHRDb250ZXh0LmhpbnRzVmFsaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9IG5ldyBfc3RyZWFtLlN0cmVhbShuZXcgVWludDhBcnJheShmb250LmdldEJ5dGVzKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyLCB0YWJsZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGZvbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0dGNEYXRhID0gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkRhdGEoZm9udCwgdGhpcy5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyID0gdHRjRGF0YS5oZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlcyA9IHR0Y0RhdGEudGFibGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciA9IHJlYWRPcGVuVHlwZUhlYWRlcihmb250KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzID0gcmVhZFRhYmxlcyhmb250LCBoZWFkZXIubnVtVGFibGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZmLCBjZmZGaWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1RydWVUeXBlID0gIXRhYmxlc1snQ0ZGICddO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RydWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbXBvc2l0ZSA9IHByb3BlcnRpZXMuY29tcG9zaXRlICYmICgocHJvcGVydGllcy5jaWRUb0dpZE1hcCB8fCBbXSkubGVuZ3RoID4gMCB8fCAhKHByb3BlcnRpZXMuY01hcCBpbnN0YW5jZW9mIF9jbWFwLklkZW50aXR5Q01hcCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZWFkZXIudmVyc2lvbiA9PT0gJ09UVE8nICYmICFpc0NvbXBvc2l0ZSB8fCAhdGFibGVzWydoZWFkJ10gfHwgIXRhYmxlc1snaGhlYSddIHx8ICF0YWJsZXNbJ21heHAnXSB8fCAhdGFibGVzWydwb3N0J10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZkZpbGUgPSBuZXcgX3N0cmVhbS5TdHJlYW0odGFibGVzWydDRkYgJ10uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYgPSBuZXcgQ0ZGRm9udChjZmZGaWxlLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdFdpZHRocyhwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnQobmFtZSwgY2ZmLCBwcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YWJsZXNbJ2dseWYnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlc1snbG9jYSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGFibGVzWydmcGdtJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YWJsZXNbJ3ByZXAnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlc1snY3Z0ICddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzT3BlblR5cGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVzWydsb2NhJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJsb2NhXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlc1snZ2x5ZiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1JlcXVpcmVkIFwiZ2x5ZlwiIHRhYmxlIGlzIG5vdCBmb3VuZCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snZ2x5ZiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogJ2dseWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG5ldyBVaW50OEFycmF5KDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc09wZW5UeXBlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZXNbJ21heHAnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1JlcXVpcmVkIFwibWF4cFwiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zID0gKGZvbnQuc3RhcnQgfHwgMCkgKyB0YWJsZXNbJ21heHAnXS5vZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnNpb24gPSBmb250LmdldEludDMyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUdseXBocyA9IGZvbnQuZ2V0VWludDE2KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUdseXBoc091dCA9IG51bUdseXBocyArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGR1cEZpcnN0RW50cnkgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUdseXBoc091dCA+IDB4RkZGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXBGaXJzdEVudHJ5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bUdseXBoc091dCA9IG51bUdseXBocztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4RnVuY3Rpb25EZWZzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJzaW9uID49IDB4MDAwMTAwMDAgJiYgdGFibGVzWydtYXhwJ10ubGVuZ3RoID49IDIyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQucG9zICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXhab25lcyA9IGZvbnQuZ2V0VWludDE2KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heFpvbmVzID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydtYXhwJ10uZGF0YVsxNF0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydtYXhwJ10uZGF0YVsxNV0gPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4RnVuY3Rpb25EZWZzID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5wb3MgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zID0gZm9udC5nZXRVaW50MTYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ21heHAnXS5kYXRhWzRdID0gbnVtR2x5cGhzT3V0ID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydtYXhwJ10uZGF0YVs1XSA9IG51bUdseXBoc091dCAmIDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGludHNWYWxpZCA9IHNhbml0aXplVFRQcm9ncmFtcyh0YWJsZXNbJ2ZwZ20nXSwgdGFibGVzWydwcmVwJ10sIHRhYmxlc1snY3Z0ICddLCBtYXhGdW5jdGlvbkRlZnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoaW50c1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YWJsZXNbJ2ZwZ20nXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhYmxlc1sncHJlcCddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGFibGVzWydjdnQgJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVNZXRyaWNzKGZvbnQsIHRhYmxlc1snaGhlYSddLCB0YWJsZXNbJ2htdHgnXSwgbnVtR2x5cGhzT3V0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVzWydoZWFkJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdSZXF1aXJlZCBcImhlYWRcIiB0YWJsZSBpcyBub3QgZm91bmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZUhlYWQodGFibGVzWydoZWFkJ10sIG51bUdseXBocywgaXNUcnVlVHlwZSA/IHRhYmxlc1snbG9jYSddLmxlbmd0aCA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaXNzaW5nR2x5cGhzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RydWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0dseXBoTG9jYXRpb25zTG9uZyA9IGludDE2KHRhYmxlc1snaGVhZCddLmRhdGFbNTBdLCB0YWJsZXNbJ2hlYWQnXS5kYXRhWzUxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNJbmZvID0gc2FuaXRpemVHbHlwaExvY2F0aW9ucyh0YWJsZXNbJ2xvY2EnXSwgdGFibGVzWydnbHlmJ10sIG51bUdseXBocywgaXNHbHlwaExvY2F0aW9uc0xvbmcsIGhpbnRzVmFsaWQsIGR1cEZpcnN0RW50cnksIG1heFNpemVPZkluc3RydWN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pc3NpbmdHbHlwaHMgPSBnbHlwaHNJbmZvLm1pc3NpbmdHbHlwaHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcnNpb24gPj0gMHgwMDAxMDAwMCAmJiB0YWJsZXNbJ21heHAnXS5sZW5ndGggPj0gMjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snbWF4cCddLmRhdGFbMjZdID0gZ2x5cGhzSW5mby5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgPj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snbWF4cCddLmRhdGFbMjddID0gZ2x5cGhzSW5mby5tYXhTaXplT2ZJbnN0cnVjdGlvbnMgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRhYmxlc1snaGhlYSddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignUmVxdWlyZWQgXCJoaGVhXCIgdGFibGUgaXMgbm90IGZvdW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlc1snaGhlYSddLmRhdGFbMTBdID09PSAwICYmIHRhYmxlc1snaGhlYSddLmRhdGFbMTFdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snaGhlYSddLmRhdGFbMTBdID0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydoaGVhJ10uZGF0YVsxMV0gPSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRyaWNzT3ZlcnJpZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzUGVyRW06IGludDE2KHRhYmxlc1snaGVhZCddLmRhdGFbMThdLCB0YWJsZXNbJ2hlYWQnXS5kYXRhWzE5XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlNYXg6IGludDE2KHRhYmxlc1snaGVhZCddLmRhdGFbNDJdLCB0YWJsZXNbJ2hlYWQnXS5kYXRhWzQzXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlNaW46IHNpZ25lZEludDE2KHRhYmxlc1snaGVhZCddLmRhdGFbMzhdLCB0YWJsZXNbJ2hlYWQnXS5kYXRhWzM5XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY2VudDogaW50MTYodGFibGVzWydoaGVhJ10uZGF0YVs0XSwgdGFibGVzWydoaGVhJ10uZGF0YVs1XSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NlbnQ6IHNpZ25lZEludDE2KHRhYmxlc1snaGhlYSddLmRhdGFbNl0sIHRhYmxlc1snaGhlYSddLmRhdGFbN10pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFzY2VudCA9IG1ldHJpY3NPdmVycmlkZS5hc2NlbnQgLyBtZXRyaWNzT3ZlcnJpZGUudW5pdHNQZXJFbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc2NlbnQgPSBtZXRyaWNzT3ZlcnJpZGUuZGVzY2VudCAvIG1ldHJpY3NPdmVycmlkZS51bml0c1BlckVtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlc1sncG9zdCddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRQb3N0U2NyaXB0VGFibGUodGFibGVzWydwb3N0J10sIHByb3BlcnRpZXMsIG51bUdseXBocyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydwb3N0J10gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogJ3Bvc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjcmVhdGVQb3N0VGFibGUocHJvcGVydGllcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZVRvR2x5cGhJZCA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhc0dseXBoKGdseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtaXNzaW5nR2x5cGhzW2dseXBoSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2lkVG9HaWRNYXAgPSBwcm9wZXJ0aWVzLmNpZFRvR2lkTWFwIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNDaWRUb0dpZE1hcEVtcHR5ID0gY2lkVG9HaWRNYXAubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmNNYXAuZm9yRWFjaChmdW5jdGlvbiAoY2hhckNvZGUsIGNpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNpZCA+IDB4ZmZmZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTWF4IHNpemUgb2YgQ0lEIGlzIDY1LDUzNScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhJZCA9IC0xO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNDaWRUb0dpZE1hcEVtcHR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IGNpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2lkVG9HaWRNYXBbY2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IGNpZFRvR2lkTWFwW2NpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID49IDAgJiYgZ2x5cGhJZCA8IG51bUdseXBocyAmJiBoYXNHbHlwaChnbHlwaElkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwVGFibGUgPSByZWFkQ21hcFRhYmxlKHRhYmxlc1snY21hcCddLCBmb250LCB0aGlzLmlzU3ltYm9saWNGb250LCBwcm9wZXJ0aWVzLmhhc0VuY29kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtYXBQbGF0Zm9ybUlkID0gY21hcFRhYmxlLnBsYXRmb3JtSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwRW5jb2RpbmdJZCA9IGNtYXBUYWJsZS5lbmNvZGluZ0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21hcE1hcHBpbmdzID0gY21hcFRhYmxlLm1hcHBpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21hcE1hcHBpbmdzTGVuZ3RoID0gY21hcE1hcHBpbmdzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNFbmNvZGluZyAmJiAoY21hcFBsYXRmb3JtSWQgPT09IDMgJiYgY21hcEVuY29kaW5nSWQgPT09IDEgfHwgY21hcFBsYXRmb3JtSWQgPT09IDEgJiYgY21hcEVuY29kaW5nSWQgPT09IDApIHx8IGNtYXBQbGF0Zm9ybUlkID09PSAtMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gLTEgJiYgISEoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VFbmNvZGluZyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSAnTWFjUm9tYW5FbmNvZGluZycgfHwgcHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lID09PSAnV2luQW5zaUVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VFbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShwcm9wZXJ0aWVzLmJhc2VFbmNvZGluZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2hhckNvZGUgPSAwOyBjaGFyQ29kZSA8IDI1NjsgY2hhckNvZGUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaE5hbWUsIHN0YW5kYXJkR2x5cGhOYW1lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGlmZmVyZW5jZXMgJiYgY2hhckNvZGUgaW4gdGhpcy5kaWZmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWUgPSB0aGlzLmRpZmZlcmVuY2VzW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlIGluIGJhc2VFbmNvZGluZyAmJiBiYXNlRW5jb2RpbmdbY2hhckNvZGVdICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWUgPSBiYXNlRW5jb2RpbmdbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZSA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZ1tjaGFyQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnbHlwaE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhbmRhcmRHbHlwaE5hbWUgPSByZWNvdmVyR2x5cGhOYW1lKGdseXBoTmFtZSwgZ2x5cGhzVW5pY29kZU1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGVPckNoYXJDb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNtYXBFbmNvZGluZ0lkID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGVPckNoYXJDb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtzdGFuZGFyZEdseXBoTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjbWFwUGxhdGZvcm1JZCA9PT0gMSAmJiBjbWFwRW5jb2RpbmdJZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlT3JDaGFyQ29kZSA9IF9lbmNvZGluZ3MuTWFjUm9tYW5FbmNvZGluZy5pbmRleE9mKHN0YW5kYXJkR2x5cGhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm91bmQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY21hcE1hcHBpbmdzTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtYXBNYXBwaW5nc1tpXS5jaGFyQ29kZSAhPT0gdW5pY29kZU9yQ2hhckNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW2ldLmdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZCAmJiBwcm9wZXJ0aWVzLmdseXBoTmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoSWQgPSBwcm9wZXJ0aWVzLmdseXBoTmFtZXMuaW5kZXhPZihnbHlwaE5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID09PSAtMSAmJiBzdGFuZGFyZEdseXBoTmFtZSAhPT0gZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkID0gcHJvcGVydGllcy5nbHlwaE5hbWVzLmluZGV4T2Yoc3RhbmRhcmRHbHlwaE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoSWQgPiAwICYmIGhhc0dseXBoKGdseXBoSWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAwICYmIGNtYXBFbmNvZGluZ0lkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBjbWFwTWFwcGluZ3NMZW5ndGg7ICsrX2kyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY21hcE1hcHBpbmdzW19pMl0uY2hhckNvZGVdID0gY21hcE1hcHBpbmdzW19pMl0uZ2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGNtYXBNYXBwaW5nc0xlbmd0aDsgKytfaTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZSA9IGNtYXBNYXBwaW5nc1tfaTNdLmNoYXJDb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNtYXBQbGF0Zm9ybUlkID09PSAzICYmIGNoYXJDb2RlID49IDB4RjAwMCAmJiBjaGFyQ29kZSA8PSAweEYwRkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGUgJj0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSBjbWFwTWFwcGluZ3NbX2kzXS5nbHlwaElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJDb2RlVG9HbHlwaElkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFswXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoWmVyb0lkID0gbnVtR2x5cGhzT3V0IC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZHVwRmlyc3RFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFplcm9JZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01hcHBpbmcgPSBhZGp1c3RNYXBwaW5nKGNoYXJDb2RlVG9HbHlwaElkLCBoYXNHbHlwaCwgZ2x5cGhaZXJvSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Gb250Q2hhciA9IG5ld01hcHBpbmcudG9Gb250Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ2NtYXAnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiAnY21hcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGNyZWF0ZUNtYXBUYWJsZShuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkLCBudW1HbHlwaHNPdXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVzWydPUy8yJ10gfHwgIXZhbGlkYXRlT1MyVGFibGUodGFibGVzWydPUy8yJ10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlc1snT1MvMiddID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnOiAnT1MvMicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjcmVhdGVPUzJUYWJsZShwcm9wZXJ0aWVzLCBuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkLCBtZXRyaWNzT3ZlcnJpZGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RydWVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmZGaWxlID0gbmV3IF9zdHJlYW0uU3RyZWFtKHRhYmxlc1snQ0ZGICddLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQYXJzZXIoY2ZmRmlsZSwgcHJvcGVydGllcywgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZiA9IHBhcnNlci5wYXJzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21waWxlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDb21waWxlcihjZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzWydDRkYgJ10uZGF0YSA9IGNvbXBpbGVyLmNvbXBpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdGYWlsZWQgdG8gY29tcGlsZSBmb250ICcgKyBwcm9wZXJ0aWVzLmxvYWRlZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0YWJsZXNbJ25hbWUnXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ25hbWUnXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZzogJ25hbWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogY3JlYXRlTmFtZVRhYmxlKHRoaXMubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZVByb3RvdHlwZSA9IHJlYWROYW1lVGFibGUodGFibGVzWyduYW1lJ10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXNbJ25hbWUnXS5kYXRhID0gY3JlYXRlTmFtZVRhYmxlKG5hbWUsIG5hbWVQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWlsZGVyID0gbmV3IE9wZW5UeXBlRmlsZUJ1aWxkZXIoaGVhZGVyLnZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdGFibGVUYWcgaW4gdGFibGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVGFibGUodGFibGVUYWcsIHRhYmxlc1t0YWJsZVRhZ10uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9BcnJheSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIEZvbnRfY29udmVydChmb250TmFtZSwgZm9udCwgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZml4ZWRQaXRjaCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdFRvVW5pY29kZShwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoWmVyb0lkID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250IGluc3RhbmNlb2YgQ0ZGRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaFplcm9JZCA9IGZvbnQubnVtR2x5cGhzIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IGZvbnQuZ2V0R2x5cGhNYXBwaW5nKHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdNYXBwaW5nID0gYWRqdXN0TWFwcGluZyhtYXBwaW5nLCBmb250Lmhhc0dseXBoSWQuYmluZChmb250KSwgZ2x5cGhaZXJvSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9Gb250Q2hhciA9IG5ld01hcHBpbmcudG9Gb250Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtR2x5cGhzID0gZm9udC5udW1HbHlwaHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRDaGFyQ29kZXMoY2hhckNvZGVUb0dseXBoSWQsIGdseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJDb2RlcyA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgY2hhckNvZGUgaW4gY2hhckNvZGVUb0dseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID09PSBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJDb2Rlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZXMucHVzaChjaGFyQ29kZSB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJDb2RlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVDaGFyQ29kZShjaGFyQ29kZVRvR2x5cGhJZCwgZ2x5cGhJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBjaGFyQ29kZVRvR2x5cGhJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoSWQgPT09IGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdNYXBwaW5nLmNoYXJDb2RlVG9HbHlwaElkW25ld01hcHBpbmcubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV0gPSBnbHlwaElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3TWFwcGluZy5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYWNzID0gZm9udC5zZWFjcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTRUFDX0FOQUxZU0lTX0VOQUJMRUQgJiYgc2VhY3MgJiYgc2VhY3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXggPSBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggfHwgX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc2V0ID0gZm9udC5nZXRDaGFyc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWFjTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBnbHlwaElkIGluIHNlYWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkIHw9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhYyA9IHNlYWNzW2dseXBoSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VHbHlwaE5hbWUgPSBfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2Rpbmdbc2VhY1syXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWNjZW50R2x5cGhOYW1lID0gX2VuY29kaW5ncy5TdGFuZGFyZEVuY29kaW5nW3NlYWNbM11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2VHbHlwaElkID0gY2hhcnNldC5pbmRleE9mKGJhc2VHbHlwaE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VudEdseXBoSWQgPSBjaGFyc2V0LmluZGV4T2YoYWNjZW50R2x5cGhOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2VHbHlwaElkIDwgMCB8fCBhY2NlbnRHbHlwaElkIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWNjZW50T2Zmc2V0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHNlYWNbMF0gKiBtYXRyaXhbMF0gKyBzZWFjWzFdICogbWF0cml4WzJdICsgbWF0cml4WzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IHNlYWNbMF0gKiBtYXRyaXhbMV0gKyBzZWFjWzFdICogbWF0cml4WzNdICsgbWF0cml4WzVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJDb2RlcyA9IGdldENoYXJDb2RlcyhtYXBwaW5nLCBnbHlwaElkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFyQ29kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2hhckNvZGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckNvZGUgPSBjaGFyQ29kZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJDb2RlVG9HbHlwaElkID0gbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUZvbnRDaGFyQ29kZSA9IGNyZWF0ZUNoYXJDb2RlKGNoYXJDb2RlVG9HbHlwaElkLCBiYXNlR2x5cGhJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VudEZvbnRDaGFyQ29kZSA9IGNyZWF0ZUNoYXJDb2RlKGNoYXJDb2RlVG9HbHlwaElkLCBhY2NlbnRHbHlwaElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFjTWFwW2NoYXJDb2RlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZUZvbnRDaGFyQ29kZTogYmFzZUZvbnRDaGFyQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZW50Rm9udENoYXJDb2RlOiBhY2NlbnRGb250Q2hhckNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VudE9mZnNldDogYWNjZW50T2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuc2VhY01hcCA9IHNlYWNNYXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaXRzUGVyRW0gPSAxIC8gKHByb3BlcnRpZXMuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgT3BlblR5cGVGaWxlQnVpbGRlcignXFx4NEZcXHg1NFxceDU0XFx4NEYnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdDRkYgJywgZm9udC5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdPUy8yJywgY3JlYXRlT1MyVGFibGUocHJvcGVydGllcywgbmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVGFibGUoJ2NtYXAnLCBjcmVhdGVDbWFwVGFibGUobmV3TWFwcGluZy5jaGFyQ29kZVRvR2x5cGhJZCwgbnVtR2x5cGhzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRUYWJsZSgnaGVhZCcsICdcXHgwMFxceDAxXFx4MDBcXHgwMCcgKyAnXFx4MDBcXHgwMFxceDEwXFx4MDAnICsgJ1xceDAwXFx4MDBcXHgwMFxceDAwJyArICdcXHg1RlxceDBGXFx4M0NcXHhGNScgKyAnXFx4MDBcXHgwMCcgKyBzYWZlU3RyaW5nMTYodW5pdHNQZXJFbSkgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDBcXHg5ZVxceDBiXFx4N2VcXHgyNycgKyAnXFx4MDBcXHgwMFxceDAwXFx4MDBcXHg5ZVxceDBiXFx4N2VcXHgyNycgKyAnXFx4MDBcXHgwMCcgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5kZXNjZW50KSArICdcXHgwRlxceEZGJyArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmFzY2VudCkgKyBzdHJpbmcxNihwcm9wZXJ0aWVzLml0YWxpY0FuZ2xlID8gMiA6IDApICsgJ1xceDAwXFx4MTEnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdoaGVhJywgJ1xceDAwXFx4MDFcXHgwMFxceDAwJyArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmFzY2VudCkgKyBzYWZlU3RyaW5nMTYocHJvcGVydGllcy5kZXNjZW50KSArICdcXHgwMFxceDAwJyArICdcXHhGRlxceEZGJyArICdcXHgwMFxceDAwJyArICdcXHgwMFxceDAwJyArICdcXHgwMFxceDAwJyArIHNhZmVTdHJpbmcxNihwcm9wZXJ0aWVzLmNhcEhlaWdodCkgKyBzYWZlU3RyaW5nMTYoTWF0aC50YW4ocHJvcGVydGllcy5pdGFsaWNBbmdsZSkgKiBwcm9wZXJ0aWVzLnhIZWlnaHQpICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgJ1xceDAwXFx4MDAnICsgc3RyaW5nMTYobnVtR2x5cGhzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hZGRUYWJsZSgnaG10eCcsIGZ1bmN0aW9uIGZvbnRGaWVsZHNIbXR4KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnN0cmluZ3MgPSBmb250LmNoYXJzdHJpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZmV2lkdGhzID0gZm9udC5jZmYgPyBmb250LmNmZi53aWR0aHMgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG10eCA9ICdcXHgwMFxceDAwXFx4MDBcXHgwMCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGlpID0gbnVtR2x5cGhzOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJzdHJpbmcgPSBjaGFyc3RyaW5nc1tpIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAnd2lkdGgnIGluIGNoYXJzdHJpbmcgPyBjaGFyc3RyaW5nLndpZHRoIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ZmV2lkdGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmNlaWwoY2ZmV2lkdGhzW2ldIHx8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBobXR4ICs9IHN0cmluZzE2KHdpZHRoKSArIHN0cmluZzE2KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhtdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdtYXhwJywgJ1xceDAwXFx4MDBcXHg1MFxceDAwJyArIHN0cmluZzE2KG51bUdseXBocykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYWRkVGFibGUoJ25hbWUnLCBjcmVhdGVOYW1lVGFibGUoZm9udE5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFkZFRhYmxlKCdwb3N0JywgY3JlYXRlUG9zdFRhYmxlKHByb3BlcnRpZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlci50b0FycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgc3BhY2VXaWR0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ19zaGFkb3dXaWR0aCcgaW4gdGhpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc2hhZG93V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHMgPSBbJ3NwYWNlJywgJ21pbnVzJywgJ29uZScsICdpJywgJ0knXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwb3NzaWJsZVNwYWNlUmVwbGFjZW1lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoTmFtZSA9IHBvc3NpYmxlU3BhY2VSZXBsYWNlbWVudHNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoTmFtZSBpbiB0aGlzLndpZHRocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoc1tnbHlwaE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzVW5pY29kZU1hcCA9ICgwLCBfZ2x5cGhsaXN0LmdldEdseXBoc1VuaWNvZGUpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaFVuaWNvZGUgPSBnbHlwaHNVbmljb2RlTWFwW2dseXBoTmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyY29kZSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29tcG9zaXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jTWFwLmNvbnRhaW5zKGdseXBoVW5pY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyY29kZSA9IHRoaXMuY01hcC5sb29rdXAoZ2x5cGhVbmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hhcmNvZGUgJiYgdGhpcy50b1VuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gdGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihnbHlwaFVuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJjb2RlIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gZ2x5cGhVbmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoc1tjaGFyY29kZV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGggfHwgdGhpcy5kZWZhdWx0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hhZG93V2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFyVG9HbHlwaDogZnVuY3Rpb24gRm9udF9jaGFyVG9HbHlwaChjaGFyY29kZSwgaXNTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250Q2hhckNvZGUsIHdpZHRoLCBvcGVyYXRvckxpc3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhDb2RlID0gY2hhcmNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jTWFwICYmIHRoaXMuY01hcC5jb250YWlucyhjaGFyY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGhDb2RlID0gdGhpcy5jTWFwLmxvb2t1cChjaGFyY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLndpZHRoc1t3aWR0aENvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gKDAsIF91dGlsLmlzTnVtKSh3aWR0aCkgPyB3aWR0aCA6IHRoaXMuZGVmYXVsdFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2bWV0cmljID0gdGhpcy52bWV0cmljcyAmJiB0aGlzLnZtZXRyaWNzW3dpZHRoQ29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSB0aGlzLnRvVW5pY29kZS5nZXQoY2hhcmNvZGUpIHx8IHRoaXMuZmFsbGJhY2tUb1VuaWNvZGUuZ2V0KGNoYXJjb2RlKSB8fCBjaGFyY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdW5pY29kZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodW5pY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzSW5Gb250ID0gY2hhcmNvZGUgaW4gdGhpcy50b0ZvbnRDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDaGFyQ29kZSA9IHRoaXMudG9Gb250Q2hhcltjaGFyY29kZV0gfHwgY2hhcmNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5taXNzaW5nRmlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250Q2hhckNvZGUgPSAoMCwgX3VuaWNvZGUubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKGZvbnRDaGFyQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JMaXN0SWQgPSBmb250Q2hhckNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjY2VudCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWFjTWFwICYmIHRoaXMuc2VhY01hcFtjaGFyY29kZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbkZvbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhYyA9IHRoaXMuc2VhY01hcFtjaGFyY29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRDaGFyQ29kZSA9IHNlYWMuYmFzZUZvbnRDaGFyQ29kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZW50ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udENoYXI6IFN0cmluZy5mcm9tQ29kZVBvaW50KHNlYWMuYWNjZW50Rm9udENoYXJDb2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDogc2VhYy5hY2NlbnRPZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udENoYXIgPSB0eXBlb2YgZm9udENoYXJDb2RlID09PSAnbnVtYmVyJyA/IFN0cmluZy5mcm9tQ29kZVBvaW50KGZvbnRDaGFyQ29kZSkgOiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSB0aGlzLmdseXBoQ2FjaGVbY2hhcmNvZGVdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFnbHlwaCB8fCAhZ2x5cGgubWF0Y2hlc0ZvckNhY2hlKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gbmV3IEdseXBoKGZvbnRDaGFyLCB1bmljb2RlLCBhY2NlbnQsIHdpZHRoLCB2bWV0cmljLCBvcGVyYXRvckxpc3RJZCwgaXNTcGFjZSwgaXNJbkZvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdseXBoQ2FjaGVbY2hhcmNvZGVdID0gZ2x5cGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzVG9HbHlwaHM6IGZ1bmN0aW9uIEZvbnRfY2hhcnNUb0dseXBocyhjaGFycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc0NhY2hlID0gdGhpcy5jaGFyc0NhY2hlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHMsIGdseXBoLCBjaGFyY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyc0NhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocyA9IGNoYXJzQ2FjaGVbY2hhcnNdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJzQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNDYWNoZSA9IHRoaXMuY2hhcnNDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJzQ2FjaGVLZXkgPSBjaGFycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBjaGFycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY01hcC5yZWFkQ2hhckNvZGUoY2hhcnMsIGksIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcmNvZGUgPSBjLmNoYXJjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNTcGFjZSA9IGxlbmd0aCA9PT0gMSAmJiBjaGFycy5jaGFyQ29kZUF0KGkgLSAxKSA9PT0gMHgyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gdGhpcy5jaGFyVG9HbHlwaChjaGFyY29kZSwgaXNTcGFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaHMucHVzaChnbHlwaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNoYXJzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJjb2RlID0gY2hhcnMuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gdGhpcy5jaGFyVG9HbHlwaChjaGFyY29kZSwgY2hhcmNvZGUgPT09IDB4MjApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzLnB1c2goZ2x5cGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJzQ2FjaGVbY2hhcnNDYWNoZUtleV0gPSBnbHlwaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZ2x5cGhDYWNoZVZhbHVlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmdseXBoQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGb250O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuRm9udCA9IEZvbnQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgRXJyb3JGb250ID0gZnVuY3Rpb24gRXJyb3JGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRXJyb3JGb250KGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZE5hbWUgPSAnZ19mb250X2Vycm9yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWlzc2luZ0ZpbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgRXJyb3JGb250LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzVG9HbHlwaHM6IGZ1bmN0aW9uIEVycm9yRm9udF9jaGFyc1RvR2x5cGhzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnREYXRhOiBmdW5jdGlvbiBFcnJvckZvbnRfZXhwb3J0RGF0YSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdGhpcy5lcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFcnJvckZvbnQ7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5FcnJvckZvbnQgPSBFcnJvckZvbnQ7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcocHJvcGVydGllcywgYnVpbHRJbkVuY29kaW5nLCBnbHlwaE5hbWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaElkLCBjaGFyQ29kZSwgYmFzZUVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNTeW1ib2xpY0ZvbnQgPSAhIShwcm9wZXJ0aWVzLmZsYWdzICYgRm9udEZsYWdzLlN5bWJvbGljKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlRW5jb2RpbmcgPSAoMCwgX2VuY29kaW5ncy5nZXRFbmNvZGluZykocHJvcGVydGllcy5iYXNlRW5jb2RpbmdOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoYmFzZUVuY29kaW5nW2NoYXJDb2RlXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTeW1ib2xpY0ZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2hhckNvZGUgaW4gYnVpbHRJbkVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VFbmNvZGluZyA9IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjaGFyQ29kZSA9IDA7IGNoYXJDb2RlIDwgYmFzZUVuY29kaW5nLmxlbmd0aDsgY2hhckNvZGUrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoYmFzZUVuY29kaW5nW2NoYXJDb2RlXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZmVyZW5jZXMgPSBwcm9wZXJ0aWVzLmRpZmZlcmVuY2VzLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzVW5pY29kZU1hcDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZGlmZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY2hhckNvZGUgaW4gZGlmZmVyZW5jZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhOYW1lID0gZGlmZmVyZW5jZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQgPSBnbHlwaE5hbWVzLmluZGV4T2YoZ2x5cGhOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdseXBoc1VuaWNvZGVNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoc1VuaWNvZGVNYXAgPSAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YW5kYXJkR2x5cGhOYW1lID0gcmVjb3ZlckdseXBoTmFtZShnbHlwaE5hbWUsIGdseXBoc1VuaWNvZGVNYXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFuZGFyZEdseXBoTmFtZSAhPT0gZ2x5cGhOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaElkID0gZ2x5cGhOYW1lcy5pbmRleE9mKHN0YW5kYXJkR2x5cGhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaElkID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckNvZGVUb0dseXBoSWRbY2hhckNvZGVdID0gZ2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtjaGFyQ29kZV0gPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgVHlwZTFGb250ID0gZnVuY3Rpb24gVHlwZTFGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluZEJsb2NrKHN0cmVhbUJ5dGVzLCBzaWduYXR1cmUsIHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1CeXRlc0xlbmd0aCA9IHN0cmVhbUJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWduYXR1cmVMZW5ndGggPSBzaWduYXR1cmUubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYW5MZW5ndGggPSBzdHJlYW1CeXRlc0xlbmd0aCAtIHNpZ25hdHVyZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgc2Nhbkxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBzaWduYXR1cmVMZW5ndGggJiYgc3RyZWFtQnl0ZXNbaSArIGpdID09PSBzaWduYXR1cmVbal0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID49IHNpZ25hdHVyZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBzdHJlYW1CeXRlc0xlbmd0aCAmJiAoMCwgX3V0aWwuaXNTcGFjZSkoc3RyZWFtQnl0ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZDogZm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0SGVhZGVyQmxvY2soc3RyZWFtLCBzdWdnZXN0ZWRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBFRVhFQ19TSUdOQVRVUkUgPSBbMHg2NSwgMHg2NSwgMHg3OCwgMHg2NSwgMHg2M107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtU3RhcnRQb3MgPSBzdHJlYW0ucG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRlckJ5dGVzLCBoZWFkZXJCeXRlc0xlbmd0aCwgYmxvY2s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyQnl0ZXMgPSBzdHJlYW0uZ2V0Qnl0ZXMoc3VnZ2VzdGVkTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJCeXRlc0xlbmd0aCA9IGhlYWRlckJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgX3V0aWwuTWlzc2luZ0RhdGFFeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZGVyQnl0ZXNMZW5ndGggPT09IHN1Z2dlc3RlZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gZmluZEJsb2NrKGhlYWRlckJ5dGVzLCBFRVhFQ19TSUdOQVRVUkUsIHN1Z2dlc3RlZExlbmd0aCAtIDIgKiBFRVhFQ19TSUdOQVRVUkUubGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay5mb3VuZCAmJiBibG9jay5sZW5ndGggPT09IHN1Z2dlc3RlZExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiBuZXcgX3N0cmVhbS5TdHJlYW0oaGVhZGVyQnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBzdWdnZXN0ZWRMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBcIkxlbmd0aDFcIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHRyeWluZyB0byByZWNvdmVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyA9IHN0cmVhbVN0YXJ0UG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFNDQU5fQkxPQ0tfTEVOR1RIID0gMjA0ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY3R1YWxMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYW5CeXRlcyA9IHN0cmVhbS5wZWVrQnl0ZXMoU0NBTl9CTE9DS19MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gZmluZEJsb2NrKHNjYW5CeXRlcywgRUVYRUNfU0lHTkFUVVJFLCAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9jay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnBvcyArPSBibG9jay5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2suZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsTGVuZ3RoID0gc3RyZWFtLnBvcyAtIHN0cmVhbVN0YXJ0UG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW1TdGFydFBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdHVhbExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKHN0cmVhbS5nZXRCeXRlcyhhY3R1YWxMZW5ndGgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBhY3R1YWxMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1VuYWJsZSB0byByZWNvdmVyIFwiTGVuZ3RoMVwiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKHN0cmVhbS5nZXRCeXRlcyhzdWdnZXN0ZWRMZW5ndGgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IHN1Z2dlc3RlZExlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEVleGVjQmxvY2soc3RyZWFtLCBzdWdnZXN0ZWRMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlZXhlY0J5dGVzID0gc3RyZWFtLmdldEJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogbmV3IF9zdHJlYW0uU3RyZWFtKGVleGVjQnl0ZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogZWV4ZWNCeXRlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUeXBlMUZvbnQobmFtZSwgZmlsZSwgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFBGQl9IRUFERVJfU0laRSA9IDY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyQmxvY2tMZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWV4ZWNCbG9ja0xlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZmJIZWFkZXIgPSBmaWxlLnBlZWtCeXRlcyhQRkJfSEVBREVSX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBmYkhlYWRlclByZXNlbnQgPSBwZmJIZWFkZXJbMF0gPT09IDB4ODAgJiYgcGZiSGVhZGVyWzFdID09PSAweDAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGZiSGVhZGVyUHJlc2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUuc2tpcChQRkJfSEVBREVSX1NJWkUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlckJsb2NrTGVuZ3RoID0gcGZiSGVhZGVyWzVdIDw8IDI0IHwgcGZiSGVhZGVyWzRdIDw8IDE2IHwgcGZiSGVhZGVyWzNdIDw8IDggfCBwZmJIZWFkZXJbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXJCbG9jayA9IGdldEhlYWRlckJsb2NrKGZpbGUsIGhlYWRlckJsb2NrTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWFkZXJCbG9ja1BhcnNlciA9IG5ldyBfdHlwZTFfcGFyc2VyLlR5cGUxUGFyc2VyKGhlYWRlckJsb2NrLnN0cmVhbSwgZmFsc2UsIFNFQUNfQU5BTFlTSVNfRU5BQkxFRCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJCbG9ja1BhcnNlci5leHRyYWN0Rm9udEhlYWRlcihwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBmYkhlYWRlclByZXNlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZmJIZWFkZXIgPSBmaWxlLmdldEJ5dGVzKFBGQl9IRUFERVJfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWV4ZWNCbG9ja0xlbmd0aCA9IHBmYkhlYWRlcls1XSA8PCAyNCB8IHBmYkhlYWRlcls0XSA8PCAxNiB8IHBmYkhlYWRlclszXSA8PCA4IHwgcGZiSGVhZGVyWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWV4ZWNCbG9jayA9IGdldEVleGVjQmxvY2soZmlsZSwgZWV4ZWNCbG9ja0xlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWV4ZWNCbG9ja1BhcnNlciA9IG5ldyBfdHlwZTFfcGFyc2VyLlR5cGUxUGFyc2VyKGVleGVjQmxvY2suc3RyZWFtLCB0cnVlLCBTRUFDX0FOQUxZU0lTX0VOQUJMRUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBlZXhlY0Jsb2NrUGFyc2VyLmV4dHJhY3RGb250UHJvZ3JhbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpbmZvIGluIGRhdGEucHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNbaW5mb10gPSBkYXRhLnByb3BlcnRpZXNbaW5mb107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc3RyaW5ncyA9IGRhdGEuY2hhcnN0cmluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZTJDaGFyc3RyaW5ncyA9IHRoaXMuZ2V0VHlwZTJDaGFyc3RyaW5ncyhjaGFyc3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VicnMgPSB0aGlzLmdldFR5cGUyU3VicnMoZGF0YS5zdWJycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJzdHJpbmdzID0gY2hhcnN0cmluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLndyYXAobmFtZSwgdHlwZTJDaGFyc3RyaW5ncywgdGhpcy5jaGFyc3RyaW5ncywgc3VicnMsIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFjcyA9IHRoaXMuZ2V0U2VhY3MoZGF0YS5jaGFyc3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBUeXBlMUZvbnQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IG51bUdseXBocygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGFyc3RyaW5ncy5sZW5ndGggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2hhcnNldDogZnVuY3Rpb24gVHlwZTFGb250X2dldENoYXJzZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJzZXQgPSBbJy5ub3RkZWYnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnN0cmluZ3MgPSB0aGlzLmNoYXJzdHJpbmdzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgZ2x5cGhJZCA9IDA7IGdseXBoSWQgPCBjaGFyc3RyaW5ncy5sZW5ndGg7IGdseXBoSWQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0LnB1c2goY2hhcnN0cmluZ3NbZ2x5cGhJZF0uZ2x5cGhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRHbHlwaE1hcHBpbmc6IGZ1bmN0aW9uIFR5cGUxRm9udF9nZXRHbHlwaE1hcHBpbmcocHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc3RyaW5ncyA9IHRoaXMuY2hhcnN0cmluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoTmFtZXMgPSBbJy5ub3RkZWYnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZ2x5cGhJZCA9IDA7IGdseXBoSWQgPCBjaGFyc3RyaW5ncy5sZW5ndGg7IGdseXBoSWQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaE5hbWVzLnB1c2goY2hhcnN0cmluZ3NbZ2x5cGhJZF0uZ2x5cGhOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RpbmcgPSBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmNvZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVpbHRJbkVuY29kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjaGFyQ29kZSBpbiBlbmNvZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhJZCA9IGdseXBoTmFtZXMuaW5kZXhPZihlbmNvZGluZ1tjaGFyQ29kZV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGhJZCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRJbkVuY29kaW5nW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTFGb250R2x5cGhNYXBwaW5nKHByb3BlcnRpZXMsIGJ1aWx0SW5FbmNvZGluZywgZ2x5cGhOYW1lcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzR2x5cGhJZDogZnVuY3Rpb24gVHlwZTFGb250X2hhc0dseXBoSUQoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPCAwIHx8IGlkID49IHRoaXMubnVtR2x5cGhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoID0gdGhpcy5jaGFyc3RyaW5nc1tpZCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaC5jaGFyc3RyaW5nLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2VhY3M6IGZ1bmN0aW9uIFR5cGUxRm9udF9nZXRTZWFjcyhjaGFyc3RyaW5ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VhY01hcCA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFyc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc3RyaW5nID0gY2hhcnN0cmluZ3NbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzdHJpbmcuc2VhYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhY01hcFtpICsgMV0gPSBjaGFyc3RyaW5nLnNlYWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VhY01hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUeXBlMkNoYXJzdHJpbmdzOiBmdW5jdGlvbiBUeXBlMUZvbnRfZ2V0VHlwZTJDaGFyc3RyaW5ncyh0eXBlMUNoYXJzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUyQ2hhcnN0cmluZ3MgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHR5cGUxQ2hhcnN0cmluZ3MubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlMkNoYXJzdHJpbmdzLnB1c2godHlwZTFDaGFyc3RyaW5nc1tpXS5jaGFyc3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZTJDaGFyc3RyaW5ncztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUeXBlMlN1YnJzOiBmdW5jdGlvbiBUeXBlMUZvbnRfZ2V0VHlwZTJTdWJycyh0eXBlMVN1YnJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpYXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IHR5cGUxU3VicnMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50IDwgMTEzMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWFzID0gMTA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY291bnQgPCAzMzc2OSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWFzID0gMTEzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWFzID0gMzI3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUyU3VicnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBiaWFzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTJTdWJycy5wdXNoKFsweDBCXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTJTdWJycy5wdXNoKHR5cGUxU3VicnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlMlN1YnJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGZ1bmN0aW9uIFR5cGUxRm9udF93cmFwKG5hbWUsIGdseXBocywgY2hhcnN0cmluZ3MsIHN1YnJzLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNmZiA9IG5ldyBfY2ZmX3BhcnNlci5DRkYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuaGVhZGVyID0gbmV3IF9jZmZfcGFyc2VyLkNGRkhlYWRlcigxLCAwLCA0LCA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYubmFtZXMgPSBbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvcERpY3QgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGVG9wRGljdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcERpY3Quc2V0QnlOYW1lKCd2ZXJzaW9uJywgMzkxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnTm90aWNlJywgMzkyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnRnVsbE5hbWUnLCAzOTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcERpY3Quc2V0QnlOYW1lKCdGYW1pbHlOYW1lJywgMzk0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnV2VpZ2h0JywgMzk1KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnRW5jb2RpbmcnLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnRm9udE1hdHJpeCcsIHByb3BlcnRpZXMuZm9udE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdC5zZXRCeU5hbWUoJ0ZvbnRCQm94JywgcHJvcGVydGllcy5iYm94KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0LnNldEJ5TmFtZSgnY2hhcnNldCcsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcERpY3Quc2V0QnlOYW1lKCdDaGFyU3RyaW5ncycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcERpY3Quc2V0QnlOYW1lKCdQcml2YXRlJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdzID0gbmV3IF9jZmZfcGFyc2VyLkNGRlN0cmluZ3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLmFkZCgnVmVyc2lvbiAwLjExJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncy5hZGQoJ1NlZSBvcmlnaW5hbCBub3RpY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLmFkZChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLmFkZChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzLmFkZCgnTWVkaXVtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLnN0cmluZ3MgPSBzdHJpbmdzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5nbG9iYWxTdWJySW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBnbHlwaHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc2V0QXJyYXkgPSBbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gX2NmZl9wYXJzZXIuQ0ZGU3RhbmRhcmRTdHJpbmdzLmluZGV4T2YoY2hhcnN0cmluZ3NbaV0uZ2x5cGhOYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0QXJyYXkucHVzaChpbmRleCA+PiA4ICYgMHhmZiwgaW5kZXggJiAweGZmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuY2hhcnNldCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDaGFyc2V0KGZhbHNlLCAwLCBbXSwgY2hhcnNldEFycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclN0cmluZ3NJbmRleCA9IG5ldyBfY2ZmX3BhcnNlci5DRkZJbmRleCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKFsweDhCLCAweDBFXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyU3RyaW5nc0luZGV4LmFkZChnbHlwaHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVEaWN0ID0gbmV3IF9jZmZfcGFyc2VyLkNGRlByaXZhdGVEaWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZURpY3Quc2V0QnlOYW1lKCdTdWJycycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZHMgPSBbJ0JsdWVWYWx1ZXMnLCAnT3RoZXJCbHVlcycsICdGYW1pbHlCbHVlcycsICdGYW1pbHlPdGhlckJsdWVzJywgJ1N0ZW1TbmFwSCcsICdTdGVtU25hcFYnLCAnQmx1ZVNoaWZ0JywgJ0JsdWVGdXp6JywgJ0JsdWVTY2FsZScsICdMYW5ndWFnZUdyb3VwJywgJ0V4cGFuc2lvbkZhY3RvcicsICdGb3JjZUJvbGQnLCAnU3RkSFcnLCAnU3RkVlcnXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZmllbGRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkID0gZmllbGRzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZpZWxkIGluIHByb3BlcnRpZXMucHJpdmF0ZURhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb3BlcnRpZXMucHJpdmF0ZURhdGFbZmllbGRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHZhbHVlLmxlbmd0aCAtIDE7IGogPiAwOyBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtqXSAtPSB2YWx1ZVtqIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdC5zZXRCeU5hbWUoZmllbGQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYudG9wRGljdC5wcml2YXRlRGljdCA9IHByaXZhdGVEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJySW5kZXggPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGSW5kZXgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gc3VicnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJySW5kZXguYWRkKHN1YnJzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdC5zdWJyc0luZGV4ID0gc3VickluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21waWxlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZDb21waWxlcihjZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21waWxlci5jb21waWxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlMUZvbnQ7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRkZvbnQgPSBmdW5jdGlvbiBDRkZGb250Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGRm9udChmaWxlLCBwcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfY2ZmX3BhcnNlci5DRkZQYXJzZXIoZmlsZSwgcHJvcGVydGllcywgU0VBQ19BTkFMWVNJU19FTkFCTEVEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2ZmID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZi5kdXBsaWNhdGVGaXJzdEdseXBoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGlsZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGQ29tcGlsZXIodGhpcy5jZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFjcyA9IHRoaXMuY2ZmLnNlYWNzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IGNvbXBpbGVyLmNvbXBpbGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ZhaWxlZCB0byBjb21waWxlIGZvbnQgJyArIHByb3BlcnRpZXMubG9hZGVkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gZmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRkZvbnQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IG51bUdseXBocygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDaGFyc2V0OiBmdW5jdGlvbiBDRkZGb250X2dldENoYXJzZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2ZmLmNoYXJzZXQuY2hhcnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRHbHlwaE1hcHBpbmc6IGZ1bmN0aW9uIENGRkZvbnRfZ2V0R2x5cGhNYXBwaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZmYgPSB0aGlzLmNmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcGVydGllcyA9IHRoaXMucHJvcGVydGllcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnNldHMgPSBjZmYuY2hhcnNldC5jaGFyc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmNvbXBvc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmZi5pc0NJREZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoZ2x5cGhJZCA9IDA7IGdseXBoSWQgPCBjaGFyc2V0cy5sZW5ndGg7IGdseXBoSWQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaWQgPSBjaGFyc2V0c1tnbHlwaElkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhckNvZGUgPSBwcm9wZXJ0aWVzLmNNYXAuY2hhckNvZGVPZihjaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlVG9HbHlwaElkW2NoYXJDb2RlXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGdseXBoSWQgPSAwOyBnbHlwaElkIDwgY2ZmLmNoYXJTdHJpbmdzLmNvdW50OyBnbHlwaElkKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZFtnbHlwaElkXSA9IGdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hhckNvZGVUb0dseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nID0gY2ZmLmVuY29kaW5nID8gY2ZmLmVuY29kaW5nLmVuY29kaW5nIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyQ29kZVRvR2x5cGhJZCA9IHR5cGUxRm9udEdseXBoTWFwcGluZyhwcm9wZXJ0aWVzLCBlbmNvZGluZywgY2hhcnNldHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFyQ29kZVRvR2x5cGhJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNHbHlwaElkOiBmdW5jdGlvbiBDRkZGb250X2hhc0dseXBoSUQoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jZmYuaGFzR2x5cGhJZChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDRkZGb250O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTc0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZGRFNlbGVjdCA9IGV4cG9ydHMuQ0ZGQ29tcGlsZXIgPSBleHBvcnRzLkNGRlByaXZhdGVEaWN0ID0gZXhwb3J0cy5DRkZUb3BEaWN0ID0gZXhwb3J0cy5DRkZDaGFyc2V0ID0gZXhwb3J0cy5DRkZJbmRleCA9IGV4cG9ydHMuQ0ZGU3RyaW5ncyA9IGV4cG9ydHMuQ0ZGSGVhZGVyID0gZXhwb3J0cy5DRkYgPSBleHBvcnRzLkNGRlBhcnNlciA9IGV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY2hhcnNldHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2VuY29kaW5ncyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc2KTtcblxuICAgICAgICAgICAgICAgIHZhciBNQVhfU1VCUl9ORVNUSU5HID0gMTA7XG4gICAgICAgICAgICAgICAgdmFyIENGRlN0YW5kYXJkU3RyaW5ncyA9IFsnLm5vdGRlZicsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVyaWdodCcsICdwYXJlbmxlZnQnLCAncGFyZW5yaWdodCcsICdhc3RlcmlzaycsICdwbHVzJywgJ2NvbW1hJywgJ2h5cGhlbicsICdwZXJpb2QnLCAnc2xhc2gnLCAnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScsICdzaXgnLCAnc2V2ZW4nLCAnZWlnaHQnLCAnbmluZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnbGVzcycsICdlcXVhbCcsICdncmVhdGVyJywgJ3F1ZXN0aW9uJywgJ2F0JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsICdicmFja2V0bGVmdCcsICdiYWNrc2xhc2gnLCAnYnJhY2tldHJpZ2h0JywgJ2FzY2lpY2lyY3VtJywgJ3VuZGVyc2NvcmUnLCAncXVvdGVsZWZ0JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICdleGNsYW1kb3duJywgJ2NlbnQnLCAnc3RlcmxpbmcnLCAnZnJhY3Rpb24nLCAneWVuJywgJ2Zsb3JpbicsICdzZWN0aW9uJywgJ2N1cnJlbmN5JywgJ3F1b3Rlc2luZ2xlJywgJ3F1b3RlZGJsbGVmdCcsICdndWlsbGVtb3RsZWZ0JywgJ2d1aWxzaW5nbGxlZnQnLCAnZ3VpbHNpbmdscmlnaHQnLCAnZmknLCAnZmwnLCAnZW5kYXNoJywgJ2RhZ2dlcicsICdkYWdnZXJkYmwnLCAncGVyaW9kY2VudGVyZWQnLCAncGFyYWdyYXBoJywgJ2J1bGxldCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncXVvdGVkYmxyaWdodCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdwZXJ0aG91c2FuZCcsICdxdWVzdGlvbmRvd24nLCAnZ3JhdmUnLCAnYWN1dGUnLCAnY2lyY3VtZmxleCcsICd0aWxkZScsICdtYWNyb24nLCAnYnJldmUnLCAnZG90YWNjZW50JywgJ2RpZXJlc2lzJywgJ3JpbmcnLCAnY2VkaWxsYScsICdodW5nYXJ1bWxhdXQnLCAnb2dvbmVrJywgJ2Nhcm9uJywgJ2VtZGFzaCcsICdBRScsICdvcmRmZW1pbmluZScsICdMc2xhc2gnLCAnT3NsYXNoJywgJ09FJywgJ29yZG1hc2N1bGluZScsICdhZScsICdkb3RsZXNzaScsICdsc2xhc2gnLCAnb3NsYXNoJywgJ29lJywgJ2dlcm1hbmRibHMnLCAnb25lc3VwZXJpb3InLCAnbG9naWNhbG5vdCcsICdtdScsICd0cmFkZW1hcmsnLCAnRXRoJywgJ29uZWhhbGYnLCAncGx1c21pbnVzJywgJ1Rob3JuJywgJ29uZXF1YXJ0ZXInLCAnZGl2aWRlJywgJ2Jyb2tlbmJhcicsICdkZWdyZWUnLCAndGhvcm4nLCAndGhyZWVxdWFydGVycycsICd0d29zdXBlcmlvcicsICdyZWdpc3RlcmVkJywgJ21pbnVzJywgJ2V0aCcsICdtdWx0aXBseScsICd0aHJlZXN1cGVyaW9yJywgJ2NvcHlyaWdodCcsICdBYWN1dGUnLCAnQWNpcmN1bWZsZXgnLCAnQWRpZXJlc2lzJywgJ0FncmF2ZScsICdBcmluZycsICdBdGlsZGUnLCAnQ2NlZGlsbGEnLCAnRWFjdXRlJywgJ0VjaXJjdW1mbGV4JywgJ0VkaWVyZXNpcycsICdFZ3JhdmUnLCAnSWFjdXRlJywgJ0ljaXJjdW1mbGV4JywgJ0lkaWVyZXNpcycsICdJZ3JhdmUnLCAnTnRpbGRlJywgJ09hY3V0ZScsICdPY2lyY3VtZmxleCcsICdPZGllcmVzaXMnLCAnT2dyYXZlJywgJ090aWxkZScsICdTY2Fyb24nLCAnVWFjdXRlJywgJ1VjaXJjdW1mbGV4JywgJ1VkaWVyZXNpcycsICdVZ3JhdmUnLCAnWWFjdXRlJywgJ1lkaWVyZXNpcycsICdaY2Fyb24nLCAnYWFjdXRlJywgJ2FjaXJjdW1mbGV4JywgJ2FkaWVyZXNpcycsICdhZ3JhdmUnLCAnYXJpbmcnLCAnYXRpbGRlJywgJ2NjZWRpbGxhJywgJ2VhY3V0ZScsICdlY2lyY3VtZmxleCcsICdlZGllcmVzaXMnLCAnZWdyYXZlJywgJ2lhY3V0ZScsICdpY2lyY3VtZmxleCcsICdpZGllcmVzaXMnLCAnaWdyYXZlJywgJ250aWxkZScsICdvYWN1dGUnLCAnb2NpcmN1bWZsZXgnLCAnb2RpZXJlc2lzJywgJ29ncmF2ZScsICdvdGlsZGUnLCAnc2Nhcm9uJywgJ3VhY3V0ZScsICd1Y2lyY3VtZmxleCcsICd1ZGllcmVzaXMnLCAndWdyYXZlJywgJ3lhY3V0ZScsICd5ZGllcmVzaXMnLCAnemNhcm9uJywgJ2V4Y2xhbXNtYWxsJywgJ0h1bmdhcnVtbGF1dHNtYWxsJywgJ2RvbGxhcm9sZHN0eWxlJywgJ2RvbGxhcnN1cGVyaW9yJywgJ2FtcGVyc2FuZHNtYWxsJywgJ0FjdXRlc21hbGwnLCAncGFyZW5sZWZ0c3VwZXJpb3InLCAncGFyZW5yaWdodHN1cGVyaW9yJywgJ3R3b2RvdGVubGVhZGVyJywgJ29uZWRvdGVubGVhZGVyJywgJ3plcm9vbGRzdHlsZScsICdvbmVvbGRzdHlsZScsICd0d29vbGRzdHlsZScsICd0aHJlZW9sZHN0eWxlJywgJ2ZvdXJvbGRzdHlsZScsICdmaXZlb2xkc3R5bGUnLCAnc2l4b2xkc3R5bGUnLCAnc2V2ZW5vbGRzdHlsZScsICdlaWdodG9sZHN0eWxlJywgJ25pbmVvbGRzdHlsZScsICdjb21tYXN1cGVyaW9yJywgJ3RocmVlcXVhcnRlcnNlbWRhc2gnLCAncGVyaW9kc3VwZXJpb3InLCAncXVlc3Rpb25zbWFsbCcsICdhc3VwZXJpb3InLCAnYnN1cGVyaW9yJywgJ2NlbnRzdXBlcmlvcicsICdkc3VwZXJpb3InLCAnZXN1cGVyaW9yJywgJ2lzdXBlcmlvcicsICdsc3VwZXJpb3InLCAnbXN1cGVyaW9yJywgJ25zdXBlcmlvcicsICdvc3VwZXJpb3InLCAncnN1cGVyaW9yJywgJ3NzdXBlcmlvcicsICd0c3VwZXJpb3InLCAnZmYnLCAnZmZpJywgJ2ZmbCcsICdwYXJlbmxlZnRpbmZlcmlvcicsICdwYXJlbnJpZ2h0aW5mZXJpb3InLCAnQ2lyY3VtZmxleHNtYWxsJywgJ2h5cGhlbnN1cGVyaW9yJywgJ0dyYXZlc21hbGwnLCAnQXNtYWxsJywgJ0JzbWFsbCcsICdDc21hbGwnLCAnRHNtYWxsJywgJ0VzbWFsbCcsICdGc21hbGwnLCAnR3NtYWxsJywgJ0hzbWFsbCcsICdJc21hbGwnLCAnSnNtYWxsJywgJ0tzbWFsbCcsICdMc21hbGwnLCAnTXNtYWxsJywgJ05zbWFsbCcsICdPc21hbGwnLCAnUHNtYWxsJywgJ1FzbWFsbCcsICdSc21hbGwnLCAnU3NtYWxsJywgJ1RzbWFsbCcsICdVc21hbGwnLCAnVnNtYWxsJywgJ1dzbWFsbCcsICdYc21hbGwnLCAnWXNtYWxsJywgJ1pzbWFsbCcsICdjb2xvbm1vbmV0YXJ5JywgJ29uZWZpdHRlZCcsICdydXBpYWgnLCAnVGlsZGVzbWFsbCcsICdleGNsYW1kb3duc21hbGwnLCAnY2VudG9sZHN0eWxlJywgJ0xzbGFzaHNtYWxsJywgJ1NjYXJvbnNtYWxsJywgJ1pjYXJvbnNtYWxsJywgJ0RpZXJlc2lzc21hbGwnLCAnQnJldmVzbWFsbCcsICdDYXJvbnNtYWxsJywgJ0RvdGFjY2VudHNtYWxsJywgJ01hY3JvbnNtYWxsJywgJ2ZpZ3VyZWRhc2gnLCAnaHlwaGVuaW5mZXJpb3InLCAnT2dvbmVrc21hbGwnLCAnUmluZ3NtYWxsJywgJ0NlZGlsbGFzbWFsbCcsICdxdWVzdGlvbmRvd25zbWFsbCcsICdvbmVlaWdodGgnLCAndGhyZWVlaWdodGhzJywgJ2ZpdmVlaWdodGhzJywgJ3NldmVuZWlnaHRocycsICdvbmV0aGlyZCcsICd0d290aGlyZHMnLCAnemVyb3N1cGVyaW9yJywgJ2ZvdXJzdXBlcmlvcicsICdmaXZlc3VwZXJpb3InLCAnc2l4c3VwZXJpb3InLCAnc2V2ZW5zdXBlcmlvcicsICdlaWdodHN1cGVyaW9yJywgJ25pbmVzdXBlcmlvcicsICd6ZXJvaW5mZXJpb3InLCAnb25laW5mZXJpb3InLCAndHdvaW5mZXJpb3InLCAndGhyZWVpbmZlcmlvcicsICdmb3VyaW5mZXJpb3InLCAnZml2ZWluZmVyaW9yJywgJ3NpeGluZmVyaW9yJywgJ3NldmVuaW5mZXJpb3InLCAnZWlnaHRpbmZlcmlvcicsICduaW5laW5mZXJpb3InLCAnY2VudGluZmVyaW9yJywgJ2RvbGxhcmluZmVyaW9yJywgJ3BlcmlvZGluZmVyaW9yJywgJ2NvbW1haW5mZXJpb3InLCAnQWdyYXZlc21hbGwnLCAnQWFjdXRlc21hbGwnLCAnQWNpcmN1bWZsZXhzbWFsbCcsICdBdGlsZGVzbWFsbCcsICdBZGllcmVzaXNzbWFsbCcsICdBcmluZ3NtYWxsJywgJ0FFc21hbGwnLCAnQ2NlZGlsbGFzbWFsbCcsICdFZ3JhdmVzbWFsbCcsICdFYWN1dGVzbWFsbCcsICdFY2lyY3VtZmxleHNtYWxsJywgJ0VkaWVyZXNpc3NtYWxsJywgJ0lncmF2ZXNtYWxsJywgJ0lhY3V0ZXNtYWxsJywgJ0ljaXJjdW1mbGV4c21hbGwnLCAnSWRpZXJlc2lzc21hbGwnLCAnRXRoc21hbGwnLCAnTnRpbGRlc21hbGwnLCAnT2dyYXZlc21hbGwnLCAnT2FjdXRlc21hbGwnLCAnT2NpcmN1bWZsZXhzbWFsbCcsICdPdGlsZGVzbWFsbCcsICdPZGllcmVzaXNzbWFsbCcsICdPRXNtYWxsJywgJ09zbGFzaHNtYWxsJywgJ1VncmF2ZXNtYWxsJywgJ1VhY3V0ZXNtYWxsJywgJ1VjaXJjdW1mbGV4c21hbGwnLCAnVWRpZXJlc2lzc21hbGwnLCAnWWFjdXRlc21hbGwnLCAnVGhvcm5zbWFsbCcsICdZZGllcmVzaXNzbWFsbCcsICcwMDEuMDAwJywgJzAwMS4wMDEnLCAnMDAxLjAwMicsICcwMDEuMDAzJywgJ0JsYWNrJywgJ0JvbGQnLCAnQm9vaycsICdMaWdodCcsICdNZWRpdW0nLCAnUmVndWxhcicsICdSb21hbicsICdTZW1pYm9sZCddO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGU3RhbmRhcmRTdHJpbmdzID0gQ0ZGU3RhbmRhcmRTdHJpbmdzO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRlBhcnNlciA9IGZ1bmN0aW9uIENGRlBhcnNlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGEgPSBbbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdoc3RlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFyaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RlbTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3ZzdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVtOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndm1vdmV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFyaW5nOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmxpbmV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnaGxpbmV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndmxpbmV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncnJjdXJ2ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogNixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdjYWxsc3VicicsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZlN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmV0dXJuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmU3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdlbmRjaGFyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdoc3RlbWhtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVtOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnaGludG1hc2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tDbGVhcmluZzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2NudHJtYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdybW92ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdobW92ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICd2c3RlbWhtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGVtOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmN1cnZlbGluZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmxpbmVjdXJ2ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDgsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndnZjdXJ2ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdoaGN1cnZldG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRTdGFjazogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2NhbGxnc3VicicsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmRlZlN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAndmhjdXJ2ZXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdodmN1cnZldG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRTdGFjazogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YTEyID0gW251bGwsIG51bGwsIG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogLTFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdub3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogMFxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCBudWxsLCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2FicycsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnYWRkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tGbjogZnVuY3Rpb24gc3RhY2tfZGl2KHN0YWNrLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW2luZGV4IC0gMl0gPSBzdGFja1tpbmRleCAtIDJdICsgc3RhY2tbaW5kZXggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdzdWInLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gLSBzdGFja1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2RpdicsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAtMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRm46IGZ1bmN0aW9uIHN0YWNrX2RpdihzdGFjaywgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tpbmRleCAtIDJdID0gc3RhY2tbaW5kZXggLSAyXSAvIHN0YWNrW2luZGV4IC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnbmVnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbaW5kZXggLSAxXSA9IC1zdGFja1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2VxJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IC0xXG4gICAgICAgICAgICAgICAgICAgIH0sIG51bGwsIG51bGwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZHJvcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAtMVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3B1dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAtMlxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2dldCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnaWZlbHNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IC0zXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAncmFuZG9tJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrRGVsdGE6IDFcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdtdWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0ZuOiBmdW5jdGlvbiBzdGFja19kaXYoc3RhY2ssIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbaW5kZXggLSAyXSA9IHN0YWNrW2luZGV4IC0gMl0gKiBzdGFja1tpbmRleCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBudWxsLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3NxcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2R1cCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAxXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZXhjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFja0RlbHRhOiAwXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnaW5kZXgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogMFxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3JvbGwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tEZWx0YTogLTJcbiAgICAgICAgICAgICAgICAgICAgfSwgbnVsbCwgbnVsbCwgbnVsbCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdoZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDcsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZmxleCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDEzLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRTdGFjazogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ2hmbGV4MScsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW46IDksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldFN0YWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAnZmxleDEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluOiAxMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0U3RhY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgfV07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGUGFyc2VyKGZpbGUsIHByb3BlcnRpZXMsIHNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnl0ZXMgPSBmaWxlLmdldEJ5dGVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkID0gISFzZWFjQW5hbHlzaXNFbmFibGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQ0ZGUGFyc2VyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNmZiA9IG5ldyBDRkYoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNmZiA9IGNmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gdGhpcy5wYXJzZUhlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgoaGVhZGVyLmVuZFBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvcERpY3RJbmRleCA9IHRoaXMucGFyc2VJbmRleChuYW1lSW5kZXguZW5kUG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyaW5nSW5kZXggPSB0aGlzLnBhcnNlSW5kZXgodG9wRGljdEluZGV4LmVuZFBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdsb2JhbFN1YnJJbmRleCA9IHRoaXMucGFyc2VJbmRleChzdHJpbmdJbmRleC5lbmRQb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3BEaWN0UGFyc2VkID0gdGhpcy5wYXJzZURpY3QodG9wRGljdEluZGV4Lm9iai5nZXQoMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3BEaWN0ID0gdGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3QsIHRvcERpY3RQYXJzZWQsIGNmZi5zdHJpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuaGVhZGVyID0gaGVhZGVyLm9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYubmFtZXMgPSB0aGlzLnBhcnNlTmFtZUluZGV4KG5hbWVJbmRleC5vYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5zdHJpbmdzID0gdGhpcy5wYXJzZVN0cmluZ0luZGV4KHN0cmluZ0luZGV4Lm9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLnRvcERpY3QgPSB0b3BEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5nbG9iYWxTdWJySW5kZXggPSBnbG9iYWxTdWJySW5kZXgub2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VQcml2YXRlRGljdChjZmYudG9wRGljdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLmlzQ0lERm9udCA9IHRvcERpY3QuaGFzTmFtZSgnUk9TJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTdHJpbmdPZmZzZXQgPSB0b3BEaWN0LmdldEJ5TmFtZSgnQ2hhclN0cmluZ3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclN0cmluZ0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KGNoYXJTdHJpbmdPZmZzZXQpLm9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE1hdHJpeCA9IHRvcERpY3QuZ2V0QnlOYW1lKCdGb250TWF0cml4Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udE1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggPSBmb250TWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250QkJveCA9IHRvcERpY3QuZ2V0QnlOYW1lKCdGb250QkJveCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRCQm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuYXNjZW50ID0gTWF0aC5tYXgoZm9udEJCb3hbM10sIGZvbnRCQm94WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gTWF0aC5taW4oZm9udEJCb3hbMV0sIGZvbnRCQm94WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5hc2NlbnRTY2FsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc2V0LCBlbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZmYuaXNDSURGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZEFycmF5SW5kZXggPSB0aGlzLnBhcnNlSW5kZXgodG9wRGljdC5nZXRCeU5hbWUoJ0ZEQXJyYXknKSkub2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZkQXJyYXlJbmRleC5jb3VudDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0UmF3ID0gZmRBcnJheUluZGV4LmdldChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZUb3BEaWN0LCB0aGlzLnBhcnNlRGljdChkaWN0UmF3KSwgY2ZmLnN0cmluZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJzZVByaXZhdGVEaWN0KGZvbnREaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5mZEFycmF5LnB1c2goZm9udERpY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0ID0gdGhpcy5wYXJzZUNoYXJzZXRzKHRvcERpY3QuZ2V0QnlOYW1lKCdjaGFyc2V0JyksIGNoYXJTdHJpbmdJbmRleC5jb3VudCwgY2ZmLnN0cmluZ3MsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuZmRTZWxlY3QgPSB0aGlzLnBhcnNlRkRTZWxlY3QodG9wRGljdC5nZXRCeU5hbWUoJ0ZEU2VsZWN0JyksIGNoYXJTdHJpbmdJbmRleC5jb3VudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IHRoaXMucGFyc2VDaGFyc2V0cyh0b3BEaWN0LmdldEJ5TmFtZSgnY2hhcnNldCcpLCBjaGFyU3RyaW5nSW5kZXguY291bnQsIGNmZi5zdHJpbmdzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nID0gdGhpcy5wYXJzZUVuY29kaW5nKHRvcERpY3QuZ2V0QnlOYW1lKCdFbmNvZGluZycpLCBwcm9wZXJ0aWVzLCBjZmYuc3RyaW5ncywgY2hhcnNldC5jaGFyc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLmVuY29kaW5nID0gZW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTdHJpbmdzQW5kU2VhY3MgPSB0aGlzLnBhcnNlQ2hhclN0cmluZ3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyU3RyaW5nczogY2hhclN0cmluZ0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN1YnJJbmRleDogdG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTdWJySW5kZXg6IGdsb2JhbFN1YnJJbmRleC5vYmosXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkU2VsZWN0OiBjZmYuZmRTZWxlY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkQXJyYXk6IGNmZi5mZEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdDogdG9wRGljdC5wcml2YXRlRGljdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi5jaGFyU3RyaW5ncyA9IGNoYXJTdHJpbmdzQW5kU2VhY3MuY2hhclN0cmluZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ZmLnNlYWNzID0gY2hhclN0cmluZ3NBbmRTZWFjcy5zZWFjcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYud2lkdGhzID0gY2hhclN0cmluZ3NBbmRTZWFjcy53aWR0aHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUhlYWRlcjogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlSGVhZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzTGVuZ3RoID0gYnl0ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG9mZnNldCA8IGJ5dGVzTGVuZ3RoICYmIGJ5dGVzW29mZnNldF0gIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldCA+PSBieXRlc0xlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0ludmFsaWQgQ0ZGIGhlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdjZmYgZGF0YSBpcyBzaGlmdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzID0gYnl0ZXMuc3ViYXJyYXkob2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ieXRlcyA9IGJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWpvciA9IGJ5dGVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW5vciA9IGJ5dGVzWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZHJTaXplID0gYnl0ZXNbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZlNpemUgPSBieXRlc1szXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gbmV3IENGRkhlYWRlcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iajogaGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3M6IGhkclNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRGljdDogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlRGljdChkaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRpY3RbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMzApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0T3BlcmFuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkaWN0W3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDI0IHwgZGljdFtwb3MrK10gPDwgMTYpID4+IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkaWN0W3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgPDwgOCB8IGRpY3RbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA8PCA4IHwgZGljdFtwb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIDw8IDggfCBkaWN0W3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAzMiAmJiB2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSAtIDEzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAyNDcgJiYgdmFsdWUgPD0gMjUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlIC0gMjQ3KSAqIDI1NiArIGRpY3RbcG9zKytdICsgMTA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI1MSAmJiB2YWx1ZSA8PSAyNTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtKCh2YWx1ZSAtIDI1MSkgKiAyNTYpIC0gZGljdFtwb3MrK10gLSAxMDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0NGRlBhcnNlcl9wYXJzZURpY3Q6IFwiJyArIHZhbHVlICsgJ1wiIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW9mID0gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb29rdXAgPSBbJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnLicsICdFJywgJ0UtJywgbnVsbCwgJy0nXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGRpY3QubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gZGljdFtwb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjEgPSBiID4+IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYjIgPSBiICYgMTU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiMSA9PT0gZW9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBsb29rdXBbYjFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYjIgPT09IGVvZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gbG9va3VwW2IyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhbmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBkaWN0Lmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBkaWN0W3Bvc107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIgPD0gMjEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiID09PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBiIDw8IDggfCBkaWN0WysrcG9zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKFtiLCBvcGVyYW5kc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZHMucHVzaChwYXJzZU9wZXJhbmQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZW50cmllcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUluZGV4OiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VJbmRleChwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ZmSW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFNpemUgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydFBvcyA9IHBvcyArIChjb3VudCArIDEpICogb2Zmc2V0U2l6ZSAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjb3VudCArIDE7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvZmZzZXRTaXplOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPDw9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0cy5wdXNoKHN0YXJ0UG9zICsgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IG9mZnNldHNbY291bnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gb2Zmc2V0cy5sZW5ndGggLSAxOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0U3RhcnQgPSBvZmZzZXRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0RW5kID0gb2Zmc2V0c1tpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZkluZGV4LmFkZChieXRlcy5zdWJhcnJheShvZmZzZXRTdGFydCwgb2Zmc2V0RW5kKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqOiBjZmZJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zOiBlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlTmFtZUluZGV4OiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VOYW1lSW5kZXgoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGluZGV4LmNvdW50OyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGluZGV4LmdldChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCgoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykobmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYW1lcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVN0cmluZ0luZGV4OiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VTdHJpbmdJbmRleChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdzID0gbmV3IENGRlN0cmluZ3MoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGluZGV4LmNvdW50OyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGluZGV4LmdldChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5ncy5hZGQoKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyaW5ncztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEaWN0OiBmdW5jdGlvbiBDRkZQYXJzZXJfY3JlYXRlRGljdChUeXBlLCBkaWN0LCBzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNmZkRpY3QgPSBuZXcgVHlwZShzdHJpbmdzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGRpY3QubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciA9IGRpY3RbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBwYWlyWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYWlyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmZEaWN0LnNldEJ5S2V5KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjZmZEaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ2hhclN0cmluZzogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlQ2hhclN0cmluZyhzdGF0ZSwgZGF0YSwgbG9jYWxTdWJySW5kZXgsIGdsb2JhbFN1YnJJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSB8fCBzdGF0ZS5jYWxsRGVwdGggPiBNQVhfU1VCUl9ORVNUSU5HKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhY2tTaXplID0gc3RhdGUuc3RhY2tTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IHN0YXRlLnN0YWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBkYXRhW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxpZGF0aW9uQ29tbWFuZCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBkYXRhW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtqIC0gMl0gPSAxMzk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtqIC0gMV0gPSAyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YTEyW3FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tbc3RhY2tTaXplXSA9IChkYXRhW2pdIDw8IDI0IHwgZGF0YVtqICsgMV0gPDwgMTYpID4+IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDE0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tTaXplID49IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgLT0gNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc2VhYyA9IHN0YWNrLnNsaWNlKHN0YWNrU2l6ZSwgc3RhY2tTaXplICsgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAzMiAmJiB2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSB2YWx1ZSAtIDEzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDI0NyAmJiB2YWx1ZSA8PSAyNTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSB2YWx1ZSA8IDI1MSA/ICh2YWx1ZSAtIDI0NyA8PCA4KSArIGRhdGFbal0gKyAxMDggOiAtKHZhbHVlIC0gMjUxIDw8IDgpIC0gZGF0YVtqXSAtIDEwODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAyNTUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrU2l6ZV0gPSAoZGF0YVtqXSA8PCAyNCB8IGRhdGFbaiArIDFdIDw8IDE2IHwgZGF0YVtqICsgMl0gPDwgOCB8IGRhdGFbaiArIDNdKSAvIDY1NTM2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTaXplKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDE5IHx8IHZhbHVlID09PSAyMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuaGludHMgKz0gc3RhY2tTaXplID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IHN0YXRlLmhpbnRzICsgNyA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTaXplICU9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IDEwIHx8IHZhbHVlID09PSAyOSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJzSW5kZXg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyc0luZGV4ID0gbG9jYWxTdWJySW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJzSW5kZXggPSBnbG9iYWxTdWJySW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3VicnNJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25Db21tYW5kID0gQ2hhcnN0cmluZ1ZhbGlkYXRpb25EYXRhW3ZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ01pc3Npbmcgc3VicnNJbmRleCBmb3IgJyArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiaWFzID0gMzI3Njg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyc0luZGV4LmNvdW50IDwgMTI0MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMgPSAxMDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YnJzSW5kZXguY291bnQgPCAzMzkwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpYXMgPSAxMTMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Vick51bWJlciA9IHN0YWNrWy0tc3RhY2tTaXplXSArIGJpYXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyTnVtYmVyIDwgMCB8fCBzdWJyTnVtYmVyID49IHN1YnJzSW5kZXguY291bnQgfHwgaXNOYU4oc3Vick51bWJlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ29tbWFuZCA9IENoYXJzdHJpbmdWYWxpZGF0aW9uRGF0YVt2YWx1ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdPdXQgb2YgYm91bmRzIHN1YnJJbmRleCBmb3IgJyArIHZhbGlkYXRpb25Db21tYW5kLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0YWNrU2l6ZSA9IHN0YWNrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNhbGxEZXB0aCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIHN1YnJzSW5kZXguZ2V0KHN1YnJOdW1iZXIpLCBsb2NhbFN1YnJJbmRleCwgZ2xvYmFsU3VickluZGV4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY2FsbERlcHRoLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgPSBzdGF0ZS5zdGFja1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gMTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0YWNrU2l6ZSA9IHN0YWNrU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQgPSBDaGFyc3RyaW5nVmFsaWRhdGlvbkRhdGFbdmFsdWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb25Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmhpbnRzICs9IHN0YWNrU2l6ZSA+PiAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSAzIHx8IHZhbHVlID09PSAyMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5oYXNWU3RlbXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuaGFzVlN0ZW1zICYmICh2YWx1ZSA9PT0gMSB8fCB2YWx1ZSA9PT0gMTgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaiAtIDFdID0gdmFsdWUgPT09IDEgPyAzIDogMjM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ21pbicgaW4gdmFsaWRhdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLnVuZGVmU3RhY2sgJiYgc3RhY2tTaXplIDwgdmFsaWRhdGlvbkNvbW1hbmQubWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAnICsgdmFsaWRhdGlvbkNvbW1hbmQuaWQgKyAnOyBhY3R1YWw6ICcgKyBzdGFja1NpemUgKyAnLCBleHBlY3RlZDogJyArIHZhbGlkYXRpb25Db21tYW5kLm1pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5maXJzdFN0YWNrQ2xlYXJpbmcgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmZpcnN0U3RhY2tDbGVhcmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSAtPSB2YWxpZGF0aW9uQ29tbWFuZC5taW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tTaXplID49IDIgJiYgdmFsaWRhdGlvbkNvbW1hbmQuc3RlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgJT0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YWNrU2l6ZSA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrU2l6ZSA+IDAgJiYgc3RhY2tbc3RhY2tTaXplIC0gMV0gPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS53aWR0aCA9IHN0YWNrW3N0YWNrU2l6ZSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCdzdGFja0RlbHRhJyBpbiB2YWxpZGF0aW9uQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnc3RhY2tGbicgaW4gdmFsaWRhdGlvbkNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tGbihzdGFjaywgc3RhY2tTaXplKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgKz0gdmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tEZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQuc3RhY2tDbGVhcmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbGlkYXRpb25Db21tYW5kLnJlc2V0U3RhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnVuZGVmU3RhY2sgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbkNvbW1hbmQudW5kZWZTdGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUudW5kZWZTdGFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuZmlyc3RTdGFja0NsZWFyaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zdGFja1NpemUgPSBzdGFja1NpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDaGFyU3RyaW5nczogZnVuY3Rpb24gcGFyc2VDaGFyU3RyaW5ncyhfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTdHJpbmdzID0gX3JlZi5jaGFyU3RyaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdWJySW5kZXggPSBfcmVmLmxvY2FsU3VickluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWxTdWJySW5kZXggPSBfcmVmLmdsb2JhbFN1YnJJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRTZWxlY3QgPSBfcmVmLmZkU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZEFycmF5ID0gX3JlZi5mZEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdCA9IF9yZWYucHJpdmF0ZURpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYWNzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRocyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGNoYXJTdHJpbmdzLmNvdW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc3RyaW5nID0gY2hhclN0cmluZ3MuZ2V0KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsRGVwdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1NpemU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjazogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZlN0YWNrOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludHM6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFN0YWNrQ2xlYXJpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFjOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNWU3RlbXM6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2NhbFN1YnJUb1VzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlRGljdFRvVXNlID0gcHJpdmF0ZURpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZkU2VsZWN0ICYmIGZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmRJbmRleCA9IGZkU2VsZWN0LmdldEZESW5kZXgoaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmZEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnR2x5cGggaW5kZXggaXMgbm90IGluIGZkIHNlbGVjdC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRJbmRleCA+PSBmZEFycmF5Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZURpY3RUb1VzZSA9IGZkQXJyYXlbZmRJbmRleF0ucHJpdmF0ZURpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxTdWJyVG9Vc2UgPSBwcml2YXRlRGljdFRvVXNlLnN1YnJzSW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxTdWJySW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3ViclRvVXNlID0gbG9jYWxTdWJySW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkID0gdGhpcy5wYXJzZUNoYXJTdHJpbmcoc3RhdGUsIGNoYXJzdHJpbmcsIGxvY2FsU3ViclRvVXNlLCBnbG9iYWxTdWJySW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlLndpZHRoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9taW5hbFdpZHRoID0gcHJpdmF0ZURpY3RUb1VzZS5nZXRCeU5hbWUoJ25vbWluYWxXaWR0aFgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoc1tpXSA9IG5vbWluYWxXaWR0aCArIHN0YXRlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmF1bHRXaWR0aCA9IHByaXZhdGVEaWN0VG9Vc2UuZ2V0QnlOYW1lKCdkZWZhdWx0V2lkdGhYJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHNbaV0gPSBkZWZhdWx0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2VhYyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhY3NbaV0gPSBzdGF0ZS5zZWFjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclN0cmluZ3Muc2V0KGksIG5ldyBVaW50OEFycmF5KFsxNF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJTdHJpbmdzOiBjaGFyU3RyaW5ncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhY3M6IHNlYWNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aHM6IHdpZHRoc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1wdHlQcml2YXRlRGljdGlvbmFyeTogZnVuY3Rpb24gQ0ZGUGFyc2VyX2VtcHR5UHJpdmF0ZURpY3Rpb25hcnkocGFyZW50RGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZQcml2YXRlRGljdCwgW10sIHBhcmVudERpY3Quc3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50RGljdC5zZXRCeUtleSgxOCwgWzAsIDBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnREaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VQcml2YXRlRGljdDogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlUHJpdmF0ZURpY3QocGFyZW50RGljdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyZW50RGljdC5oYXNOYW1lKCdQcml2YXRlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVPZmZzZXQgPSBwYXJlbnREaWN0LmdldEJ5TmFtZSgnUHJpdmF0ZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByaXZhdGVPZmZzZXQpIHx8IHByaXZhdGVPZmZzZXQubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudERpY3QucmVtb3ZlQnlOYW1lKCdQcml2YXRlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IHByaXZhdGVPZmZzZXRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IHByaXZhdGVPZmZzZXRbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA9PT0gMCB8fCBvZmZzZXQgPj0gdGhpcy5ieXRlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KHBhcmVudERpY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVEaWN0RW5kID0gb2Zmc2V0ICsgc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGljdERhdGEgPSB0aGlzLmJ5dGVzLnN1YmFycmF5KG9mZnNldCwgcHJpdmF0ZURpY3RFbmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gdGhpcy5wYXJzZURpY3QoZGljdERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlRGljdCA9IHRoaXMuY3JlYXRlRGljdChDRkZQcml2YXRlRGljdCwgZGljdCwgcGFyZW50RGljdC5zdHJpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnREaWN0LnByaXZhdGVEaWN0ID0gcHJpdmF0ZURpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVEaWN0LmdldEJ5TmFtZSgnU3VicnMnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJzT2Zmc2V0ID0gcHJpdmF0ZURpY3QuZ2V0QnlOYW1lKCdTdWJycycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZU9mZnNldCA9IG9mZnNldCArIHN1YnJzT2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnJzT2Zmc2V0ID09PSAwIHx8IHJlbGF0aXZlT2Zmc2V0ID49IHRoaXMuYnl0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShwYXJlbnREaWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdWJyc0luZGV4ID0gdGhpcy5wYXJzZUluZGV4KHJlbGF0aXZlT2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGljdC5zdWJyc0luZGV4ID0gc3VicnNJbmRleC5vYmo7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDaGFyc2V0czogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlQ2hhcnNldHMocG9zLCBsZW5ndGgsIHN0cmluZ3MsIGNpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDRkZDaGFyc2V0KHRydWUsIENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMuSVNPX0FET0JFLCBfY2hhcnNldHMuSVNPQWRvYmVDaGFyc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5FWFBFUlQsIF9jaGFyc2V0cy5FeHBlcnRDaGFyc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQodHJ1ZSwgQ0ZGQ2hhcnNldFByZWRlZmluZWRUeXBlcy5FWFBFUlRfU1VCU0VULCBfY2hhcnNldHMuRXhwZXJ0U3Vic2V0Q2hhcnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gdGhpcy5ieXRlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSBwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcnNldCA9IFsnLm5vdGRlZiddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZCwgY291bnQsIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC09IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQucHVzaChjaWQgPyBpZCA6IHN0cmluZ3MuZ2V0KGlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjaGFyc2V0Lmxlbmd0aCA8PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQucHVzaChjaWQgPyBpZCsrIDogc3RyaW5ncy5nZXQoaWQrKykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNoYXJzZXQubGVuZ3RoIDw9IGxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gYnl0ZXNbcG9zKytdIDw8IDggfCBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgPSBieXRlc1twb3MrK10gPDwgOCB8IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0LnB1c2goY2lkID8gaWQrKyA6IHN0cmluZ3MuZ2V0KGlkKyspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1Vua25vd24gY2hhcnNldCBmb3JtYXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYXcgPSBieXRlcy5zdWJhcnJheShzdGFydCwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkNoYXJzZXQoZmFsc2UsIGZvcm1hdCwgY2hhcnNldCwgcmF3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVuY29kaW5nOiBmdW5jdGlvbiBDRkZQYXJzZXJfcGFyc2VFbmNvZGluZyhwb3MsIHByb3BlcnRpZXMsIHN0cmluZ3MsIGNoYXJzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IHRoaXMuYnl0ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZWRlZmluZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9ybWF0LCBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmF3ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRTdXBwbGVtZW50KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcGxlbWVudHNDb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3VwcGxlbWVudHNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaWQgPSAoYnl0ZXNbcG9zKytdIDw8IDgpICsgKGJ5dGVzW3BvcysrXSAmIDB4ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdbY29kZV0gPSBjaGFyc2V0LmluZGV4T2Yoc3RyaW5ncy5nZXQoc2lkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9zID09PSAwIHx8IHBvcyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVkZWZpbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFzZUVuY29kaW5nID0gcG9zID8gX2VuY29kaW5ncy5FeHBlcnRFbmNvZGluZyA6IF9lbmNvZGluZ3MuU3RhbmRhcmRFbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNoYXJzZXQubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYmFzZUVuY29kaW5nLmluZGV4T2YoY2hhcnNldFtpXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ1tpbmRleF0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFTdGFydCA9IHBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0ICYgMHg3Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaHNDb3VudCA9IGJ5dGVzW3BvcysrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gZ2x5cGhzQ291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ1tieXRlc1twb3MrK11dID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZXNDb3VudCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2lkID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByYW5nZXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGJ5dGVzW3BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlZnQgPSBieXRlc1twb3MrK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IHN0YXJ0OyBqIDw9IHN0YXJ0ICsgbGVmdDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZ1tqXSA9IGdpZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6IFwiLmNvbmNhdChmb3JtYXQsIFwiIGluIENGRlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YUVuZCA9IHBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ICYgMHg4MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbZGF0YVN0YXJ0XSAmPSAweDdmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFN1cHBsZW1lbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdyA9IGJ5dGVzLnN1YmFycmF5KGRhdGFTdGFydCwgZGF0YUVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0ICYgMHg3ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkVuY29kaW5nKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VGRFNlbGVjdDogZnVuY3Rpb24gQ0ZGUGFyc2VyX3BhcnNlRkRTZWxlY3QocG9zLCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZkU2VsZWN0ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSBieXRlc1twb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRTZWxlY3QucHVzaChpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZXNDb3VudCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcmFuZ2VzQ291bnQ7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdCA9IGJ5dGVzW3BvcysrXSA8PCA4IHwgYnl0ZXNbcG9zKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDAgJiYgZmlyc3QgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdwYXJzZUZEU2VsZWN0OiBUaGUgZmlyc3QgcmFuZ2UgbXVzdCBoYXZlIGEgZmlyc3QgR0lEIG9mIDAnICsgJyAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmZEluZGV4ID0gYnl0ZXNbcG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0ID0gYnl0ZXNbcG9zXSA8PCA4IHwgYnl0ZXNbcG9zICsgMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gZmlyc3Q7IGogPCBuZXh0OyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRTZWxlY3QucHVzaChmZEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcInBhcnNlRkRTZWxlY3Q6IFVua25vd24gZm9ybWF0IFxcXCJcIi5jb25jYXQoZm9ybWF0LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRTZWxlY3QubGVuZ3RoICE9PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENGRkZEU2VsZWN0KGZvcm1hdCwgZmRTZWxlY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGUGFyc2VyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGUGFyc2VyID0gQ0ZGUGFyc2VyO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRiA9IGZ1bmN0aW9uIENGRkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9wRGljdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ3MgPSBuZXcgQ0ZGU3RyaW5ncygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nbG9iYWxTdWJySW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmNvZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYXJzZXQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFyU3RyaW5ncyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZkQXJyYXkgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmRTZWxlY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NJREZvbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRi5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkdXBsaWNhdGVGaXJzdEdseXBoOiBmdW5jdGlvbiBDRkZfZHVwbGljYXRlRmlyc3RHbHlwaCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jaGFyU3RyaW5ncy5jb3VudCA+PSA2NTUzNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ05vdCBlbm91Z2ggc3BhY2UgaW4gY2hhcnN0cmluZ3MgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoWmVybyA9IHRoaXMuY2hhclN0cmluZ3MuZ2V0KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhclN0cmluZ3MuYWRkKGdseXBoWmVybyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NJREZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNHbHlwaElkOiBmdW5jdGlvbiBDRkZfaGFzR2x5cGhJRChpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZCA8IDAgfHwgaWQgPj0gdGhpcy5jaGFyU3RyaW5ncy5jb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoID0gdGhpcy5jaGFyU3RyaW5ncy5nZXQoaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaC5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGID0gQ0ZGO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRkhlYWRlciA9IGZ1bmN0aW9uIENGRkhlYWRlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRkhlYWRlcihtYWpvciwgbWlub3IsIGhkclNpemUsIG9mZlNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFqb3IgPSBtYWpvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWlub3IgPSBtaW5vcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGRyU2l6ZSA9IGhkclNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZlNpemUgPSBvZmZTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRkhlYWRlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNGRkhlYWRlciA9IENGRkhlYWRlcjtcblxuICAgICAgICAgICAgICAgIHZhciBDRkZTdHJpbmdzID0gZnVuY3Rpb24gQ0ZGU3RyaW5nc0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRlN0cmluZ3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRlN0cmluZ3MucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBDRkZTdHJpbmdzX2dldChpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDw9IDM5MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGU3RhbmRhcmRTdHJpbmdzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggLSAzOTEgPD0gdGhpcy5zdHJpbmdzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmdzW2luZGV4IC0gMzkxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGU3RhbmRhcmRTdHJpbmdzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gQ0ZGU3RyaW5nc19hZGQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmluZ3MucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgY291bnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5ncy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRlN0cmluZ3M7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZTdHJpbmdzID0gQ0ZGU3RyaW5ncztcblxuICAgICAgICAgICAgICAgIHZhciBDRkZJbmRleCA9IGZ1bmN0aW9uIENGRkluZGV4Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGSW5kZXgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9iamVjdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRkluZGV4LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gQ0ZGSW5kZXhfYWRkKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxlbmd0aCArPSBkYXRhLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9iamVjdHMucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIENGRkluZGV4X3NldChpbmRleCwgZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGVuZ3RoICs9IGRhdGEubGVuZ3RoIC0gdGhpcy5vYmplY3RzW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmplY3RzW2luZGV4XSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBDRkZJbmRleF9nZXQoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBjb3VudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3RzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGSW5kZXg7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZJbmRleCA9IENGRkluZGV4O1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRkRpY3QgPSBmdW5jdGlvbiBDRkZEaWN0Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGRGljdCh0YWJsZXMsIHN0cmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMua2V5VG9OYW1lTWFwID0gdGFibGVzLmtleVRvTmFtZU1hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZVRvS2V5TWFwID0gdGFibGVzLm5hbWVUb0tleU1hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdHMgPSB0YWJsZXMuZGVmYXVsdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGVzID0gdGFibGVzLnR5cGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGNvZGVzID0gdGFibGVzLm9wY29kZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9yZGVyID0gdGFibGVzLm9yZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdzID0gc3RyaW5ncztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRkRpY3QucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QnlLZXk6IGZ1bmN0aW9uIENGRkRpY3Rfc2V0QnlLZXkoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZUxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZUxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJbnZhbGlkIENGRkRpY3QgdmFsdWU6IFwiJyArIHZhbHVlICsgJ1wiIGZvciBrZXkgXCInICsga2V5ICsgJ1wiLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHRoaXMudHlwZXNba2V5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnbnVtJyB8fCB0eXBlID09PSAnc2lkJyB8fCB0eXBlID09PSAnb2Zmc2V0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRCeU5hbWU6IGZ1bmN0aW9uIENGRkRpY3Rfc2V0QnlOYW1lKG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEobmFtZSBpbiB0aGlzLm5hbWVUb0tleU1hcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgXFxcIlwiLmNvbmNhdChuYW1lLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW3RoaXMubmFtZVRvS2V5TWFwW25hbWVdXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc05hbWU6IGZ1bmN0aW9uIENGRkRpY3RfaGFzTmFtZShuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW25hbWVdIGluIHRoaXMudmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEJ5TmFtZTogZnVuY3Rpb24gQ0ZGRGljdF9nZXRCeU5hbWUobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5hbWUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgZGljdGlvbmFyeSBuYW1lIFwiLmNvbmNhdChuYW1lLCBcIlxcXCJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSB0aGlzLm5hbWVUb0tleU1hcFtuYW1lXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiB0aGlzLnZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVCeU5hbWU6IGZ1bmN0aW9uIENGRkRpY3RfcmVtb3ZlQnlOYW1lKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbbmFtZV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIENGRkRpY3QuY3JlYXRlVGFibGVzID0gZnVuY3Rpb24gQ0ZGRGljdF9jcmVhdGVUYWJsZXMobGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVRvTmFtZU1hcDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVRvS2V5TWFwOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0czoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXM6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZXM6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbGF5b3V0Lmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBsYXlvdXRbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gKGVudHJ5WzBdWzBdIDw8IDgpICsgZW50cnlbMF1bMV0gOiBlbnRyeVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMua2V5VG9OYW1lTWFwW2tleV0gPSBlbnRyeVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMubmFtZVRvS2V5TWFwW2VudHJ5WzFdXSA9IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMudHlwZXNba2V5XSA9IGVudHJ5WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlcy5kZWZhdWx0c1trZXldID0gZW50cnlbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzLm9wY29kZXNba2V5XSA9IEFycmF5LmlzQXJyYXkoZW50cnlbMF0pID8gZW50cnlbMF0gOiBbZW50cnlbMF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlcy5vcmRlci5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRkRpY3Q7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRlRvcERpY3QgPSBmdW5jdGlvbiBDRkZUb3BEaWN0Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dCA9IFtbWzEyLCAzMF0sICdST1MnLCBbJ3NpZCcsICdzaWQnLCAnbnVtJ10sIG51bGxdLCBbWzEyLCAyMF0sICdTeW50aGV0aWNCYXNlJywgJ251bScsIG51bGxdLCBbMCwgJ3ZlcnNpb24nLCAnc2lkJywgbnVsbF0sIFsxLCAnTm90aWNlJywgJ3NpZCcsIG51bGxdLCBbWzEyLCAwXSwgJ0NvcHlyaWdodCcsICdzaWQnLCBudWxsXSwgWzIsICdGdWxsTmFtZScsICdzaWQnLCBudWxsXSwgWzMsICdGYW1pbHlOYW1lJywgJ3NpZCcsIG51bGxdLCBbNCwgJ1dlaWdodCcsICdzaWQnLCBudWxsXSwgW1sxMiwgMV0sICdpc0ZpeGVkUGl0Y2gnLCAnbnVtJywgMF0sIFtbMTIsIDJdLCAnSXRhbGljQW5nbGUnLCAnbnVtJywgMF0sIFtbMTIsIDNdLCAnVW5kZXJsaW5lUG9zaXRpb24nLCAnbnVtJywgLTEwMF0sIFtbMTIsIDRdLCAnVW5kZXJsaW5lVGhpY2tuZXNzJywgJ251bScsIDUwXSwgW1sxMiwgNV0sICdQYWludFR5cGUnLCAnbnVtJywgMF0sIFtbMTIsIDZdLCAnQ2hhcnN0cmluZ1R5cGUnLCAnbnVtJywgMl0sIFtbMTIsIDddLCAnRm9udE1hdHJpeCcsIFsnbnVtJywgJ251bScsICdudW0nLCAnbnVtJywgJ251bScsICdudW0nXSwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF1dLCBbMTMsICdVbmlxdWVJRCcsICdudW0nLCBudWxsXSwgWzUsICdGb250QkJveCcsIFsnbnVtJywgJ251bScsICdudW0nLCAnbnVtJ10sIFswLCAwLCAwLCAwXV0sIFtbMTIsIDhdLCAnU3Ryb2tlV2lkdGgnLCAnbnVtJywgMF0sIFsxNCwgJ1hVSUQnLCAnYXJyYXknLCBudWxsXSwgWzE1LCAnY2hhcnNldCcsICdvZmZzZXQnLCAwXSwgWzE2LCAnRW5jb2RpbmcnLCAnb2Zmc2V0JywgMF0sIFsxNywgJ0NoYXJTdHJpbmdzJywgJ29mZnNldCcsIDBdLCBbMTgsICdQcml2YXRlJywgWydvZmZzZXQnLCAnb2Zmc2V0J10sIG51bGxdLCBbWzEyLCAyMV0sICdQb3N0U2NyaXB0JywgJ3NpZCcsIG51bGxdLCBbWzEyLCAyMl0sICdCYXNlRm9udE5hbWUnLCAnc2lkJywgbnVsbF0sIFtbMTIsIDIzXSwgJ0Jhc2VGb250QmxlbmQnLCAnZGVsdGEnLCBudWxsXSwgW1sxMiwgMzFdLCAnQ0lERm9udFZlcnNpb24nLCAnbnVtJywgMF0sIFtbMTIsIDMyXSwgJ0NJREZvbnRSZXZpc2lvbicsICdudW0nLCAwXSwgW1sxMiwgMzNdLCAnQ0lERm9udFR5cGUnLCAnbnVtJywgMF0sIFtbMTIsIDM0XSwgJ0NJRENvdW50JywgJ251bScsIDg3MjBdLCBbWzEyLCAzNV0sICdVSURCYXNlJywgJ251bScsIG51bGxdLCBbWzEyLCAzN10sICdGRFNlbGVjdCcsICdvZmZzZXQnLCBudWxsXSwgW1sxMiwgMzZdLCAnRkRBcnJheScsICdvZmZzZXQnLCBudWxsXSwgW1sxMiwgMzhdLCAnRm9udE5hbWUnLCAnc2lkJywgbnVsbF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDRkZUb3BEaWN0KHN0cmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMgPSBDRkZEaWN0LmNyZWF0ZVRhYmxlcyhsYXlvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBDRkZEaWN0LmNhbGwodGhpcywgdGFibGVzLCBzdHJpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJpdmF0ZURpY3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQ0ZGVG9wRGljdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKENGRkRpY3QucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRlRvcERpY3Q7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZUb3BEaWN0ID0gQ0ZGVG9wRGljdDtcblxuICAgICAgICAgICAgICAgIHZhciBDRkZQcml2YXRlRGljdCA9IGZ1bmN0aW9uIENGRlByaXZhdGVEaWN0Q2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxheW91dCA9IFtbNiwgJ0JsdWVWYWx1ZXMnLCAnZGVsdGEnLCBudWxsXSwgWzcsICdPdGhlckJsdWVzJywgJ2RlbHRhJywgbnVsbF0sIFs4LCAnRmFtaWx5Qmx1ZXMnLCAnZGVsdGEnLCBudWxsXSwgWzksICdGYW1pbHlPdGhlckJsdWVzJywgJ2RlbHRhJywgbnVsbF0sIFtbMTIsIDldLCAnQmx1ZVNjYWxlJywgJ251bScsIDAuMDM5NjI1XSwgW1sxMiwgMTBdLCAnQmx1ZVNoaWZ0JywgJ251bScsIDddLCBbWzEyLCAxMV0sICdCbHVlRnV6eicsICdudW0nLCAxXSwgWzEwLCAnU3RkSFcnLCAnbnVtJywgbnVsbF0sIFsxMSwgJ1N0ZFZXJywgJ251bScsIG51bGxdLCBbWzEyLCAxMl0sICdTdGVtU25hcEgnLCAnZGVsdGEnLCBudWxsXSwgW1sxMiwgMTNdLCAnU3RlbVNuYXBWJywgJ2RlbHRhJywgbnVsbF0sIFtbMTIsIDE0XSwgJ0ZvcmNlQm9sZCcsICdudW0nLCAwXSwgW1sxMiwgMTddLCAnTGFuZ3VhZ2VHcm91cCcsICdudW0nLCAwXSwgW1sxMiwgMThdLCAnRXhwYW5zaW9uRmFjdG9yJywgJ251bScsIDAuMDZdLCBbWzEyLCAxOV0sICdpbml0aWFsUmFuZG9tU2VlZCcsICdudW0nLCAwXSwgWzIwLCAnZGVmYXVsdFdpZHRoWCcsICdudW0nLCAwXSwgWzIxLCAnbm9taW5hbFdpZHRoWCcsICdudW0nLCAwXSwgWzE5LCAnU3VicnMnLCAnb2Zmc2V0JywgbnVsbF1dO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFibGVzID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDRkZQcml2YXRlRGljdChzdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVzID0gQ0ZGRGljdC5jcmVhdGVUYWJsZXMobGF5b3V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQ0ZGRGljdC5jYWxsKHRoaXMsIHRhYmxlcywgc3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1YnJzSW5kZXggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQ0ZGUHJpdmF0ZURpY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShDRkZEaWN0LnByb3RvdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDRkZQcml2YXRlRGljdDtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkNGRlByaXZhdGVEaWN0ID0gQ0ZGUHJpdmF0ZURpY3Q7XG4gICAgICAgICAgICAgICAgdmFyIENGRkNoYXJzZXRQcmVkZWZpbmVkVHlwZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIElTT19BRE9CRTogMCxcbiAgICAgICAgICAgICAgICAgICAgRVhQRVJUOiAxLFxuICAgICAgICAgICAgICAgICAgICBFWFBFUlRfU1VCU0VUOiAyXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBDRkZDaGFyc2V0ID0gZnVuY3Rpb24gQ0ZGQ2hhcnNldENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRkNoYXJzZXQocHJlZGVmaW5lZCwgZm9ybWF0LCBjaGFyc2V0LCByYXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZGVmaW5lZCA9IHByZWRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhcnNldCA9IGNoYXJzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJhdyA9IHJhdztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDRkZDaGFyc2V0O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGQ2hhcnNldCA9IENGRkNoYXJzZXQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ0ZGRW5jb2RpbmcgPSBmdW5jdGlvbiBDRkZFbmNvZGluZ0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRkVuY29kaW5nKHByZWRlZmluZWQsIGZvcm1hdCwgZW5jb2RpbmcsIHJhdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVkZWZpbmVkID0gcHJlZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybWF0ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yYXcgPSByYXc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGRW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRkZEU2VsZWN0ID0gZnVuY3Rpb24gQ0ZGRkRTZWxlY3RDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDRkZGRFNlbGVjdChmb3JtYXQsIGZkU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmRTZWxlY3QgPSBmZFNlbGVjdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENGRkZEU2VsZWN0LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZESW5kZXg6IGZ1bmN0aW9uIENGRkZEU2VsZWN0X2dldChnbHlwaEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoSW5kZXggPCAwIHx8IGdseXBoSW5kZXggPj0gdGhpcy5mZFNlbGVjdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZkU2VsZWN0W2dseXBoSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGRkRTZWxlY3Q7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5DRkZGRFNlbGVjdCA9IENGRkZEU2VsZWN0O1xuXG4gICAgICAgICAgICAgICAgdmFyIENGRk9mZnNldFRyYWNrZXIgPSBmdW5jdGlvbiBDRkZPZmZzZXRUcmFja2VyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2Zmc2V0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBDRkZPZmZzZXRUcmFja2VyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVHJhY2tpbmc6IGZ1bmN0aW9uIENGRk9mZnNldFRyYWNrZXJfaXNUcmFja2luZyhrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ga2V5IGluIHRoaXMub2Zmc2V0cztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFjazogZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcl90cmFjayhrZXksIGxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiB0aGlzLm9mZnNldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQWxyZWFkeSB0cmFja2luZyBsb2NhdGlvbiBvZiBcIi5jb25jYXQoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRzW2tleV0gPSBsb2NhdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGZ1bmN0aW9uIENGRk9mZnNldFRyYWNrZXJfb2Zmc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMub2Zmc2V0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldHNba2V5XSArPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0RW50cnlMb2NhdGlvbjogZnVuY3Rpb24gQ0ZGT2Zmc2V0VHJhY2tlcl9zZXRFbnRyeUxvY2F0aW9uKGtleSwgdmFsdWVzLCBvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gdGhpcy5vZmZzZXRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJOb3QgdHJhY2tpbmcgbG9jYXRpb24gb2YgXCIuY29uY2F0KGtleSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gb3V0cHV0LmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFPZmZzZXQgPSB0aGlzLm9mZnNldHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IDU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB2YWx1ZXMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0MCA9IGkgKiBzaXplICsgZGF0YU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDEgPSBvZmZzZXQwICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDIgPSBvZmZzZXQwICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDMgPSBvZmZzZXQwICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDQgPSBvZmZzZXQwICsgNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtvZmZzZXQwXSAhPT0gMHgxZCB8fCBkYXRhW29mZnNldDFdICE9PSAwIHx8IGRhdGFbb2Zmc2V0Ml0gIT09IDAgfHwgZGF0YVtvZmZzZXQzXSAhPT0gMCB8fCBkYXRhW29mZnNldDRdICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ3dyaXRpbmcgdG8gYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGVtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0MF0gPSAweDFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldDFdID0gdmFsdWUgPj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldDJdID0gdmFsdWUgPj4gMTYgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW29mZnNldDNdID0gdmFsdWUgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbb2Zmc2V0NF0gPSB2YWx1ZSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ0ZGT2Zmc2V0VHJhY2tlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ0ZGQ29tcGlsZXIgPSBmdW5jdGlvbiBDRkZDb21waWxlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENGRkNvbXBpbGVyKGNmZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZmYgPSBjZmY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBDRkZDb21waWxlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlOiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZmYgPSB0aGlzLmNmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQ6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2FkZChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuY29uY2F0KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSB0aGlzLmRhdGEubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyID0gdGhpcy5jb21waWxlSGVhZGVyKGNmZi5oZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hZGQoaGVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUluZGV4ID0gdGhpcy5jb21waWxlTmFtZUluZGV4KGNmZi5uYW1lcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChuYW1lSW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmZi5pc0NJREZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmZi50b3BEaWN0Lmhhc05hbWUoJ0ZvbnRNYXRyaXgnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhc2UgPSBjZmYudG9wRGljdC5nZXRCeU5hbWUoJ0ZvbnRNYXRyaXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi50b3BEaWN0LnJlbW92ZUJ5TmFtZSgnRm9udE1hdHJpeCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjZmYuZmRBcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YkRpY3QgPSBjZmYuZmRBcnJheVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gYmFzZS5zbGljZSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJEaWN0Lmhhc05hbWUoJ0ZvbnRNYXRyaXgnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybShtYXRyaXgsIHN1YkRpY3QuZ2V0QnlOYW1lKCdGb250TWF0cml4JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkRpY3Quc2V0QnlOYW1lKCdGb250TWF0cml4JywgbWF0cml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNmZi50b3BEaWN0LnNldEJ5TmFtZSgnY2hhcnNldCcsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21waWxlZCA9IHRoaXMuY29tcGlsZVRvcERpY3RzKFtjZmYudG9wRGljdF0sIG91dHB1dC5sZW5ndGgsIGNmZi5pc0NJREZvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hZGQoY29tcGlsZWQub3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9wRGljdFRyYWNrZXIgPSBjb21waWxlZC50cmFja2Vyc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyaW5nSW5kZXggPSB0aGlzLmNvbXBpbGVTdHJpbmdJbmRleChjZmYuc3RyaW5ncy5zdHJpbmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKHN0cmluZ0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsU3VickluZGV4ID0gdGhpcy5jb21waWxlSW5kZXgoY2ZmLmdsb2JhbFN1YnJJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChnbG9iYWxTdWJySW5kZXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNmZi5lbmNvZGluZyAmJiBjZmYudG9wRGljdC5oYXNOYW1lKCdFbmNvZGluZycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZmYuZW5jb2RpbmcucHJlZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbignRW5jb2RpbmcnLCBbY2ZmLmVuY29kaW5nLmZvcm1hdF0sIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RpbmcgPSB0aGlzLmNvbXBpbGVFbmNvZGluZyhjZmYuZW5jb2RpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbignRW5jb2RpbmcnLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKGVuY29kaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc2V0ID0gdGhpcy5jb21waWxlQ2hhcnNldChjZmYuY2hhcnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbignY2hhcnNldCcsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKGNoYXJzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyU3RyaW5ncyA9IHRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGNmZi5jaGFyU3RyaW5ncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wRGljdFRyYWNrZXIuc2V0RW50cnlMb2NhdGlvbignQ2hhclN0cmluZ3MnLCBbb3V0cHV0Lmxlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChjaGFyU3RyaW5ncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2ZmLmlzQ0lERm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCdGRFNlbGVjdCcsIFtvdXRwdXQubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZkU2VsZWN0ID0gdGhpcy5jb21waWxlRkRTZWxlY3QoY2ZmLmZkU2VsZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LmFkZChmZFNlbGVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkID0gdGhpcy5jb21waWxlVG9wRGljdHMoY2ZmLmZkQXJyYXksIG91dHB1dC5sZW5ndGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCdGREFycmF5JywgW291dHB1dC5sZW5ndGhdLCBvdXRwdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKGNvbXBpbGVkLm91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdFRyYWNrZXJzID0gY29tcGlsZWQudHJhY2tlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhjZmYuZmRBcnJheSwgZm9udERpY3RUcmFja2Vycywgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoW2NmZi50b3BEaWN0XSwgW3RvcERpY3RUcmFja2VyXSwgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYWRkKFswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZU51bWJlcjogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfZW5jb2RlTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQodmFsdWUpID09PSBwYXJzZUludCh2YWx1ZSwgMTApICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlSW50ZWdlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5jb2RlRmxvYXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZUZsb2F0OiBmdW5jdGlvbiBDRkZDb21waWxlcl9lbmNvZGVGbG9hdChudW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBudW0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IC9cXC4oXFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxcZHswLDJ9KD86ZSguKyl8JCkvLmV4ZWModmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVwc2lsb24gPSBwYXJzZUZsb2F0KCcxZScgKyAoKG1bMl0gPyArbVsyXSA6IDApICsgbVsxXS5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoTWF0aC5yb3VuZChudW0gKiBlcHNpbG9uKSAvIGVwc2lsb24pLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5pYmJsZXMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHZhbHVlLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSB2YWx1ZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYSA9PT0gJ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWJibGVzICs9IHZhbHVlWysraV0gPT09ICctJyA/ICdjJyA6ICdiJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhID09PSAnLicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pYmJsZXMgKz0gJ2EnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGEgPT09ICctJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmliYmxlcyArPSAnZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWJibGVzICs9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuaWJibGVzICs9IG5pYmJsZXMubGVuZ3RoICYgMSA/ICdmJyA6ICdmZic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9IFszMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IG5pYmJsZXMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHVzaChwYXJzZUludChuaWJibGVzLnN1YnN0cmluZyhpLCBpICsgMiksIDE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVJbnRlZ2VyOiBmdW5jdGlvbiBDRkZDb21waWxlcl9lbmNvZGVJbnRlZ2VyKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPj0gLTEwNyAmJiB2YWx1ZSA8PSAxMDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IFt2YWx1ZSArIDEzOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA+PSAxMDggJiYgdmFsdWUgPD0gMTEzMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIC0gMTA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gWyh2YWx1ZSA+PiA4KSArIDI0NywgdmFsdWUgJiAweEZGXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID49IC0xMTMxICYmIHZhbHVlIDw9IC0xMDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtdmFsdWUgLSAxMDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBbKHZhbHVlID4+IDgpICsgMjUxLCB2YWx1ZSAmIDB4RkZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gLTMyNzY4ICYmIHZhbHVlIDw9IDMyNzY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBbMHgxYywgdmFsdWUgPj4gOCAmIDB4RkYsIHZhbHVlICYgMHhGRl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IFsweDFkLCB2YWx1ZSA+PiAyNCAmIDB4RkYsIHZhbHVlID4+IDE2ICYgMHhGRiwgdmFsdWUgPj4gOCAmIDB4RkYsIHZhbHVlICYgMHhGRl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUhlYWRlcjogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUhlYWRlcihoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2hlYWRlci5tYWpvciwgaGVhZGVyLm1pbm9yLCBoZWFkZXIuaGRyU2l6ZSwgaGVhZGVyLm9mZlNpemVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVOYW1lSW5kZXg6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVOYW1lSW5kZXgobmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZUluZGV4ID0gbmV3IENGRkluZGV4KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbmFtZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBNYXRoLm1pbihuYW1lLmxlbmd0aCwgMTI3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNhbml0aXplZE5hbWUgPSBuZXcgQXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhciA9IG5hbWVbal07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyIDwgJyEnIHx8IGNoYXIgPiAnficgfHwgY2hhciA9PT0gJ1snIHx8IGNoYXIgPT09ICddJyB8fCBjaGFyID09PSAnKCcgfHwgY2hhciA9PT0gJyknIHx8IGNoYXIgPT09ICd7JyB8fCBjaGFyID09PSAnfScgfHwgY2hhciA9PT0gJzwnIHx8IGNoYXIgPT09ICc+JyB8fCBjaGFyID09PSAnLycgfHwgY2hhciA9PT0gJyUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciA9ICdfJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVkTmFtZVtqXSA9IGNoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZWROYW1lID0gc2FuaXRpemVkTmFtZS5qb2luKCcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2FuaXRpemVkTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbml0aXplZE5hbWUgPSAnQmFkX0ZvbnRfTmFtZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lSW5kZXguYWRkKCgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShzYW5pdGl6ZWROYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KG5hbWVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVRvcERpY3RzOiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlVG9wRGljdHMoZGljdHMsIGxlbmd0aCwgcmVtb3ZlQ2lkS2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdFRyYWNrZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZkQXJyYXlJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGljdHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpY3QgPSBkaWN0c1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlQ2lkS2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKCdDSURGb250VmVyc2lvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERpY3QucmVtb3ZlQnlOYW1lKCdDSURGb250UmV2aXNpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZSgnQ0lERm9udFR5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZSgnQ0lEQ291bnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnREaWN0LnJlbW92ZUJ5TmFtZSgnVUlEQmFzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnREaWN0VHJhY2tlciA9IG5ldyBDRkZPZmZzZXRUcmFja2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdERhdGEgPSB0aGlzLmNvbXBpbGVEaWN0KGZvbnREaWN0LCBmb250RGljdFRyYWNrZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGljdFRyYWNrZXJzLnB1c2goZm9udERpY3RUcmFja2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRBcnJheUluZGV4LmFkZChmb250RGljdERhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250RGljdFRyYWNrZXIub2Zmc2V0KGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRBcnJheUluZGV4ID0gdGhpcy5jb21waWxlSW5kZXgoZmRBcnJheUluZGV4LCBmb250RGljdFRyYWNrZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja2VyczogZm9udERpY3RUcmFja2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0OiBmZEFycmF5SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQcml2YXRlRGljdHM6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVQcml2YXRlRGljdHMoZGljdHMsIHRyYWNrZXJzLCBvdXRwdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkaWN0cy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdCA9IGRpY3RzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJpdmF0ZURpY3QgPSBmb250RGljdC5wcml2YXRlRGljdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVEaWN0IHx8ICFmb250RGljdC5oYXNOYW1lKCdQcml2YXRlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVGhlcmUgbXVzdCBiZSBhIHByaXZhdGUgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcml2YXRlRGljdFRyYWNrZXIgPSBuZXcgQ0ZGT2Zmc2V0VHJhY2tlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJpdmF0ZURpY3REYXRhID0gdGhpcy5jb21waWxlRGljdChwcml2YXRlRGljdCwgcHJpdmF0ZURpY3RUcmFja2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dExlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVEaWN0VHJhY2tlci5vZmZzZXQob3V0cHV0TGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByaXZhdGVEaWN0RGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dExlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja2Vyc1tpXS5zZXRFbnRyeUxvY2F0aW9uKCdQcml2YXRlJywgW3ByaXZhdGVEaWN0RGF0YS5sZW5ndGgsIG91dHB1dExlbmd0aF0sIG91dHB1dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hZGQocHJpdmF0ZURpY3REYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpdmF0ZURpY3Quc3VicnNJbmRleCAmJiBwcml2YXRlRGljdC5oYXNOYW1lKCdTdWJycycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VicnMgPSB0aGlzLmNvbXBpbGVJbmRleChwcml2YXRlRGljdC5zdWJyc0luZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGVEaWN0VHJhY2tlci5zZXRFbnRyeUxvY2F0aW9uKCdTdWJycycsIFtwcml2YXRlRGljdERhdGEubGVuZ3RoXSwgb3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5hZGQoc3VicnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVEaWN0OiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlRGljdChkaWN0LCBvZmZzZXRUcmFja2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmRlciA9IGRpY3Qub3JkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9yZGVyLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBvcmRlcltpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gZGljdC52YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXMgPSBkaWN0LnZhbHVlc1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZXMgPSBkaWN0LnR5cGVzW2tleV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMgPSBbdHlwZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFt2YWx1ZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gdHlwZXMubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSB0eXBlc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tqXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbnVtJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPSBvdXQuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnb2Zmc2V0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBkaWN0LmtleVRvTmFtZU1hcFtrZXldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2Zmc2V0VHJhY2tlci5pc1RyYWNraW5nKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRUcmFja2VyLnRyYWNrKG5hbWUsIG91dC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdChbMHgxZCwgMCwgMCwgMCwgMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FycmF5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdkZWx0YSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQodGhpcy5lbmNvZGVOdW1iZXIodmFsdWUpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMSwga2sgPSB2YWx1ZXMubGVuZ3RoOyBrIDwga2s7ICsraykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gb3V0LmNvbmNhdCh0aGlzLmVuY29kZU51bWJlcih2YWx1ZXNba10pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5rbm93biBkYXRhIHR5cGUgb2YgXCIuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IG91dC5jb25jYXQoZGljdC5vcGNvZGVzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVN0cmluZ0luZGV4OiBmdW5jdGlvbiBDRkZDb21waWxlcl9jb21waWxlU3RyaW5nSW5kZXgoc3RyaW5ncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJpbmdJbmRleCA9IG5ldyBDRkZJbmRleCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0luZGV4LmFkZCgoMCwgX3V0aWwuc3RyaW5nVG9CeXRlcykoc3RyaW5nc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVJbmRleChzdHJpbmdJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdsb2JhbFN1YnJJbmRleDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUdsb2JhbFN1YnJJbmRleCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsU3VickluZGV4ID0gdGhpcy5jZmYuZ2xvYmFsU3VickluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0LndyaXRlQnl0ZUFycmF5KHRoaXMuY29tcGlsZUluZGV4KGdsb2JhbFN1YnJJbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVDaGFyU3RyaW5nczogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUNoYXJTdHJpbmdzKGNoYXJTdHJpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTdHJpbmdzSW5kZXggPSBuZXcgQ0ZGSW5kZXgoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hhclN0cmluZ3MuY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSBjaGFyU3RyaW5ncy5nZXQoaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclN0cmluZ3NJbmRleC5hZGQobmV3IFVpbnQ4QXJyYXkoWzB4OEIsIDB4MEVdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJTdHJpbmdzSW5kZXguYWRkKGdseXBoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlSW5kZXgoY2hhclN0cmluZ3NJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUNoYXJzZXQ6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVDaGFyc2V0KGNoYXJzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMSArICh0aGlzLmNmZi5jaGFyU3RyaW5ncy5jb3VudCAtIDEpICogMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShvdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVFbmNvZGluZzogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUVuY29kaW5nKGVuY29kaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkoZW5jb2RpbmcucmF3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlRkRTZWxlY3Q6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVGRFNlbGVjdChmZFNlbGVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtYXQgPSBmZFNlbGVjdC5mb3JtYXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCwgaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IG5ldyBVaW50OEFycmF5KDEgKyBmZFNlbGVjdC5mZFNlbGVjdC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0WzBdID0gZm9ybWF0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmRTZWxlY3QuZmRTZWxlY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRbaSArIDFdID0gZmRTZWxlY3QuZmRTZWxlY3RbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdEZEID0gZmRTZWxlY3QuZmRTZWxlY3RbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VzID0gW2Zvcm1hdCwgMCwgMCwgc3RhcnQgPj4gOCAmIDB4RkYsIHN0YXJ0ICYgMHhGRiwgbGFzdEZEXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMTsgaSA8IGZkU2VsZWN0LmZkU2VsZWN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRGRCA9IGZkU2VsZWN0LmZkU2VsZWN0W2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGRCAhPT0gbGFzdEZEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKGkgPj4gOCAmIDB4RkYsIGkgJiAweEZGLCBjdXJyZW50RkQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RkQgPSBjdXJyZW50RkQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtUmFuZ2VzID0gKHJhbmdlcy5sZW5ndGggLSAzKSAvIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbMV0gPSBudW1SYW5nZXMgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbMl0gPSBudW1SYW5nZXMgJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goaSA+PiA4ICYgMHhGRiwgaSAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gbmV3IFVpbnQ4QXJyYXkocmFuZ2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KG91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZVR5cGVkQXJyYXk6IGZ1bmN0aW9uIENGRkNvbXBpbGVyX2NvbXBpbGVUeXBlZEFycmF5KGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0W2ldID0gZGF0YVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVJbmRleDogZnVuY3Rpb24gQ0ZGQ29tcGlsZXJfY29tcGlsZUluZGV4KGluZGV4LCB0cmFja2Vycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrZXJzID0gdHJhY2tlcnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iamVjdHMgPSBpbmRleC5vYmplY3RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IG9iamVjdHMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBbY291bnQgPj4gOCAmIDB4RkYsIGNvdW50ICYgMHhmZl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RPZmZzZXQgPSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdE9mZnNldCArPSBvYmplY3RzW2ldLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0U2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsYXN0T2Zmc2V0IDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRTaXplID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxhc3RPZmZzZXQgPCAweDEwMDAwMDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0U2l6ZSA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKG9mZnNldFNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZU9mZnNldCA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQgKyAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9mZnNldFNpemUgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9mZnNldFNpemUgPT09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhGRiwgcmVsYXRpdmVPZmZzZXQgJiAweEZGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChvZmZzZXRTaXplID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gocmVsYXRpdmVPZmZzZXQgPj4gMTYgJiAweEZGLCByZWxhdGl2ZU9mZnNldCA+PiA4ICYgMHhGRiwgcmVsYXRpdmVPZmZzZXQgJiAweEZGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChyZWxhdGl2ZU9mZnNldCA+Pj4gMjQgJiAweEZGLCByZWxhdGl2ZU9mZnNldCA+PiAxNiAmIDB4RkYsIHJlbGF0aXZlT2Zmc2V0ID4+IDggJiAweEZGLCByZWxhdGl2ZU9mZnNldCAmIDB4RkYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iamVjdHNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlT2Zmc2V0ICs9IG9iamVjdHNbaV0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYWNrZXJzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFja2Vyc1tpXS5vZmZzZXQoZGF0YS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gb2JqZWN0c1tpXS5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnB1c2gob2JqZWN0c1tpXVtqXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENGRkNvbXBpbGVyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ0ZGQ29tcGlsZXIgPSBDRkZDb21waWxlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTc1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5FeHBlcnRTdWJzZXRDaGFyc2V0ID0gZXhwb3J0cy5FeHBlcnRDaGFyc2V0ID0gZXhwb3J0cy5JU09BZG9iZUNoYXJzZXQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdmFyIElTT0Fkb2JlQ2hhcnNldCA9IFsnLm5vdGRlZicsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVyaWdodCcsICdwYXJlbmxlZnQnLCAncGFyZW5yaWdodCcsICdhc3RlcmlzaycsICdwbHVzJywgJ2NvbW1hJywgJ2h5cGhlbicsICdwZXJpb2QnLCAnc2xhc2gnLCAnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScsICdzaXgnLCAnc2V2ZW4nLCAnZWlnaHQnLCAnbmluZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnbGVzcycsICdlcXVhbCcsICdncmVhdGVyJywgJ3F1ZXN0aW9uJywgJ2F0JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsICdicmFja2V0bGVmdCcsICdiYWNrc2xhc2gnLCAnYnJhY2tldHJpZ2h0JywgJ2FzY2lpY2lyY3VtJywgJ3VuZGVyc2NvcmUnLCAncXVvdGVsZWZ0JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICdleGNsYW1kb3duJywgJ2NlbnQnLCAnc3RlcmxpbmcnLCAnZnJhY3Rpb24nLCAneWVuJywgJ2Zsb3JpbicsICdzZWN0aW9uJywgJ2N1cnJlbmN5JywgJ3F1b3Rlc2luZ2xlJywgJ3F1b3RlZGJsbGVmdCcsICdndWlsbGVtb3RsZWZ0JywgJ2d1aWxzaW5nbGxlZnQnLCAnZ3VpbHNpbmdscmlnaHQnLCAnZmknLCAnZmwnLCAnZW5kYXNoJywgJ2RhZ2dlcicsICdkYWdnZXJkYmwnLCAncGVyaW9kY2VudGVyZWQnLCAncGFyYWdyYXBoJywgJ2J1bGxldCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncXVvdGVkYmxyaWdodCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdwZXJ0aG91c2FuZCcsICdxdWVzdGlvbmRvd24nLCAnZ3JhdmUnLCAnYWN1dGUnLCAnY2lyY3VtZmxleCcsICd0aWxkZScsICdtYWNyb24nLCAnYnJldmUnLCAnZG90YWNjZW50JywgJ2RpZXJlc2lzJywgJ3JpbmcnLCAnY2VkaWxsYScsICdodW5nYXJ1bWxhdXQnLCAnb2dvbmVrJywgJ2Nhcm9uJywgJ2VtZGFzaCcsICdBRScsICdvcmRmZW1pbmluZScsICdMc2xhc2gnLCAnT3NsYXNoJywgJ09FJywgJ29yZG1hc2N1bGluZScsICdhZScsICdkb3RsZXNzaScsICdsc2xhc2gnLCAnb3NsYXNoJywgJ29lJywgJ2dlcm1hbmRibHMnLCAnb25lc3VwZXJpb3InLCAnbG9naWNhbG5vdCcsICdtdScsICd0cmFkZW1hcmsnLCAnRXRoJywgJ29uZWhhbGYnLCAncGx1c21pbnVzJywgJ1Rob3JuJywgJ29uZXF1YXJ0ZXInLCAnZGl2aWRlJywgJ2Jyb2tlbmJhcicsICdkZWdyZWUnLCAndGhvcm4nLCAndGhyZWVxdWFydGVycycsICd0d29zdXBlcmlvcicsICdyZWdpc3RlcmVkJywgJ21pbnVzJywgJ2V0aCcsICdtdWx0aXBseScsICd0aHJlZXN1cGVyaW9yJywgJ2NvcHlyaWdodCcsICdBYWN1dGUnLCAnQWNpcmN1bWZsZXgnLCAnQWRpZXJlc2lzJywgJ0FncmF2ZScsICdBcmluZycsICdBdGlsZGUnLCAnQ2NlZGlsbGEnLCAnRWFjdXRlJywgJ0VjaXJjdW1mbGV4JywgJ0VkaWVyZXNpcycsICdFZ3JhdmUnLCAnSWFjdXRlJywgJ0ljaXJjdW1mbGV4JywgJ0lkaWVyZXNpcycsICdJZ3JhdmUnLCAnTnRpbGRlJywgJ09hY3V0ZScsICdPY2lyY3VtZmxleCcsICdPZGllcmVzaXMnLCAnT2dyYXZlJywgJ090aWxkZScsICdTY2Fyb24nLCAnVWFjdXRlJywgJ1VjaXJjdW1mbGV4JywgJ1VkaWVyZXNpcycsICdVZ3JhdmUnLCAnWWFjdXRlJywgJ1lkaWVyZXNpcycsICdaY2Fyb24nLCAnYWFjdXRlJywgJ2FjaXJjdW1mbGV4JywgJ2FkaWVyZXNpcycsICdhZ3JhdmUnLCAnYXJpbmcnLCAnYXRpbGRlJywgJ2NjZWRpbGxhJywgJ2VhY3V0ZScsICdlY2lyY3VtZmxleCcsICdlZGllcmVzaXMnLCAnZWdyYXZlJywgJ2lhY3V0ZScsICdpY2lyY3VtZmxleCcsICdpZGllcmVzaXMnLCAnaWdyYXZlJywgJ250aWxkZScsICdvYWN1dGUnLCAnb2NpcmN1bWZsZXgnLCAnb2RpZXJlc2lzJywgJ29ncmF2ZScsICdvdGlsZGUnLCAnc2Nhcm9uJywgJ3VhY3V0ZScsICd1Y2lyY3VtZmxleCcsICd1ZGllcmVzaXMnLCAndWdyYXZlJywgJ3lhY3V0ZScsICd5ZGllcmVzaXMnLCAnemNhcm9uJ107XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5JU09BZG9iZUNoYXJzZXQgPSBJU09BZG9iZUNoYXJzZXQ7XG4gICAgICAgICAgICAgICAgdmFyIEV4cGVydENoYXJzZXQgPSBbJy5ub3RkZWYnLCAnc3BhY2UnLCAnZXhjbGFtc21hbGwnLCAnSHVuZ2FydW1sYXV0c21hbGwnLCAnZG9sbGFyb2xkc3R5bGUnLCAnZG9sbGFyc3VwZXJpb3InLCAnYW1wZXJzYW5kc21hbGwnLCAnQWN1dGVzbWFsbCcsICdwYXJlbmxlZnRzdXBlcmlvcicsICdwYXJlbnJpZ2h0c3VwZXJpb3InLCAndHdvZG90ZW5sZWFkZXInLCAnb25lZG90ZW5sZWFkZXInLCAnY29tbWEnLCAnaHlwaGVuJywgJ3BlcmlvZCcsICdmcmFjdGlvbicsICd6ZXJvb2xkc3R5bGUnLCAnb25lb2xkc3R5bGUnLCAndHdvb2xkc3R5bGUnLCAndGhyZWVvbGRzdHlsZScsICdmb3Vyb2xkc3R5bGUnLCAnZml2ZW9sZHN0eWxlJywgJ3NpeG9sZHN0eWxlJywgJ3NldmVub2xkc3R5bGUnLCAnZWlnaHRvbGRzdHlsZScsICduaW5lb2xkc3R5bGUnLCAnY29sb24nLCAnc2VtaWNvbG9uJywgJ2NvbW1hc3VwZXJpb3InLCAndGhyZWVxdWFydGVyc2VtZGFzaCcsICdwZXJpb2RzdXBlcmlvcicsICdxdWVzdGlvbnNtYWxsJywgJ2FzdXBlcmlvcicsICdic3VwZXJpb3InLCAnY2VudHN1cGVyaW9yJywgJ2RzdXBlcmlvcicsICdlc3VwZXJpb3InLCAnaXN1cGVyaW9yJywgJ2xzdXBlcmlvcicsICdtc3VwZXJpb3InLCAnbnN1cGVyaW9yJywgJ29zdXBlcmlvcicsICdyc3VwZXJpb3InLCAnc3N1cGVyaW9yJywgJ3RzdXBlcmlvcicsICdmZicsICdmaScsICdmbCcsICdmZmknLCAnZmZsJywgJ3BhcmVubGVmdGluZmVyaW9yJywgJ3BhcmVucmlnaHRpbmZlcmlvcicsICdDaXJjdW1mbGV4c21hbGwnLCAnaHlwaGVuc3VwZXJpb3InLCAnR3JhdmVzbWFsbCcsICdBc21hbGwnLCAnQnNtYWxsJywgJ0NzbWFsbCcsICdEc21hbGwnLCAnRXNtYWxsJywgJ0ZzbWFsbCcsICdHc21hbGwnLCAnSHNtYWxsJywgJ0lzbWFsbCcsICdKc21hbGwnLCAnS3NtYWxsJywgJ0xzbWFsbCcsICdNc21hbGwnLCAnTnNtYWxsJywgJ09zbWFsbCcsICdQc21hbGwnLCAnUXNtYWxsJywgJ1JzbWFsbCcsICdTc21hbGwnLCAnVHNtYWxsJywgJ1VzbWFsbCcsICdWc21hbGwnLCAnV3NtYWxsJywgJ1hzbWFsbCcsICdZc21hbGwnLCAnWnNtYWxsJywgJ2NvbG9ubW9uZXRhcnknLCAnb25lZml0dGVkJywgJ3J1cGlhaCcsICdUaWxkZXNtYWxsJywgJ2V4Y2xhbWRvd25zbWFsbCcsICdjZW50b2xkc3R5bGUnLCAnTHNsYXNoc21hbGwnLCAnU2Nhcm9uc21hbGwnLCAnWmNhcm9uc21hbGwnLCAnRGllcmVzaXNzbWFsbCcsICdCcmV2ZXNtYWxsJywgJ0Nhcm9uc21hbGwnLCAnRG90YWNjZW50c21hbGwnLCAnTWFjcm9uc21hbGwnLCAnZmlndXJlZGFzaCcsICdoeXBoZW5pbmZlcmlvcicsICdPZ29uZWtzbWFsbCcsICdSaW5nc21hbGwnLCAnQ2VkaWxsYXNtYWxsJywgJ29uZXF1YXJ0ZXInLCAnb25laGFsZicsICd0aHJlZXF1YXJ0ZXJzJywgJ3F1ZXN0aW9uZG93bnNtYWxsJywgJ29uZWVpZ2h0aCcsICd0aHJlZWVpZ2h0aHMnLCAnZml2ZWVpZ2h0aHMnLCAnc2V2ZW5laWdodGhzJywgJ29uZXRoaXJkJywgJ3R3b3RoaXJkcycsICd6ZXJvc3VwZXJpb3InLCAnb25lc3VwZXJpb3InLCAndHdvc3VwZXJpb3InLCAndGhyZWVzdXBlcmlvcicsICdmb3Vyc3VwZXJpb3InLCAnZml2ZXN1cGVyaW9yJywgJ3NpeHN1cGVyaW9yJywgJ3NldmVuc3VwZXJpb3InLCAnZWlnaHRzdXBlcmlvcicsICduaW5lc3VwZXJpb3InLCAnemVyb2luZmVyaW9yJywgJ29uZWluZmVyaW9yJywgJ3R3b2luZmVyaW9yJywgJ3RocmVlaW5mZXJpb3InLCAnZm91cmluZmVyaW9yJywgJ2ZpdmVpbmZlcmlvcicsICdzaXhpbmZlcmlvcicsICdzZXZlbmluZmVyaW9yJywgJ2VpZ2h0aW5mZXJpb3InLCAnbmluZWluZmVyaW9yJywgJ2NlbnRpbmZlcmlvcicsICdkb2xsYXJpbmZlcmlvcicsICdwZXJpb2RpbmZlcmlvcicsICdjb21tYWluZmVyaW9yJywgJ0FncmF2ZXNtYWxsJywgJ0FhY3V0ZXNtYWxsJywgJ0FjaXJjdW1mbGV4c21hbGwnLCAnQXRpbGRlc21hbGwnLCAnQWRpZXJlc2lzc21hbGwnLCAnQXJpbmdzbWFsbCcsICdBRXNtYWxsJywgJ0NjZWRpbGxhc21hbGwnLCAnRWdyYXZlc21hbGwnLCAnRWFjdXRlc21hbGwnLCAnRWNpcmN1bWZsZXhzbWFsbCcsICdFZGllcmVzaXNzbWFsbCcsICdJZ3JhdmVzbWFsbCcsICdJYWN1dGVzbWFsbCcsICdJY2lyY3VtZmxleHNtYWxsJywgJ0lkaWVyZXNpc3NtYWxsJywgJ0V0aHNtYWxsJywgJ050aWxkZXNtYWxsJywgJ09ncmF2ZXNtYWxsJywgJ09hY3V0ZXNtYWxsJywgJ09jaXJjdW1mbGV4c21hbGwnLCAnT3RpbGRlc21hbGwnLCAnT2RpZXJlc2lzc21hbGwnLCAnT0VzbWFsbCcsICdPc2xhc2hzbWFsbCcsICdVZ3JhdmVzbWFsbCcsICdVYWN1dGVzbWFsbCcsICdVY2lyY3VtZmxleHNtYWxsJywgJ1VkaWVyZXNpc3NtYWxsJywgJ1lhY3V0ZXNtYWxsJywgJ1Rob3Juc21hbGwnLCAnWWRpZXJlc2lzc21hbGwnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkV4cGVydENoYXJzZXQgPSBFeHBlcnRDaGFyc2V0O1xuICAgICAgICAgICAgICAgIHZhciBFeHBlcnRTdWJzZXRDaGFyc2V0ID0gWycubm90ZGVmJywgJ3NwYWNlJywgJ2RvbGxhcm9sZHN0eWxlJywgJ2RvbGxhcnN1cGVyaW9yJywgJ3BhcmVubGVmdHN1cGVyaW9yJywgJ3BhcmVucmlnaHRzdXBlcmlvcicsICd0d29kb3RlbmxlYWRlcicsICdvbmVkb3RlbmxlYWRlcicsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ2ZyYWN0aW9uJywgJ3plcm9vbGRzdHlsZScsICdvbmVvbGRzdHlsZScsICd0d29vbGRzdHlsZScsICd0aHJlZW9sZHN0eWxlJywgJ2ZvdXJvbGRzdHlsZScsICdmaXZlb2xkc3R5bGUnLCAnc2l4b2xkc3R5bGUnLCAnc2V2ZW5vbGRzdHlsZScsICdlaWdodG9sZHN0eWxlJywgJ25pbmVvbGRzdHlsZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnY29tbWFzdXBlcmlvcicsICd0aHJlZXF1YXJ0ZXJzZW1kYXNoJywgJ3BlcmlvZHN1cGVyaW9yJywgJ2FzdXBlcmlvcicsICdic3VwZXJpb3InLCAnY2VudHN1cGVyaW9yJywgJ2RzdXBlcmlvcicsICdlc3VwZXJpb3InLCAnaXN1cGVyaW9yJywgJ2xzdXBlcmlvcicsICdtc3VwZXJpb3InLCAnbnN1cGVyaW9yJywgJ29zdXBlcmlvcicsICdyc3VwZXJpb3InLCAnc3N1cGVyaW9yJywgJ3RzdXBlcmlvcicsICdmZicsICdmaScsICdmbCcsICdmZmknLCAnZmZsJywgJ3BhcmVubGVmdGluZmVyaW9yJywgJ3BhcmVucmlnaHRpbmZlcmlvcicsICdoeXBoZW5zdXBlcmlvcicsICdjb2xvbm1vbmV0YXJ5JywgJ29uZWZpdHRlZCcsICdydXBpYWgnLCAnY2VudG9sZHN0eWxlJywgJ2ZpZ3VyZWRhc2gnLCAnaHlwaGVuaW5mZXJpb3InLCAnb25lcXVhcnRlcicsICdvbmVoYWxmJywgJ3RocmVlcXVhcnRlcnMnLCAnb25lZWlnaHRoJywgJ3RocmVlZWlnaHRocycsICdmaXZlZWlnaHRocycsICdzZXZlbmVpZ2h0aHMnLCAnb25ldGhpcmQnLCAndHdvdGhpcmRzJywgJ3plcm9zdXBlcmlvcicsICdvbmVzdXBlcmlvcicsICd0d29zdXBlcmlvcicsICd0aHJlZXN1cGVyaW9yJywgJ2ZvdXJzdXBlcmlvcicsICdmaXZlc3VwZXJpb3InLCAnc2l4c3VwZXJpb3InLCAnc2V2ZW5zdXBlcmlvcicsICdlaWdodHN1cGVyaW9yJywgJ25pbmVzdXBlcmlvcicsICd6ZXJvaW5mZXJpb3InLCAnb25laW5mZXJpb3InLCAndHdvaW5mZXJpb3InLCAndGhyZWVpbmZlcmlvcicsICdmb3VyaW5mZXJpb3InLCAnZml2ZWluZmVyaW9yJywgJ3NpeGluZmVyaW9yJywgJ3NldmVuaW5mZXJpb3InLCAnZWlnaHRpbmZlcmlvcicsICduaW5laW5mZXJpb3InLCAnY2VudGluZmVyaW9yJywgJ2RvbGxhcmluZmVyaW9yJywgJ3BlcmlvZGluZmVyaW9yJywgJ2NvbW1haW5mZXJpb3InXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkV4cGVydFN1YnNldENoYXJzZXQgPSBFeHBlcnRTdWJzZXRDaGFyc2V0O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNzYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldEVuY29kaW5nID0gZ2V0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5FeHBlcnRFbmNvZGluZyA9IGV4cG9ydHMuWmFwZkRpbmdiYXRzRW5jb2RpbmcgPSBleHBvcnRzLlN5bWJvbFNldEVuY29kaW5nID0gZXhwb3J0cy5NYWNSb21hbkVuY29kaW5nID0gZXhwb3J0cy5TdGFuZGFyZEVuY29kaW5nID0gZXhwb3J0cy5XaW5BbnNpRW5jb2RpbmcgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdmFyIEV4cGVydEVuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2V4Y2xhbXNtYWxsJywgJ0h1bmdhcnVtbGF1dHNtYWxsJywgJycsICdkb2xsYXJvbGRzdHlsZScsICdkb2xsYXJzdXBlcmlvcicsICdhbXBlcnNhbmRzbWFsbCcsICdBY3V0ZXNtYWxsJywgJ3BhcmVubGVmdHN1cGVyaW9yJywgJ3BhcmVucmlnaHRzdXBlcmlvcicsICd0d29kb3RlbmxlYWRlcicsICdvbmVkb3RlbmxlYWRlcicsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ2ZyYWN0aW9uJywgJ3plcm9vbGRzdHlsZScsICdvbmVvbGRzdHlsZScsICd0d29vbGRzdHlsZScsICd0aHJlZW9sZHN0eWxlJywgJ2ZvdXJvbGRzdHlsZScsICdmaXZlb2xkc3R5bGUnLCAnc2l4b2xkc3R5bGUnLCAnc2V2ZW5vbGRzdHlsZScsICdlaWdodG9sZHN0eWxlJywgJ25pbmVvbGRzdHlsZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnY29tbWFzdXBlcmlvcicsICd0aHJlZXF1YXJ0ZXJzZW1kYXNoJywgJ3BlcmlvZHN1cGVyaW9yJywgJ3F1ZXN0aW9uc21hbGwnLCAnJywgJ2FzdXBlcmlvcicsICdic3VwZXJpb3InLCAnY2VudHN1cGVyaW9yJywgJ2RzdXBlcmlvcicsICdlc3VwZXJpb3InLCAnJywgJycsICcnLCAnaXN1cGVyaW9yJywgJycsICcnLCAnbHN1cGVyaW9yJywgJ21zdXBlcmlvcicsICduc3VwZXJpb3InLCAnb3N1cGVyaW9yJywgJycsICcnLCAncnN1cGVyaW9yJywgJ3NzdXBlcmlvcicsICd0c3VwZXJpb3InLCAnJywgJ2ZmJywgJ2ZpJywgJ2ZsJywgJ2ZmaScsICdmZmwnLCAncGFyZW5sZWZ0aW5mZXJpb3InLCAnJywgJ3BhcmVucmlnaHRpbmZlcmlvcicsICdDaXJjdW1mbGV4c21hbGwnLCAnaHlwaGVuc3VwZXJpb3InLCAnR3JhdmVzbWFsbCcsICdBc21hbGwnLCAnQnNtYWxsJywgJ0NzbWFsbCcsICdEc21hbGwnLCAnRXNtYWxsJywgJ0ZzbWFsbCcsICdHc21hbGwnLCAnSHNtYWxsJywgJ0lzbWFsbCcsICdKc21hbGwnLCAnS3NtYWxsJywgJ0xzbWFsbCcsICdNc21hbGwnLCAnTnNtYWxsJywgJ09zbWFsbCcsICdQc21hbGwnLCAnUXNtYWxsJywgJ1JzbWFsbCcsICdTc21hbGwnLCAnVHNtYWxsJywgJ1VzbWFsbCcsICdWc21hbGwnLCAnV3NtYWxsJywgJ1hzbWFsbCcsICdZc21hbGwnLCAnWnNtYWxsJywgJ2NvbG9ubW9uZXRhcnknLCAnb25lZml0dGVkJywgJ3J1cGlhaCcsICdUaWxkZXNtYWxsJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICdleGNsYW1kb3duc21hbGwnLCAnY2VudG9sZHN0eWxlJywgJ0xzbGFzaHNtYWxsJywgJycsICcnLCAnU2Nhcm9uc21hbGwnLCAnWmNhcm9uc21hbGwnLCAnRGllcmVzaXNzbWFsbCcsICdCcmV2ZXNtYWxsJywgJ0Nhcm9uc21hbGwnLCAnJywgJ0RvdGFjY2VudHNtYWxsJywgJycsICcnLCAnTWFjcm9uc21hbGwnLCAnJywgJycsICdmaWd1cmVkYXNoJywgJ2h5cGhlbmluZmVyaW9yJywgJycsICcnLCAnT2dvbmVrc21hbGwnLCAnUmluZ3NtYWxsJywgJ0NlZGlsbGFzbWFsbCcsICcnLCAnJywgJycsICdvbmVxdWFydGVyJywgJ29uZWhhbGYnLCAndGhyZWVxdWFydGVycycsICdxdWVzdGlvbmRvd25zbWFsbCcsICdvbmVlaWdodGgnLCAndGhyZWVlaWdodGhzJywgJ2ZpdmVlaWdodGhzJywgJ3NldmVuZWlnaHRocycsICdvbmV0aGlyZCcsICd0d290aGlyZHMnLCAnJywgJycsICd6ZXJvc3VwZXJpb3InLCAnb25lc3VwZXJpb3InLCAndHdvc3VwZXJpb3InLCAndGhyZWVzdXBlcmlvcicsICdmb3Vyc3VwZXJpb3InLCAnZml2ZXN1cGVyaW9yJywgJ3NpeHN1cGVyaW9yJywgJ3NldmVuc3VwZXJpb3InLCAnZWlnaHRzdXBlcmlvcicsICduaW5lc3VwZXJpb3InLCAnemVyb2luZmVyaW9yJywgJ29uZWluZmVyaW9yJywgJ3R3b2luZmVyaW9yJywgJ3RocmVlaW5mZXJpb3InLCAnZm91cmluZmVyaW9yJywgJ2ZpdmVpbmZlcmlvcicsICdzaXhpbmZlcmlvcicsICdzZXZlbmluZmVyaW9yJywgJ2VpZ2h0aW5mZXJpb3InLCAnbmluZWluZmVyaW9yJywgJ2NlbnRpbmZlcmlvcicsICdkb2xsYXJpbmZlcmlvcicsICdwZXJpb2RpbmZlcmlvcicsICdjb21tYWluZmVyaW9yJywgJ0FncmF2ZXNtYWxsJywgJ0FhY3V0ZXNtYWxsJywgJ0FjaXJjdW1mbGV4c21hbGwnLCAnQXRpbGRlc21hbGwnLCAnQWRpZXJlc2lzc21hbGwnLCAnQXJpbmdzbWFsbCcsICdBRXNtYWxsJywgJ0NjZWRpbGxhc21hbGwnLCAnRWdyYXZlc21hbGwnLCAnRWFjdXRlc21hbGwnLCAnRWNpcmN1bWZsZXhzbWFsbCcsICdFZGllcmVzaXNzbWFsbCcsICdJZ3JhdmVzbWFsbCcsICdJYWN1dGVzbWFsbCcsICdJY2lyY3VtZmxleHNtYWxsJywgJ0lkaWVyZXNpc3NtYWxsJywgJ0V0aHNtYWxsJywgJ050aWxkZXNtYWxsJywgJ09ncmF2ZXNtYWxsJywgJ09hY3V0ZXNtYWxsJywgJ09jaXJjdW1mbGV4c21hbGwnLCAnT3RpbGRlc21hbGwnLCAnT2RpZXJlc2lzc21hbGwnLCAnT0VzbWFsbCcsICdPc2xhc2hzbWFsbCcsICdVZ3JhdmVzbWFsbCcsICdVYWN1dGVzbWFsbCcsICdVY2lyY3VtZmxleHNtYWxsJywgJ1VkaWVyZXNpc3NtYWxsJywgJ1lhY3V0ZXNtYWxsJywgJ1Rob3Juc21hbGwnLCAnWWRpZXJlc2lzc21hbGwnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkV4cGVydEVuY29kaW5nID0gRXhwZXJ0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgdmFyIE1hY0V4cGVydEVuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2V4Y2xhbXNtYWxsJywgJ0h1bmdhcnVtbGF1dHNtYWxsJywgJ2NlbnRvbGRzdHlsZScsICdkb2xsYXJvbGRzdHlsZScsICdkb2xsYXJzdXBlcmlvcicsICdhbXBlcnNhbmRzbWFsbCcsICdBY3V0ZXNtYWxsJywgJ3BhcmVubGVmdHN1cGVyaW9yJywgJ3BhcmVucmlnaHRzdXBlcmlvcicsICd0d29kb3RlbmxlYWRlcicsICdvbmVkb3RlbmxlYWRlcicsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ2ZyYWN0aW9uJywgJ3plcm9vbGRzdHlsZScsICdvbmVvbGRzdHlsZScsICd0d29vbGRzdHlsZScsICd0aHJlZW9sZHN0eWxlJywgJ2ZvdXJvbGRzdHlsZScsICdmaXZlb2xkc3R5bGUnLCAnc2l4b2xkc3R5bGUnLCAnc2V2ZW5vbGRzdHlsZScsICdlaWdodG9sZHN0eWxlJywgJ25pbmVvbGRzdHlsZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnJywgJ3RocmVlcXVhcnRlcnNlbWRhc2gnLCAnJywgJ3F1ZXN0aW9uc21hbGwnLCAnJywgJycsICcnLCAnJywgJ0V0aHNtYWxsJywgJycsICcnLCAnb25lcXVhcnRlcicsICdvbmVoYWxmJywgJ3RocmVlcXVhcnRlcnMnLCAnb25lZWlnaHRoJywgJ3RocmVlZWlnaHRocycsICdmaXZlZWlnaHRocycsICdzZXZlbmVpZ2h0aHMnLCAnb25ldGhpcmQnLCAndHdvdGhpcmRzJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ2ZmJywgJ2ZpJywgJ2ZsJywgJ2ZmaScsICdmZmwnLCAncGFyZW5sZWZ0aW5mZXJpb3InLCAnJywgJ3BhcmVucmlnaHRpbmZlcmlvcicsICdDaXJjdW1mbGV4c21hbGwnLCAnaHlwaGVuaW5mZXJpb3InLCAnR3JhdmVzbWFsbCcsICdBc21hbGwnLCAnQnNtYWxsJywgJ0NzbWFsbCcsICdEc21hbGwnLCAnRXNtYWxsJywgJ0ZzbWFsbCcsICdHc21hbGwnLCAnSHNtYWxsJywgJ0lzbWFsbCcsICdKc21hbGwnLCAnS3NtYWxsJywgJ0xzbWFsbCcsICdNc21hbGwnLCAnTnNtYWxsJywgJ09zbWFsbCcsICdQc21hbGwnLCAnUXNtYWxsJywgJ1JzbWFsbCcsICdTc21hbGwnLCAnVHNtYWxsJywgJ1VzbWFsbCcsICdWc21hbGwnLCAnV3NtYWxsJywgJ1hzbWFsbCcsICdZc21hbGwnLCAnWnNtYWxsJywgJ2NvbG9ubW9uZXRhcnknLCAnb25lZml0dGVkJywgJ3J1cGlhaCcsICdUaWxkZXNtYWxsJywgJycsICcnLCAnYXN1cGVyaW9yJywgJ2NlbnRzdXBlcmlvcicsICcnLCAnJywgJycsICcnLCAnQWFjdXRlc21hbGwnLCAnQWdyYXZlc21hbGwnLCAnQWNpcmN1bWZsZXhzbWFsbCcsICdBZGllcmVzaXNzbWFsbCcsICdBdGlsZGVzbWFsbCcsICdBcmluZ3NtYWxsJywgJ0NjZWRpbGxhc21hbGwnLCAnRWFjdXRlc21hbGwnLCAnRWdyYXZlc21hbGwnLCAnRWNpcmN1bWZsZXhzbWFsbCcsICdFZGllcmVzaXNzbWFsbCcsICdJYWN1dGVzbWFsbCcsICdJZ3JhdmVzbWFsbCcsICdJY2lyY3VtZmxleHNtYWxsJywgJ0lkaWVyZXNpc3NtYWxsJywgJ050aWxkZXNtYWxsJywgJ09hY3V0ZXNtYWxsJywgJ09ncmF2ZXNtYWxsJywgJ09jaXJjdW1mbGV4c21hbGwnLCAnT2RpZXJlc2lzc21hbGwnLCAnT3RpbGRlc21hbGwnLCAnVWFjdXRlc21hbGwnLCAnVWdyYXZlc21hbGwnLCAnVWNpcmN1bWZsZXhzbWFsbCcsICdVZGllcmVzaXNzbWFsbCcsICcnLCAnZWlnaHRzdXBlcmlvcicsICdmb3VyaW5mZXJpb3InLCAndGhyZWVpbmZlcmlvcicsICdzaXhpbmZlcmlvcicsICdlaWdodGluZmVyaW9yJywgJ3NldmVuaW5mZXJpb3InLCAnU2Nhcm9uc21hbGwnLCAnJywgJ2NlbnRpbmZlcmlvcicsICd0d29pbmZlcmlvcicsICcnLCAnRGllcmVzaXNzbWFsbCcsICcnLCAnQ2Fyb25zbWFsbCcsICdvc3VwZXJpb3InLCAnZml2ZWluZmVyaW9yJywgJycsICdjb21tYWluZmVyaW9yJywgJ3BlcmlvZGluZmVyaW9yJywgJ1lhY3V0ZXNtYWxsJywgJycsICdkb2xsYXJpbmZlcmlvcicsICcnLCAnJywgJ1Rob3Juc21hbGwnLCAnJywgJ25pbmVpbmZlcmlvcicsICd6ZXJvaW5mZXJpb3InLCAnWmNhcm9uc21hbGwnLCAnQUVzbWFsbCcsICdPc2xhc2hzbWFsbCcsICdxdWVzdGlvbmRvd25zbWFsbCcsICdvbmVpbmZlcmlvcicsICdMc2xhc2hzbWFsbCcsICcnLCAnJywgJycsICcnLCAnJywgJycsICdDZWRpbGxhc21hbGwnLCAnJywgJycsICcnLCAnJywgJycsICdPRXNtYWxsJywgJ2ZpZ3VyZWRhc2gnLCAnaHlwaGVuc3VwZXJpb3InLCAnJywgJycsICcnLCAnJywgJ2V4Y2xhbWRvd25zbWFsbCcsICcnLCAnWWRpZXJlc2lzc21hbGwnLCAnJywgJ29uZXN1cGVyaW9yJywgJ3R3b3N1cGVyaW9yJywgJ3RocmVlc3VwZXJpb3InLCAnZm91cnN1cGVyaW9yJywgJ2ZpdmVzdXBlcmlvcicsICdzaXhzdXBlcmlvcicsICdzZXZlbnN1cGVyaW9yJywgJ25pbmVzdXBlcmlvcicsICd6ZXJvc3VwZXJpb3InLCAnJywgJ2VzdXBlcmlvcicsICdyc3VwZXJpb3InLCAndHN1cGVyaW9yJywgJycsICcnLCAnaXN1cGVyaW9yJywgJ3NzdXBlcmlvcicsICdkc3VwZXJpb3InLCAnJywgJycsICcnLCAnJywgJycsICdsc3VwZXJpb3InLCAnT2dvbmVrc21hbGwnLCAnQnJldmVzbWFsbCcsICdNYWNyb25zbWFsbCcsICdic3VwZXJpb3InLCAnbnN1cGVyaW9yJywgJ21zdXBlcmlvcicsICdjb21tYXN1cGVyaW9yJywgJ3BlcmlvZHN1cGVyaW9yJywgJ0RvdGFjY2VudHNtYWxsJywgJ1JpbmdzbWFsbCcsICcnLCAnJywgJycsICcnXTtcbiAgICAgICAgICAgICAgICB2YXIgTWFjUm9tYW5FbmNvZGluZyA9IFsnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVzaW5nbGUnLCAncGFyZW5sZWZ0JywgJ3BhcmVucmlnaHQnLCAnYXN0ZXJpc2snLCAncGx1cycsICdjb21tYScsICdoeXBoZW4nLCAncGVyaW9kJywgJ3NsYXNoJywgJ3plcm8nLCAnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJywgJ2ZpdmUnLCAnc2l4JywgJ3NldmVuJywgJ2VpZ2h0JywgJ25pbmUnLCAnY29sb24nLCAnc2VtaWNvbG9uJywgJ2xlc3MnLCAnZXF1YWwnLCAnZ3JlYXRlcicsICdxdWVzdGlvbicsICdhdCcsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRicsICdHJywgJ0gnLCAnSScsICdKJywgJ0snLCAnTCcsICdNJywgJ04nLCAnTycsICdQJywgJ1EnLCAnUicsICdTJywgJ1QnLCAnVScsICdWJywgJ1cnLCAnWCcsICdZJywgJ1onLCAnYnJhY2tldGxlZnQnLCAnYmFja3NsYXNoJywgJ2JyYWNrZXRyaWdodCcsICdhc2NpaWNpcmN1bScsICd1bmRlcnNjb3JlJywgJ2dyYXZlJywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICcnLCAnQWRpZXJlc2lzJywgJ0FyaW5nJywgJ0NjZWRpbGxhJywgJ0VhY3V0ZScsICdOdGlsZGUnLCAnT2RpZXJlc2lzJywgJ1VkaWVyZXNpcycsICdhYWN1dGUnLCAnYWdyYXZlJywgJ2FjaXJjdW1mbGV4JywgJ2FkaWVyZXNpcycsICdhdGlsZGUnLCAnYXJpbmcnLCAnY2NlZGlsbGEnLCAnZWFjdXRlJywgJ2VncmF2ZScsICdlY2lyY3VtZmxleCcsICdlZGllcmVzaXMnLCAnaWFjdXRlJywgJ2lncmF2ZScsICdpY2lyY3VtZmxleCcsICdpZGllcmVzaXMnLCAnbnRpbGRlJywgJ29hY3V0ZScsICdvZ3JhdmUnLCAnb2NpcmN1bWZsZXgnLCAnb2RpZXJlc2lzJywgJ290aWxkZScsICd1YWN1dGUnLCAndWdyYXZlJywgJ3VjaXJjdW1mbGV4JywgJ3VkaWVyZXNpcycsICdkYWdnZXInLCAnZGVncmVlJywgJ2NlbnQnLCAnc3RlcmxpbmcnLCAnc2VjdGlvbicsICdidWxsZXQnLCAncGFyYWdyYXBoJywgJ2dlcm1hbmRibHMnLCAncmVnaXN0ZXJlZCcsICdjb3B5cmlnaHQnLCAndHJhZGVtYXJrJywgJ2FjdXRlJywgJ2RpZXJlc2lzJywgJ25vdGVxdWFsJywgJ0FFJywgJ09zbGFzaCcsICdpbmZpbml0eScsICdwbHVzbWludXMnLCAnbGVzc2VxdWFsJywgJ2dyZWF0ZXJlcXVhbCcsICd5ZW4nLCAnbXUnLCAncGFydGlhbGRpZmYnLCAnc3VtbWF0aW9uJywgJ3Byb2R1Y3QnLCAncGknLCAnaW50ZWdyYWwnLCAnb3JkZmVtaW5pbmUnLCAnb3JkbWFzY3VsaW5lJywgJ09tZWdhJywgJ2FlJywgJ29zbGFzaCcsICdxdWVzdGlvbmRvd24nLCAnZXhjbGFtZG93bicsICdsb2dpY2Fsbm90JywgJ3JhZGljYWwnLCAnZmxvcmluJywgJ2FwcHJveGVxdWFsJywgJ0RlbHRhJywgJ2d1aWxsZW1vdGxlZnQnLCAnZ3VpbGxlbW90cmlnaHQnLCAnZWxsaXBzaXMnLCAnc3BhY2UnLCAnQWdyYXZlJywgJ0F0aWxkZScsICdPdGlsZGUnLCAnT0UnLCAnb2UnLCAnZW5kYXNoJywgJ2VtZGFzaCcsICdxdW90ZWRibGxlZnQnLCAncXVvdGVkYmxyaWdodCcsICdxdW90ZWxlZnQnLCAncXVvdGVyaWdodCcsICdkaXZpZGUnLCAnbG96ZW5nZScsICd5ZGllcmVzaXMnLCAnWWRpZXJlc2lzJywgJ2ZyYWN0aW9uJywgJ2N1cnJlbmN5JywgJ2d1aWxzaW5nbGxlZnQnLCAnZ3VpbHNpbmdscmlnaHQnLCAnZmknLCAnZmwnLCAnZGFnZ2VyZGJsJywgJ3BlcmlvZGNlbnRlcmVkJywgJ3F1b3Rlc2luZ2xiYXNlJywgJ3F1b3RlZGJsYmFzZScsICdwZXJ0aG91c2FuZCcsICdBY2lyY3VtZmxleCcsICdFY2lyY3VtZmxleCcsICdBYWN1dGUnLCAnRWRpZXJlc2lzJywgJ0VncmF2ZScsICdJYWN1dGUnLCAnSWNpcmN1bWZsZXgnLCAnSWRpZXJlc2lzJywgJ0lncmF2ZScsICdPYWN1dGUnLCAnT2NpcmN1bWZsZXgnLCAnYXBwbGUnLCAnT2dyYXZlJywgJ1VhY3V0ZScsICdVY2lyY3VtZmxleCcsICdVZ3JhdmUnLCAnZG90bGVzc2knLCAnY2lyY3VtZmxleCcsICd0aWxkZScsICdtYWNyb24nLCAnYnJldmUnLCAnZG90YWNjZW50JywgJ3JpbmcnLCAnY2VkaWxsYScsICdodW5nYXJ1bWxhdXQnLCAnb2dvbmVrJywgJ2Nhcm9uJ107XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5NYWNSb21hbkVuY29kaW5nID0gTWFjUm9tYW5FbmNvZGluZztcbiAgICAgICAgICAgICAgICB2YXIgU3RhbmRhcmRFbmNvZGluZyA9IFsnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICdzcGFjZScsICdleGNsYW0nLCAncXVvdGVkYmwnLCAnbnVtYmVyc2lnbicsICdkb2xsYXInLCAncGVyY2VudCcsICdhbXBlcnNhbmQnLCAncXVvdGVyaWdodCcsICdwYXJlbmxlZnQnLCAncGFyZW5yaWdodCcsICdhc3RlcmlzaycsICdwbHVzJywgJ2NvbW1hJywgJ2h5cGhlbicsICdwZXJpb2QnLCAnc2xhc2gnLCAnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScsICdzaXgnLCAnc2V2ZW4nLCAnZWlnaHQnLCAnbmluZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnbGVzcycsICdlcXVhbCcsICdncmVhdGVyJywgJ3F1ZXN0aW9uJywgJ2F0JywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJywgJ0cnLCAnSCcsICdJJywgJ0onLCAnSycsICdMJywgJ00nLCAnTicsICdPJywgJ1AnLCAnUScsICdSJywgJ1MnLCAnVCcsICdVJywgJ1YnLCAnVycsICdYJywgJ1knLCAnWicsICdicmFja2V0bGVmdCcsICdiYWNrc2xhc2gnLCAnYnJhY2tldHJpZ2h0JywgJ2FzY2lpY2lyY3VtJywgJ3VuZGVyc2NvcmUnLCAncXVvdGVsZWZ0JywgJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ2cnLCAnaCcsICdpJywgJ2onLCAnaycsICdsJywgJ20nLCAnbicsICdvJywgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1JywgJ3YnLCAndycsICd4JywgJ3knLCAneicsICdicmFjZWxlZnQnLCAnYmFyJywgJ2JyYWNlcmlnaHQnLCAnYXNjaWl0aWxkZScsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnZXhjbGFtZG93bicsICdjZW50JywgJ3N0ZXJsaW5nJywgJ2ZyYWN0aW9uJywgJ3llbicsICdmbG9yaW4nLCAnc2VjdGlvbicsICdjdXJyZW5jeScsICdxdW90ZXNpbmdsZScsICdxdW90ZWRibGxlZnQnLCAnZ3VpbGxlbW90bGVmdCcsICdndWlsc2luZ2xsZWZ0JywgJ2d1aWxzaW5nbHJpZ2h0JywgJ2ZpJywgJ2ZsJywgJycsICdlbmRhc2gnLCAnZGFnZ2VyJywgJ2RhZ2dlcmRibCcsICdwZXJpb2RjZW50ZXJlZCcsICcnLCAncGFyYWdyYXBoJywgJ2J1bGxldCcsICdxdW90ZXNpbmdsYmFzZScsICdxdW90ZWRibGJhc2UnLCAncXVvdGVkYmxyaWdodCcsICdndWlsbGVtb3RyaWdodCcsICdlbGxpcHNpcycsICdwZXJ0aG91c2FuZCcsICcnLCAncXVlc3Rpb25kb3duJywgJycsICdncmF2ZScsICdhY3V0ZScsICdjaXJjdW1mbGV4JywgJ3RpbGRlJywgJ21hY3JvbicsICdicmV2ZScsICdkb3RhY2NlbnQnLCAnZGllcmVzaXMnLCAnJywgJ3JpbmcnLCAnY2VkaWxsYScsICcnLCAnaHVuZ2FydW1sYXV0JywgJ29nb25laycsICdjYXJvbicsICdlbWRhc2gnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ0FFJywgJycsICdvcmRmZW1pbmluZScsICcnLCAnJywgJycsICcnLCAnTHNsYXNoJywgJ09zbGFzaCcsICdPRScsICdvcmRtYXNjdWxpbmUnLCAnJywgJycsICcnLCAnJywgJycsICdhZScsICcnLCAnJywgJycsICdkb3RsZXNzaScsICcnLCAnJywgJ2xzbGFzaCcsICdvc2xhc2gnLCAnb2UnLCAnZ2VybWFuZGJscycsICcnLCAnJywgJycsICcnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlN0YW5kYXJkRW5jb2RpbmcgPSBTdGFuZGFyZEVuY29kaW5nO1xuICAgICAgICAgICAgICAgIHZhciBXaW5BbnNpRW5jb2RpbmcgPSBbJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnc3BhY2UnLCAnZXhjbGFtJywgJ3F1b3RlZGJsJywgJ251bWJlcnNpZ24nLCAnZG9sbGFyJywgJ3BlcmNlbnQnLCAnYW1wZXJzYW5kJywgJ3F1b3Rlc2luZ2xlJywgJ3BhcmVubGVmdCcsICdwYXJlbnJpZ2h0JywgJ2FzdGVyaXNrJywgJ3BsdXMnLCAnY29tbWEnLCAnaHlwaGVuJywgJ3BlcmlvZCcsICdzbGFzaCcsICd6ZXJvJywgJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91cicsICdmaXZlJywgJ3NpeCcsICdzZXZlbicsICdlaWdodCcsICduaW5lJywgJ2NvbG9uJywgJ3NlbWljb2xvbicsICdsZXNzJywgJ2VxdWFsJywgJ2dyZWF0ZXInLCAncXVlc3Rpb24nLCAnYXQnLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJywgJ2JyYWNrZXRsZWZ0JywgJ2JhY2tzbGFzaCcsICdicmFja2V0cmlnaHQnLCAnYXNjaWljaXJjdW0nLCAndW5kZXJzY29yZScsICdncmF2ZScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdnJywgJ2gnLCAnaScsICdqJywgJ2snLCAnbCcsICdtJywgJ24nLCAnbycsICdwJywgJ3EnLCAncicsICdzJywgJ3QnLCAndScsICd2JywgJ3cnLCAneCcsICd5JywgJ3onLCAnYnJhY2VsZWZ0JywgJ2JhcicsICdicmFjZXJpZ2h0JywgJ2FzY2lpdGlsZGUnLCAnYnVsbGV0JywgJ0V1cm8nLCAnYnVsbGV0JywgJ3F1b3Rlc2luZ2xiYXNlJywgJ2Zsb3JpbicsICdxdW90ZWRibGJhc2UnLCAnZWxsaXBzaXMnLCAnZGFnZ2VyJywgJ2RhZ2dlcmRibCcsICdjaXJjdW1mbGV4JywgJ3BlcnRob3VzYW5kJywgJ1NjYXJvbicsICdndWlsc2luZ2xsZWZ0JywgJ09FJywgJ2J1bGxldCcsICdaY2Fyb24nLCAnYnVsbGV0JywgJ2J1bGxldCcsICdxdW90ZWxlZnQnLCAncXVvdGVyaWdodCcsICdxdW90ZWRibGxlZnQnLCAncXVvdGVkYmxyaWdodCcsICdidWxsZXQnLCAnZW5kYXNoJywgJ2VtZGFzaCcsICd0aWxkZScsICd0cmFkZW1hcmsnLCAnc2Nhcm9uJywgJ2d1aWxzaW5nbHJpZ2h0JywgJ29lJywgJ2J1bGxldCcsICd6Y2Fyb24nLCAnWWRpZXJlc2lzJywgJ3NwYWNlJywgJ2V4Y2xhbWRvd24nLCAnY2VudCcsICdzdGVybGluZycsICdjdXJyZW5jeScsICd5ZW4nLCAnYnJva2VuYmFyJywgJ3NlY3Rpb24nLCAnZGllcmVzaXMnLCAnY29weXJpZ2h0JywgJ29yZGZlbWluaW5lJywgJ2d1aWxsZW1vdGxlZnQnLCAnbG9naWNhbG5vdCcsICdoeXBoZW4nLCAncmVnaXN0ZXJlZCcsICdtYWNyb24nLCAnZGVncmVlJywgJ3BsdXNtaW51cycsICd0d29zdXBlcmlvcicsICd0aHJlZXN1cGVyaW9yJywgJ2FjdXRlJywgJ211JywgJ3BhcmFncmFwaCcsICdwZXJpb2RjZW50ZXJlZCcsICdjZWRpbGxhJywgJ29uZXN1cGVyaW9yJywgJ29yZG1hc2N1bGluZScsICdndWlsbGVtb3RyaWdodCcsICdvbmVxdWFydGVyJywgJ29uZWhhbGYnLCAndGhyZWVxdWFydGVycycsICdxdWVzdGlvbmRvd24nLCAnQWdyYXZlJywgJ0FhY3V0ZScsICdBY2lyY3VtZmxleCcsICdBdGlsZGUnLCAnQWRpZXJlc2lzJywgJ0FyaW5nJywgJ0FFJywgJ0NjZWRpbGxhJywgJ0VncmF2ZScsICdFYWN1dGUnLCAnRWNpcmN1bWZsZXgnLCAnRWRpZXJlc2lzJywgJ0lncmF2ZScsICdJYWN1dGUnLCAnSWNpcmN1bWZsZXgnLCAnSWRpZXJlc2lzJywgJ0V0aCcsICdOdGlsZGUnLCAnT2dyYXZlJywgJ09hY3V0ZScsICdPY2lyY3VtZmxleCcsICdPdGlsZGUnLCAnT2RpZXJlc2lzJywgJ211bHRpcGx5JywgJ09zbGFzaCcsICdVZ3JhdmUnLCAnVWFjdXRlJywgJ1VjaXJjdW1mbGV4JywgJ1VkaWVyZXNpcycsICdZYWN1dGUnLCAnVGhvcm4nLCAnZ2VybWFuZGJscycsICdhZ3JhdmUnLCAnYWFjdXRlJywgJ2FjaXJjdW1mbGV4JywgJ2F0aWxkZScsICdhZGllcmVzaXMnLCAnYXJpbmcnLCAnYWUnLCAnY2NlZGlsbGEnLCAnZWdyYXZlJywgJ2VhY3V0ZScsICdlY2lyY3VtZmxleCcsICdlZGllcmVzaXMnLCAnaWdyYXZlJywgJ2lhY3V0ZScsICdpY2lyY3VtZmxleCcsICdpZGllcmVzaXMnLCAnZXRoJywgJ250aWxkZScsICdvZ3JhdmUnLCAnb2FjdXRlJywgJ29jaXJjdW1mbGV4JywgJ290aWxkZScsICdvZGllcmVzaXMnLCAnZGl2aWRlJywgJ29zbGFzaCcsICd1Z3JhdmUnLCAndWFjdXRlJywgJ3VjaXJjdW1mbGV4JywgJ3VkaWVyZXNpcycsICd5YWN1dGUnLCAndGhvcm4nLCAneWRpZXJlc2lzJ107XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5XaW5BbnNpRW5jb2RpbmcgPSBXaW5BbnNpRW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgdmFyIFN5bWJvbFNldEVuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2V4Y2xhbScsICd1bml2ZXJzYWwnLCAnbnVtYmVyc2lnbicsICdleGlzdGVudGlhbCcsICdwZXJjZW50JywgJ2FtcGVyc2FuZCcsICdzdWNodGhhdCcsICdwYXJlbmxlZnQnLCAncGFyZW5yaWdodCcsICdhc3Rlcmlza21hdGgnLCAncGx1cycsICdjb21tYScsICdtaW51cycsICdwZXJpb2QnLCAnc2xhc2gnLCAnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInLCAnZml2ZScsICdzaXgnLCAnc2V2ZW4nLCAnZWlnaHQnLCAnbmluZScsICdjb2xvbicsICdzZW1pY29sb24nLCAnbGVzcycsICdlcXVhbCcsICdncmVhdGVyJywgJ3F1ZXN0aW9uJywgJ2NvbmdydWVudCcsICdBbHBoYScsICdCZXRhJywgJ0NoaScsICdEZWx0YScsICdFcHNpbG9uJywgJ1BoaScsICdHYW1tYScsICdFdGEnLCAnSW90YScsICd0aGV0YTEnLCAnS2FwcGEnLCAnTGFtYmRhJywgJ011JywgJ051JywgJ09taWNyb24nLCAnUGknLCAnVGhldGEnLCAnUmhvJywgJ1NpZ21hJywgJ1RhdScsICdVcHNpbG9uJywgJ3NpZ21hMScsICdPbWVnYScsICdYaScsICdQc2knLCAnWmV0YScsICdicmFja2V0bGVmdCcsICd0aGVyZWZvcmUnLCAnYnJhY2tldHJpZ2h0JywgJ3BlcnBlbmRpY3VsYXInLCAndW5kZXJzY29yZScsICdyYWRpY2FsZXgnLCAnYWxwaGEnLCAnYmV0YScsICdjaGknLCAnZGVsdGEnLCAnZXBzaWxvbicsICdwaGknLCAnZ2FtbWEnLCAnZXRhJywgJ2lvdGEnLCAncGhpMScsICdrYXBwYScsICdsYW1iZGEnLCAnbXUnLCAnbnUnLCAnb21pY3JvbicsICdwaScsICd0aGV0YScsICdyaG8nLCAnc2lnbWEnLCAndGF1JywgJ3Vwc2lsb24nLCAnb21lZ2ExJywgJ29tZWdhJywgJ3hpJywgJ3BzaScsICd6ZXRhJywgJ2JyYWNlbGVmdCcsICdiYXInLCAnYnJhY2VyaWdodCcsICdzaW1pbGFyJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ0V1cm8nLCAnVXBzaWxvbjEnLCAnbWludXRlJywgJ2xlc3NlcXVhbCcsICdmcmFjdGlvbicsICdpbmZpbml0eScsICdmbG9yaW4nLCAnY2x1YicsICdkaWFtb25kJywgJ2hlYXJ0JywgJ3NwYWRlJywgJ2Fycm93Ym90aCcsICdhcnJvd2xlZnQnLCAnYXJyb3d1cCcsICdhcnJvd3JpZ2h0JywgJ2Fycm93ZG93bicsICdkZWdyZWUnLCAncGx1c21pbnVzJywgJ3NlY29uZCcsICdncmVhdGVyZXF1YWwnLCAnbXVsdGlwbHknLCAncHJvcG9ydGlvbmFsJywgJ3BhcnRpYWxkaWZmJywgJ2J1bGxldCcsICdkaXZpZGUnLCAnbm90ZXF1YWwnLCAnZXF1aXZhbGVuY2UnLCAnYXBwcm94ZXF1YWwnLCAnZWxsaXBzaXMnLCAnYXJyb3d2ZXJ0ZXgnLCAnYXJyb3dob3JpemV4JywgJ2NhcnJpYWdlcmV0dXJuJywgJ2FsZXBoJywgJ0lmcmFrdHVyJywgJ1JmcmFrdHVyJywgJ3dlaWVyc3RyYXNzJywgJ2NpcmNsZW11bHRpcGx5JywgJ2NpcmNsZXBsdXMnLCAnZW1wdHlzZXQnLCAnaW50ZXJzZWN0aW9uJywgJ3VuaW9uJywgJ3Byb3BlcnN1cGVyc2V0JywgJ3JlZmxleHN1cGVyc2V0JywgJ25vdHN1YnNldCcsICdwcm9wZXJzdWJzZXQnLCAncmVmbGV4c3Vic2V0JywgJ2VsZW1lbnQnLCAnbm90ZWxlbWVudCcsICdhbmdsZScsICdncmFkaWVudCcsICdyZWdpc3RlcnNlcmlmJywgJ2NvcHlyaWdodHNlcmlmJywgJ3RyYWRlbWFya3NlcmlmJywgJ3Byb2R1Y3QnLCAncmFkaWNhbCcsICdkb3RtYXRoJywgJ2xvZ2ljYWxub3QnLCAnbG9naWNhbGFuZCcsICdsb2dpY2Fsb3InLCAnYXJyb3dkYmxib3RoJywgJ2Fycm93ZGJsbGVmdCcsICdhcnJvd2RibHVwJywgJ2Fycm93ZGJscmlnaHQnLCAnYXJyb3dkYmxkb3duJywgJ2xvemVuZ2UnLCAnYW5nbGVsZWZ0JywgJ3JlZ2lzdGVyc2FucycsICdjb3B5cmlnaHRzYW5zJywgJ3RyYWRlbWFya3NhbnMnLCAnc3VtbWF0aW9uJywgJ3BhcmVubGVmdHRwJywgJ3BhcmVubGVmdGV4JywgJ3BhcmVubGVmdGJ0JywgJ2JyYWNrZXRsZWZ0dHAnLCAnYnJhY2tldGxlZnRleCcsICdicmFja2V0bGVmdGJ0JywgJ2JyYWNlbGVmdHRwJywgJ2JyYWNlbGVmdG1pZCcsICdicmFjZWxlZnRidCcsICdicmFjZWV4JywgJycsICdhbmdsZXJpZ2h0JywgJ2ludGVncmFsJywgJ2ludGVncmFsdHAnLCAnaW50ZWdyYWxleCcsICdpbnRlZ3JhbGJ0JywgJ3BhcmVucmlnaHR0cCcsICdwYXJlbnJpZ2h0ZXgnLCAncGFyZW5yaWdodGJ0JywgJ2JyYWNrZXRyaWdodHRwJywgJ2JyYWNrZXRyaWdodGV4JywgJ2JyYWNrZXRyaWdodGJ0JywgJ2JyYWNlcmlnaHR0cCcsICdicmFjZXJpZ2h0bWlkJywgJ2JyYWNlcmlnaHRidCcsICcnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlN5bWJvbFNldEVuY29kaW5nID0gU3ltYm9sU2V0RW5jb2Rpbmc7XG4gICAgICAgICAgICAgICAgdmFyIFphcGZEaW5nYmF0c0VuY29kaW5nID0gWycnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ3NwYWNlJywgJ2ExJywgJ2EyJywgJ2EyMDInLCAnYTMnLCAnYTQnLCAnYTUnLCAnYTExOScsICdhMTE4JywgJ2ExMTcnLCAnYTExJywgJ2ExMicsICdhMTMnLCAnYTE0JywgJ2ExNScsICdhMTYnLCAnYTEwNScsICdhMTcnLCAnYTE4JywgJ2ExOScsICdhMjAnLCAnYTIxJywgJ2EyMicsICdhMjMnLCAnYTI0JywgJ2EyNScsICdhMjYnLCAnYTI3JywgJ2EyOCcsICdhNicsICdhNycsICdhOCcsICdhOScsICdhMTAnLCAnYTI5JywgJ2EzMCcsICdhMzEnLCAnYTMyJywgJ2EzMycsICdhMzQnLCAnYTM1JywgJ2EzNicsICdhMzcnLCAnYTM4JywgJ2EzOScsICdhNDAnLCAnYTQxJywgJ2E0MicsICdhNDMnLCAnYTQ0JywgJ2E0NScsICdhNDYnLCAnYTQ3JywgJ2E0OCcsICdhNDknLCAnYTUwJywgJ2E1MScsICdhNTInLCAnYTUzJywgJ2E1NCcsICdhNTUnLCAnYTU2JywgJ2E1NycsICdhNTgnLCAnYTU5JywgJ2E2MCcsICdhNjEnLCAnYTYyJywgJ2E2MycsICdhNjQnLCAnYTY1JywgJ2E2NicsICdhNjcnLCAnYTY4JywgJ2E2OScsICdhNzAnLCAnYTcxJywgJ2E3MicsICdhNzMnLCAnYTc0JywgJ2EyMDMnLCAnYTc1JywgJ2EyMDQnLCAnYTc2JywgJ2E3NycsICdhNzgnLCAnYTc5JywgJ2E4MScsICdhODInLCAnYTgzJywgJ2E4NCcsICdhOTcnLCAnYTk4JywgJ2E5OScsICdhMTAwJywgJycsICdhODknLCAnYTkwJywgJ2E5MycsICdhOTQnLCAnYTkxJywgJ2E5MicsICdhMjA1JywgJ2E4NScsICdhMjA2JywgJ2E4NicsICdhODcnLCAnYTg4JywgJ2E5NScsICdhOTYnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJycsICcnLCAnJywgJ2ExMDEnLCAnYTEwMicsICdhMTAzJywgJ2ExMDQnLCAnYTEwNicsICdhMTA3JywgJ2ExMDgnLCAnYTExMicsICdhMTExJywgJ2ExMTAnLCAnYTEwOScsICdhMTIwJywgJ2ExMjEnLCAnYTEyMicsICdhMTIzJywgJ2ExMjQnLCAnYTEyNScsICdhMTI2JywgJ2ExMjcnLCAnYTEyOCcsICdhMTI5JywgJ2ExMzAnLCAnYTEzMScsICdhMTMyJywgJ2ExMzMnLCAnYTEzNCcsICdhMTM1JywgJ2ExMzYnLCAnYTEzNycsICdhMTM4JywgJ2ExMzknLCAnYTE0MCcsICdhMTQxJywgJ2ExNDInLCAnYTE0MycsICdhMTQ0JywgJ2ExNDUnLCAnYTE0NicsICdhMTQ3JywgJ2ExNDgnLCAnYTE0OScsICdhMTUwJywgJ2ExNTEnLCAnYTE1MicsICdhMTUzJywgJ2ExNTQnLCAnYTE1NScsICdhMTU2JywgJ2ExNTcnLCAnYTE1OCcsICdhMTU5JywgJ2ExNjAnLCAnYTE2MScsICdhMTYzJywgJ2ExNjQnLCAnYTE5NicsICdhMTY1JywgJ2ExOTInLCAnYTE2NicsICdhMTY3JywgJ2ExNjgnLCAnYTE2OScsICdhMTcwJywgJ2ExNzEnLCAnYTE3MicsICdhMTczJywgJ2ExNjInLCAnYTE3NCcsICdhMTc1JywgJ2ExNzYnLCAnYTE3NycsICdhMTc4JywgJ2ExNzknLCAnYTE5MycsICdhMTgwJywgJ2ExOTknLCAnYTE4MScsICdhMjAwJywgJ2ExODInLCAnJywgJ2EyMDEnLCAnYTE4MycsICdhMTg0JywgJ2ExOTcnLCAnYTE4NScsICdhMTk0JywgJ2ExOTgnLCAnYTE4NicsICdhMTk1JywgJ2ExODcnLCAnYTE4OCcsICdhMTg5JywgJ2ExOTAnLCAnYTE5MScsICcnXTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlphcGZEaW5nYmF0c0VuY29kaW5nID0gWmFwZkRpbmdiYXRzRW5jb2Rpbmc7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1dpbkFuc2lFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdpbkFuc2lFbmNvZGluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3RhbmRhcmRFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0YW5kYXJkRW5jb2Rpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ01hY1JvbWFuRW5jb2RpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNYWNSb21hbkVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdTeW1ib2xTZXRFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN5bWJvbFNldEVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdaYXBmRGluZ2JhdHNFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFphcGZEaW5nYmF0c0VuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdFeHBlcnRFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4cGVydEVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNYWNFeHBlcnRFbmNvZGluZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hY0V4cGVydEVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNzcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIHZhciBnZXRMb29rdXBUYWJsZUZhY3RvcnkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpLmdldExvb2t1cFRhYmxlRmFjdG9yeTtcbiAgICAgICAgICAgICAgICB2YXIgZ2V0R2x5cGhzVW5pY29kZSA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICB0WydBJ10gPSAweDAwNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSAweDAwQzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FFYWN1dGUnXSA9IDB4MDFGQztcbiAgICAgICAgICAgICAgICAgICAgdFsnQUVtYWNyb24nXSA9IDB4MDFFMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQUVzbWFsbCddID0gMHhGN0U2O1xuICAgICAgICAgICAgICAgICAgICB0WydBYWN1dGUnXSA9IDB4MDBDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWFjdXRlc21hbGwnXSA9IDB4RjdFMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWJyZXZlJ10gPSAweDAxMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWFjdXRlJ10gPSAweDFFQUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWN5cmlsbGljJ10gPSAweDA0RDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWRvdGJlbG93J10gPSAweDFFQjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWdyYXZlJ10gPSAweDFFQjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZWhvb2thYm92ZSddID0gMHgxRUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydBYnJldmV0aWxkZSddID0gMHgxRUI0O1xuICAgICAgICAgICAgICAgICAgICB0WydBY2Fyb24nXSA9IDB4MDFDRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWNpcmNsZSddID0gMHgyNEI2O1xuICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gMHgwMEMyO1xuICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleGFjdXRlJ10gPSAweDFFQTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FjaXJjdW1mbGV4ZG90YmVsb3cnXSA9IDB4MUVBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnQWNpcmN1bWZsZXhncmF2ZSddID0gMHgxRUE2O1xuICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleGhvb2thYm92ZSddID0gMHgxRUE4O1xuICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleHNtYWxsJ10gPSAweEY3RTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FjaXJjdW1mbGV4dGlsZGUnXSA9IDB4MUVBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWN1dGUnXSA9IDB4RjZDOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWN1dGVzbWFsbCddID0gMHhGN0I0O1xuICAgICAgICAgICAgICAgICAgICB0WydBY3lyaWxsaWMnXSA9IDB4MDQxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWRibGdyYXZlJ10gPSAweDAyMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FkaWVyZXNpcyddID0gMHgwMEM0O1xuICAgICAgICAgICAgICAgICAgICB0WydBZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEQyO1xuICAgICAgICAgICAgICAgICAgICB0WydBZGllcmVzaXNtYWNyb24nXSA9IDB4MDFERTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzc21hbGwnXSA9IDB4RjdFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWRvdGJlbG93J10gPSAweDFFQTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Fkb3RtYWNyb24nXSA9IDB4MDFFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWdyYXZlJ10gPSAweDAwQzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FncmF2ZXNtYWxsJ10gPSAweEY3RTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Fob29rYWJvdmUnXSA9IDB4MUVBMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWllY3lyaWxsaWMnXSA9IDB4MDRENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWludmVydGVkYnJldmUnXSA9IDB4MDIwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWxwaGEnXSA9IDB4MDM5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWxwaGF0b25vcyddID0gMHgwMzg2O1xuICAgICAgICAgICAgICAgICAgICB0WydBbWFjcm9uJ10gPSAweDAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Ftb25vc3BhY2UnXSA9IDB4RkYyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQW9nb25layddID0gMHgwMTA0O1xuICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gMHgwMEM1O1xuICAgICAgICAgICAgICAgICAgICB0WydBcmluZ2FjdXRlJ10gPSAweDAxRkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nYmVsb3cnXSA9IDB4MUUwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpbmdzbWFsbCddID0gMHhGN0U1O1xuICAgICAgICAgICAgICAgICAgICB0WydBc21hbGwnXSA9IDB4Rjc2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSAweDAwQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0F0aWxkZXNtYWxsJ10gPSAweEY3RTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0F5YmFybWVuaWFuJ10gPSAweDA1MzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0InXSA9IDB4MDA0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmNpcmNsZSddID0gMHgyNEI3O1xuICAgICAgICAgICAgICAgICAgICB0WydCZG90YWNjZW50J10gPSAweDFFMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Jkb3RiZWxvdyddID0gMHgxRTA0O1xuICAgICAgICAgICAgICAgICAgICB0WydCZWN5cmlsbGljJ10gPSAweDA0MTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JlbmFybWVuaWFuJ10gPSAweDA1MzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JldGEnXSA9IDB4MDM5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmhvb2snXSA9IDB4MDE4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmxpbmViZWxvdyddID0gMHgxRTA2O1xuICAgICAgICAgICAgICAgICAgICB0WydCbW9ub3NwYWNlJ10gPSAweEZGMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JyZXZlc21hbGwnXSA9IDB4RjZGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQnNtYWxsJ10gPSAweEY3NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0J0b3BiYXInXSA9IDB4MDE4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gMHgwMDQzO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWFybWVuaWFuJ10gPSAweDA1M0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gMHgwMTA2O1xuICAgICAgICAgICAgICAgICAgICB0WydDYXJvbiddID0gMHhGNkNBO1xuICAgICAgICAgICAgICAgICAgICB0WydDYXJvbnNtYWxsJ10gPSAweEY2RjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gMHgwMTBDO1xuICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gMHgwMEM3O1xuICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYWFjdXRlJ10gPSAweDFFMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NjZWRpbGxhc21hbGwnXSA9IDB4RjdFNztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2NpcmNsZSddID0gMHgyNEI4O1xuICAgICAgICAgICAgICAgICAgICB0WydDY2lyY3VtZmxleCddID0gMHgwMTA4O1xuICAgICAgICAgICAgICAgICAgICB0WydDZG90J10gPSAweDAxMEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Nkb3RhY2NlbnQnXSA9IDB4MDEwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2VkaWxsYXNtYWxsJ10gPSAweEY3Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoYWFybWVuaWFuJ10gPSAweDA1NDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWFia2hhc2lhbmN5cmlsbGljJ10gPSAweDA0QkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWN5cmlsbGljJ10gPSAweDA0Mjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljJ10gPSAweDA0QkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWRlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWRpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2hlaGFybWVuaWFuJ10gPSAweDA1NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoZWtoYWthc3NpYW5jeXJpbGxpYyddID0gMHgwNENCO1xuICAgICAgICAgICAgICAgICAgICB0WydDaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljJ10gPSAweDA0Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoaSddID0gMHgwM0E3O1xuICAgICAgICAgICAgICAgICAgICB0WydDaG9vayddID0gMHgwMTg3O1xuICAgICAgICAgICAgICAgICAgICB0WydDaXJjdW1mbGV4c21hbGwnXSA9IDB4RjZGNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ21vbm9zcGFjZSddID0gMHhGRjIzO1xuICAgICAgICAgICAgICAgICAgICB0WydDb2FybWVuaWFuJ10gPSAweDA1NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NzbWFsbCddID0gMHhGNzYzO1xuICAgICAgICAgICAgICAgICAgICB0WydEJ10gPSAweDAwNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RaJ10gPSAweDAxRjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RaY2Fyb24nXSA9IDB4MDFDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRGFhcm1lbmlhbiddID0gMHgwNTM0O1xuICAgICAgICAgICAgICAgICAgICB0WydEYWZyaWNhbiddID0gMHgwMTg5O1xuICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDB4MDEwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRGNlZGlsbGEnXSA9IDB4MUUxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRGNpcmNsZSddID0gMHgyNEI5O1xuICAgICAgICAgICAgICAgICAgICB0WydEY2lyY3VtZmxleGJlbG93J10gPSAweDFFMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Rjcm9hdCddID0gMHgwMTEwO1xuICAgICAgICAgICAgICAgICAgICB0WydEZG90YWNjZW50J10gPSAweDFFMEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Rkb3RiZWxvdyddID0gMHgxRTBDO1xuICAgICAgICAgICAgICAgICAgICB0WydEZWN5cmlsbGljJ10gPSAweDA0MTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RlaWNvcHRpYyddID0gMHgwM0VFO1xuICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gMHgyMjA2O1xuICAgICAgICAgICAgICAgICAgICB0WydEZWx0YWdyZWVrJ10gPSAweDAzOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Rob29rJ10gPSAweDAxOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RpZXJlc2lzJ10gPSAweEY2Q0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RpZXJlc2lzQWN1dGUnXSA9IDB4RjZDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnRGllcmVzaXNHcmF2ZSddID0gMHhGNkNEO1xuICAgICAgICAgICAgICAgICAgICB0WydEaWVyZXNpc3NtYWxsJ10gPSAweEY3QTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RpZ2FtbWFncmVlayddID0gMHgwM0RDO1xuICAgICAgICAgICAgICAgICAgICB0WydEamVjeXJpbGxpYyddID0gMHgwNDAyO1xuICAgICAgICAgICAgICAgICAgICB0WydEbGluZWJlbG93J10gPSAweDFFMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Rtb25vc3BhY2UnXSA9IDB4RkYyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRG90YWNjZW50c21hbGwnXSA9IDB4RjZGNztcbiAgICAgICAgICAgICAgICAgICAgdFsnRHNsYXNoJ10gPSAweDAxMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RzbWFsbCddID0gMHhGNzY0O1xuICAgICAgICAgICAgICAgICAgICB0WydEdG9wYmFyJ10gPSAweDAxOEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0R6J10gPSAweDAxRjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0R6Y2Fyb24nXSA9IDB4MDFDNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRHplYWJraGFzaWFuY3lyaWxsaWMnXSA9IDB4MDRFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRHplY3lyaWxsaWMnXSA9IDB4MDQwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRHpoZWN5cmlsbGljJ10gPSAweDA0MEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0UnXSA9IDB4MDA0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWFjdXRlJ10gPSAweDAwQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZXNtYWxsJ10gPSAweEY3RTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VicmV2ZSddID0gMHgwMTE0O1xuICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDB4MDExQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWNlZGlsbGFicmV2ZSddID0gMHgxRTFDO1xuICAgICAgICAgICAgICAgICAgICB0WydFY2hhcm1lbmlhbiddID0gMHgwNTM1O1xuICAgICAgICAgICAgICAgICAgICB0WydFY2lyY2xlJ10gPSAweDI0QkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4J10gPSAweDAwQ0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4YWN1dGUnXSA9IDB4MUVCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXhiZWxvdyddID0gMHgxRTE4O1xuICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleGRvdGJlbG93J10gPSAweDFFQzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4Z3JhdmUnXSA9IDB4MUVDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXhob29rYWJvdmUnXSA9IDB4MUVDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXhzbWFsbCddID0gMHhGN0VBO1xuICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleHRpbGRlJ10gPSAweDFFQzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VjeXJpbGxpYyddID0gMHgwNDA0O1xuICAgICAgICAgICAgICAgICAgICB0WydFZGJsZ3JhdmUnXSA9IDB4MDIwNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWRpZXJlc2lzJ10gPSAweDAwQ0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpc3NtYWxsJ10gPSAweEY3RUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Vkb3QnXSA9IDB4MDExNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWRvdGFjY2VudCddID0gMHgwMTE2O1xuICAgICAgICAgICAgICAgICAgICB0WydFZG90YmVsb3cnXSA9IDB4MUVCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWZjeXJpbGxpYyddID0gMHgwNDI0O1xuICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDB4MDBDODtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWdyYXZlc21hbGwnXSA9IDB4RjdFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWhhcm1lbmlhbiddID0gMHgwNTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydFaG9va2Fib3ZlJ10gPSAweDFFQkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VpZ2h0cm9tYW4nXSA9IDB4MjE2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnRWludmVydGVkYnJldmUnXSA9IDB4MDIwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWlvdGlmaWVkY3lyaWxsaWMnXSA9IDB4MDQ2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRWxjeXJpbGxpYyddID0gMHgwNDFCO1xuICAgICAgICAgICAgICAgICAgICB0WydFbGV2ZW5yb21hbiddID0gMHgyMTZBO1xuICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSAweDAxMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VtYWNyb25hY3V0ZSddID0gMHgxRTE2O1xuICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uZ3JhdmUnXSA9IDB4MUUxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRW1jeXJpbGxpYyddID0gMHgwNDFDO1xuICAgICAgICAgICAgICAgICAgICB0WydFbW9ub3NwYWNlJ10gPSAweEZGMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VuY3lyaWxsaWMnXSA9IDB4MDQxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRW5kZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNEEyO1xuICAgICAgICAgICAgICAgICAgICB0WydFbmcnXSA9IDB4MDE0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRW5naGVjeXJpbGxpYyddID0gMHgwNEE0O1xuICAgICAgICAgICAgICAgICAgICB0WydFbmhvb2tjeXJpbGxpYyddID0gMHgwNEM3O1xuICAgICAgICAgICAgICAgICAgICB0WydFb2dvbmVrJ10gPSAweDAxMTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VvcGVuJ10gPSAweDAxOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Vwc2lsb24nXSA9IDB4MDM5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXBzaWxvbnRvbm9zJ10gPSAweDAzODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VyY3lyaWxsaWMnXSA9IDB4MDQyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXJldmVyc2VkJ10gPSAweDAxOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VyZXZlcnNlZGN5cmlsbGljJ10gPSAweDA0MkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0VzY3lyaWxsaWMnXSA9IDB4MDQyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXNkZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNEFBO1xuICAgICAgICAgICAgICAgICAgICB0WydFc2gnXSA9IDB4MDFBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXNtYWxsJ10gPSAweEY3NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0V0YSddID0gMHgwMzk3O1xuICAgICAgICAgICAgICAgICAgICB0WydFdGFybWVuaWFuJ10gPSAweDA1Mzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0V0YXRvbm9zJ10gPSAweDAzODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0V0aCddID0gMHgwMEQwO1xuICAgICAgICAgICAgICAgICAgICB0WydFdGhzbWFsbCddID0gMHhGN0YwO1xuICAgICAgICAgICAgICAgICAgICB0WydFdGlsZGUnXSA9IDB4MUVCQztcbiAgICAgICAgICAgICAgICAgICAgdFsnRXRpbGRlYmVsb3cnXSA9IDB4MUUxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXVybyddID0gMHgyMEFDO1xuICAgICAgICAgICAgICAgICAgICB0WydFemgnXSA9IDB4MDFCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnRXpoY2Fyb24nXSA9IDB4MDFFRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXpocmV2ZXJzZWQnXSA9IDB4MDFCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gMHgwMDQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydGY2lyY2xlJ10gPSAweDI0QkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Zkb3RhY2NlbnQnXSA9IDB4MUUxRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRmVoYXJtZW5pYW4nXSA9IDB4MDU1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnRmVpY29wdGljJ10gPSAweDAzRTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Zob29rJ10gPSAweDAxOTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ZpdGFjeXJpbGxpYyddID0gMHgwNDcyO1xuICAgICAgICAgICAgICAgICAgICB0WydGaXZlcm9tYW4nXSA9IDB4MjE2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnRm1vbm9zcGFjZSddID0gMHhGRjI2O1xuICAgICAgICAgICAgICAgICAgICB0WydGb3Vycm9tYW4nXSA9IDB4MjE2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnRnNtYWxsJ10gPSAweEY3NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0cnXSA9IDB4MDA0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnR0JzcXVhcmUnXSA9IDB4MzM4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnR2FjdXRlJ10gPSAweDAxRjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dhbW1hJ10gPSAweDAzOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dhbW1hYWZyaWNhbiddID0gMHgwMTk0O1xuICAgICAgICAgICAgICAgICAgICB0WydHYW5naWFjb3B0aWMnXSA9IDB4MDNFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnR2JyZXZlJ10gPSAweDAxMUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0djYXJvbiddID0gMHgwMUU2O1xuICAgICAgICAgICAgICAgICAgICB0WydHY2VkaWxsYSddID0gMHgwMTIyO1xuICAgICAgICAgICAgICAgICAgICB0WydHY2lyY2xlJ10gPSAweDI0QkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0djaXJjdW1mbGV4J10gPSAweDAxMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0djb21tYWFjY2VudCddID0gMHgwMTIyO1xuICAgICAgICAgICAgICAgICAgICB0WydHZG90J10gPSAweDAxMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dkb3RhY2NlbnQnXSA9IDB4MDEyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnR2VjeXJpbGxpYyddID0gMHgwNDEzO1xuICAgICAgICAgICAgICAgICAgICB0WydHaGFkYXJtZW5pYW4nXSA9IDB4MDU0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnR2hlbWlkZGxlaG9va2N5cmlsbGljJ10gPSAweDA0OTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0doZXN0cm9rZWN5cmlsbGljJ10gPSAweDA0OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0doZXVwdHVybmN5cmlsbGljJ10gPSAweDA0OTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dob29rJ10gPSAweDAxOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dpbWFybWVuaWFuJ10gPSAweDA1MzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dqZWN5cmlsbGljJ10gPSAweDA0MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dtYWNyb24nXSA9IDB4MUUyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnR21vbm9zcGFjZSddID0gMHhGRjI3O1xuICAgICAgICAgICAgICAgICAgICB0WydHcmF2ZSddID0gMHhGNkNFO1xuICAgICAgICAgICAgICAgICAgICB0WydHcmF2ZXNtYWxsJ10gPSAweEY3NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dzbWFsbCddID0gMHhGNzY3O1xuICAgICAgICAgICAgICAgICAgICB0WydHc21hbGxob29rJ10gPSAweDAyOUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dzdHJva2UnXSA9IDB4MDFFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gMHgwMDQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydIMTg1MzMnXSA9IDB4MjVDRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSDE4NTQzJ10gPSAweDI1QUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0gxODU1MSddID0gMHgyNUFCO1xuICAgICAgICAgICAgICAgICAgICB0WydIMjIwNzMnXSA9IDB4MjVBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSFBzcXVhcmUnXSA9IDB4MzNDQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSGFhYmtoYXNpYW5jeXJpbGxpYyddID0gMHgwNEE4O1xuICAgICAgICAgICAgICAgICAgICB0WydIYWRlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hhcmRzaWduY3lyaWxsaWMnXSA9IDB4MDQyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSGJhciddID0gMHgwMTI2O1xuICAgICAgICAgICAgICAgICAgICB0WydIYnJldmViZWxvdyddID0gMHgxRTJBO1xuICAgICAgICAgICAgICAgICAgICB0WydIY2VkaWxsYSddID0gMHgxRTI4O1xuICAgICAgICAgICAgICAgICAgICB0WydIY2lyY2xlJ10gPSAweDI0QkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hjaXJjdW1mbGV4J10gPSAweDAxMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hkaWVyZXNpcyddID0gMHgxRTI2O1xuICAgICAgICAgICAgICAgICAgICB0WydIZG90YWNjZW50J10gPSAweDFFMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hkb3RiZWxvdyddID0gMHgxRTI0O1xuICAgICAgICAgICAgICAgICAgICB0WydIbW9ub3NwYWNlJ10gPSAweEZGMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hvYXJtZW5pYW4nXSA9IDB4MDU0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnSG9yaWNvcHRpYyddID0gMHgwM0U4O1xuICAgICAgICAgICAgICAgICAgICB0WydIc21hbGwnXSA9IDB4Rjc2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnSHVuZ2FydW1sYXV0J10gPSAweEY2Q0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0h1bmdhcnVtbGF1dHNtYWxsJ10gPSAweEY2Rjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0h6c3F1YXJlJ10gPSAweDMzOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0knXSA9IDB4MDA0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSUFjeXJpbGxpYyddID0gMHgwNDJGO1xuICAgICAgICAgICAgICAgICAgICB0WydJSiddID0gMHgwMTMyO1xuICAgICAgICAgICAgICAgICAgICB0WydJVWN5cmlsbGljJ10gPSAweDA0MkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMHgwMENEO1xuICAgICAgICAgICAgICAgICAgICB0WydJYWN1dGVzbWFsbCddID0gMHhGN0VEO1xuICAgICAgICAgICAgICAgICAgICB0WydJYnJldmUnXSA9IDB4MDEyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnSWNhcm9uJ10gPSAweDAxQ0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjbGUnXSA9IDB4MjRCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDB4MDBDRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXhzbWFsbCddID0gMHhGN0VFO1xuICAgICAgICAgICAgICAgICAgICB0WydJY3lyaWxsaWMnXSA9IDB4MDQwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWRibGdyYXZlJ10gPSAweDAyMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lkaWVyZXNpcyddID0gMHgwMENGO1xuICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXNhY3V0ZSddID0gMHgxRTJFO1xuICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEU0O1xuICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXNzbWFsbCddID0gMHhGN0VGO1xuICAgICAgICAgICAgICAgICAgICB0WydJZG90J10gPSAweDAxMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lkb3RhY2NlbnQnXSA9IDB4MDEzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGJlbG93J10gPSAweDFFQ0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0llYnJldmVjeXJpbGxpYyddID0gMHgwNEQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydJZWN5cmlsbGljJ10gPSAweDA0MTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lmcmFrdHVyJ10gPSAweDIxMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMHgwMENDO1xuICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmVzbWFsbCddID0gMHhGN0VDO1xuICAgICAgICAgICAgICAgICAgICB0WydJaG9va2Fib3ZlJ10gPSAweDFFQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lpY3lyaWxsaWMnXSA9IDB4MDQxODtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWludmVydGVkYnJldmUnXSA9IDB4MDIwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSWlzaG9ydGN5cmlsbGljJ10gPSAweDA0MTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDB4MDEyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbmN5cmlsbGljJ10gPSAweDA0RTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ltb25vc3BhY2UnXSA9IDB4RkYyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW5pYXJtZW5pYW4nXSA9IDB4MDUzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW9jeXJpbGxpYyddID0gMHgwNDAxO1xuICAgICAgICAgICAgICAgICAgICB0WydJb2dvbmVrJ10gPSAweDAxMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lvdGEnXSA9IDB4MDM5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW90YWFmcmljYW4nXSA9IDB4MDE5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnSW90YWRpZXJlc2lzJ10gPSAweDAzQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0lvdGF0b25vcyddID0gMHgwMzhBO1xuICAgICAgICAgICAgICAgICAgICB0WydJc21hbGwnXSA9IDB4Rjc2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSXN0cm9rZSddID0gMHgwMTk3O1xuICAgICAgICAgICAgICAgICAgICB0WydJdGlsZGUnXSA9IDB4MDEyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnSXRpbGRlYmVsb3cnXSA9IDB4MUUyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnSXpoaXRzYWN5cmlsbGljJ10gPSAweDA0NzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0l6aGl0c2FkYmxncmF2ZWN5cmlsbGljJ10gPSAweDA0NzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0onXSA9IDB4MDA0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSmFhcm1lbmlhbiddID0gMHgwNTQxO1xuICAgICAgICAgICAgICAgICAgICB0WydKY2lyY2xlJ10gPSAweDI0QkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0pjaXJjdW1mbGV4J10gPSAweDAxMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0plY3lyaWxsaWMnXSA9IDB4MDQwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnSmhlaGFybWVuaWFuJ10gPSAweDA1NEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ptb25vc3BhY2UnXSA9IDB4RkYyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSnNtYWxsJ10gPSAweEY3NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0snXSA9IDB4MDA0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnS0JzcXVhcmUnXSA9IDB4MzM4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnS0tzcXVhcmUnXSA9IDB4MzNDRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2FiYXNoa2lyY3lyaWxsaWMnXSA9IDB4MDRBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2FjdXRlJ10gPSAweDFFMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0thY3lyaWxsaWMnXSA9IDB4MDQxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2FkZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNDlBO1xuICAgICAgICAgICAgICAgICAgICB0WydLYWhvb2tjeXJpbGxpYyddID0gMHgwNEMzO1xuICAgICAgICAgICAgICAgICAgICB0WydLYXBwYSddID0gMHgwMzlBO1xuICAgICAgICAgICAgICAgICAgICB0WydLYXN0cm9rZWN5cmlsbGljJ10gPSAweDA0OUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0thdmVydGljYWxzdHJva2VjeXJpbGxpYyddID0gMHgwNDlDO1xuICAgICAgICAgICAgICAgICAgICB0WydLY2Fyb24nXSA9IDB4MDFFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2NlZGlsbGEnXSA9IDB4MDEzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2NpcmNsZSddID0gMHgyNEMwO1xuICAgICAgICAgICAgICAgICAgICB0WydLY29tbWFhY2NlbnQnXSA9IDB4MDEzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2RvdGJlbG93J10gPSAweDFFMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0tlaGFybWVuaWFuJ10gPSAweDA1NTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0tlbmFybWVuaWFuJ10gPSAweDA1M0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0toYWN5cmlsbGljJ10gPSAweDA0MjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0toZWljb3B0aWMnXSA9IDB4MDNFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2hvb2snXSA9IDB4MDE5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnS2plY3lyaWxsaWMnXSA9IDB4MDQwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnS2xpbmViZWxvdyddID0gMHgxRTM0O1xuICAgICAgICAgICAgICAgICAgICB0WydLbW9ub3NwYWNlJ10gPSAweEZGMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0tvcHBhY3lyaWxsaWMnXSA9IDB4MDQ4MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnS29wcGFncmVlayddID0gMHgwM0RFO1xuICAgICAgICAgICAgICAgICAgICB0WydLc2ljeXJpbGxpYyddID0gMHgwNDZFO1xuICAgICAgICAgICAgICAgICAgICB0WydLc21hbGwnXSA9IDB4Rjc2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gMHgwMDRDO1xuICAgICAgICAgICAgICAgICAgICB0WydMSiddID0gMHgwMUM3O1xuICAgICAgICAgICAgICAgICAgICB0WydMTCddID0gMHhGNkJGO1xuICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDB4MDEzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTGFtYmRhJ10gPSAweDAzOUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gMHgwMTNEO1xuICAgICAgICAgICAgICAgICAgICB0WydMY2VkaWxsYSddID0gMHgwMTNCO1xuICAgICAgICAgICAgICAgICAgICB0WydMY2lyY2xlJ10gPSAweDI0QzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUUzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSAweDAxM0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xkb3QnXSA9IDB4MDEzRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnTGRvdGFjY2VudCddID0gMHgwMTNGO1xuICAgICAgICAgICAgICAgICAgICB0WydMZG90YmVsb3cnXSA9IDB4MUUzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnTGRvdGJlbG93bWFjcm9uJ10gPSAweDFFMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xpd25hcm1lbmlhbiddID0gMHgwNTNDO1xuICAgICAgICAgICAgICAgICAgICB0WydMaiddID0gMHgwMUM4O1xuICAgICAgICAgICAgICAgICAgICB0WydMamVjeXJpbGxpYyddID0gMHgwNDA5O1xuICAgICAgICAgICAgICAgICAgICB0WydMbGluZWJlbG93J10gPSAweDFFM0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xtb25vc3BhY2UnXSA9IDB4RkYyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSAweDAxNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xzbGFzaHNtYWxsJ10gPSAweEY2Rjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xzbWFsbCddID0gMHhGNzZDO1xuICAgICAgICAgICAgICAgICAgICB0WydNJ10gPSAweDAwNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01Cc3F1YXJlJ10gPSAweDMzODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01hY3JvbiddID0gMHhGNkQwO1xuICAgICAgICAgICAgICAgICAgICB0WydNYWNyb25zbWFsbCddID0gMHhGN0FGO1xuICAgICAgICAgICAgICAgICAgICB0WydNYWN1dGUnXSA9IDB4MUUzRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTWNpcmNsZSddID0gMHgyNEMyO1xuICAgICAgICAgICAgICAgICAgICB0WydNZG90YWNjZW50J10gPSAweDFFNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01kb3RiZWxvdyddID0gMHgxRTQyO1xuICAgICAgICAgICAgICAgICAgICB0WydNZW5hcm1lbmlhbiddID0gMHgwNTQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydNbW9ub3NwYWNlJ10gPSAweEZGMkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01zbWFsbCddID0gMHhGNzZEO1xuICAgICAgICAgICAgICAgICAgICB0WydNdHVybmVkJ10gPSAweDAxOUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ011J10gPSAweDAzOUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ04nXSA9IDB4MDA0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTkonXSA9IDB4MDFDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmFjdXRlJ10gPSAweDAxNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05jYXJvbiddID0gMHgwMTQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydOY2VkaWxsYSddID0gMHgwMTQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydOY2lyY2xlJ10gPSAweDI0QzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05jaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmNvbW1hYWNjZW50J10gPSAweDAxNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05kb3RhY2NlbnQnXSA9IDB4MUU0NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmRvdGJlbG93J10gPSAweDFFNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05ob29rbGVmdCddID0gMHgwMTlEO1xuICAgICAgICAgICAgICAgICAgICB0WydOaW5lcm9tYW4nXSA9IDB4MjE2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmonXSA9IDB4MDFDQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmplY3lyaWxsaWMnXSA9IDB4MDQwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmxpbmViZWxvdyddID0gMHgxRTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydObW9ub3NwYWNlJ10gPSAweEZGMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05vd2FybWVuaWFuJ10gPSAweDA1NDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05zbWFsbCddID0gMHhGNzZFO1xuICAgICAgICAgICAgICAgICAgICB0WydOdGlsZGUnXSA9IDB4MDBEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlc21hbGwnXSA9IDB4RjdGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTnUnXSA9IDB4MDM5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gMHgwMDRGO1xuICAgICAgICAgICAgICAgICAgICB0WydPRSddID0gMHgwMTUyO1xuICAgICAgICAgICAgICAgICAgICB0WydPRXNtYWxsJ10gPSAweEY2RkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09hY3V0ZSddID0gMHgwMEQzO1xuICAgICAgICAgICAgICAgICAgICB0WydPYWN1dGVzbWFsbCddID0gMHhGN0YzO1xuICAgICAgICAgICAgICAgICAgICB0WydPYmFycmVkY3lyaWxsaWMnXSA9IDB4MDRFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2JhcnJlZGRpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2JyZXZlJ10gPSAweDAxNEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jYXJvbiddID0gMHgwMUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydPY2VudGVyZWR0aWxkZSddID0gMHgwMTlGO1xuICAgICAgICAgICAgICAgICAgICB0WydPY2lyY2xlJ10gPSAweDI0QzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4J10gPSAweDAwRDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4YWN1dGUnXSA9IDB4MUVEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2NpcmN1bWZsZXhkb3RiZWxvdyddID0gMHgxRUQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleGdyYXZlJ10gPSAweDFFRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4aG9va2Fib3ZlJ10gPSAweDFFRDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4c21hbGwnXSA9IDB4RjdGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2NpcmN1bWZsZXh0aWxkZSddID0gMHgxRUQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydPY3lyaWxsaWMnXSA9IDB4MDQxRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2RibGFjdXRlJ10gPSAweDAxNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09kYmxncmF2ZSddID0gMHgwMjBDO1xuICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDB4MDBENjtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2RpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2RpZXJlc2lzc21hbGwnXSA9IDB4RjdGNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2RvdGJlbG93J10gPSAweDFFQ0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09nb25la3NtYWxsJ10gPSAweEY2RkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ncmF2ZSddID0gMHgwMEQyO1xuICAgICAgICAgICAgICAgICAgICB0WydPZ3JhdmVzbWFsbCddID0gMHhGN0YyO1xuICAgICAgICAgICAgICAgICAgICB0WydPaGFybWVuaWFuJ10gPSAweDA1NTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09obSddID0gMHgyMTI2O1xuICAgICAgICAgICAgICAgICAgICB0WydPaG9va2Fib3ZlJ10gPSAweDFFQ0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ob3JuJ10gPSAweDAxQTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ob3JuYWN1dGUnXSA9IDB4MUVEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2hvcm5kb3RiZWxvdyddID0gMHgxRUUyO1xuICAgICAgICAgICAgICAgICAgICB0WydPaG9ybmdyYXZlJ10gPSAweDFFREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ob3JuaG9va2Fib3ZlJ10gPSAweDFFREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09ob3JudGlsZGUnXSA9IDB4MUVFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gMHgwMTUwO1xuICAgICAgICAgICAgICAgICAgICB0WydPaSddID0gMHgwMUEyO1xuICAgICAgICAgICAgICAgICAgICB0WydPaW52ZXJ0ZWRicmV2ZSddID0gMHgwMjBFO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSAweDAxNEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09tYWNyb25hY3V0ZSddID0gMHgxRTUyO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uZ3JhdmUnXSA9IDB4MUU1MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnT21lZ2EnXSA9IDB4MjEyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnT21lZ2FjeXJpbGxpYyddID0gMHgwNDYwO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWVnYWdyZWVrJ10gPSAweDAzQTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09tZWdhcm91bmRjeXJpbGxpYyddID0gMHgwNDdBO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWVnYXRpdGxvY3lyaWxsaWMnXSA9IDB4MDQ3QztcbiAgICAgICAgICAgICAgICAgICAgdFsnT21lZ2F0b25vcyddID0gMHgwMzhGO1xuICAgICAgICAgICAgICAgICAgICB0WydPbWljcm9uJ10gPSAweDAzOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09taWNyb250b25vcyddID0gMHgwMzhDO1xuICAgICAgICAgICAgICAgICAgICB0WydPbW9ub3NwYWNlJ10gPSAweEZGMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09uZXJvbWFuJ10gPSAweDIxNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09vZ29uZWsnXSA9IDB4MDFFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT29nb25la21hY3JvbiddID0gMHgwMUVDO1xuICAgICAgICAgICAgICAgICAgICB0WydPb3BlbiddID0gMHgwMTg2O1xuICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDB4MDBEODtcbiAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoYWN1dGUnXSA9IDB4MDFGRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoc21hbGwnXSA9IDB4RjdGODtcbiAgICAgICAgICAgICAgICAgICAgdFsnT3NtYWxsJ10gPSAweEY3NkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ09zdHJva2VhY3V0ZSddID0gMHgwMUZFO1xuICAgICAgICAgICAgICAgICAgICB0WydPdGN5cmlsbGljJ10gPSAweDA0N0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ090aWxkZSddID0gMHgwMEQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGVhY3V0ZSddID0gMHgxRTRDO1xuICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGVkaWVyZXNpcyddID0gMHgxRTRFO1xuICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGVzbWFsbCddID0gMHhGN0Y1O1xuICAgICAgICAgICAgICAgICAgICB0WydQJ10gPSAweDAwNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BhY3V0ZSddID0gMHgxRTU0O1xuICAgICAgICAgICAgICAgICAgICB0WydQY2lyY2xlJ10gPSAweDI0QzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Bkb3RhY2NlbnQnXSA9IDB4MUU1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGVjeXJpbGxpYyddID0gMHgwNDFGO1xuICAgICAgICAgICAgICAgICAgICB0WydQZWhhcm1lbmlhbiddID0gMHgwNTRBO1xuICAgICAgICAgICAgICAgICAgICB0WydQZW1pZGRsZWhvb2tjeXJpbGxpYyddID0gMHgwNEE2O1xuICAgICAgICAgICAgICAgICAgICB0WydQaGknXSA9IDB4MDNBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGhvb2snXSA9IDB4MDFBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGknXSA9IDB4MDNBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGl3cmFybWVuaWFuJ10gPSAweDA1NTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Btb25vc3BhY2UnXSA9IDB4RkYzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnUHNpJ10gPSAweDAzQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BzaWN5cmlsbGljJ10gPSAweDA0NzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BzbWFsbCddID0gMHhGNzcwO1xuICAgICAgICAgICAgICAgICAgICB0WydRJ10gPSAweDAwNTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1FjaXJjbGUnXSA9IDB4MjRDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUW1vbm9zcGFjZSddID0gMHhGRjMxO1xuICAgICAgICAgICAgICAgICAgICB0WydRc21hbGwnXSA9IDB4Rjc3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gMHgwMDUyO1xuICAgICAgICAgICAgICAgICAgICB0WydSYWFybWVuaWFuJ10gPSAweDA1NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JhY3V0ZSddID0gMHgwMTU0O1xuICAgICAgICAgICAgICAgICAgICB0WydSY2Fyb24nXSA9IDB4MDE1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmNlZGlsbGEnXSA9IDB4MDE1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmNpcmNsZSddID0gMHgyNEM3O1xuICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDB4MDE1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmRibGdyYXZlJ10gPSAweDAyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Jkb3RhY2NlbnQnXSA9IDB4MUU1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmRvdGJlbG93J10gPSAweDFFNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Jkb3RiZWxvd21hY3JvbiddID0gMHgxRTVDO1xuICAgICAgICAgICAgICAgICAgICB0WydSZWhhcm1lbmlhbiddID0gMHgwNTUwO1xuICAgICAgICAgICAgICAgICAgICB0WydSZnJha3R1ciddID0gMHgyMTFDO1xuICAgICAgICAgICAgICAgICAgICB0WydSaG8nXSA9IDB4MDNBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmluZ3NtYWxsJ10gPSAweEY2RkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JpbnZlcnRlZGJyZXZlJ10gPSAweDAyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JsaW5lYmVsb3cnXSA9IDB4MUU1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUm1vbm9zcGFjZSddID0gMHhGRjMyO1xuICAgICAgICAgICAgICAgICAgICB0WydSc21hbGwnXSA9IDB4Rjc3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnUnNtYWxsaW52ZXJ0ZWQnXSA9IDB4MDI4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUnNtYWxsaW52ZXJ0ZWRzdXBlcmlvciddID0gMHgwMkI2O1xuICAgICAgICAgICAgICAgICAgICB0WydTJ10gPSAweDAwNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDEwMDAwJ10gPSAweDI1MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDIwMDAwJ10gPSAweDI1MTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDMwMDAwJ10gPSAweDI1MTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDQwMDAwJ10gPSAweDI1MTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDUwMDAwJ10gPSAweDI1M0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDYwMDAwJ10gPSAweDI1MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDcwMDAwJ10gPSAweDI1MzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDgwMDAwJ10gPSAweDI1MUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMDkwMDAwJ10gPSAweDI1MjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMTAwMDAwJ10gPSAweDI1MDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMTEwMDAwJ10gPSAweDI1MDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMTkwMDAwJ10gPSAweDI1NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjAwMDAwJ10gPSAweDI1NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjEwMDAwJ10gPSAweDI1NTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjIwMDAwJ10gPSAweDI1NTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjMwMDAwJ10gPSAweDI1NjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjQwMDAwJ10gPSAweDI1NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjUwMDAwJ10gPSAweDI1NTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjYwMDAwJ10gPSAweDI1NUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjcwMDAwJ10gPSAweDI1NUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMjgwMDAwJ10gPSAweDI1NUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMzYwMDAwJ10gPSAweDI1NUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMzcwMDAwJ10gPSAweDI1NUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMzgwMDAwJ10gPSAweDI1NUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGMzkwMDAwJ10gPSAweDI1NTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDAwMDAwJ10gPSAweDI1Njk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDEwMDAwJ10gPSAweDI1NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDIwMDAwJ10gPSAweDI1NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDMwMDAwJ10gPSAweDI1NTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDQwMDAwJ10gPSAweDI1NkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDUwMDAwJ10gPSAweDI1Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDYwMDAwJ10gPSAweDI1Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDcwMDAwJ10gPSAweDI1NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDgwMDAwJ10gPSAweDI1NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNDkwMDAwJ10gPSAweDI1NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTAwMDAwJ10gPSAweDI1NTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTEwMDAwJ10gPSAweDI1NTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTIwMDAwJ10gPSAweDI1NTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTMwMDAwJ10gPSAweDI1NkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NGNTQwMDAwJ10gPSAweDI1NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gMHgwMTVBO1xuICAgICAgICAgICAgICAgICAgICB0WydTYWN1dGVkb3RhY2NlbnQnXSA9IDB4MUU2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2FtcGlncmVlayddID0gMHgwM0UwO1xuICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDB4MDE2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uZG90YWNjZW50J10gPSAweDFFNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjYXJvbnNtYWxsJ10gPSAweEY2RkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjZWRpbGxhJ10gPSAweDAxNUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjaHdhJ10gPSAweDAxOEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjaHdhY3lyaWxsaWMnXSA9IDB4MDREODtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2Nod2FkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0REE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NjaXJjbGUnXSA9IDB4MjRDODtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2NpcmN1bWZsZXgnXSA9IDB4MDE1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnU2NvbW1hYWNjZW50J10gPSAweDAyMTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Nkb3RhY2NlbnQnXSA9IDB4MUU2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2RvdGJlbG93J10gPSAweDFFNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Nkb3RiZWxvd2RvdGFjY2VudCddID0gMHgxRTY4O1xuICAgICAgICAgICAgICAgICAgICB0WydTZWhhcm1lbmlhbiddID0gMHgwNTREO1xuICAgICAgICAgICAgICAgICAgICB0WydTZXZlbnJvbWFuJ10gPSAweDIxNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NoYWFybWVuaWFuJ10gPSAweDA1NDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NoYWN5cmlsbGljJ10gPSAweDA0Mjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NoY2hhY3lyaWxsaWMnXSA9IDB4MDQyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2hlaWNvcHRpYyddID0gMHgwM0UyO1xuICAgICAgICAgICAgICAgICAgICB0WydTaGhhY3lyaWxsaWMnXSA9IDB4MDRCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2hpbWFjb3B0aWMnXSA9IDB4MDNFQztcbiAgICAgICAgICAgICAgICAgICAgdFsnU2lnbWEnXSA9IDB4MDNBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnU2l4cm9tYW4nXSA9IDB4MjE2NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU21vbm9zcGFjZSddID0gMHhGRjMzO1xuICAgICAgICAgICAgICAgICAgICB0WydTb2Z0c2lnbmN5cmlsbGljJ10gPSAweDA0MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NzbWFsbCddID0gMHhGNzczO1xuICAgICAgICAgICAgICAgICAgICB0WydTdGlnbWFncmVlayddID0gMHgwM0RBO1xuICAgICAgICAgICAgICAgICAgICB0WydUJ10gPSAweDAwNTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RhdSddID0gMHgwM0E0O1xuICAgICAgICAgICAgICAgICAgICB0WydUYmFyJ10gPSAweDAxNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RjYXJvbiddID0gMHgwMTY0O1xuICAgICAgICAgICAgICAgICAgICB0WydUY2VkaWxsYSddID0gMHgwMTYyO1xuICAgICAgICAgICAgICAgICAgICB0WydUY2lyY2xlJ10gPSAweDI0Qzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGNvbW1hYWNjZW50J10gPSAweDAxNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rkb3RhY2NlbnQnXSA9IDB4MUU2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGRvdGJlbG93J10gPSAweDFFNkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RlY3lyaWxsaWMnXSA9IDB4MDQyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGVkZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNEFDO1xuICAgICAgICAgICAgICAgICAgICB0WydUZW5yb21hbiddID0gMHgyMTY5O1xuICAgICAgICAgICAgICAgICAgICB0WydUZXRzZWN5cmlsbGljJ10gPSAweDA0QjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RoZXRhJ10gPSAweDAzOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rob29rJ10gPSAweDAxQUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSAweDAwREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rob3Juc21hbGwnXSA9IDB4RjdGRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGhyZWVyb21hbiddID0gMHgyMTYyO1xuICAgICAgICAgICAgICAgICAgICB0WydUaWxkZXNtYWxsJ10gPSAweEY2RkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rpd25hcm1lbmlhbiddID0gMHgwNTRGO1xuICAgICAgICAgICAgICAgICAgICB0WydUbGluZWJlbG93J10gPSAweDFFNkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Rtb25vc3BhY2UnXSA9IDB4RkYzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnVG9hcm1lbmlhbiddID0gMHgwNTM5O1xuICAgICAgICAgICAgICAgICAgICB0WydUb25lZml2ZSddID0gMHgwMUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydUb25lc2l4J10gPSAweDAxODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RvbmV0d28nXSA9IDB4MDFBNztcbiAgICAgICAgICAgICAgICAgICAgdFsnVHJldHJvZmxleGhvb2snXSA9IDB4MDFBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVHNlY3lyaWxsaWMnXSA9IDB4MDQyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVHNoZWN5cmlsbGljJ10gPSAweDA0MEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RzbWFsbCddID0gMHhGNzc0O1xuICAgICAgICAgICAgICAgICAgICB0WydUd2VsdmVyb21hbiddID0gMHgyMTZCO1xuICAgICAgICAgICAgICAgICAgICB0WydUd29yb21hbiddID0gMHgyMTYxO1xuICAgICAgICAgICAgICAgICAgICB0WydVJ10gPSAweDAwNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VhY3V0ZSddID0gMHgwMERBO1xuICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGVzbWFsbCddID0gMHhGN0ZBO1xuICAgICAgICAgICAgICAgICAgICB0WydVYnJldmUnXSA9IDB4MDE2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnVWNhcm9uJ10gPSAweDAxRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VjaXJjbGUnXSA9IDB4MjRDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWNpcmN1bWZsZXgnXSA9IDB4MDBEQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWNpcmN1bWZsZXhiZWxvdyddID0gMHgxRTc2O1xuICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleHNtYWxsJ10gPSAweEY3RkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VjeXJpbGxpYyddID0gMHgwNDIzO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGJsYWN1dGUnXSA9IDB4MDE3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWRibGdyYXZlJ10gPSAweDAyMTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VkaWVyZXNpcyddID0gMHgwMERDO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNhY3V0ZSddID0gMHgwMUQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNiZWxvdyddID0gMHgxRTcyO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNjYXJvbiddID0gMHgwMUQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEYwO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNncmF2ZSddID0gMHgwMURCO1xuICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXNtYWNyb24nXSA9IDB4MDFENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzc21hbGwnXSA9IDB4RjdGQztcbiAgICAgICAgICAgICAgICAgICAgdFsnVWRvdGJlbG93J10gPSAweDFFRTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VncmF2ZSddID0gMHgwMEQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydVZ3JhdmVzbWFsbCddID0gMHhGN0Y5O1xuICAgICAgICAgICAgICAgICAgICB0WydVaG9va2Fib3ZlJ10gPSAweDFFRTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vob3JuJ10gPSAweDAxQUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vob3JuYWN1dGUnXSA9IDB4MUVFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWhvcm5kb3RiZWxvdyddID0gMHgxRUYwO1xuICAgICAgICAgICAgICAgICAgICB0WydVaG9ybmdyYXZlJ10gPSAweDFFRUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vob3JuaG9va2Fib3ZlJ10gPSAweDFFRUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vob3JudGlsZGUnXSA9IDB4MUVFRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWh1bmdhcnVtbGF1dCddID0gMHgwMTcwO1xuICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0Y3lyaWxsaWMnXSA9IDB4MDRGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWludmVydGVkYnJldmUnXSA9IDB4MDIxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVWtjeXJpbGxpYyddID0gMHgwNDc4O1xuICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSAweDAxNkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VtYWNyb25jeXJpbGxpYyddID0gMHgwNEVFO1xuICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uZGllcmVzaXMnXSA9IDB4MUU3QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVW1vbm9zcGFjZSddID0gMHhGRjM1O1xuICAgICAgICAgICAgICAgICAgICB0WydVb2dvbmVrJ10gPSAweDAxNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vwc2lsb24nXSA9IDB4MDNBNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbjEnXSA9IDB4MDNEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrJ10gPSAweDAzRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vwc2lsb25hZnJpY2FuJ10gPSAweDAxQjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Vwc2lsb25kaWVyZXNpcyddID0gMHgwM0FCO1xuICAgICAgICAgICAgICAgICAgICB0WydVcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWsnXSA9IDB4MDNENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbmhvb2tzeW1ib2wnXSA9IDB4MDNEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbnRvbm9zJ10gPSAweDAzOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VyaW5nJ10gPSAweDAxNkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VzaG9ydGN5cmlsbGljJ10gPSAweDA0MEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1VzbWFsbCddID0gMHhGNzc1O1xuICAgICAgICAgICAgICAgICAgICB0WydVc3RyYWlnaHRjeXJpbGxpYyddID0gMHgwNEFFO1xuICAgICAgICAgICAgICAgICAgICB0WydVc3RyYWlnaHRzdHJva2VjeXJpbGxpYyddID0gMHgwNEIwO1xuICAgICAgICAgICAgICAgICAgICB0WydVdGlsZGUnXSA9IDB4MDE2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXRpbGRlYWN1dGUnXSA9IDB4MUU3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXRpbGRlYmVsb3cnXSA9IDB4MUU3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnViddID0gMHgwMDU2O1xuICAgICAgICAgICAgICAgICAgICB0WydWY2lyY2xlJ10gPSAweDI0Q0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Zkb3RiZWxvdyddID0gMHgxRTdFO1xuICAgICAgICAgICAgICAgICAgICB0WydWZWN5cmlsbGljJ10gPSAweDA0MTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Zld2FybWVuaWFuJ10gPSAweDA1NEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Zob29rJ10gPSAweDAxQjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Ztb25vc3BhY2UnXSA9IDB4RkYzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVm9hcm1lbmlhbiddID0gMHgwNTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydWc21hbGwnXSA9IDB4Rjc3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnVnRpbGRlJ10gPSAweDFFN0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1cnXSA9IDB4MDA1NztcbiAgICAgICAgICAgICAgICAgICAgdFsnV2FjdXRlJ10gPSAweDFFODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1djaXJjbGUnXSA9IDB4MjRDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnV2NpcmN1bWZsZXgnXSA9IDB4MDE3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnV2RpZXJlc2lzJ10gPSAweDFFODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1dkb3RhY2NlbnQnXSA9IDB4MUU4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnV2RvdGJlbG93J10gPSAweDFFODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1dncmF2ZSddID0gMHgxRTgwO1xuICAgICAgICAgICAgICAgICAgICB0WydXbW9ub3NwYWNlJ10gPSAweEZGMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1dzbWFsbCddID0gMHhGNzc3O1xuICAgICAgICAgICAgICAgICAgICB0WydYJ10gPSAweDAwNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1hjaXJjbGUnXSA9IDB4MjRDRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWGRpZXJlc2lzJ10gPSAweDFFOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1hkb3RhY2NlbnQnXSA9IDB4MUU4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWGVoYXJtZW5pYW4nXSA9IDB4MDUzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWGknXSA9IDB4MDM5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWG1vbm9zcGFjZSddID0gMHhGRjM4O1xuICAgICAgICAgICAgICAgICAgICB0WydYc21hbGwnXSA9IDB4Rjc3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gMHgwMDU5O1xuICAgICAgICAgICAgICAgICAgICB0WydZYWN1dGUnXSA9IDB4MDBERDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlc21hbGwnXSA9IDB4RjdGRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWF0Y3lyaWxsaWMnXSA9IDB4MDQ2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWNpcmNsZSddID0gMHgyNENFO1xuICAgICAgICAgICAgICAgICAgICB0WydZY2lyY3VtZmxleCddID0gMHgwMTc2O1xuICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDB4MDE3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWRpZXJlc2lzc21hbGwnXSA9IDB4RjdGRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWRvdGFjY2VudCddID0gMHgxRThFO1xuICAgICAgICAgICAgICAgICAgICB0WydZZG90YmVsb3cnXSA9IDB4MUVGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWVyaWN5cmlsbGljJ10gPSAweDA0MkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1llcnVkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0Rjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1lncmF2ZSddID0gMHgxRUYyO1xuICAgICAgICAgICAgICAgICAgICB0WydZaG9vayddID0gMHgwMUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydZaG9va2Fib3ZlJ10gPSAweDFFRjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1lpYXJtZW5pYW4nXSA9IDB4MDU0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWWljeXJpbGxpYyddID0gMHgwNDA3O1xuICAgICAgICAgICAgICAgICAgICB0WydZaXduYXJtZW5pYW4nXSA9IDB4MDU1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWW1vbm9zcGFjZSddID0gMHhGRjM5O1xuICAgICAgICAgICAgICAgICAgICB0WydZc21hbGwnXSA9IDB4Rjc3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWXRpbGRlJ10gPSAweDFFRjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1l1c2JpZ2N5cmlsbGljJ10gPSAweDA0NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1l1c2JpZ2lvdGlmaWVkY3lyaWxsaWMnXSA9IDB4MDQ2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnWXVzbGl0dGxlY3lyaWxsaWMnXSA9IDB4MDQ2NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYyddID0gMHgwNDY4O1xuICAgICAgICAgICAgICAgICAgICB0WydaJ10gPSAweDAwNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1phYXJtZW5pYW4nXSA9IDB4MDUzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSAweDAxNzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1pjYXJvbiddID0gMHgwMTdEO1xuICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb25zbWFsbCddID0gMHhGNkZGO1xuICAgICAgICAgICAgICAgICAgICB0WydaY2lyY2xlJ10gPSAweDI0Q0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1pjaXJjdW1mbGV4J10gPSAweDFFOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1pkb3QnXSA9IDB4MDE3QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmRvdGFjY2VudCddID0gMHgwMTdCO1xuICAgICAgICAgICAgICAgICAgICB0WydaZG90YmVsb3cnXSA9IDB4MUU5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmVjeXJpbGxpYyddID0gMHgwNDE3O1xuICAgICAgICAgICAgICAgICAgICB0WydaZWRlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0OTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1plZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNERFO1xuICAgICAgICAgICAgICAgICAgICB0WydaZXRhJ10gPSAweDAzOTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1poZWFybWVuaWFuJ10gPSAweDA1M0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1poZWJyZXZlY3lyaWxsaWMnXSA9IDB4MDRDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmhlY3lyaWxsaWMnXSA9IDB4MDQxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmhlZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDQ5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnWmhlZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNERDO1xuICAgICAgICAgICAgICAgICAgICB0WydabGluZWJlbG93J10gPSAweDFFOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1ptb25vc3BhY2UnXSA9IDB4RkYzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnWnNtYWxsJ10gPSAweEY3N0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1pzdHJva2UnXSA9IDB4MDFCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYSddID0gMHgwMDYxO1xuICAgICAgICAgICAgICAgICAgICB0WydhYWJlbmdhbGknXSA9IDB4MDk4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSAweDAwRTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FhZGV2YSddID0gMHgwOTA2O1xuICAgICAgICAgICAgICAgICAgICB0WydhYWd1amFyYXRpJ10gPSAweDBBODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FhZ3VybXVraGknXSA9IDB4MEEwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWFtYXRyYWd1cm11a2hpJ10gPSAweDBBM0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FhcnVzcXVhcmUnXSA9IDB4MzMwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWF2b3dlbHNpZ25iZW5nYWxpJ10gPSAweDA5QkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fhdm93ZWxzaWduZGV2YSddID0gMHgwOTNFO1xuICAgICAgICAgICAgICAgICAgICB0WydhYXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FiYnJldmlhdGlvbm1hcmthcm1lbmlhbiddID0gMHgwNTVGO1xuICAgICAgICAgICAgICAgICAgICB0WydhYmJyZXZpYXRpb25zaWduZGV2YSddID0gMHgwOTcwO1xuICAgICAgICAgICAgICAgICAgICB0WydhYmVuZ2FsaSddID0gMHgwOTg1O1xuICAgICAgICAgICAgICAgICAgICB0WydhYm9wb21vZm8nXSA9IDB4MzExQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWJyZXZlJ10gPSAweDAxMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWFjdXRlJ10gPSAweDFFQUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWN5cmlsbGljJ10gPSAweDA0RDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWRvdGJlbG93J10gPSAweDFFQjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWdyYXZlJ10gPSAweDFFQjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZWhvb2thYm92ZSddID0gMHgxRUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydhYnJldmV0aWxkZSddID0gMHgxRUI1O1xuICAgICAgICAgICAgICAgICAgICB0WydhY2Fyb24nXSA9IDB4MDFDRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmNsZSddID0gMHgyNEQwO1xuICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleCddID0gMHgwMEUyO1xuICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleGFjdXRlJ10gPSAweDFFQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FjaXJjdW1mbGV4ZG90YmVsb3cnXSA9IDB4MUVBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXhncmF2ZSddID0gMHgxRUE3O1xuICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleGhvb2thYm92ZSddID0gMHgxRUE5O1xuICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleHRpbGRlJ10gPSAweDFFQUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlJ10gPSAweDAwQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlYmVsb3djbWInXSA9IDB4MDMxNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGVjbWInXSA9IDB4MDMwMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGVjb21iJ10gPSAweDAzMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlZGV2YSddID0gMHgwOTU0O1xuICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZWxvd21vZCddID0gMHgwMkNGO1xuICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZXRvbmVjbWInXSA9IDB4MDM0MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWN5cmlsbGljJ10gPSAweDA0MzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FkYmxncmF2ZSddID0gMHgwMjAxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZGRha2d1cm11a2hpJ10gPSAweDBBNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FkZXZhJ10gPSAweDA5MDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FkaWVyZXNpcyddID0gMHgwMEU0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEQzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZGllcmVzaXNtYWNyb24nXSA9IDB4MDFERjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWRvdGJlbG93J10gPSAweDFFQTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fkb3RtYWNyb24nXSA9IDB4MDFFMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWUnXSA9IDB4MDBFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWVhY3V0ZSddID0gMHgwMUZEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZWtvcmVhbiddID0gMHgzMTUwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZW1hY3JvbiddID0gMHgwMUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMDAyMDgnXSA9IDB4MjAxNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTA4OTQxJ10gPSAweDIwQTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAxNyddID0gMHgwNDEwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMTgnXSA9IDB4MDQxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDE5J10gPSAweDA0MTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAyMCddID0gMHgwNDEzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMjEnXSA9IDB4MDQxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDIyJ10gPSAweDA0MTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAyMyddID0gMHgwNDAxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMjQnXSA9IDB4MDQxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDI1J10gPSAweDA0MTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAyNiddID0gMHgwNDE4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMjcnXSA9IDB4MDQxOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDI4J10gPSAweDA0MUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAyOSddID0gMHgwNDFCO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMzAnXSA9IDB4MDQxQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDMxJ10gPSAweDA0MUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAzMiddID0gMHgwNDFFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMzMnXSA9IDB4MDQxRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDM0J10gPSAweDA0MjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAzNSddID0gMHgwNDIxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMzYnXSA9IDB4MDQyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDM3J10gPSAweDA0MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDAzOCddID0gMHgwNDI0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwMzknXSA9IDB4MDQyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDQwJ10gPSAweDA0MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA0MSddID0gMHgwNDI3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNDInXSA9IDB4MDQyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDQzJ10gPSAweDA0Mjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA0NCddID0gMHgwNDJBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNDUnXSA9IDB4MDQyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDQ2J10gPSAweDA0MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA0NyddID0gMHgwNDJEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNDgnXSA9IDB4MDQyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDQ5J10gPSAweDA0MkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA1MCddID0gMHgwNDkwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNTEnXSA9IDB4MDQwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDUyJ10gPSAweDA0MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA1MyddID0gMHgwNDA0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNTQnXSA9IDB4MDQwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDU1J10gPSAweDA0MDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA1NiddID0gMHgwNDA3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNTcnXSA9IDB4MDQwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDU4J10gPSAweDA0MDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA1OSddID0gMHgwNDBBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNjAnXSA9IDB4MDQwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDYxJ10gPSAweDA0MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA2MiddID0gMHgwNDBFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNjMnXSA9IDB4RjZDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDY0J10gPSAweEY2QzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA2NSddID0gMHgwNDMwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNjYnXSA9IDB4MDQzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDY3J10gPSAweDA0MzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA2OCddID0gMHgwNDMzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNjknXSA9IDB4MDQzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDcwJ10gPSAweDA0MzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA3MSddID0gMHgwNDUxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNzInXSA9IDB4MDQzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDczJ10gPSAweDA0Mzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA3NCddID0gMHgwNDM4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNzUnXSA9IDB4MDQzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDc2J10gPSAweDA0M0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA3NyddID0gMHgwNDNCO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwNzgnXSA9IDB4MDQzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDc5J10gPSAweDA0M0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA4MCddID0gMHgwNDNFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwODEnXSA9IDB4MDQzRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDgyJ10gPSAweDA0NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA4MyddID0gMHgwNDQxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwODQnXSA9IDB4MDQ0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDg1J10gPSAweDA0NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA4NiddID0gMHgwNDQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwODcnXSA9IDB4MDQ0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDg4J10gPSAweDA0NDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA4OSddID0gMHgwNDQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwOTAnXSA9IDB4MDQ0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDkxJ10gPSAweDA0NDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA5MiddID0gMHgwNDRBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwOTMnXSA9IDB4MDQ0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDk0J10gPSAweDA0NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA5NSddID0gMHgwNDREO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwOTYnXSA9IDB4MDQ0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMDk3J10gPSAweDA0NEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDA5OCddID0gMHgwNDkxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAwOTknXSA9IDB4MDQ1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTAwJ10gPSAweDA0NTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDEwMSddID0gMHgwNDU0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxMDInXSA9IDB4MDQ1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTAzJ10gPSAweDA0NTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDEwNCddID0gMHgwNDU3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxMDUnXSA9IDB4MDQ1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTA2J10gPSAweDA0NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDEwNyddID0gMHgwNDVBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxMDgnXSA9IDB4MDQ1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTA5J10gPSAweDA0NUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDExMCddID0gMHgwNDVFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxNDUnXSA9IDB4MDQwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTQ2J10gPSAweDA0NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDE0NyddID0gMHgwNDcyO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxNDgnXSA9IDB4MDQ3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTkyJ10gPSAweEY2QzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDE5MyddID0gMHgwNDVGO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTAxOTQnXSA9IDB4MDQ2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwMTk1J10gPSAweDA0NzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDE5NiddID0gMHgwNDc1O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMTA4MzEnXSA9IDB4RjZDNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTEwODMyJ10gPSAweEY2Qzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkxMDg0NiddID0gMHgwNEQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpMjk5J10gPSAweDIwMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWkzMDAnXSA9IDB4MjAwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTMwMSddID0gMHgyMDBEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTczODEnXSA9IDB4MDY2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Mzg4J10gPSAweDA2MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzM5MiddID0gMHgwNjYwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTczOTMnXSA9IDB4MDY2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Mzk0J10gPSAweDA2NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzM5NSddID0gMHgwNjYzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTczOTYnXSA9IDB4MDY2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Mzk3J10gPSAweDA2NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzM5OCddID0gMHgwNjY2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTczOTknXSA9IDB4MDY2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDAwJ10gPSAweDA2Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQwMSddID0gMHgwNjY5O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MDMnXSA9IDB4MDYxQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDA3J10gPSAweDA2MUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQwOSddID0gMHgwNjIxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MTAnXSA9IDB4MDYyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDExJ10gPSAweDA2MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQxMiddID0gMHgwNjI0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MTMnXSA9IDB4MDYyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDE0J10gPSAweDA2MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQxNSddID0gMHgwNjI3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MTYnXSA9IDB4MDYyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDE3J10gPSAweDA2Mjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQxOCddID0gMHgwNjJBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MTknXSA9IDB4MDYyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDIwJ10gPSAweDA2MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQyMSddID0gMHgwNjJEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MjInXSA9IDB4MDYyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDIzJ10gPSAweDA2MkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQyNCddID0gMHgwNjMwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MjUnXSA9IDB4MDYzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDI2J10gPSAweDA2MzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQyNyddID0gMHgwNjMzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MjgnXSA9IDB4MDYzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDI5J10gPSAweDA2MzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQzMCddID0gMHgwNjM2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MzEnXSA9IDB4MDYzNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDMyJ10gPSAweDA2Mzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQzMyddID0gMHgwNjM5O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0MzQnXSA9IDB4MDYzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDQwJ10gPSAweDA2NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ0MSddID0gMHgwNjQxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NDInXSA9IDB4MDY0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDQzJ10gPSAweDA2NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ0NCddID0gMHgwNjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NDUnXSA9IDB4MDY0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDQ2J10gPSAweDA2NDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ0OCddID0gMHgwNjQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NDknXSA9IDB4MDY0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDUwJ10gPSAweDA2NEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ1MSddID0gMHgwNjRCO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NTInXSA9IDB4MDY0QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDUzJ10gPSAweDA2NEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ1NCddID0gMHgwNjRFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NTUnXSA9IDB4MDY0RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDU2J10gPSAweDA2NTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzQ1NyddID0gMHgwNjUxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc0NTgnXSA9IDB4MDY1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NDcwJ10gPSAweDA2NDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzUwNSddID0gMHgwNkE0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc1MDYnXSA9IDB4MDY3RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NTA3J10gPSAweDA2ODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzUwOCddID0gMHgwNjk4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc1MDknXSA9IDB4MDZBRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NTExJ10gPSAweDA2Nzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzUxMiddID0gMHgwNjg4O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc1MTMnXSA9IDB4MDY5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NTE0J10gPSAweDA2QkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzUxOSddID0gMHgwNkQyO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc1MzQnXSA9IDB4MDZENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjM2J10gPSAweDIwQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY0NSddID0gMHgwNUJFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NTgnXSA9IDB4MDVDMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjY0J10gPSAweDA1RDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY2NSddID0gMHgwNUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NjYnXSA9IDB4MDVEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjY3J10gPSAweDA1RDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY2OCddID0gMHgwNUQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NjknXSA9IDB4MDVENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjcwJ10gPSAweDA1RDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY3MSddID0gMHgwNUQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NzInXSA9IDB4MDVEODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjczJ10gPSAweDA1RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY3NCddID0gMHgwNURBO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NzUnXSA9IDB4MDVEQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njc2J10gPSAweDA1REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY3NyddID0gMHgwNUREO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2NzgnXSA9IDB4MDVERTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njc5J10gPSAweDA1REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY4MCddID0gMHgwNUUwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2ODEnXSA9IDB4MDVFMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NjgyJ10gPSAweDA1RTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY4MyddID0gMHgwNUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2ODQnXSA9IDB4MDVFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njg1J10gPSAweDA1RTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY4NiddID0gMHgwNUU2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2ODcnXSA9IDB4MDVFNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njg4J10gPSAweDA1RTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY4OSddID0gMHgwNUU5O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc2OTAnXSA9IDB4MDVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Njk0J10gPSAweEZCMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzY5NSddID0gMHhGQjJCO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3MDAnXSA9IDB4RkI0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NzA1J10gPSAweEZCMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzcxNiddID0gMHgwNUYwO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3MTcnXSA9IDB4MDVGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3NzE4J10gPSAweDA1RjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzcyMyddID0gMHhGQjM1O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3OTMnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Nzk0J10gPSAweDA1QjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1Nzc5NSddID0gMHgwNUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3OTYnXSA9IDB4MDVCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3Nzk3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1Nzc5OCddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc3OTknXSA9IDB4MDVCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3ODAwJ10gPSAweDA1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzgwMSddID0gMHgwNUIxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc4MDInXSA9IDB4MDVCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3ODAzJ10gPSAweDA1QzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzgwNCddID0gMHgwNUMxO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc4MDYnXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3ODA3J10gPSAweDA1QkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzgzOSddID0gMHgwNUJEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNTc4NDEnXSA9IDB4MDVCRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTU3ODQyJ10gPSAweDA1QzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk1NzkyOSddID0gMHgwMkJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNjEyNDgnXSA9IDB4MjEwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTYxMjg5J10gPSAweDIxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk2MTM1MiddID0gMHgyMTE2O1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNjE1NzMnXSA9IDB4MjAyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTYxNTc0J10gPSAweDIwMkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk2MTU3NSddID0gMHgyMDJFO1xuICAgICAgICAgICAgICAgICAgICB0WydhZmlpNjE2NjQnXSA9IDB4MjAwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWZpaTYzMTY3J10gPSAweDA2NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FmaWk2NDkzNyddID0gMHgwMkJEO1xuICAgICAgICAgICAgICAgICAgICB0WydhZ3JhdmUnXSA9IDB4MDBFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWd1amFyYXRpJ10gPSAweDBBODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FndXJtdWtoaSddID0gMHgwQTA1O1xuICAgICAgICAgICAgICAgICAgICB0WydhaGlyYWdhbmEnXSA9IDB4MzA0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWhvb2thYm92ZSddID0gMHgxRUEzO1xuICAgICAgICAgICAgICAgICAgICB0WydhaWJlbmdhbGknXSA9IDB4MDk5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWlib3BvbW9mbyddID0gMHgzMTFFO1xuICAgICAgICAgICAgICAgICAgICB0WydhaWRldmEnXSA9IDB4MDkxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWllY3lyaWxsaWMnXSA9IDB4MDRENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWlndWphcmF0aSddID0gMHgwQTkwO1xuICAgICAgICAgICAgICAgICAgICB0WydhaWd1cm11a2hpJ10gPSAweDBBMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FpbWF0cmFndXJtdWtoaSddID0gMHgwQTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydhaW5hcmFiaWMnXSA9IDB4MDYzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWluZmluYWxhcmFiaWMnXSA9IDB4RkVDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWluaW5pdGlhbGFyYWJpYyddID0gMHhGRUNCO1xuICAgICAgICAgICAgICAgICAgICB0WydhaW5tZWRpYWxhcmFiaWMnXSA9IDB4RkVDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWludmVydGVkYnJldmUnXSA9IDB4MDIwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWl2b3dlbHNpZ25iZW5nYWxpJ10gPSAweDA5Qzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fpdm93ZWxzaWduZGV2YSddID0gMHgwOTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydhaXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FrYXRha2FuYSddID0gMHgzMEEyO1xuICAgICAgICAgICAgICAgICAgICB0Wydha2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWtvcmVhbiddID0gMHgzMTRGO1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmJ10gPSAweDA1RDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZhcmFiaWMnXSA9IDB4MDYyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZmRhZ2VzaGhlYnJldyddID0gMHhGQjMwO1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmZmluYWxhcmFiaWMnXSA9IDB4RkU4RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZmhhbXphYWJvdmVhcmFiaWMnXSA9IDB4MDYyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYyddID0gMHhGRTg0O1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmaGFtemFiZWxvd2FyYWJpYyddID0gMHgwNjI1O1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmaGFtemFiZWxvd2ZpbmFsYXJhYmljJ10gPSAweEZFODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZoZWJyZXcnXSA9IDB4MDVEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZmxhbWVkaGVicmV3J10gPSAweEZCNEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZtYWRkYWFib3ZlYXJhYmljJ10gPSAweDA2MjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZtYWRkYWFib3ZlZmluYWxhcmFiaWMnXSA9IDB4RkU4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZm1ha3N1cmFhcmFiaWMnXSA9IDB4MDY0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZm1ha3N1cmFmaW5hbGFyYWJpYyddID0gMHhGRUYwO1xuICAgICAgICAgICAgICAgICAgICB0WydhbGVmbWFrc3VyYWluaXRpYWxhcmFiaWMnXSA9IDB4RkVGMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWMnXSA9IDB4RkVGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlZnBhdGFoaGVicmV3J10gPSAweEZCMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FsZWZxYW1hdHNoZWJyZXcnXSA9IDB4RkIyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxlcGgnXSA9IDB4MjEzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxsZXF1YWwnXSA9IDB4MjI0QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxwaGEnXSA9IDB4MDNCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYWxwaGF0b25vcyddID0gMHgwM0FDO1xuICAgICAgICAgICAgICAgICAgICB0WydhbWFjcm9uJ10gPSAweDAxMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Ftb25vc3BhY2UnXSA9IDB4RkY0MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYW1wZXJzYW5kJ10gPSAweDAwMjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZG1vbm9zcGFjZSddID0gMHhGRjA2O1xuICAgICAgICAgICAgICAgICAgICB0WydhbXBlcnNhbmRzbWFsbCddID0gMHhGNzI2O1xuICAgICAgICAgICAgICAgICAgICB0WydhbXNxdWFyZSddID0gMHgzM0MyO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmJvcG9tb2ZvJ10gPSAweDMxMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2JvcG9tb2ZvJ10gPSAweDMxMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2JyYWNrZXRsZWZ0J10gPSAweDMwMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2JyYWNrZXRyaWdodCddID0gMHgzMDA5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdraGFua2h1dGhhaSddID0gMHgwRTVBO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZSddID0gMHgyMjIwO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZWJyYWNrZXRsZWZ0J10gPSAweDMwMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbCddID0gMHhGRTNGO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZWJyYWNrZXRyaWdodCddID0gMHgzMDA5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsJ10gPSAweEZFNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2xlbGVmdCddID0gMHgyMzI5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdsZXJpZ2h0J10gPSAweDIzMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ3N0cm9tJ10gPSAweDIxMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fub3RlbGVpYSddID0gMHgwMzg3O1xuICAgICAgICAgICAgICAgICAgICB0WydhbnVkYXR0YWRldmEnXSA9IDB4MDk1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYW51c3ZhcmFiZW5nYWxpJ10gPSAweDA5ODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FudXN2YXJhZGV2YSddID0gMHgwOTAyO1xuICAgICAgICAgICAgICAgICAgICB0WydhbnVzdmFyYWd1amFyYXRpJ10gPSAweDBBODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FvZ29uZWsnXSA9IDB4MDEwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXBhYXRvc3F1YXJlJ10gPSAweDMzMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FwYXJlbiddID0gMHgyNDlDO1xuICAgICAgICAgICAgICAgICAgICB0WydhcG9zdHJvcGhlYXJtZW5pYW4nXSA9IDB4MDU1QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXBvc3Ryb3BoZW1vZCddID0gMHgwMkJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhcHBsZSddID0gMHhGOEZGO1xuICAgICAgICAgICAgICAgICAgICB0WydhcHByb2FjaGVzJ10gPSAweDIyNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FwcHJveGVxdWFsJ10gPSAweDIyNDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FwcHJveGVxdWFsb3JpbWFnZSddID0gMHgyMjUyO1xuICAgICAgICAgICAgICAgICAgICB0WydhcHByb3hpbWF0ZWx5ZXF1YWwnXSA9IDB4MjI0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJhZWFla29yZWFuJ10gPSAweDMxOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FyYWVha29yZWFuJ10gPSAweDMxOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FyYyddID0gMHgyMzEyO1xuICAgICAgICAgICAgICAgICAgICB0WydhcmlnaHRoYWxmcmluZyddID0gMHgxRTlBO1xuICAgICAgICAgICAgICAgICAgICB0WydhcmluZyddID0gMHgwMEU1O1xuICAgICAgICAgICAgICAgICAgICB0WydhcmluZ2FjdXRlJ10gPSAweDAxRkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nYmVsb3cnXSA9IDB4MUUwMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dib3RoJ10gPSAweDIxOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGFzaGRvd24nXSA9IDB4MjFFMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYXNobGVmdCddID0gMHgyMUUwO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2Rhc2hyaWdodCddID0gMHgyMUUyO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2Rhc2h1cCddID0gMHgyMUUxO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2RibGJvdGgnXSA9IDB4MjFENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYmxkb3duJ10gPSAweDIxRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGJsbGVmdCddID0gMHgyMUQwO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2RibHJpZ2h0J10gPSAweDIxRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGJsdXAnXSA9IDB4MjFEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkb3duJ10gPSAweDIxOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZG93bmxlZnQnXSA9IDB4MjE5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkb3ducmlnaHQnXSA9IDB4MjE5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkb3dud2hpdGUnXSA9IDB4MjFFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3doZWFkZG93bm1vZCddID0gMHgwMkM1O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2hlYWRsZWZ0bW9kJ10gPSAweDAyQzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aGVhZHJpZ2h0bW9kJ10gPSAweDAyQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aGVhZHVwbW9kJ10gPSAweDAyQzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aG9yaXpleCddID0gMHhGOEU3O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2xlZnQnXSA9IDB4MjE5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dsZWZ0ZGJsJ10gPSAweDIxRDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93bGVmdGRibHN0cm9rZSddID0gMHgyMUNEO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2xlZnRvdmVycmlnaHQnXSA9IDB4MjFDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dsZWZ0d2hpdGUnXSA9IDB4MjFFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dyaWdodCddID0gMHgyMTkyO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3JpZ2h0ZGJsc3Ryb2tlJ10gPSAweDIxQ0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93cmlnaHRoZWF2eSddID0gMHgyNzlFO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3JpZ2h0b3ZlcmxlZnQnXSA9IDB4MjFDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dyaWdodHdoaXRlJ10gPSAweDIxRTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dGFibGVmdCddID0gMHgyMUU0O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3RhYnJpZ2h0J10gPSAweDIxRTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dXAnXSA9IDB4MjE5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d1cGRuJ10gPSAweDIxOTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dXBkbmJzZSddID0gMHgyMUE4O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3VwZG93bmJhc2UnXSA9IDB4MjFBODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d1cGxlZnQnXSA9IDB4MjE5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d1cGxlZnRvZmRvd24nXSA9IDB4MjFDNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d1cHJpZ2h0J10gPSAweDIxOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dXB3aGl0ZSddID0gMHgyMUU3O1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd3ZlcnRleCddID0gMHhGOEU2O1xuICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gMHgwMDVFO1xuICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bW1vbm9zcGFjZSddID0gMHhGRjNFO1xuICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaXRpbGRlJ10gPSAweDAwN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpdGlsZGVtb25vc3BhY2UnXSA9IDB4RkY1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXNjcmlwdCddID0gMHgwMjUxO1xuICAgICAgICAgICAgICAgICAgICB0Wydhc2NyaXB0dHVybmVkJ10gPSAweDAyNTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzbWFsbGhpcmFnYW5hJ10gPSAweDMwNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzbWFsbGthdGFrYW5hJ10gPSAweDMwQTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzbWFsbGthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGNjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrJ10gPSAweDAwMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrYWx0b25lYXJhYmljJ10gPSAweDA2NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrYXJhYmljJ10gPSAweDA2NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrbWF0aCddID0gMHgyMjE3O1xuICAgICAgICAgICAgICAgICAgICB0Wydhc3Rlcmlza21vbm9zcGFjZSddID0gMHhGRjBBO1xuICAgICAgICAgICAgICAgICAgICB0Wydhc3Rlcmlza3NtYWxsJ10gPSAweEZFNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNtJ10gPSAweDIwNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FzdXBlcmlvciddID0gMHhGNkU5O1xuICAgICAgICAgICAgICAgICAgICB0Wydhc3ltcHRvdGljYWxseWVxdWFsJ10gPSAweDIyNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F0J10gPSAweDAwNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F0aWxkZSddID0gMHgwMEUzO1xuICAgICAgICAgICAgICAgICAgICB0WydhdG1vbm9zcGFjZSddID0gMHhGRjIwO1xuICAgICAgICAgICAgICAgICAgICB0WydhdHNtYWxsJ10gPSAweEZFNkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F0dXJuZWQnXSA9IDB4MDI1MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXViZW5nYWxpJ10gPSAweDA5OTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F1Ym9wb21vZm8nXSA9IDB4MzEyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXVkZXZhJ10gPSAweDA5MTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F1Z3VqYXJhdGknXSA9IDB4MEE5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXVndXJtdWtoaSddID0gMHgwQTE0O1xuICAgICAgICAgICAgICAgICAgICB0WydhdWxlbmd0aG1hcmtiZW5nYWxpJ10gPSAweDA5RDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F1bWF0cmFndXJtdWtoaSddID0gMHgwQTRDO1xuICAgICAgICAgICAgICAgICAgICB0WydhdXZvd2Vsc2lnbmJlbmdhbGknXSA9IDB4MDlDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYXV2b3dlbHNpZ25kZXZhJ10gPSAweDA5NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F1dm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYXZhZ3JhaGFkZXZhJ10gPSAweDA5M0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F5YmFybWVuaWFuJ10gPSAweDA1NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2F5aW4nXSA9IDB4MDVFMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXlpbmFsdG9uZWhlYnJldyddID0gMHhGQjIwO1xuICAgICAgICAgICAgICAgICAgICB0WydheWluaGVicmV3J10gPSAweDA1RTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2InXSA9IDB4MDA2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFiZW5nYWxpJ10gPSAweDA5QUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMHgwMDVDO1xuICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2htb25vc3BhY2UnXSA9IDB4RkYzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFkZXZhJ10gPSAweDA5MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhZ3VqYXJhdGknXSA9IDB4MEFBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFndXJtdWtoaSddID0gMHgwQTJDO1xuICAgICAgICAgICAgICAgICAgICB0WydiYWhpcmFnYW5hJ10gPSAweDMwNzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhaHR0aGFpJ10gPSAweDBFM0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jha2F0YWthbmEnXSA9IDB4MzBEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFyJ10gPSAweDAwN0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jhcm1vbm9zcGFjZSddID0gMHhGRjVDO1xuICAgICAgICAgICAgICAgICAgICB0WydiYm9wb21vZm8nXSA9IDB4MzEwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmNpcmNsZSddID0gMHgyNEQxO1xuICAgICAgICAgICAgICAgICAgICB0WydiZG90YWNjZW50J10gPSAweDFFMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jkb3RiZWxvdyddID0gMHgxRTA1O1xuICAgICAgICAgICAgICAgICAgICB0WydiZWFtZWRzaXh0ZWVudGhub3RlcyddID0gMHgyNjZDO1xuICAgICAgICAgICAgICAgICAgICB0WydiZWNhdXNlJ10gPSAweDIyMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlY3lyaWxsaWMnXSA9IDB4MDQzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmVoYXJhYmljJ10gPSAweDA2Mjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlaGZpbmFsYXJhYmljJ10gPSAweEZFOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlaGluaXRpYWxhcmFiaWMnXSA9IDB4RkU5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmVoaXJhZ2FuYSddID0gMHgzMDc5O1xuICAgICAgICAgICAgICAgICAgICB0WydiZWhtZWRpYWxhcmFiaWMnXSA9IDB4RkU5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmVobWVlbWluaXRpYWxhcmFiaWMnXSA9IDB4RkM5RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmVobWVlbWlzb2xhdGVkYXJhYmljJ10gPSAweEZDMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlaG5vb25maW5hbGFyYWJpYyddID0gMHhGQzZEO1xuICAgICAgICAgICAgICAgICAgICB0WydiZWthdGFrYW5hJ10gPSAweDMwRDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JlbmFybWVuaWFuJ10gPSAweDA1NjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JldCddID0gMHgwNUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydiZXRhJ10gPSAweDAzQjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JldGFzeW1ib2xncmVlayddID0gMHgwM0QwO1xuICAgICAgICAgICAgICAgICAgICB0WydiZXRkYWdlc2gnXSA9IDB4RkIzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmV0ZGFnZXNoaGVicmV3J10gPSAweEZCMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JldGhlYnJldyddID0gMHgwNUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydiZXRyYWZlaGVicmV3J10gPSAweEZCNEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JoYWJlbmdhbGknXSA9IDB4MDlBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmhhZGV2YSddID0gMHgwOTJEO1xuICAgICAgICAgICAgICAgICAgICB0WydiaGFndWphcmF0aSddID0gMHgwQUFEO1xuICAgICAgICAgICAgICAgICAgICB0WydiaGFndXJtdWtoaSddID0gMHgwQTJEO1xuICAgICAgICAgICAgICAgICAgICB0WydiaG9vayddID0gMHgwMjUzO1xuICAgICAgICAgICAgICAgICAgICB0WydiaWhpcmFnYW5hJ10gPSAweDMwNzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jpa2F0YWthbmEnXSA9IDB4MzBEMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmlsYWJpYWxjbGljayddID0gMHgwMjk4O1xuICAgICAgICAgICAgICAgICAgICB0WydiaW5kaWd1cm11a2hpJ10gPSAweDBBMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JpcnVzcXVhcmUnXSA9IDB4MzMzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tjaXJjbGUnXSA9IDB4MjVDRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tkaWFtb25kJ10gPSAweDI1QzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrZG93bnBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVCQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsZWZ0cG9pbnRpbmdwb2ludGVyJ10gPSAweDI1QzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQnXSA9IDB4MzAxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbCddID0gMHhGRTNCO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja2xlbnRpY3VsYXJicmFja2V0cmlnaHQnXSA9IDB4MzAxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWwnXSA9IDB4RkUzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tsb3dlcmxlZnR0cmlhbmdsZSddID0gMHgyNUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja2xvd2VycmlnaHR0cmlhbmdsZSddID0gMHgyNUUyO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3JlY3RhbmdsZSddID0gMHgyNUFDO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyJ10gPSAweDI1QkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlJ10gPSAweDI1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrc21hbGxzcXVhcmUnXSA9IDB4MjVBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2tzbWlsaW5nZmFjZSddID0gMHgyNjNCO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3NxdWFyZSddID0gMHgyNUEwO1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3N0YXInXSA9IDB4MjYwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxhY2t1cHBlcmxlZnR0cmlhbmdsZSddID0gMHgyNUU0O1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3VwcGVycmlnaHR0cmlhbmdsZSddID0gMHgyNUU1O1xuICAgICAgICAgICAgICAgICAgICB0WydibGFja3VwcG9pbnRpbmdzbWFsbHRyaWFuZ2xlJ10gPSAweDI1QjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYWNrdXBwb2ludGluZ3RyaWFuZ2xlJ10gPSAweDI1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsYW5rJ10gPSAweDI0MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JsaW5lYmVsb3cnXSA9IDB4MUUwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYmxvY2snXSA9IDB4MjU4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYm1vbm9zcGFjZSddID0gMHhGRjQyO1xuICAgICAgICAgICAgICAgICAgICB0Wydib2JhaW1haXRoYWknXSA9IDB4MEUxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYm9oaXJhZ2FuYSddID0gMHgzMDdDO1xuICAgICAgICAgICAgICAgICAgICB0Wydib2thdGFrYW5hJ10gPSAweDMwREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JwYXJlbiddID0gMHgyNDlEO1xuICAgICAgICAgICAgICAgICAgICB0WydicXNxdWFyZSddID0gMHgzM0MzO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWV4J10gPSAweEY4RjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdCddID0gMHgwMDdCO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnRidCddID0gMHhGOEYzO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnRtaWQnXSA9IDB4RjhGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0bW9ub3NwYWNlJ10gPSAweEZGNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdHNtYWxsJ10gPSAweEZFNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdHRwJ10gPSAweEY4RjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdHZlcnRpY2FsJ10gPSAweEZFMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHQnXSA9IDB4MDA3RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodGJ0J10gPSAweEY4RkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHRtaWQnXSA9IDB4RjhGRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodG1vbm9zcGFjZSddID0gMHhGRjVEO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZXJpZ2h0c21hbGwnXSA9IDB4RkU1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodHRwJ10gPSAweEY4RkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHR2ZXJ0aWNhbCddID0gMHhGRTM4O1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdCddID0gMHgwMDVCO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdGJ0J10gPSAweEY4RjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0ZXgnXSA9IDB4RjhFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnRtb25vc3BhY2UnXSA9IDB4RkYzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnR0cCddID0gMHhGOEVFO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0cmlnaHQnXSA9IDB4MDA1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0YnQnXSA9IDB4RjhGQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0ZXgnXSA9IDB4RjhGQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0bW9ub3NwYWNlJ10gPSAweEZGM0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodHRwJ10gPSAweEY4Rjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlJ10gPSAweDAyRDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlYmVsb3djbWInXSA9IDB4MDMyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJldmVjbWInXSA9IDB4MDMwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJldmVpbnZlcnRlZGJlbG93Y21iJ10gPSAweDAzMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlaW52ZXJ0ZWRjbWInXSA9IDB4MDMxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJldmVpbnZlcnRlZGRvdWJsZWNtYiddID0gMHgwMzYxO1xuICAgICAgICAgICAgICAgICAgICB0WydicmlkZ2ViZWxvd2NtYiddID0gMHgwMzJBO1xuICAgICAgICAgICAgICAgICAgICB0WydicmlkZ2VpbnZlcnRlZGJlbG93Y21iJ10gPSAweDAzM0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Jyb2tlbmJhciddID0gMHgwMEE2O1xuICAgICAgICAgICAgICAgICAgICB0Wydic3Ryb2tlJ10gPSAweDAxODA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JzdXBlcmlvciddID0gMHhGNkVBO1xuICAgICAgICAgICAgICAgICAgICB0WydidG9wYmFyJ10gPSAweDAxODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2J1aGlyYWdhbmEnXSA9IDB4MzA3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnVrYXRha2FuYSddID0gMHgzMEQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydidWxsZXQnXSA9IDB4MjAyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnVsbGV0aW52ZXJzZSddID0gMHgyNUQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydidWxsZXRvcGVyYXRvciddID0gMHgyMjE5O1xuICAgICAgICAgICAgICAgICAgICB0WydidWxsc2V5ZSddID0gMHgyNUNFO1xuICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSAweDAwNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NhYXJtZW5pYW4nXSA9IDB4MDU2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FiZW5nYWxpJ10gPSAweDA5OUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gMHgwMTA3O1xuICAgICAgICAgICAgICAgICAgICB0WydjYWRldmEnXSA9IDB4MDkxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FndWphcmF0aSddID0gMHgwQTlBO1xuICAgICAgICAgICAgICAgICAgICB0WydjYWd1cm11a2hpJ10gPSAweDBBMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NhbHNxdWFyZSddID0gMHgzMzg4O1xuICAgICAgICAgICAgICAgICAgICB0WydjYW5kcmFiaW5kdWJlbmdhbGknXSA9IDB4MDk4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FuZHJhYmluZHVjbWInXSA9IDB4MDMxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FuZHJhYmluZHVkZXZhJ10gPSAweDA5MDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NhbmRyYWJpbmR1Z3VqYXJhdGknXSA9IDB4MEE4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2Fwc2xvY2snXSA9IDB4MjFFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FyZW9mJ10gPSAweDIxMDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nhcm9uJ10gPSAweDAyQzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nhcm9uYmVsb3djbWInXSA9IDB4MDMyQztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2Fyb25jbWInXSA9IDB4MDMwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2FycmlhZ2VyZXR1cm4nXSA9IDB4MjFCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2JvcG9tb2ZvJ10gPSAweDMxMTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NjYXJvbiddID0gMHgwMTBEO1xuICAgICAgICAgICAgICAgICAgICB0WydjY2VkaWxsYSddID0gMHgwMEU3O1xuICAgICAgICAgICAgICAgICAgICB0WydjY2VkaWxsYWFjdXRlJ10gPSAweDFFMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NjaXJjbGUnXSA9IDB4MjREMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2NpcmN1bWZsZXgnXSA9IDB4MDEwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2N1cmwnXSA9IDB4MDI1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2RvdCddID0gMHgwMTBCO1xuICAgICAgICAgICAgICAgICAgICB0WydjZG90YWNjZW50J10gPSAweDAxMEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nkc3F1YXJlJ10gPSAweDMzQzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlZGlsbGEnXSA9IDB4MDBCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VkaWxsYWNtYiddID0gMHgwMzI3O1xuICAgICAgICAgICAgICAgICAgICB0WydjZW50J10gPSAweDAwQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlbnRpZ3JhZGUnXSA9IDB4MjEwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VudGluZmVyaW9yJ10gPSAweEY2REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlbnRtb25vc3BhY2UnXSA9IDB4RkZFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VudG9sZHN0eWxlJ10gPSAweEY3QTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlbnRzdXBlcmlvciddID0gMHhGNkUwO1xuICAgICAgICAgICAgICAgICAgICB0WydjaGFhcm1lbmlhbiddID0gMHgwNTc5O1xuICAgICAgICAgICAgICAgICAgICB0WydjaGFiZW5nYWxpJ10gPSAweDA5OUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoYWRldmEnXSA9IDB4MDkxQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hhZ3VqYXJhdGknXSA9IDB4MEE5QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hhZ3VybXVraGknXSA9IDB4MEExQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hib3BvbW9mbyddID0gMHgzMTE0O1xuICAgICAgICAgICAgICAgICAgICB0WydjaGVhYmtoYXNpYW5jeXJpbGxpYyddID0gMHgwNEJEO1xuICAgICAgICAgICAgICAgICAgICB0WydjaGVja21hcmsnXSA9IDB4MjcxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hlY3lyaWxsaWMnXSA9IDB4MDQ0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWMnXSA9IDB4MDRCRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hlZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDRCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hlZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEY1O1xuICAgICAgICAgICAgICAgICAgICB0WydjaGVoYXJtZW5pYW4nXSA9IDB4MDU3MztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hla2hha2Fzc2lhbmN5cmlsbGljJ10gPSAweDA0Q0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWMnXSA9IDB4MDRCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hpJ10gPSAweDAzQzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoaWV1Y2hhY2lyY2xla29yZWFuJ10gPSAweDMyNzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoaWV1Y2hhcGFyZW5rb3JlYW4nXSA9IDB4MzIxNztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hpZXVjaGNpcmNsZWtvcmVhbiddID0gMHgzMjY5O1xuICAgICAgICAgICAgICAgICAgICB0WydjaGlldWNoa29yZWFuJ10gPSAweDMxNEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NoaWV1Y2hwYXJlbmtvcmVhbiddID0gMHgzMjA5O1xuICAgICAgICAgICAgICAgICAgICB0WydjaG9jaGFuZ3RoYWknXSA9IDB4MEUwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hvY2hhbnRoYWknXSA9IDB4MEUwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2hvY2hpbmd0aGFpJ10gPSAweDBFMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nob2Nob2V0aGFpJ10gPSAweDBFMEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nob29rJ10gPSAweDAxODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpZXVjYWNpcmNsZWtvcmVhbiddID0gMHgzMjc2O1xuICAgICAgICAgICAgICAgICAgICB0WydjaWV1Y2FwYXJlbmtvcmVhbiddID0gMHgzMjE2O1xuICAgICAgICAgICAgICAgICAgICB0WydjaWV1Y2NpcmNsZWtvcmVhbiddID0gMHgzMjY4O1xuICAgICAgICAgICAgICAgICAgICB0WydjaWV1Y2tvcmVhbiddID0gMHgzMTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydjaWV1Y3BhcmVua29yZWFuJ10gPSAweDMyMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpZXVjdXBhcmVua29yZWFuJ10gPSAweDMyMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZSddID0gMHgyNUNCO1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVjb3B5cnQnXSA9IDB4MDBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlbXVsdGlwbHknXSA9IDB4MjI5NztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlb3QnXSA9IDB4MjI5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlcGx1cyddID0gMHgyMjk1O1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVwb3N0YWxtYXJrJ10gPSAweDMwMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZXdpdGhsZWZ0aGFsZmJsYWNrJ10gPSAweDI1RDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZXdpdGhyaWdodGhhbGZibGFjayddID0gMHgyNUQxO1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjdW1mbGV4J10gPSAweDAyQzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmN1bWZsZXhiZWxvd2NtYiddID0gMHgwMzJEO1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjdW1mbGV4Y21iJ10gPSAweDAzMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NsZWFyJ10gPSAweDIzMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NsaWNrYWx2ZW9sYXInXSA9IDB4MDFDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2xpY2tkZW50YWwnXSA9IDB4MDFDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2xpY2tsYXRlcmFsJ10gPSAweDAxQzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NsaWNrcmV0cm9mbGV4J10gPSAweDAxQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NsdWInXSA9IDB4MjY2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnY2x1YnN1aXRibGFjayddID0gMHgyNjYzO1xuICAgICAgICAgICAgICAgICAgICB0WydjbHVic3VpdHdoaXRlJ10gPSAweDI2Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NtY3ViZWRzcXVhcmUnXSA9IDB4MzNBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY21vbm9zcGFjZSddID0gMHhGRjQzO1xuICAgICAgICAgICAgICAgICAgICB0WydjbXNxdWFyZWRzcXVhcmUnXSA9IDB4MzNBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29hcm1lbmlhbiddID0gMHgwNTgxO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbiddID0gMHgwMDNBO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbm1vbmV0YXJ5J10gPSAweDIwQTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9ubW9ub3NwYWNlJ10gPSAweEZGMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9uc2lnbiddID0gMHgyMEExO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbnNtYWxsJ10gPSAweEZFNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9udHJpYW5ndWxhcmhhbGZtb2QnXSA9IDB4MDJEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29sb250cmlhbmd1bGFybW9kJ10gPSAweDAyRDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hJ10gPSAweDAwMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYWJvdmVjbWInXSA9IDB4MDMxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFhYm92ZXJpZ2h0Y21iJ10gPSAweDAzMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYWNjZW50J10gPSAweEY2QzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYXJhYmljJ10gPSAweDA2MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYXJtZW5pYW4nXSA9IDB4MDU1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFpbmZlcmlvciddID0gMHhGNkUxO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21tYW1vbm9zcGFjZSddID0gMHhGRjBDO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21tYXJldmVyc2VkYWJvdmVjbWInXSA9IDB4MDMxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFyZXZlcnNlZG1vZCddID0gMHgwMkJEO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21tYXNtYWxsJ10gPSAweEZFNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hc3VwZXJpb3InXSA9IDB4RjZFMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29tbWF0dXJuZWRhYm92ZWNtYiddID0gMHgwMzEyO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21tYXR1cm5lZG1vZCddID0gMHgwMkJCO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb21wYXNzJ10gPSAweDI2M0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbmdydWVudCddID0gMHgyMjQ1O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250b3VyaW50ZWdyYWwnXSA9IDB4MjIyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbCddID0gMHgyMzAzO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sQUNLJ10gPSAweDAwMDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xCRUwnXSA9IDB4MDAwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbEJTJ10gPSAweDAwMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xDQU4nXSA9IDB4MDAxODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbENSJ10gPSAweDAwMEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xEQzEnXSA9IDB4MDAxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbERDMiddID0gMHgwMDEyO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sREMzJ10gPSAweDAwMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xEQzQnXSA9IDB4MDAxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbERFTCddID0gMHgwMDdGO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sRExFJ10gPSAweDAwMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xFTSddID0gMHgwMDE5O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sRU5RJ10gPSAweDAwMDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xFT1QnXSA9IDB4MDAwNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbEVTQyddID0gMHgwMDFCO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sRVRCJ10gPSAweDAwMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xFVFgnXSA9IDB4MDAwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbEZGJ10gPSAweDAwMEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xGUyddID0gMHgwMDFDO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sR1MnXSA9IDB4MDAxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbEhUJ10gPSAweDAwMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xMRiddID0gMHgwMDBBO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sTkFLJ10gPSAweDAwMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xOVUxMJ10gPSAweDAwMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xSUyddID0gMHgwMDFFO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sU0knXSA9IDB4MDAwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbFNPJ10gPSAweDAwMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xTT1QnXSA9IDB4MDAwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbFNUWCddID0gMHgwMDAxO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250cm9sU1VCJ10gPSAweDAwMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xTWU4nXSA9IDB4MDAxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29udHJvbFVTJ10gPSAweDAwMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRyb2xWVCddID0gMHgwMDBCO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3B5cmlnaHQnXSA9IDB4MDBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0c2FucyddID0gMHhGOEU5O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3B5cmlnaHRzZXJpZiddID0gMHhGNkQ5O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3JuZXJicmFja2V0bGVmdCddID0gMHgzMDBDO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3JuZXJicmFja2V0bGVmdGhhbGZ3aWR0aCddID0gMHhGRjYyO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsJ10gPSAweEZFNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Nvcm5lcmJyYWNrZXRyaWdodCddID0gMHgzMDBEO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3JuZXJicmFja2V0cmlnaHRoYWxmd2lkdGgnXSA9IDB4RkY2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWwnXSA9IDB4RkU0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29ycG9yYXRpb25zcXVhcmUnXSA9IDB4MzM3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29zcXVhcmUnXSA9IDB4MzNDNztcbiAgICAgICAgICAgICAgICAgICAgdFsnY292ZXJrZ3NxdWFyZSddID0gMHgzM0M2O1xuICAgICAgICAgICAgICAgICAgICB0WydjcGFyZW4nXSA9IDB4MjQ5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY3J1emVpcm8nXSA9IDB4MjBBMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY3N0cmV0Y2hlZCddID0gMHgwMjk3O1xuICAgICAgICAgICAgICAgICAgICB0WydjdXJseWFuZCddID0gMHgyMkNGO1xuICAgICAgICAgICAgICAgICAgICB0WydjdXJseW9yJ10gPSAweDIyQ0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2N1cnJlbmN5J10gPSAweDAwQTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2N5ckJyZXZlJ10gPSAweEY2RDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2N5ckZsZXgnXSA9IDB4RjZEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnY3lyYnJldmUnXSA9IDB4RjZENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY3lyZmxleCddID0gMHhGNkQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSAweDAwNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhYXJtZW5pYW4nXSA9IDB4MDU2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFiZW5nYWxpJ10gPSAweDA5QTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhZGFyYWJpYyddID0gMHgwNjM2O1xuICAgICAgICAgICAgICAgICAgICB0WydkYWRldmEnXSA9IDB4MDkyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFkZmluYWxhcmFiaWMnXSA9IDB4RkVCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFkaW5pdGlhbGFyYWJpYyddID0gMHhGRUJGO1xuICAgICAgICAgICAgICAgICAgICB0WydkYWRtZWRpYWxhcmFiaWMnXSA9IDB4RkVDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFnZXNoJ10gPSAweDA1QkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2VzaGhlYnJldyddID0gMHgwNUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXInXSA9IDB4MjAyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyZGJsJ10gPSAweDIwMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhZ3VqYXJhdGknXSA9IDB4MEFBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFndXJtdWtoaSddID0gMHgwQTI2O1xuICAgICAgICAgICAgICAgICAgICB0WydkYWhpcmFnYW5hJ10gPSAweDMwNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Rha2F0YWthbmEnXSA9IDB4MzBDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGFsYXJhYmljJ10gPSAweDA2MkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGV0J10gPSAweDA1RDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGV0ZGFnZXNoJ10gPSAweEZCMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGV0ZGFnZXNoaGVicmV3J10gPSAweEZCMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGV0aGVicmV3J10gPSAweDA1RDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbGZpbmFsYXJhYmljJ10gPSAweEZFQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbW1hYXJhYmljJ10gPSAweDA2NEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbW1hbG93YXJhYmljJ10gPSAweDA2NEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbW1hdGFuYWx0b25lYXJhYmljJ10gPSAweDA2NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbW1hdGFuYXJhYmljJ10gPSAweDA2NEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhbmRhJ10gPSAweDA5NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhcmdhaGVicmV3J10gPSAweDA1QTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RhcmdhbGVmdGhlYnJldyddID0gMHgwNUE3O1xuICAgICAgICAgICAgICAgICAgICB0WydkYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWInXSA9IDB4MDQ4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsR3JhdmUnXSA9IDB4RjZEMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsYW5nbGVicmFja2V0bGVmdCddID0gMHgzMDBBO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxhbmdsZWJyYWNrZXRsZWZ0dmVydGljYWwnXSA9IDB4RkUzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsYW5nbGVicmFja2V0cmlnaHQnXSA9IDB4MzAwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbCddID0gMHhGRTNFO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxhcmNoaW52ZXJ0ZWRiZWxvd2NtYiddID0gMHgwMzJCO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxhcnJvd2xlZnQnXSA9IDB4MjFENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsYXJyb3dyaWdodCddID0gMHgyMUQyO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxkYW5kYSddID0gMHgwOTY1O1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxncmF2ZSddID0gMHhGNkQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxncmF2ZWNtYiddID0gMHgwMzBGO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxpbnRlZ3JhbCddID0gMHgyMjJDO1xuICAgICAgICAgICAgICAgICAgICB0WydkYmxsb3dsaW5lJ10gPSAweDIwMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RibGxvd2xpbmVjbWInXSA9IDB4MDMzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsb3ZlcmxpbmVjbWInXSA9IDB4MDMzRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJscHJpbWVtb2QnXSA9IDB4MDJCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsdmVydGljYWxiYXInXSA9IDB4MjAxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJsdmVydGljYWxsaW5lYWJvdmVjbWInXSA9IDB4MDMwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGJvcG9tb2ZvJ10gPSAweDMxMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Ric3F1YXJlJ10gPSAweDMzQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RjYXJvbiddID0gMHgwMTBGO1xuICAgICAgICAgICAgICAgICAgICB0WydkY2VkaWxsYSddID0gMHgxRTExO1xuICAgICAgICAgICAgICAgICAgICB0WydkY2lyY2xlJ10gPSAweDI0RDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUUxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGNyb2F0J10gPSAweDAxMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RkYWJlbmdhbGknXSA9IDB4MDlBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGRhZGV2YSddID0gMHgwOTIxO1xuICAgICAgICAgICAgICAgICAgICB0WydkZGFndWphcmF0aSddID0gMHgwQUExO1xuICAgICAgICAgICAgICAgICAgICB0WydkZGFndXJtdWtoaSddID0gMHgwQTIxO1xuICAgICAgICAgICAgICAgICAgICB0WydkZGFsYXJhYmljJ10gPSAweDA2ODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RkYWxmaW5hbGFyYWJpYyddID0gMHhGQjg5O1xuICAgICAgICAgICAgICAgICAgICB0WydkZGRoYWRldmEnXSA9IDB4MDk1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGRoYWJlbmdhbGknXSA9IDB4MDlBMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGRoYWRldmEnXSA9IDB4MDkyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGRoYWd1amFyYXRpJ10gPSAweDBBQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RkaGFndXJtdWtoaSddID0gMHgwQTIyO1xuICAgICAgICAgICAgICAgICAgICB0WydkZG90YWNjZW50J10gPSAweDFFMEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Rkb3RiZWxvdyddID0gMHgxRTBEO1xuICAgICAgICAgICAgICAgICAgICB0WydkZWNpbWFsc2VwYXJhdG9yYXJhYmljJ10gPSAweDA2NkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlY2ltYWxzZXBhcmF0b3JwZXJzaWFuJ10gPSAweDA2NkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlY3lyaWxsaWMnXSA9IDB4MDQzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSAweDAwQjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlaGloZWJyZXcnXSA9IDB4MDVBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGVoaXJhZ2FuYSddID0gMHgzMDY3O1xuICAgICAgICAgICAgICAgICAgICB0WydkZWljb3B0aWMnXSA9IDB4MDNFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGVrYXRha2FuYSddID0gMHgzMEM3O1xuICAgICAgICAgICAgICAgICAgICB0WydkZWxldGVsZWZ0J10gPSAweDIzMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlbGV0ZXJpZ2h0J10gPSAweDIzMjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlbHRhJ10gPSAweDAzQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlbHRhdHVybmVkJ10gPSAweDAxOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Rlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpJ10gPSAweDA5Rjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RlemgnXSA9IDB4MDJBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGhhYmVuZ2FsaSddID0gMHgwOUE3O1xuICAgICAgICAgICAgICAgICAgICB0WydkaGFkZXZhJ10gPSAweDA5Mjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RoYWd1amFyYXRpJ10gPSAweDBBQTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RoYWd1cm11a2hpJ10gPSAweDBBMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Rob29rJ10gPSAweDAyNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpYWx5dGlrYXRvbm9zJ10gPSAweDAzODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpYWx5dGlrYXRvbm9zY21iJ10gPSAweDAzNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpYW1vbmQnXSA9IDB4MjY2NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGlhbW9uZHN1aXR3aGl0ZSddID0gMHgyNjYyO1xuICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpcyddID0gMHgwMEE4O1xuICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpc2FjdXRlJ10gPSAweEY2RDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpZXJlc2lzYmVsb3djbWInXSA9IDB4MDMyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXNjbWInXSA9IDB4MDMwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXNncmF2ZSddID0gMHhGNkQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpc3Rvbm9zJ10gPSAweDAzODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpaGlyYWdhbmEnXSA9IDB4MzA2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGlrYXRha2FuYSddID0gMHgzMEMyO1xuICAgICAgICAgICAgICAgICAgICB0WydkaXR0b21hcmsnXSA9IDB4MzAwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGl2aWRlJ10gPSAweDAwRjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZXMnXSA9IDB4MjIyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZGl2aXNpb25zbGFzaCddID0gMHgyMjE1O1xuICAgICAgICAgICAgICAgICAgICB0WydkamVjeXJpbGxpYyddID0gMHgwNDUyO1xuICAgICAgICAgICAgICAgICAgICB0Wydka3NoYWRlJ10gPSAweDI1OTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RsaW5lYmVsb3cnXSA9IDB4MUUwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZGxzcXVhcmUnXSA9IDB4MzM5NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZG1hY3JvbiddID0gMHgwMTExO1xuICAgICAgICAgICAgICAgICAgICB0WydkbW9ub3NwYWNlJ10gPSAweEZGNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RuYmxvY2snXSA9IDB4MjU4NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9jaGFkYXRoYWknXSA9IDB4MEUwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9kZWt0aGFpJ10gPSAweDBFMTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvaGlyYWdhbmEnXSA9IDB4MzA2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9rYXRha2FuYSddID0gMHgzMEM5O1xuICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDB4MDAyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9sbGFyaW5mZXJpb3InXSA9IDB4RjZFMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9sbGFybW9ub3NwYWNlJ10gPSAweEZGMDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhcm9sZHN0eWxlJ10gPSAweEY3MjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhcnNtYWxsJ10gPSAweEZFNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhcnN1cGVyaW9yJ10gPSAweEY2RTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvbmcnXSA9IDB4MjBBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG9ydXNxdWFyZSddID0gMHgzMzI2O1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RhY2NlbnQnXSA9IDB4MDJEOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG90YWNjZW50Y21iJ10gPSAweDAzMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvdGJlbG93Y21iJ10gPSAweDAzMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2RvdGJlbG93Y29tYiddID0gMHgwMzIzO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RrYXRha2FuYSddID0gMHgzMEZCO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzaSddID0gMHgwMTMxO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzaiddID0gMHhGNkJFO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzanN0cm9rZWhvb2snXSA9IDB4MDI4NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG90bWF0aCddID0gMHgyMkM1O1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3R0ZWRjaXJjbGUnXSA9IDB4MjVDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZG91YmxleW9kcGF0YWgnXSA9IDB4RkIxRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG91YmxleW9kcGF0YWhoZWJyZXcnXSA9IDB4RkIxRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZG93bnRhY2tiZWxvd2NtYiddID0gMHgwMzFFO1xuICAgICAgICAgICAgICAgICAgICB0Wydkb3dudGFja21vZCddID0gMHgwMkQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydkcGFyZW4nXSA9IDB4MjQ5RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZHN1cGVyaW9yJ10gPSAweEY2RUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R0YWlsJ10gPSAweDAyNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R0b3BiYXInXSA9IDB4MDE4QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZHVoaXJhZ2FuYSddID0gMHgzMDY1O1xuICAgICAgICAgICAgICAgICAgICB0WydkdWthdGFrYW5hJ10gPSAweDMwQzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6J10gPSAweDAxRjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6YWx0b25lJ10gPSAweDAyQTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6Y2Fyb24nXSA9IDB4MDFDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZHpjdXJsJ10gPSAweDAyQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6ZWFia2hhc2lhbmN5cmlsbGljJ10gPSAweDA0RTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6ZWN5cmlsbGljJ10gPSAweDA0NTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2R6aGVjeXJpbGxpYyddID0gMHgwNDVGO1xuICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSAweDAwNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VhY3V0ZSddID0gMHgwMEU5O1xuICAgICAgICAgICAgICAgICAgICB0WydlYXJ0aCddID0gMHgyNjQxO1xuICAgICAgICAgICAgICAgICAgICB0WydlYmVuZ2FsaSddID0gMHgwOThGO1xuICAgICAgICAgICAgICAgICAgICB0WydlYm9wb21vZm8nXSA9IDB4MzExQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWJyZXZlJ10gPSAweDAxMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjYW5kcmFkZXZhJ10gPSAweDA5MEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjYW5kcmFndWphcmF0aSddID0gMHgwQThEO1xuICAgICAgICAgICAgICAgICAgICB0WydlY2FuZHJhdm93ZWxzaWduZGV2YSddID0gMHgwOTQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydlY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSAweDAxMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjZWRpbGxhYnJldmUnXSA9IDB4MUUxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNoYXJtZW5pYW4nXSA9IDB4MDU2NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNoeWl3bmFybWVuaWFuJ10gPSAweDA1ODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjbGUnXSA9IDB4MjRENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXgnXSA9IDB4MDBFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXhhY3V0ZSddID0gMHgxRUJGO1xuICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleGJlbG93J10gPSAweDFFMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4ZG90YmVsb3cnXSA9IDB4MUVDNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXhncmF2ZSddID0gMHgxRUMxO1xuICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleGhvb2thYm92ZSddID0gMHgxRUMzO1xuICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleHRpbGRlJ10gPSAweDFFQzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VjeXJpbGxpYyddID0gMHgwNDU0O1xuICAgICAgICAgICAgICAgICAgICB0WydlZGJsZ3JhdmUnXSA9IDB4MDIwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWRldmEnXSA9IDB4MDkwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWRpZXJlc2lzJ10gPSAweDAwRUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3QnXSA9IDB4MDExNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWRvdGFjY2VudCddID0gMHgwMTE3O1xuICAgICAgICAgICAgICAgICAgICB0WydlZG90YmVsb3cnXSA9IDB4MUVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWVndXJtdWtoaSddID0gMHgwQTBGO1xuICAgICAgICAgICAgICAgICAgICB0WydlZW1hdHJhZ3VybXVraGknXSA9IDB4MEE0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWZjeXJpbGxpYyddID0gMHgwNDQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDB4MDBFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWd1amFyYXRpJ10gPSAweDBBOEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VoYXJtZW5pYW4nXSA9IDB4MDU2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZWhib3BvbW9mbyddID0gMHgzMTFEO1xuICAgICAgICAgICAgICAgICAgICB0WydlaGlyYWdhbmEnXSA9IDB4MzA0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWhvb2thYm92ZSddID0gMHgxRUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydlaWJvcG9tb2ZvJ10gPSAweDMxMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0J10gPSAweDAwMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0YXJhYmljJ10gPSAweDA2Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0YmVuZ2FsaSddID0gMHgwOUVFO1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodGNpcmNsZSddID0gMHgyNDY3O1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWYnXSA9IDB4Mjc5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRkZXZhJ10gPSAweDA5NkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0ZWVuY2lyY2xlJ10gPSAweDI0NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0ZWVucGFyZW4nXSA9IDB4MjQ4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRlZW5wZXJpb2QnXSA9IDB4MjQ5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRndWphcmF0aSddID0gMHgwQUVFO1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodGd1cm11a2hpJ10gPSAweDBBNkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0aGFja2FyYWJpYyddID0gMHgwNjY4O1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodGhhbmd6aG91J10gPSAweDMwMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0aG5vdGViZWFtZWQnXSA9IDB4MjY2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRpZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0aW5mZXJpb3InXSA9IDB4MjA4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRtb25vc3BhY2UnXSA9IDB4RkYxODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHRvbGRzdHlsZSddID0gMHhGNzM4O1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodHBhcmVuJ10gPSAweDI0N0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0cGVyaW9kJ10gPSAweDI0OEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0cGVyc2lhbiddID0gMHgwNkY4O1xuICAgICAgICAgICAgICAgICAgICB0WydlaWdodHJvbWFuJ10gPSAweDIxNzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0c3VwZXJpb3InXSA9IDB4MjA3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHR0aGFpJ10gPSAweDBFNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VpbnZlcnRlZGJyZXZlJ10gPSAweDAyMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Vpb3RpZmllZGN5cmlsbGljJ10gPSAweDA0NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VrYXRha2FuYSddID0gMHgzMEE4O1xuICAgICAgICAgICAgICAgICAgICB0Wydla2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWtvbmthcmd1cm11a2hpJ10gPSAweDBBNzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Vrb3JlYW4nXSA9IDB4MzE1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWxjeXJpbGxpYyddID0gMHgwNDNCO1xuICAgICAgICAgICAgICAgICAgICB0WydlbGVtZW50J10gPSAweDIyMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VsZXZlbmNpcmNsZSddID0gMHgyNDZBO1xuICAgICAgICAgICAgICAgICAgICB0WydlbGV2ZW5wYXJlbiddID0gMHgyNDdFO1xuICAgICAgICAgICAgICAgICAgICB0WydlbGV2ZW5wZXJpb2QnXSA9IDB4MjQ5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWxldmVucm9tYW4nXSA9IDB4MjE3QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWxsaXBzaXMnXSA9IDB4MjAyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZWxsaXBzaXN2ZXJ0aWNhbCddID0gMHgyMkVFO1xuICAgICAgICAgICAgICAgICAgICB0WydlbWFjcm9uJ10gPSAweDAxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb25hY3V0ZSddID0gMHgxRTE3O1xuICAgICAgICAgICAgICAgICAgICB0WydlbWFjcm9uZ3JhdmUnXSA9IDB4MUUxNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW1jeXJpbGxpYyddID0gMHgwNDNDO1xuICAgICAgICAgICAgICAgICAgICB0WydlbWRhc2gnXSA9IDB4MjAxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW1kYXNodmVydGljYWwnXSA9IDB4RkUzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW1vbm9zcGFjZSddID0gMHhGRjQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydlbXBoYXNpc21hcmthcm1lbmlhbiddID0gMHgwNTVCO1xuICAgICAgICAgICAgICAgICAgICB0WydlbXB0eXNldCddID0gMHgyMjA1O1xuICAgICAgICAgICAgICAgICAgICB0WydlbmJvcG9tb2ZvJ10gPSAweDMxMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuY3lyaWxsaWMnXSA9IDB4MDQzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW5kYXNoJ10gPSAweDIwMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaHZlcnRpY2FsJ10gPSAweEZFMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDRBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZW5nJ10gPSAweDAxNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuZ2JvcG9tb2ZvJ10gPSAweDMxMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VuZ2hlY3lyaWxsaWMnXSA9IDB4MDRBNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW5ob29rY3lyaWxsaWMnXSA9IDB4MDRDODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZW5zcGFjZSddID0gMHgyMDAyO1xuICAgICAgICAgICAgICAgICAgICB0Wydlb2dvbmVrJ10gPSAweDAxMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Vva29yZWFuJ10gPSAweDMxNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VvcGVuJ10gPSAweDAyNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VvcGVuY2xvc2VkJ10gPSAweDAyOUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VvcGVucmV2ZXJzZWQnXSA9IDB4MDI1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZW9wZW5yZXZlcnNlZGNsb3NlZCddID0gMHgwMjVFO1xuICAgICAgICAgICAgICAgICAgICB0Wydlb3BlbnJldmVyc2VkaG9vayddID0gMHgwMjVEO1xuICAgICAgICAgICAgICAgICAgICB0WydlcGFyZW4nXSA9IDB4MjRBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXBzaWxvbiddID0gMHgwM0I1O1xuICAgICAgICAgICAgICAgICAgICB0WydlcHNpbG9udG9ub3MnXSA9IDB4MDNBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDB4MDAzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWxtb25vc3BhY2UnXSA9IDB4RkYxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWxzbWFsbCddID0gMHhGRTY2O1xuICAgICAgICAgICAgICAgICAgICB0WydlcXVhbHN1cGVyaW9yJ10gPSAweDIwN0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VxdWl2YWxlbmNlJ10gPSAweDIyNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VyYm9wb21vZm8nXSA9IDB4MzEyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXJjeXJpbGxpYyddID0gMHgwNDQwO1xuICAgICAgICAgICAgICAgICAgICB0WydlcmV2ZXJzZWQnXSA9IDB4MDI1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXJldmVyc2VkY3lyaWxsaWMnXSA9IDB4MDQ0RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXNjeXJpbGxpYyddID0gMHgwNDQxO1xuICAgICAgICAgICAgICAgICAgICB0Wydlc2Rlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0QUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VzaCddID0gMHgwMjgzO1xuICAgICAgICAgICAgICAgICAgICB0Wydlc2hjdXJsJ10gPSAweDAyODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2VzaG9ydGRldmEnXSA9IDB4MDkwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXNob3J0dm93ZWxzaWduZGV2YSddID0gMHgwOTQ2O1xuICAgICAgICAgICAgICAgICAgICB0Wydlc2hyZXZlcnNlZGxvb3AnXSA9IDB4MDFBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXNoc3F1YXRyZXZlcnNlZCddID0gMHgwMjg1O1xuICAgICAgICAgICAgICAgICAgICB0Wydlc21hbGxoaXJhZ2FuYSddID0gMHgzMDQ3O1xuICAgICAgICAgICAgICAgICAgICB0Wydlc21hbGxrYXRha2FuYSddID0gMHgzMEE3O1xuICAgICAgICAgICAgICAgICAgICB0Wydlc21hbGxrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjZBO1xuICAgICAgICAgICAgICAgICAgICB0Wydlc3RpbWF0ZWQnXSA9IDB4MjEyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXN1cGVyaW9yJ10gPSAweEY2RUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V0YSddID0gMHgwM0I3O1xuICAgICAgICAgICAgICAgICAgICB0WydldGFybWVuaWFuJ10gPSAweDA1Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V0YXRvbm9zJ10gPSAweDAzQUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gMHgwMEYwO1xuICAgICAgICAgICAgICAgICAgICB0WydldGlsZGUnXSA9IDB4MUVCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXRpbGRlYmVsb3cnXSA9IDB4MUUxQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXRuYWh0YWZvdWtoaGVicmV3J10gPSAweDA1OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V0bmFodGFmb3VraGxlZnRoZWJyZXcnXSA9IDB4MDU5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXRuYWh0YWhlYnJldyddID0gMHgwNTkxO1xuICAgICAgICAgICAgICAgICAgICB0WydldG5haHRhbGVmdGhlYnJldyddID0gMHgwNTkxO1xuICAgICAgICAgICAgICAgICAgICB0WydldHVybmVkJ10gPSAweDAxREQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V1a29yZWFuJ10gPSAweDMxNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V1cm8nXSA9IDB4MjBBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZXZvd2Vsc2lnbmJlbmdhbGknXSA9IDB4MDlDNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZXZvd2Vsc2lnbmRldmEnXSA9IDB4MDk0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbSddID0gMHgwMDIxO1xuICAgICAgICAgICAgICAgICAgICB0WydleGNsYW1hcm1lbmlhbiddID0gMHgwNTVDO1xuICAgICAgICAgICAgICAgICAgICB0WydleGNsYW1kYmwnXSA9IDB4MjAzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMHgwMEExO1xuICAgICAgICAgICAgICAgICAgICB0WydleGNsYW1kb3duc21hbGwnXSA9IDB4RjdBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtbW9ub3NwYWNlJ10gPSAweEZGMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbXNtYWxsJ10gPSAweEY3MjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V4aXN0ZW50aWFsJ10gPSAweDIyMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V6aCddID0gMHgwMjkyO1xuICAgICAgICAgICAgICAgICAgICB0WydlemhjYXJvbiddID0gMHgwMUVGO1xuICAgICAgICAgICAgICAgICAgICB0WydlemhjdXJsJ10gPSAweDAyOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V6aHJldmVyc2VkJ10gPSAweDAxQjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2V6aHRhaWwnXSA9IDB4MDFCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZiddID0gMHgwMDY2O1xuICAgICAgICAgICAgICAgICAgICB0WydmYWRldmEnXSA9IDB4MDk1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmFndXJtdWtoaSddID0gMHgwQTVFO1xuICAgICAgICAgICAgICAgICAgICB0WydmYWhyZW5oZWl0J10gPSAweDIxMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZhdGhhYXJhYmljJ10gPSAweDA2NEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZhdGhhbG93YXJhYmljJ10gPSAweDA2NEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZhdGhhdGFuYXJhYmljJ10gPSAweDA2NEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zib3BvbW9mbyddID0gMHgzMTA4O1xuICAgICAgICAgICAgICAgICAgICB0WydmY2lyY2xlJ10gPSAweDI0RDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zkb3RhY2NlbnQnXSA9IDB4MUUxRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmVoYXJhYmljJ10gPSAweDA2NDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZlaGFybWVuaWFuJ10gPSAweDA1ODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZlaGZpbmFsYXJhYmljJ10gPSAweEZFRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZlaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVEMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZmVobWVkaWFsYXJhYmljJ10gPSAweEZFRDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZlaWNvcHRpYyddID0gMHgwM0U1O1xuICAgICAgICAgICAgICAgICAgICB0WydmZW1hbGUnXSA9IDB4MjY0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmYnXSA9IDB4RkIwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmZpJ10gPSAweEZCMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZmbCddID0gMHhGQjA0O1xuICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gMHhGQjAxO1xuICAgICAgICAgICAgICAgICAgICB0WydmaWZ0ZWVuY2lyY2xlJ10gPSAweDI0NkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpZnRlZW5wYXJlbiddID0gMHgyNDgyO1xuICAgICAgICAgICAgICAgICAgICB0WydmaWZ0ZWVucGVyaW9kJ10gPSAweDI0OTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpZ3VyZWRhc2gnXSA9IDB4MjAxMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmlsbGVkYm94J10gPSAweDI1QTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpbGxlZHJlY3QnXSA9IDB4MjVBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxrYWYnXSA9IDB4MDVEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxrYWZkYWdlc2gnXSA9IDB4RkIzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxrYWZkYWdlc2hoZWJyZXcnXSA9IDB4RkIzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxrYWZoZWJyZXcnXSA9IDB4MDVEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxtZW0nXSA9IDB4MDVERDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxtZW1oZWJyZXcnXSA9IDB4MDVERDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxudW4nXSA9IDB4MDVERjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxudW5oZWJyZXcnXSA9IDB4MDVERjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWxwZSddID0gMHgwNUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydmaW5hbHBlaGVicmV3J10gPSAweDA1RTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpbmFsdHNhZGknXSA9IDB4MDVFNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmluYWx0c2FkaWhlYnJldyddID0gMHgwNUU1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXJzdHRvbmVjaGluZXNlJ10gPSAweDAyQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zpc2hleWUnXSA9IDB4MjVDOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml0YWN5cmlsbGljJ10gPSAweDA0NzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmUnXSA9IDB4MDAzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZWFyYWJpYyddID0gMHgwNjY1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlYmVuZ2FsaSddID0gMHgwOUVCO1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlY2lyY2xlJ10gPSAweDI0NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmJ10gPSAweDI3OEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVkZXZhJ10gPSAweDA5NkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVlaWdodGhzJ10gPSAweDIxNUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVndWphcmF0aSddID0gMHgwQUVCO1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlZ3VybXVraGknXSA9IDB4MEE2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZWhhY2thcmFiaWMnXSA9IDB4MDY2NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZWhhbmd6aG91J10gPSAweDMwMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVpZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVpbmZlcmlvciddID0gMHgyMDg1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlbW9ub3NwYWNlJ10gPSAweEZGMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmVvbGRzdHlsZSddID0gMHhGNzM1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlcGFyZW4nXSA9IDB4MjQ3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZXBlcmlvZCddID0gMHgyNDhDO1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlcGVyc2lhbiddID0gMHgwNkY1O1xuICAgICAgICAgICAgICAgICAgICB0WydmaXZlcm9tYW4nXSA9IDB4MjE3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZml2ZXN1cGVyaW9yJ10gPSAweDIwNzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmV0aGFpJ10gPSAweDBFNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZsJ10gPSAweEZCMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gMHgwMTkyO1xuICAgICAgICAgICAgICAgICAgICB0WydmbW9ub3NwYWNlJ10gPSAweEZGNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Ztc3F1YXJlJ10gPSAweDMzOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvZmFudGhhaSddID0gMHgwRTFGO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb2ZhdGhhaSddID0gMHgwRTFEO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb25nbWFudGhhaSddID0gMHgwRTRGO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3JhbGwnXSA9IDB4MjIwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91ciddID0gMHgwMDM0O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VyYXJhYmljJ10gPSAweDA2NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJiZW5nYWxpJ10gPSAweDA5RUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJjaXJjbGUnXSA9IDB4MjQ2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWYnXSA9IDB4Mjc4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmRldmEnXSA9IDB4MDk2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmd1amFyYXRpJ10gPSAweDBBRUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJndXJtdWtoaSddID0gMHgwQTZBO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VyaGFja2FyYWJpYyddID0gMHgwNjY0O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VyaGFuZ3pob3UnXSA9IDB4MzAyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmlkZW9ncmFwaGljcGFyZW4nXSA9IDB4MzIyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cmluZmVyaW9yJ10gPSAweDIwODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJtb25vc3BhY2UnXSA9IDB4RkYxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cm51bWVyYXRvcmJlbmdhbGknXSA9IDB4MDlGNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cm9sZHN0eWxlJ10gPSAweEY3MzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJwYXJlbiddID0gMHgyNDc3O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VycGVyaW9kJ10gPSAweDI0OEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJwZXJzaWFuJ10gPSAweDA2RjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXJyb21hbiddID0gMHgyMTczO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3Vyc3VwZXJpb3InXSA9IDB4MjA3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cnRlZW5jaXJjbGUnXSA9IDB4MjQ2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZm91cnRlZW5wYXJlbiddID0gMHgyNDgxO1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VydGVlbnBlcmlvZCddID0gMHgyNDk1O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VydGhhaSddID0gMHgwRTU0O1xuICAgICAgICAgICAgICAgICAgICB0Wydmb3VydGh0b25lY2hpbmVzZSddID0gMHgwMkNCO1xuICAgICAgICAgICAgICAgICAgICB0WydmcGFyZW4nXSA9IDB4MjRBMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZnJhY3Rpb24nXSA9IDB4MjA0NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZnJhbmMnXSA9IDB4MjBBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZyddID0gMHgwMDY3O1xuICAgICAgICAgICAgICAgICAgICB0WydnYWJlbmdhbGknXSA9IDB4MDk5NztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FjdXRlJ10gPSAweDAxRjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dhZGV2YSddID0gMHgwOTE3O1xuICAgICAgICAgICAgICAgICAgICB0WydnYWZhcmFiaWMnXSA9IDB4MDZBRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FmZmluYWxhcmFiaWMnXSA9IDB4RkI5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FmaW5pdGlhbGFyYWJpYyddID0gMHhGQjk0O1xuICAgICAgICAgICAgICAgICAgICB0WydnYWZtZWRpYWxhcmFiaWMnXSA9IDB4RkI5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FndWphcmF0aSddID0gMHgwQTk3O1xuICAgICAgICAgICAgICAgICAgICB0WydnYWd1cm11a2hpJ10gPSAweDBBMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dhaGlyYWdhbmEnXSA9IDB4MzA0QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FrYXRha2FuYSddID0gMHgzMEFDO1xuICAgICAgICAgICAgICAgICAgICB0WydnYW1tYSddID0gMHgwM0IzO1xuICAgICAgICAgICAgICAgICAgICB0WydnYW1tYWxhdGluc21hbGwnXSA9IDB4MDI2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2FtbWFzdXBlcmlvciddID0gMHgwMkUwO1xuICAgICAgICAgICAgICAgICAgICB0WydnYW5naWFjb3B0aWMnXSA9IDB4MDNFQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2JvcG9tb2ZvJ10gPSAweDMxMEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gMHgwMTFGO1xuICAgICAgICAgICAgICAgICAgICB0WydnY2Fyb24nXSA9IDB4MDFFNztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2NlZGlsbGEnXSA9IDB4MDEyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2NpcmNsZSddID0gMHgyNEQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydnY2lyY3VtZmxleCddID0gMHgwMTFEO1xuICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDB4MDEyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2RvdCddID0gMHgwMTIxO1xuICAgICAgICAgICAgICAgICAgICB0WydnZG90YWNjZW50J10gPSAweDAxMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dlY3lyaWxsaWMnXSA9IDB4MDQzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2VoaXJhZ2FuYSddID0gMHgzMDUyO1xuICAgICAgICAgICAgICAgICAgICB0WydnZWthdGFrYW5hJ10gPSAweDMwQjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dlb21ldHJpY2FsbHllcXVhbCddID0gMHgyMjUxO1xuICAgICAgICAgICAgICAgICAgICB0WydnZXJlc2hhY2NlbnRoZWJyZXcnXSA9IDB4MDU5QztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2VyZXNoaGVicmV3J10gPSAweDA1RjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dlcmVzaG11cWRhbWhlYnJldyddID0gMHgwNTlEO1xuICAgICAgICAgICAgICAgICAgICB0WydnZXJtYW5kYmxzJ10gPSAweDAwREY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dlcnNoYXlpbWFjY2VudGhlYnJldyddID0gMHgwNTlFO1xuICAgICAgICAgICAgICAgICAgICB0WydnZXJzaGF5aW1oZWJyZXcnXSA9IDB4MDVGNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2V0YW1hcmsnXSA9IDB4MzAxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hhYmVuZ2FsaSddID0gMHgwOTk4O1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFkYXJtZW5pYW4nXSA9IDB4MDU3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hhZGV2YSddID0gMHgwOTE4O1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFndWphcmF0aSddID0gMHgwQTk4O1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFndXJtdWtoaSddID0gMHgwQTE4O1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFpbmFyYWJpYyddID0gMHgwNjNBO1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFpbmZpbmFsYXJhYmljJ10gPSAweEZFQ0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2doYWluaW5pdGlhbGFyYWJpYyddID0gMHhGRUNGO1xuICAgICAgICAgICAgICAgICAgICB0WydnaGFpbm1lZGlhbGFyYWJpYyddID0gMHhGRUQwO1xuICAgICAgICAgICAgICAgICAgICB0WydnaGVtaWRkbGVob29rY3lyaWxsaWMnXSA9IDB4MDQ5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hlc3Ryb2tlY3lyaWxsaWMnXSA9IDB4MDQ5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hldXB0dXJuY3lyaWxsaWMnXSA9IDB4MDQ5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hoYWRldmEnXSA9IDB4MDk1QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2hoYWd1cm11a2hpJ10gPSAweDBBNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dob29rJ10gPSAweDAyNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2doenNxdWFyZSddID0gMHgzMzkzO1xuICAgICAgICAgICAgICAgICAgICB0WydnaWhpcmFnYW5hJ10gPSAweDMwNEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dpa2F0YWthbmEnXSA9IDB4MzBBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltYXJtZW5pYW4nXSA9IDB4MDU2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltZWwnXSA9IDB4MDVEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltZWxkYWdlc2gnXSA9IDB4RkIzMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltZWxkYWdlc2hoZWJyZXcnXSA9IDB4RkIzMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2ltZWxoZWJyZXcnXSA9IDB4MDVEMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2plY3lyaWxsaWMnXSA9IDB4MDQ1MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2xvdHRhbGludmVydGVkc3Ryb2tlJ10gPSAweDAxQkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dsb3R0YWxzdG9wJ10gPSAweDAyOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dsb3R0YWxzdG9waW52ZXJ0ZWQnXSA9IDB4MDI5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2xvdHRhbHN0b3Btb2QnXSA9IDB4MDJDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ2xvdHRhbHN0b3ByZXZlcnNlZCddID0gMHgwMjk1O1xuICAgICAgICAgICAgICAgICAgICB0WydnbG90dGFsc3RvcHJldmVyc2VkbW9kJ10gPSAweDAyQzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dsb3R0YWxzdG9wcmV2ZXJzZWRzdXBlcmlvciddID0gMHgwMkU0O1xuICAgICAgICAgICAgICAgICAgICB0WydnbG90dGFsc3RvcHN0cm9rZSddID0gMHgwMkExO1xuICAgICAgICAgICAgICAgICAgICB0WydnbG90dGFsc3RvcHN0cm9rZXJldmVyc2VkJ10gPSAweDAyQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dtYWNyb24nXSA9IDB4MUUyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ21vbm9zcGFjZSddID0gMHhGRjQ3O1xuICAgICAgICAgICAgICAgICAgICB0Wydnb2hpcmFnYW5hJ10gPSAweDMwNTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dva2F0YWthbmEnXSA9IDB4MzBCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3BhcmVuJ10gPSAweDI0QTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dwYXNxdWFyZSddID0gMHgzM0FDO1xuICAgICAgICAgICAgICAgICAgICB0WydncmFkaWVudCddID0gMHgyMjA3O1xuICAgICAgICAgICAgICAgICAgICB0WydncmF2ZSddID0gMHgwMDYwO1xuICAgICAgICAgICAgICAgICAgICB0WydncmF2ZWJlbG93Y21iJ10gPSAweDAzMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlY21iJ10gPSAweDAzMDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlY29tYiddID0gMHgwMzAwO1xuICAgICAgICAgICAgICAgICAgICB0WydncmF2ZWRldmEnXSA9IDB4MDk1MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmVsb3dtb2QnXSA9IDB4MDJDRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmVtb25vc3BhY2UnXSA9IDB4RkY0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmV0b25lY21iJ10gPSAweDAzNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDB4MDAzRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcmVxdWFsJ10gPSAweDIyNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbG9ybGVzcyddID0gMHgyMkRCO1xuICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVybW9ub3NwYWNlJ10gPSAweEZGMUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJvcmVxdWl2YWxlbnQnXSA9IDB4MjI3MztcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcm9ybGVzcyddID0gMHgyMjc3O1xuICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyb3ZlcmVxdWFsJ10gPSAweDIyNjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJzbWFsbCddID0gMHhGRTY1O1xuICAgICAgICAgICAgICAgICAgICB0Wydnc2NyaXB0J10gPSAweDAyNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2dzdHJva2UnXSA9IDB4MDFFNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3VoaXJhZ2FuYSddID0gMHgzMDUwO1xuICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RsZWZ0J10gPSAweDAwQUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdHJpZ2h0J10gPSAweDAwQkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDB4MjAzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbHNpbmdscmlnaHQnXSA9IDB4MjAzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3VrYXRha2FuYSddID0gMHgzMEIwO1xuICAgICAgICAgICAgICAgICAgICB0WydndXJhbXVzcXVhcmUnXSA9IDB4MzMxODtcbiAgICAgICAgICAgICAgICAgICAgdFsnZ3lzcXVhcmUnXSA9IDB4MzNDOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaCddID0gMHgwMDY4O1xuICAgICAgICAgICAgICAgICAgICB0WydoYWFia2hhc2lhbmN5cmlsbGljJ10gPSAweDA0QTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhYWx0b25lYXJhYmljJ10gPSAweDA2QzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhYmVuZ2FsaSddID0gMHgwOUI5O1xuICAgICAgICAgICAgICAgICAgICB0WydoYWRlc2NlbmRlcmN5cmlsbGljJ10gPSAweDA0QjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhZGV2YSddID0gMHgwOTM5O1xuICAgICAgICAgICAgICAgICAgICB0WydoYWd1amFyYXRpJ10gPSAweDBBQjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhZ3VybXVraGknXSA9IDB4MEEzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGFoYXJhYmljJ10gPSAweDA2MkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhaGZpbmFsYXJhYmljJ10gPSAweEZFQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGFoaXJhZ2FuYSddID0gMHgzMDZGO1xuICAgICAgICAgICAgICAgICAgICB0WydoYWhtZWRpYWxhcmFiaWMnXSA9IDB4RkVBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGFpdHVzcXVhcmUnXSA9IDB4MzMyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGFrYXRha2FuYSddID0gMHgzMENGO1xuICAgICAgICAgICAgICAgICAgICB0WydoYWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhbGFudGd1cm11a2hpJ10gPSAweDBBNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhbXphYXJhYmljJ10gPSAweDA2MjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhbXphbG93YXJhYmljJ10gPSAweDA2MjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhbmd1bGZpbGxlciddID0gMHgzMTY0O1xuICAgICAgICAgICAgICAgICAgICB0WydoYXJkc2lnbmN5cmlsbGljJ10gPSAweDA0NEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhcnBvb25sZWZ0YmFyYnVwJ10gPSAweDIxQkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhcnBvb25yaWdodGJhcmJ1cCddID0gMHgyMUMwO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXNxdWFyZSddID0gMHgzM0NBO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnBhdGFoJ10gPSAweDA1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmcGF0YWgxNiddID0gMHgwNUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnBhdGFoMjMnXSA9IDB4MDVCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZwYXRhaDJmJ10gPSAweDA1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmcGF0YWhoZWJyZXcnXSA9IDB4MDVCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZwYXRhaG5hcnJvd2hlYnJldyddID0gMHgwNUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnBhdGFocXVhcnRlcmhlYnJldyddID0gMHgwNUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnBhdGFod2lkZWhlYnJldyddID0gMHgwNUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0cyddID0gMHgwNUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0czFiJ10gPSAweDA1QjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmcWFtYXRzMjgnXSA9IDB4MDVCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZxYW1hdHMzNCddID0gMHgwNUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0c2hlYnJldyddID0gMHgwNUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0c25hcnJvd2hlYnJldyddID0gMHgwNUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXcnXSA9IDB4MDVCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZxYW1hdHN3aWRlaGVicmV3J10gPSAweDA1QjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmc2Vnb2wnXSA9IDB4MDVCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZzZWdvbDE3J10gPSAweDA1QjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmc2Vnb2wyNCddID0gMHgwNUIxO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnNlZ29sMzAnXSA9IDB4MDVCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGF0YWZzZWdvbGhlYnJldyddID0gMHgwNUIxO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXRhZnNlZ29sbmFycm93aGVicmV3J10gPSAweDA1QjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmc2Vnb2xxdWFydGVyaGVicmV3J10gPSAweDA1QjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdGFmc2Vnb2x3aWRlaGVicmV3J10gPSAweDA1QjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hiYXInXSA9IDB4MDEyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGJvcG9tb2ZvJ10gPSAweDMxMEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hicmV2ZWJlbG93J10gPSAweDFFMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hjZWRpbGxhJ10gPSAweDFFMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hjaXJjbGUnXSA9IDB4MjRENztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGNpcmN1bWZsZXgnXSA9IDB4MDEyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGRpZXJlc2lzJ10gPSAweDFFMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hkb3RhY2NlbnQnXSA9IDB4MUUyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGRvdGJlbG93J10gPSAweDFFMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlJ10gPSAweDA1RDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlYXJ0J10gPSAweDI2NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlYXJ0c3VpdGJsYWNrJ10gPSAweDI2NjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlYXJ0c3VpdHdoaXRlJ10gPSAweDI2NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlZGFnZXNoJ10gPSAweEZCMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlZGFnZXNoaGVicmV3J10gPSAweEZCMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlaGFsdG9uZWFyYWJpYyddID0gMHgwNkMxO1xuICAgICAgICAgICAgICAgICAgICB0WydoZWhhcmFiaWMnXSA9IDB4MDY0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoZWJyZXcnXSA9IDB4MDVENDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoZmluYWxhbHRvbmVhcmFiaWMnXSA9IDB4RkJBNztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoZmluYWxhbHR0d29hcmFiaWMnXSA9IDB4RkVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoZmluYWxhcmFiaWMnXSA9IDB4RkVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoaGFtemFhYm92ZWZpbmFsYXJhYmljJ10gPSAweEZCQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlaGhhbXphYWJvdmVpc29sYXRlZGFyYWJpYyddID0gMHhGQkE0O1xuICAgICAgICAgICAgICAgICAgICB0WydoZWhpbml0aWFsYWx0b25lYXJhYmljJ10gPSAweEZCQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVFQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVoaXJhZ2FuYSddID0gMHgzMDc4O1xuICAgICAgICAgICAgICAgICAgICB0WydoZWhtZWRpYWxhbHRvbmVhcmFiaWMnXSA9IDB4RkJBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVobWVkaWFsYXJhYmljJ10gPSAweEZFRUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlaXNlaWVyYXNxdWFyZSddID0gMHgzMzdCO1xuICAgICAgICAgICAgICAgICAgICB0WydoZWthdGFrYW5hJ10gPSAweDMwRDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hla2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGVrdXRhYXJ1c3F1YXJlJ10gPSAweDMzMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlbmdob29rJ10gPSAweDAyNjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hlcnV0dXNxdWFyZSddID0gMHgzMzM5O1xuICAgICAgICAgICAgICAgICAgICB0WydoZXQnXSA9IDB4MDVENztcbiAgICAgICAgICAgICAgICAgICAgdFsnaGV0aGVicmV3J10gPSAweDA1RDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hob29rJ10gPSAweDAyNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hob29rc3VwZXJpb3InXSA9IDB4MDJCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlldWhhY2lyY2xla29yZWFuJ10gPSAweDMyN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpZXVoYXBhcmVua29yZWFuJ10gPSAweDMyMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpZXVoY2lyY2xla29yZWFuJ10gPSAweDMyNkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpZXVoa29yZWFuJ10gPSAweDMxNEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpZXVocGFyZW5rb3JlYW4nXSA9IDB4MzIwRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGloaXJhZ2FuYSddID0gMHgzMDcyO1xuICAgICAgICAgICAgICAgICAgICB0WydoaWthdGFrYW5hJ10gPSAweDMwRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXEnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXExNCddID0gMHgwNUI0O1xuICAgICAgICAgICAgICAgICAgICB0WydoaXJpcTIxJ10gPSAweDA1QjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpcmlxMmQnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXFoZWJyZXcnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXFuYXJyb3doZWJyZXcnXSA9IDB4MDVCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaGlyaXFxdWFydGVyaGVicmV3J10gPSAweDA1QjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hpcmlxd2lkZWhlYnJldyddID0gMHgwNUI0O1xuICAgICAgICAgICAgICAgICAgICB0WydobGluZWJlbG93J10gPSAweDFFOTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2htb25vc3BhY2UnXSA9IDB4RkY0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9hcm1lbmlhbiddID0gMHgwNTcwO1xuICAgICAgICAgICAgICAgICAgICB0Wydob2hpcHRoYWknXSA9IDB4MEUyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9oaXJhZ2FuYSddID0gMHgzMDdCO1xuICAgICAgICAgICAgICAgICAgICB0Wydob2thdGFrYW5hJ10gPSAweDMwREI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hva2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW0nXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW0xOSddID0gMHgwNUI5O1xuICAgICAgICAgICAgICAgICAgICB0Wydob2xhbTI2J10gPSAweDA1Qjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvbGFtMzInXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW1oZWJyZXcnXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW1uYXJyb3doZWJyZXcnXSA9IDB4MDVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9sYW1xdWFydGVyaGVicmV3J10gPSAweDA1Qjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvbGFtd2lkZWhlYnJldyddID0gMHgwNUI5O1xuICAgICAgICAgICAgICAgICAgICB0Wydob25va2h1a3RoYWknXSA9IDB4MEUyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9va2Fib3ZlY29tYiddID0gMHgwMzA5O1xuICAgICAgICAgICAgICAgICAgICB0Wydob29rY21iJ10gPSAweDAzMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvb2twYWxhdGFsaXplZGJlbG93Y21iJ10gPSAweDAzMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvb2tyZXRyb2ZsZXhiZWxvd2NtYiddID0gMHgwMzIyO1xuICAgICAgICAgICAgICAgICAgICB0Wydob29uc3F1YXJlJ10gPSAweDMzNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvcmljb3B0aWMnXSA9IDB4MDNFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG9yaXpvbnRhbGJhciddID0gMHgyMDE1O1xuICAgICAgICAgICAgICAgICAgICB0Wydob3JuY21iJ10gPSAweDAzMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hvdHNwcmluZ3MnXSA9IDB4MjY2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaG91c2UnXSA9IDB4MjMwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHBhcmVuJ10gPSAweDI0QTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hzdXBlcmlvciddID0gMHgwMkIwO1xuICAgICAgICAgICAgICAgICAgICB0WydodHVybmVkJ10gPSAweDAyNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2h1aGlyYWdhbmEnXSA9IDB4MzA3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHVpaXRvc3F1YXJlJ10gPSAweDMzMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2h1a2F0YWthbmEnXSA9IDB4MzBENTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHVrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjhDO1xuICAgICAgICAgICAgICAgICAgICB0WydodW5nYXJ1bWxhdXQnXSA9IDB4MDJERDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHVuZ2FydW1sYXV0Y21iJ10gPSAweDAzMEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2h2J10gPSAweDAxOTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMHgwMDJEO1xuICAgICAgICAgICAgICAgICAgICB0WydoeXBoZW5pbmZlcmlvciddID0gMHhGNkU1O1xuICAgICAgICAgICAgICAgICAgICB0WydoeXBoZW5tb25vc3BhY2UnXSA9IDB4RkYwRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVuc21hbGwnXSA9IDB4RkU2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVuc3VwZXJpb3InXSA9IDB4RjZFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVudHdvJ10gPSAweDIwMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2knXSA9IDB4MDA2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWFjdXRlJ10gPSAweDAwRUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lhY3lyaWxsaWMnXSA9IDB4MDQ0RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWJlbmdhbGknXSA9IDB4MDk4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWJvcG9tb2ZvJ10gPSAweDMxMjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2licmV2ZSddID0gMHgwMTJEO1xuICAgICAgICAgICAgICAgICAgICB0WydpY2Fyb24nXSA9IDB4MDFEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWNpcmNsZSddID0gMHgyNEQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydpY2lyY3VtZmxleCddID0gMHgwMEVFO1xuICAgICAgICAgICAgICAgICAgICB0WydpY3lyaWxsaWMnXSA9IDB4MDQ1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRibGdyYXZlJ10gPSAweDAyMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGVhcnRoY2lyY2xlJ10gPSAweDMyOEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGZpcmVjaXJjbGUnXSA9IDB4MzI4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuJ10gPSAweDMyM0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljY2FsbHBhcmVuJ10gPSAweDMyM0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljY2VudHJlY2lyY2xlJ10gPSAweDMyQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljY2xvc2UnXSA9IDB4MzAwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNjb21tYSddID0gMHgzMDAxO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2NvbW1hbGVmdCddID0gMHhGRjY0O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW4nXSA9IDB4MzIzNztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNjb3JyZWN0Y2lyY2xlJ10gPSAweDMyQTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljZWFydGhwYXJlbiddID0gMHgzMjJGO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbiddID0gMHgzMjNEO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2V4Y2VsbGVudGNpcmNsZSddID0gMHgzMjlEO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2Zlc3RpdmFscGFyZW4nXSA9IDB4MzI0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGUnXSA9IDB4MzI5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNmaW5hbmNpYWxwYXJlbiddID0gMHgzMjM2O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2ZpcmVwYXJlbiddID0gMHgzMjJCO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2hhdmVwYXJlbiddID0gMHgzMjMyO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2hpZ2hjaXJjbGUnXSA9IDB4MzJBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNpdGVyYXRpb25tYXJrJ10gPSAweDMwMDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljbGFib3JjaXJjbGUnXSA9IDB4MzI5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNsYWJvcnBhcmVuJ10gPSAweDMyMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljbGVmdGNpcmNsZSddID0gMHgzMkE3O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY2xvd2NpcmNsZSddID0gMHgzMkE2O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY21lZGljaW5lY2lyY2xlJ10gPSAweDMyQTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljbWV0YWxwYXJlbiddID0gMHgzMjJFO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY21vb25wYXJlbiddID0gMHgzMjJBO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY25hbWVwYXJlbiddID0gMHgzMjM0O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3BlcmlvZCddID0gMHgzMDAyO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3ByaW50Y2lyY2xlJ10gPSAweDMyOUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljcmVhY2hwYXJlbiddID0gMHgzMjQzO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3JlcHJlc2VudHBhcmVuJ10gPSAweDMyMzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljcmVzb3VyY2VwYXJlbiddID0gMHgzMjNFO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3JpZ2h0Y2lyY2xlJ10gPSAweDMyQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc2VjcmV0Y2lyY2xlJ10gPSAweDMyOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc2VsZnBhcmVuJ10gPSAweDMyNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc29jaWV0eXBhcmVuJ10gPSAweDMyMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc3BhY2UnXSA9IDB4MzAwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNzcGVjaWFscGFyZW4nXSA9IDB4MzIzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWNzdG9ja3BhcmVuJ10gPSAweDMyMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc3R1ZHlwYXJlbiddID0gMHgzMjNCO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhpY3N1bnBhcmVuJ10gPSAweDMyMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljc3VwZXJ2aXNlcGFyZW4nXSA9IDB4MzIzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoaWN3YXRlcnBhcmVuJ10gPSAweDMyMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljd29vZHBhcmVuJ10gPSAweDMyMkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaGljemVybyddID0gMHgzMDA3O1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhtZXRhbGNpcmNsZSddID0gMHgzMjhFO1xuICAgICAgICAgICAgICAgICAgICB0WydpZGVvZ3JhcGhtb29uY2lyY2xlJ10gPSAweDMyOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaG5hbWVjaXJjbGUnXSA9IDB4MzI5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRlb2dyYXBoc3VuY2lyY2xlJ10gPSAweDMyOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaHdhdGVyY2lyY2xlJ10gPSAweDMyOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkZW9ncmFwaHdvb2RjaXJjbGUnXSA9IDB4MzI4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRldmEnXSA9IDB4MDkwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAweDAwRUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkaWVyZXNpc2FjdXRlJ10gPSAweDFFMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0RTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lkb3RiZWxvdyddID0gMHgxRUNCO1xuICAgICAgICAgICAgICAgICAgICB0WydpZWJyZXZlY3lyaWxsaWMnXSA9IDB4MDRENztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWVjeXJpbGxpYyddID0gMHgwNDM1O1xuICAgICAgICAgICAgICAgICAgICB0WydpZXVuZ2FjaXJjbGVrb3JlYW4nXSA9IDB4MzI3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWV1bmdhcGFyZW5rb3JlYW4nXSA9IDB4MzIxNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWV1bmdjaXJjbGVrb3JlYW4nXSA9IDB4MzI2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWV1bmdrb3JlYW4nXSA9IDB4MzE0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWV1bmdwYXJlbmtvcmVhbiddID0gMHgzMjA3O1xuICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDB4MDBFQztcbiAgICAgICAgICAgICAgICAgICAgdFsnaWd1amFyYXRpJ10gPSAweDBBODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lndXJtdWtoaSddID0gMHgwQTA3O1xuICAgICAgICAgICAgICAgICAgICB0WydpaGlyYWdhbmEnXSA9IDB4MzA0NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWhvb2thYm92ZSddID0gMHgxRUM5O1xuICAgICAgICAgICAgICAgICAgICB0WydpaWJlbmdhbGknXSA9IDB4MDk4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWljeXJpbGxpYyddID0gMHgwNDM4O1xuICAgICAgICAgICAgICAgICAgICB0WydpaWRldmEnXSA9IDB4MDkwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWlndWphcmF0aSddID0gMHgwQTg4O1xuICAgICAgICAgICAgICAgICAgICB0WydpaWd1cm11a2hpJ10gPSAweDBBMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lpbWF0cmFndXJtdWtoaSddID0gMHgwQTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydpaW52ZXJ0ZWRicmV2ZSddID0gMHgwMjBCO1xuICAgICAgICAgICAgICAgICAgICB0WydpaXNob3J0Y3lyaWxsaWMnXSA9IDB4MDQzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWl2b3dlbHNpZ25iZW5nYWxpJ10gPSAweDA5QzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lpdm93ZWxzaWduZGV2YSddID0gMHgwOTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydpaXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lqJ10gPSAweDAxMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lrYXRha2FuYSddID0gMHgzMEE0O1xuICAgICAgICAgICAgICAgICAgICB0Wydpa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaWtvcmVhbiddID0gMHgzMTYzO1xuICAgICAgICAgICAgICAgICAgICB0WydpbGRlJ10gPSAweDAyREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lsdXloZWJyZXcnXSA9IDB4MDVBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnaW1hY3JvbiddID0gMHgwMTJCO1xuICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uY3lyaWxsaWMnXSA9IDB4MDRFMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaW1hZ2VvcmFwcHJveGltYXRlbHllcXVhbCddID0gMHgyMjUzO1xuICAgICAgICAgICAgICAgICAgICB0WydpbWF0cmFndXJtdWtoaSddID0gMHgwQTNGO1xuICAgICAgICAgICAgICAgICAgICB0WydpbW9ub3NwYWNlJ10gPSAweEZGNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2luY3JlbWVudCddID0gMHgyMjA2O1xuICAgICAgICAgICAgICAgICAgICB0WydpbmZpbml0eSddID0gMHgyMjFFO1xuICAgICAgICAgICAgICAgICAgICB0Wydpbmlhcm1lbmlhbiddID0gMHgwNTZCO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlZ3JhbCddID0gMHgyMjJCO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlZ3JhbGJvdHRvbSddID0gMHgyMzIxO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlZ3JhbGJ0J10gPSAweDIzMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ludGVncmFsZXgnXSA9IDB4RjhGNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50ZWdyYWx0b3AnXSA9IDB4MjMyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50ZWdyYWx0cCddID0gMHgyMzIwO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlcnNlY3Rpb24nXSA9IDB4MjIyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50aXNxdWFyZSddID0gMHgzMzA1O1xuICAgICAgICAgICAgICAgICAgICB0WydpbnZidWxsZXQnXSA9IDB4MjVEODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW52Y2lyY2xlJ10gPSAweDI1RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ludnNtaWxlZmFjZSddID0gMHgyNjNCO1xuICAgICAgICAgICAgICAgICAgICB0Wydpb2N5cmlsbGljJ10gPSAweDA0NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lvZ29uZWsnXSA9IDB4MDEyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW90YSddID0gMHgwM0I5O1xuICAgICAgICAgICAgICAgICAgICB0Wydpb3RhZGllcmVzaXMnXSA9IDB4MDNDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW90YWRpZXJlc2lzdG9ub3MnXSA9IDB4MDM5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW90YWxhdGluJ10gPSAweDAyNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lvdGF0b25vcyddID0gMHgwM0FGO1xuICAgICAgICAgICAgICAgICAgICB0WydpcGFyZW4nXSA9IDB4MjRBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXJpZ3VybXVraGknXSA9IDB4MEE3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXNtYWxsaGlyYWdhbmEnXSA9IDB4MzA0MztcbiAgICAgICAgICAgICAgICAgICAgdFsnaXNtYWxsa2F0YWthbmEnXSA9IDB4MzBBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnaXNtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXNzaGFyYmVuZ2FsaSddID0gMHgwOUZBO1xuICAgICAgICAgICAgICAgICAgICB0Wydpc3Ryb2tlJ10gPSAweDAyNjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2lzdXBlcmlvciddID0gMHhGNkVEO1xuICAgICAgICAgICAgICAgICAgICB0WydpdGVyYXRpb25oaXJhZ2FuYSddID0gMHgzMDlEO1xuICAgICAgICAgICAgICAgICAgICB0WydpdGVyYXRpb25rYXRha2FuYSddID0gMHgzMEZEO1xuICAgICAgICAgICAgICAgICAgICB0WydpdGlsZGUnXSA9IDB4MDEyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXRpbGRlYmVsb3cnXSA9IDB4MUUyRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXVib3BvbW9mbyddID0gMHgzMTI5O1xuICAgICAgICAgICAgICAgICAgICB0WydpdWN5cmlsbGljJ10gPSAweDA0NEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2l2b3dlbHNpZ25iZW5nYWxpJ10gPSAweDA5QkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2l2b3dlbHNpZ25kZXZhJ10gPSAweDA5M0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2l2b3dlbHNpZ25ndWphcmF0aSddID0gMHgwQUJGO1xuICAgICAgICAgICAgICAgICAgICB0WydpemhpdHNhY3lyaWxsaWMnXSA9IDB4MDQ3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnaXpoaXRzYWRibGdyYXZlY3lyaWxsaWMnXSA9IDB4MDQ3NztcbiAgICAgICAgICAgICAgICAgICAgdFsnaiddID0gMHgwMDZBO1xuICAgICAgICAgICAgICAgICAgICB0WydqYWFybWVuaWFuJ10gPSAweDA1NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2phYmVuZ2FsaSddID0gMHgwOTlDO1xuICAgICAgICAgICAgICAgICAgICB0WydqYWRldmEnXSA9IDB4MDkxQztcbiAgICAgICAgICAgICAgICAgICAgdFsnamFndWphcmF0aSddID0gMHgwQTlDO1xuICAgICAgICAgICAgICAgICAgICB0WydqYWd1cm11a2hpJ10gPSAweDBBMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2pib3BvbW9mbyddID0gMHgzMTEwO1xuICAgICAgICAgICAgICAgICAgICB0WydqY2Fyb24nXSA9IDB4MDFGMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamNpcmNsZSddID0gMHgyNEQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydqY2lyY3VtZmxleCddID0gMHgwMTM1O1xuICAgICAgICAgICAgICAgICAgICB0WydqY3Jvc3NlZHRhaWwnXSA9IDB4MDI5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamRvdGxlc3NzdHJva2UnXSA9IDB4MDI1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnamVjeXJpbGxpYyddID0gMHgwNDU4O1xuICAgICAgICAgICAgICAgICAgICB0WydqZWVtYXJhYmljJ10gPSAweDA2MkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2plZW1maW5hbGFyYWJpYyddID0gMHhGRTlFO1xuICAgICAgICAgICAgICAgICAgICB0WydqZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGRTlGO1xuICAgICAgICAgICAgICAgICAgICB0WydqZWVtbWVkaWFsYXJhYmljJ10gPSAweEZFQTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2plaGFyYWJpYyddID0gMHgwNjk4O1xuICAgICAgICAgICAgICAgICAgICB0WydqZWhmaW5hbGFyYWJpYyddID0gMHhGQjhCO1xuICAgICAgICAgICAgICAgICAgICB0WydqaGFiZW5nYWxpJ10gPSAweDA5OUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2poYWRldmEnXSA9IDB4MDkxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamhhZ3VqYXJhdGknXSA9IDB4MEE5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamhhZ3VybXVraGknXSA9IDB4MEExRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnamhlaGFybWVuaWFuJ10gPSAweDA1N0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ppcyddID0gMHgzMDA0O1xuICAgICAgICAgICAgICAgICAgICB0WydqbW9ub3NwYWNlJ10gPSAweEZGNEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2pwYXJlbiddID0gMHgyNEE1O1xuICAgICAgICAgICAgICAgICAgICB0Wydqc3VwZXJpb3InXSA9IDB4MDJCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnayddID0gMHgwMDZCO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWJhc2hraXJjeXJpbGxpYyddID0gMHgwNEExO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWJlbmdhbGknXSA9IDB4MDk5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FjdXRlJ10gPSAweDFFMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thY3lyaWxsaWMnXSA9IDB4MDQzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FkZXNjZW5kZXJjeXJpbGxpYyddID0gMHgwNDlCO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWRldmEnXSA9IDB4MDkxNTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FmJ10gPSAweDA1REI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZmFyYWJpYyddID0gMHgwNjQzO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWZkYWdlc2gnXSA9IDB4RkIzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FmZGFnZXNoaGVicmV3J10gPSAweEZCM0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZmZpbmFsYXJhYmljJ10gPSAweEZFREE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZmhlYnJldyddID0gMHgwNURCO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWZpbml0aWFsYXJhYmljJ10gPSAweEZFREI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZm1lZGlhbGFyYWJpYyddID0gMHhGRURDO1xuICAgICAgICAgICAgICAgICAgICB0WydrYWZyYWZlaGVicmV3J10gPSAweEZCNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thZ3VqYXJhdGknXSA9IDB4MEE5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FndXJtdWtoaSddID0gMHgwQTE1O1xuICAgICAgICAgICAgICAgICAgICB0WydrYWhpcmFnYW5hJ10gPSAweDMwNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thaG9va2N5cmlsbGljJ10gPSAweDA0QzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tha2F0YWthbmEnXSA9IDB4MzBBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjc2O1xuICAgICAgICAgICAgICAgICAgICB0WydrYXBwYSddID0gMHgwM0JBO1xuICAgICAgICAgICAgICAgICAgICB0WydrYXBwYXN5bWJvbGdyZWVrJ10gPSAweDAzRjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thcHllb3VubWlldW1rb3JlYW4nXSA9IDB4MzE3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FweWVvdW5waGlldXBoa29yZWFuJ10gPSAweDMxODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thcHllb3VucGlldXBrb3JlYW4nXSA9IDB4MzE3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FweWVvdW5zc2FuZ3BpZXVwa29yZWFuJ10gPSAweDMxNzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thcm9yaWlzcXVhcmUnXSA9IDB4MzMwRDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FzaGlkYWF1dG9hcmFiaWMnXSA9IDB4MDY0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljJ10gPSAweDA2NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thc21hbGxrYXRha2FuYSddID0gMHgzMEY1O1xuICAgICAgICAgICAgICAgICAgICB0WydrYXNxdWFyZSddID0gMHgzMzg0O1xuICAgICAgICAgICAgICAgICAgICB0WydrYXNyYWFyYWJpYyddID0gMHgwNjUwO1xuICAgICAgICAgICAgICAgICAgICB0WydrYXNyYXRhbmFyYWJpYyddID0gMHgwNjREO1xuICAgICAgICAgICAgICAgICAgICB0WydrYXN0cm9rZWN5cmlsbGljJ10gPSAweDA0OUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2thdGFoaXJhcHJvbG9uZ21hcmtoYWxmd2lkdGgnXSA9IDB4RkY3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljJ10gPSAweDA0OUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tib3BvbW9mbyddID0gMHgzMTBFO1xuICAgICAgICAgICAgICAgICAgICB0WydrY2Fsc3F1YXJlJ10gPSAweDMzODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tjYXJvbiddID0gMHgwMUU5O1xuICAgICAgICAgICAgICAgICAgICB0WydrY2VkaWxsYSddID0gMHgwMTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydrY2lyY2xlJ10gPSAweDI0REE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gMHgwMTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydrZG90YmVsb3cnXSA9IDB4MUUzMztcbiAgICAgICAgICAgICAgICAgICAgdFsna2VoYXJtZW5pYW4nXSA9IDB4MDU4NDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2VoaXJhZ2FuYSddID0gMHgzMDUxO1xuICAgICAgICAgICAgICAgICAgICB0WydrZWthdGFrYW5hJ10gPSAweDMwQjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tla2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2VuYXJtZW5pYW4nXSA9IDB4MDU2RjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2VzbWFsbGthdGFrYW5hJ10gPSAweDMwRjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tncmVlbmxhbmRpYyddID0gMHgwMTM4O1xuICAgICAgICAgICAgICAgICAgICB0WydraGFiZW5nYWxpJ10gPSAweDA5OTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toYWN5cmlsbGljJ10gPSAweDA0NDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toYWRldmEnXSA9IDB4MDkxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhZ3VqYXJhdGknXSA9IDB4MEE5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhZ3VybXVraGknXSA9IDB4MEExNjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhaGFyYWJpYyddID0gMHgwNjJFO1xuICAgICAgICAgICAgICAgICAgICB0WydraGFoZmluYWxhcmFiaWMnXSA9IDB4RkVBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVBNztcbiAgICAgICAgICAgICAgICAgICAgdFsna2hhaG1lZGlhbGFyYWJpYyddID0gMHhGRUE4O1xuICAgICAgICAgICAgICAgICAgICB0WydraGVpY29wdGljJ10gPSAweDAzRTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toaGFkZXZhJ10gPSAweDA5NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toaGFndXJtdWtoaSddID0gMHgwQTU5O1xuICAgICAgICAgICAgICAgICAgICB0WydraGlldWtoYWNpcmNsZWtvcmVhbiddID0gMHgzMjc4O1xuICAgICAgICAgICAgICAgICAgICB0WydraGlldWtoYXBhcmVua29yZWFuJ10gPSAweDMyMTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toaWV1a2hjaXJjbGVrb3JlYW4nXSA9IDB4MzI2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hpZXVraGtvcmVhbiddID0gMHgzMTRCO1xuICAgICAgICAgICAgICAgICAgICB0WydraGlldWtocGFyZW5rb3JlYW4nXSA9IDB4MzIwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hva2hhaXRoYWknXSA9IDB4MEUwMjtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hva2hvbnRoYWknXSA9IDB4MEUwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2hva2h1YXR0aGFpJ10gPSAweDBFMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tob2tod2FpdGhhaSddID0gMHgwRTA0O1xuICAgICAgICAgICAgICAgICAgICB0WydraG9tdXR0aGFpJ10gPSAweDBFNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tob29rJ10gPSAweDAxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tob3Jha2hhbmd0aGFpJ10gPSAweDBFMDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2toenNxdWFyZSddID0gMHgzMzkxO1xuICAgICAgICAgICAgICAgICAgICB0WydraWhpcmFnYW5hJ10gPSAweDMwNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tpa2F0YWthbmEnXSA9IDB4MzBBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2lrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjc3O1xuICAgICAgICAgICAgICAgICAgICB0WydraXJvZ3VyYW11c3F1YXJlJ10gPSAweDMzMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tpcm9tZWV0b3J1c3F1YXJlJ10gPSAweDMzMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tpcm9zcXVhcmUnXSA9IDB4MzMxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsna2l5ZW9rYWNpcmNsZWtvcmVhbiddID0gMHgzMjZFO1xuICAgICAgICAgICAgICAgICAgICB0WydraXllb2thcGFyZW5rb3JlYW4nXSA9IDB4MzIwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2l5ZW9rY2lyY2xla29yZWFuJ10gPSAweDMyNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tpeWVva2tvcmVhbiddID0gMHgzMTMxO1xuICAgICAgICAgICAgICAgICAgICB0WydraXllb2twYXJlbmtvcmVhbiddID0gMHgzMjAwO1xuICAgICAgICAgICAgICAgICAgICB0WydraXllb2tzaW9za29yZWFuJ10gPSAweDMxMzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tqZWN5cmlsbGljJ10gPSAweDA0NUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tsaW5lYmVsb3cnXSA9IDB4MUUzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsna2xzcXVhcmUnXSA9IDB4MzM5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsna21jdWJlZHNxdWFyZSddID0gMHgzM0E2O1xuICAgICAgICAgICAgICAgICAgICB0WydrbW9ub3NwYWNlJ10gPSAweEZGNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ttc3F1YXJlZHNxdWFyZSddID0gMHgzM0EyO1xuICAgICAgICAgICAgICAgICAgICB0Wydrb2hpcmFnYW5hJ10gPSAweDMwNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tvaG1zcXVhcmUnXSA9IDB4MzNDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsna29rYWl0aGFpJ10gPSAweDBFMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tva2F0YWthbmEnXSA9IDB4MzBCMztcbiAgICAgICAgICAgICAgICAgICAgdFsna29rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjdBO1xuICAgICAgICAgICAgICAgICAgICB0Wydrb29wb3NxdWFyZSddID0gMHgzMzFFO1xuICAgICAgICAgICAgICAgICAgICB0Wydrb3BwYWN5cmlsbGljJ10gPSAweDA0ODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tvcmVhbnN0YW5kYXJkc3ltYm9sJ10gPSAweDMyN0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2tvcm9uaXNjbWInXSA9IDB4MDM0MztcbiAgICAgICAgICAgICAgICAgICAgdFsna3BhcmVuJ10gPSAweDI0QTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2twYXNxdWFyZSddID0gMHgzM0FBO1xuICAgICAgICAgICAgICAgICAgICB0Wydrc2ljeXJpbGxpYyddID0gMHgwNDZGO1xuICAgICAgICAgICAgICAgICAgICB0WydrdHNxdWFyZSddID0gMHgzM0NGO1xuICAgICAgICAgICAgICAgICAgICB0WydrdHVybmVkJ10gPSAweDAyOUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2t1aGlyYWdhbmEnXSA9IDB4MzA0RjtcbiAgICAgICAgICAgICAgICAgICAgdFsna3VrYXRha2FuYSddID0gMHgzMEFGO1xuICAgICAgICAgICAgICAgICAgICB0WydrdWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGNzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2t2c3F1YXJlJ10gPSAweDMzQjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2t3c3F1YXJlJ10gPSAweDMzQkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2wnXSA9IDB4MDA2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFiZW5nYWxpJ10gPSAweDA5QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMHgwMTNBO1xuICAgICAgICAgICAgICAgICAgICB0WydsYWRldmEnXSA9IDB4MDkzMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFndWphcmF0aSddID0gMHgwQUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydsYWd1cm11a2hpJ10gPSAweDBBMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xha2toYW5neWFvdGhhaSddID0gMHgwRTQ1O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1hbGVmZmluYWxhcmFiaWMnXSA9IDB4RkVGQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtYWxlZmhhbXphYWJvdmVmaW5hbGFyYWJpYyddID0gMHhGRUY4O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljJ10gPSAweEZFRjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWMnXSA9IDB4RkVGQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtYWxlZmhhbXphYmVsb3dpc29sYXRlZGFyYWJpYyddID0gMHhGRUY5O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1hbGVmaXNvbGF0ZWRhcmFiaWMnXSA9IDB4RkVGQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYyddID0gMHhGRUY2O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1hbGVmbWFkZGFhYm92ZWlzb2xhdGVkYXJhYmljJ10gPSAweEZFRjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWFyYWJpYyddID0gMHgwNjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1iZGEnXSA9IDB4MDNCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtYmRhc3Ryb2tlJ10gPSAweDAxOUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWVkJ10gPSAweDA1REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWVkZGFnZXNoJ10gPSAweEZCM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWVkZGFnZXNoaGVicmV3J10gPSAweEZCM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWVkaGVicmV3J10gPSAweDA1REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWZpbmFsYXJhYmljJ10gPSAweEZFREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xhbWhhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkNDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtaW5pdGlhbGFyYWJpYyddID0gMHhGRURGO1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1qZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGQ0M5O1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1raGFoaW5pdGlhbGFyYWJpYyddID0gMHhGQ0NCO1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1sYW1oZWhpc29sYXRlZGFyYWJpYyddID0gMHhGREYyO1xuICAgICAgICAgICAgICAgICAgICB0WydsYW1tZWRpYWxhcmFiaWMnXSA9IDB4RkVFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtbWVlbWhhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkQ4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFtbWVlbWluaXRpYWxhcmFiaWMnXSA9IDB4RkNDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGFyZ2VjaXJjbGUnXSA9IDB4MjVFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGJhciddID0gMHgwMTlBO1xuICAgICAgICAgICAgICAgICAgICB0WydsYmVsdCddID0gMHgwMjZDO1xuICAgICAgICAgICAgICAgICAgICB0WydsYm9wb21vZm8nXSA9IDB4MzEwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGNhcm9uJ10gPSAweDAxM0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xjZWRpbGxhJ10gPSAweDAxM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xjaXJjbGUnXSA9IDB4MjREQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGNpcmN1bWZsZXhiZWxvdyddID0gMHgxRTNEO1xuICAgICAgICAgICAgICAgICAgICB0WydsY29tbWFhY2NlbnQnXSA9IDB4MDEzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGRvdCddID0gMHgwMTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydsZG90YWNjZW50J10gPSAweDAxNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xkb3RiZWxvdyddID0gMHgxRTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydsZG90YmVsb3dtYWNyb24nXSA9IDB4MUUzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGVmdGFuZ2xlYWJvdmVjbWInXSA9IDB4MDMxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGVmdHRhY2tiZWxvd2NtYiddID0gMHgwMzE4O1xuICAgICAgICAgICAgICAgICAgICB0WydsZXNzJ10gPSAweDAwM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xlc3NlcXVhbCddID0gMHgyMjY0O1xuICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWxvcmdyZWF0ZXInXSA9IDB4MjJEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGVzc21vbm9zcGFjZSddID0gMHhGRjFDO1xuICAgICAgICAgICAgICAgICAgICB0WydsZXNzb3JlcXVpdmFsZW50J10gPSAweDIyNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xlc3NvcmdyZWF0ZXInXSA9IDB4MjI3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGVzc292ZXJlcXVhbCddID0gMHgyMjY2O1xuICAgICAgICAgICAgICAgICAgICB0WydsZXNzc21hbGwnXSA9IDB4RkU2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGV6aCddID0gMHgwMjZFO1xuICAgICAgICAgICAgICAgICAgICB0WydsZmJsb2NrJ10gPSAweDI1OEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xob29rcmV0cm9mbGV4J10gPSAweDAyNkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xpcmEnXSA9IDB4MjBBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGl3bmFybWVuaWFuJ10gPSAweDA1NkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xqJ10gPSAweDAxQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xqZWN5cmlsbGljJ10gPSAweDA0NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xsJ10gPSAweEY2QzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xsYWRldmEnXSA9IDB4MDkzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGxhZ3VqYXJhdGknXSA9IDB4MEFCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbGxpbmViZWxvdyddID0gMHgxRTNCO1xuICAgICAgICAgICAgICAgICAgICB0WydsbGxhZGV2YSddID0gMHgwOTM0O1xuICAgICAgICAgICAgICAgICAgICB0WydsbHZvY2FsaWNiZW5nYWxpJ10gPSAweDA5RTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xsdm9jYWxpY2RldmEnXSA9IDB4MDk2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbGx2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydsbHZvY2FsaWN2b3dlbHNpZ25kZXZhJ10gPSAweDA5NjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xtaWRkbGV0aWxkZSddID0gMHgwMjZCO1xuICAgICAgICAgICAgICAgICAgICB0WydsbW9ub3NwYWNlJ10gPSAweEZGNEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xtc3F1YXJlJ10gPSAweDMzRDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvY2h1bGF0aGFpJ10gPSAweDBFMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvZ2ljYWxhbmQnXSA9IDB4MjIyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gMHgwMEFDO1xuICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90cmV2ZXJzZWQnXSA9IDB4MjMxMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG9yJ10gPSAweDIyMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvbGluZ3RoYWknXSA9IDB4MEUyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbG9uZ3MnXSA9IDB4MDE3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbG93bGluZWNlbnRlcmxpbmUnXSA9IDB4RkU0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbG93bGluZWNtYiddID0gMHgwMzMyO1xuICAgICAgICAgICAgICAgICAgICB0Wydsb3dsaW5lZGFzaGVkJ10gPSAweEZFNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDB4MjVDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbHBhcmVuJ10gPSAweDI0QTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMHgwMTQyO1xuICAgICAgICAgICAgICAgICAgICB0Wydsc3F1YXJlJ10gPSAweDIxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xzdXBlcmlvciddID0gMHhGNkVFO1xuICAgICAgICAgICAgICAgICAgICB0WydsdHNoYWRlJ10gPSAweDI1OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2x1dGhhaSddID0gMHgwRTI2O1xuICAgICAgICAgICAgICAgICAgICB0Wydsdm9jYWxpY2JlbmdhbGknXSA9IDB4MDk4QztcbiAgICAgICAgICAgICAgICAgICAgdFsnbHZvY2FsaWNkZXZhJ10gPSAweDA5MEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2x2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUUyO1xuICAgICAgICAgICAgICAgICAgICB0Wydsdm9jYWxpY3Zvd2Vsc2lnbmRldmEnXSA9IDB4MDk2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbHhzcXVhcmUnXSA9IDB4MzNEMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbSddID0gMHgwMDZEO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWJlbmdhbGknXSA9IDB4MDlBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFjcm9uJ10gPSAweDAwQUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbmJlbG93Y21iJ10gPSAweDAzMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbmNtYiddID0gMHgwMzA0O1xuICAgICAgICAgICAgICAgICAgICB0WydtYWNyb25sb3dtb2QnXSA9IDB4MDJDRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFjcm9ubW9ub3NwYWNlJ10gPSAweEZGRTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hY3V0ZSddID0gMHgxRTNGO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWRldmEnXSA9IDB4MDkyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFndWphcmF0aSddID0gMHgwQUFFO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWd1cm11a2hpJ10gPSAweDBBMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haGFwYWtoaGVicmV3J10gPSAweDA1QTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haGFwYWtobGVmdGhlYnJldyddID0gMHgwNUE0O1xuICAgICAgICAgICAgICAgICAgICB0WydtYWhpcmFnYW5hJ10gPSAweDMwN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWNoYXR0YXdhbG93bGVmdHRoYWknXSA9IDB4Rjg5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpY2hhdHRhd2Fsb3dyaWdodHRoYWknXSA9IDB4Rjg5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpY2hhdHRhd2F0aGFpJ10gPSAweDBFNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaSddID0gMHhGODkzO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWlla2xvd2xlZnR0aGFpJ10gPSAweEY4OEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWVrbG93cmlnaHR0aGFpJ10gPSAweEY4OEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWVrdGhhaSddID0gMHgwRTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WydtYWlla3VwcGVybGVmdHRoYWknXSA9IDB4Rjg4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpaGFuYWthdGxlZnR0aGFpJ10gPSAweEY4ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haWhhbmFrYXR0aGFpJ10gPSAweDBFMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haXRhaWtodWxlZnR0aGFpJ10gPSAweEY4ODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haXRhaWtodXRoYWknXSA9IDB4MEU0NztcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpdGhvbG93bGVmdHRoYWknXSA9IDB4Rjg4RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpdGhvbG93cmlnaHR0aGFpJ10gPSAweEY4OEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haXRob3RoYWknXSA9IDB4MEU0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpdGhvdXBwZXJsZWZ0dGhhaSddID0gMHhGODhEO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWl0cmlsb3dsZWZ0dGhhaSddID0gMHhGODkyO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWl0cmlsb3dyaWdodHRoYWknXSA9IDB4Rjg5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFpdHJpdGhhaSddID0gMHgwRTRBO1xuICAgICAgICAgICAgICAgICAgICB0WydtYWl0cml1cHBlcmxlZnR0aGFpJ10gPSAweEY4OTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21haXlhbW9rdGhhaSddID0gMHgwRTQ2O1xuICAgICAgICAgICAgICAgICAgICB0WydtYWthdGFrYW5hJ10gPSAweDMwREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21ha2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFsZSddID0gMHgyNjQyO1xuICAgICAgICAgICAgICAgICAgICB0WydtYW5zeW9uc3F1YXJlJ10gPSAweDMzNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hcWFmaGVicmV3J10gPSAweDA1QkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hcnMnXSA9IDB4MjY0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWFzb3JhY2lyY2xlaGVicmV3J10gPSAweDA1QUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21hc3F1YXJlJ10gPSAweDMzODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21ib3BvbW9mbyddID0gMHgzMTA3O1xuICAgICAgICAgICAgICAgICAgICB0WydtYnNxdWFyZSddID0gMHgzM0Q0O1xuICAgICAgICAgICAgICAgICAgICB0WydtY2lyY2xlJ10gPSAweDI0REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21jdWJlZHNxdWFyZSddID0gMHgzM0E1O1xuICAgICAgICAgICAgICAgICAgICB0WydtZG90YWNjZW50J10gPSAweDFFNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21kb3RiZWxvdyddID0gMHgxRTQzO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWVtYXJhYmljJ10gPSAweDA2NDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lZW1maW5hbGFyYWJpYyddID0gMHhGRUUyO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGRUUzO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWVtbWVkaWFsYXJhYmljJ10gPSAweEZFRTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lZW1tZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGQ0QxO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWVtbWVlbWlzb2xhdGVkYXJhYmljJ10gPSAweEZDNDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lZXRvcnVzcXVhcmUnXSA9IDB4MzM0RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWVoaXJhZ2FuYSddID0gMHgzMDgxO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWl6aWVyYXNxdWFyZSddID0gMHgzMzdFO1xuICAgICAgICAgICAgICAgICAgICB0WydtZWthdGFrYW5hJ10gPSAweDMwRTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21la2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWVtJ10gPSAweDA1REU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lbWRhZ2VzaCddID0gMHhGQjNFO1xuICAgICAgICAgICAgICAgICAgICB0WydtZW1kYWdlc2hoZWJyZXcnXSA9IDB4RkIzRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWVtaGVicmV3J10gPSAweDA1REU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lbmFybWVuaWFuJ10gPSAweDA1NzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21lcmtoYWhlYnJldyddID0gMHgwNUE1O1xuICAgICAgICAgICAgICAgICAgICB0WydtZXJraGFrZWZ1bGFoZWJyZXcnXSA9IDB4MDVBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWVya2hha2VmdWxhbGVmdGhlYnJldyddID0gMHgwNUE2O1xuICAgICAgICAgICAgICAgICAgICB0WydtZXJraGFsZWZ0aGVicmV3J10gPSAweDA1QTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21ob29rJ10gPSAweDAyNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21oenNxdWFyZSddID0gMHgzMzkyO1xuICAgICAgICAgICAgICAgICAgICB0WydtaWRkbGVkb3RrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjY1O1xuICAgICAgICAgICAgICAgICAgICB0WydtaWRkb3QnXSA9IDB4MDBCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnbWlldW1hY2lyY2xla29yZWFuJ10gPSAweDMyNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVtYXBhcmVua29yZWFuJ10gPSAweDMyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVtY2lyY2xla29yZWFuJ10gPSAweDMyNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVta29yZWFuJ10gPSAweDMxNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVtcGFuc2lvc2tvcmVhbiddID0gMHgzMTcwO1xuICAgICAgICAgICAgICAgICAgICB0WydtaWV1bXBhcmVua29yZWFuJ10gPSAweDMyMDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pZXVtcGlldXBrb3JlYW4nXSA9IDB4MzE2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWlldW1zaW9za29yZWFuJ10gPSAweDMxNkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21paGlyYWdhbmEnXSA9IDB4MzA3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWlrYXRha2FuYSddID0gMHgzMERGO1xuICAgICAgICAgICAgICAgICAgICB0WydtaWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pbnVzJ10gPSAweDIyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pbnVzYmVsb3djbWInXSA9IDB4MDMyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWludXNjaXJjbGUnXSA9IDB4MjI5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWludXNtb2QnXSA9IDB4MDJENztcbiAgICAgICAgICAgICAgICAgICAgdFsnbWludXNwbHVzJ10gPSAweDIyMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21pbnV0ZSddID0gMHgyMDMyO1xuICAgICAgICAgICAgICAgICAgICB0WydtaXJpYmFhcnVzcXVhcmUnXSA9IDB4MzM0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbWlyaXNxdWFyZSddID0gMHgzMzQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydtbG9uZ2xlZ3R1cm5lZCddID0gMHgwMjcwO1xuICAgICAgICAgICAgICAgICAgICB0WydtbHNxdWFyZSddID0gMHgzMzk2O1xuICAgICAgICAgICAgICAgICAgICB0WydtbWN1YmVkc3F1YXJlJ10gPSAweDMzQTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21tb25vc3BhY2UnXSA9IDB4RkY0RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbW1zcXVhcmVkc3F1YXJlJ10gPSAweDMzOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21vaGlyYWdhbmEnXSA9IDB4MzA4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbW9obXNxdWFyZSddID0gMHgzM0MxO1xuICAgICAgICAgICAgICAgICAgICB0Wydtb2thdGFrYW5hJ10gPSAweDMwRTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21va2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnbW9sc3F1YXJlJ10gPSAweDMzRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21vbWF0aGFpJ10gPSAweDBFMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21vdmVyc3NxdWFyZSddID0gMHgzM0E3O1xuICAgICAgICAgICAgICAgICAgICB0Wydtb3ZlcnNzcXVhcmVkc3F1YXJlJ10gPSAweDMzQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ21wYXJlbiddID0gMHgyNEE4O1xuICAgICAgICAgICAgICAgICAgICB0WydtcGFzcXVhcmUnXSA9IDB4MzNBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXNzcXVhcmUnXSA9IDB4MzNCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbXN1cGVyaW9yJ10gPSAweEY2RUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ210dXJuZWQnXSA9IDB4MDI2RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXUnXSA9IDB4MDBCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXUxJ10gPSAweDAwQjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211YXNxdWFyZSddID0gMHgzMzgyO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWNoZ3JlYXRlciddID0gMHgyMjZCO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWNobGVzcyddID0gMHgyMjZBO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWZzcXVhcmUnXSA9IDB4MzM4QztcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVncmVlayddID0gMHgwM0JDO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWdzcXVhcmUnXSA9IDB4MzM4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVoaXJhZ2FuYSddID0gMHgzMDgwO1xuICAgICAgICAgICAgICAgICAgICB0WydtdWthdGFrYW5hJ10gPSAweDMwRTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211a2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVsc3F1YXJlJ10gPSAweDMzOTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211bHRpcGx5J10gPSAweDAwRDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211bXNxdWFyZSddID0gMHgzMzlCO1xuICAgICAgICAgICAgICAgICAgICB0WydtdW5haGhlYnJldyddID0gMHgwNUEzO1xuICAgICAgICAgICAgICAgICAgICB0WydtdW5haGxlZnRoZWJyZXcnXSA9IDB4MDVBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVzaWNhbG5vdGUnXSA9IDB4MjY2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVzaWNhbG5vdGVkYmwnXSA9IDB4MjY2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXVzaWNmbGF0c2lnbiddID0gMHgyNjZEO1xuICAgICAgICAgICAgICAgICAgICB0WydtdXNpY3NoYXJwc2lnbiddID0gMHgyNjZGO1xuICAgICAgICAgICAgICAgICAgICB0WydtdXNzcXVhcmUnXSA9IDB4MzNCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXV2c3F1YXJlJ10gPSAweDMzQjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ211d3NxdWFyZSddID0gMHgzM0JDO1xuICAgICAgICAgICAgICAgICAgICB0Wydtdm1lZ2FzcXVhcmUnXSA9IDB4MzNCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbXZzcXVhcmUnXSA9IDB4MzNCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnbXdtZWdhc3F1YXJlJ10gPSAweDMzQkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ213c3F1YXJlJ10gPSAweDMzQkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ24nXSA9IDB4MDA2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmFiZW5nYWxpJ10gPSAweDA5QTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25hYmxhJ10gPSAweDIyMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25hY3V0ZSddID0gMHgwMTQ0O1xuICAgICAgICAgICAgICAgICAgICB0WyduYWRldmEnXSA9IDB4MDkyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmFndWphcmF0aSddID0gMHgwQUE4O1xuICAgICAgICAgICAgICAgICAgICB0WyduYWd1cm11a2hpJ10gPSAweDBBMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25haGlyYWdhbmEnXSA9IDB4MzA2QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmFrYXRha2FuYSddID0gMHgzMENBO1xuICAgICAgICAgICAgICAgICAgICB0WyduYWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25hcG9zdHJvcGhlJ10gPSAweDAxNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25hc3F1YXJlJ10gPSAweDMzODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25ib3BvbW9mbyddID0gMHgzMTBCO1xuICAgICAgICAgICAgICAgICAgICB0WyduYnNwYWNlJ10gPSAweDAwQTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gMHgwMTQ4O1xuICAgICAgICAgICAgICAgICAgICB0WyduY2VkaWxsYSddID0gMHgwMTQ2O1xuICAgICAgICAgICAgICAgICAgICB0WyduY2lyY2xlJ10gPSAweDI0REQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25jaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmNvbW1hYWNjZW50J10gPSAweDAxNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25kb3RhY2NlbnQnXSA9IDB4MUU0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmRvdGJlbG93J10gPSAweDFFNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25laGlyYWdhbmEnXSA9IDB4MzA2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmVrYXRha2FuYSddID0gMHgzMENEO1xuICAgICAgICAgICAgICAgICAgICB0WyduZWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25ld3NoZXFlbHNpZ24nXSA9IDB4MjBBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmZzcXVhcmUnXSA9IDB4MzM4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmdhYmVuZ2FsaSddID0gMHgwOTk5O1xuICAgICAgICAgICAgICAgICAgICB0WyduZ2FkZXZhJ10gPSAweDA5MTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25nYWd1amFyYXRpJ10gPSAweDBBOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25nYWd1cm11a2hpJ10gPSAweDBBMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25nb25ndXRoYWknXSA9IDB4MEUwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnbmhpcmFnYW5hJ10gPSAweDMwOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25ob29rbGVmdCddID0gMHgwMjcyO1xuICAgICAgICAgICAgICAgICAgICB0WyduaG9va3JldHJvZmxleCddID0gMHgwMjczO1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bmFjaXJjbGVrb3JlYW4nXSA9IDB4MzI2RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmlldW5hcGFyZW5rb3JlYW4nXSA9IDB4MzIwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmlldW5jaWV1Y2tvcmVhbiddID0gMHgzMTM1O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bmNpcmNsZWtvcmVhbiddID0gMHgzMjYxO1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bmhpZXVoa29yZWFuJ10gPSAweDMxMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pZXVua29yZWFuJ10gPSAweDMxMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pZXVucGFuc2lvc2tvcmVhbiddID0gMHgzMTY4O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bnBhcmVua29yZWFuJ10gPSAweDMyMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pZXVuc2lvc2tvcmVhbiddID0gMHgzMTY3O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWV1bnRpa2V1dGtvcmVhbiddID0gMHgzMTY2O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWhpcmFnYW5hJ10gPSAweDMwNkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pa2F0YWthbmEnXSA9IDB4MzBDQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmlrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjg2O1xuICAgICAgICAgICAgICAgICAgICB0WyduaWtoYWhpdGxlZnR0aGFpJ10gPSAweEY4OTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pa2hhaGl0dGhhaSddID0gMHgwRTREO1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lJ10gPSAweDAwMzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVhcmFiaWMnXSA9IDB4MDY2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZWJlbmdhbGknXSA9IDB4MDlFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZWNpcmNsZSddID0gMHgyNDY4O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZiddID0gMHgyNzkyO1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lZGV2YSddID0gMHgwOTZGO1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lZ3VqYXJhdGknXSA9IDB4MEFFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZWd1cm11a2hpJ10gPSAweDBBNkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVoYWNrYXJhYmljJ10gPSAweDA2Njk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVoYW5nemhvdSddID0gMHgzMDI5O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5laWRlb2dyYXBoaWNwYXJlbiddID0gMHgzMjI4O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5laW5mZXJpb3InXSA9IDB4MjA4OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZW1vbm9zcGFjZSddID0gMHhGRjE5O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5lb2xkc3R5bGUnXSA9IDB4RjczOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZXBhcmVuJ10gPSAweDI0N0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVwZXJpb2QnXSA9IDB4MjQ5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZXBlcnNpYW4nXSA9IDB4MDZGOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmluZXJvbWFuJ10gPSAweDIxNzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmVzdXBlcmlvciddID0gMHgyMDc5O1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5ldGVlbmNpcmNsZSddID0gMHgyNDcyO1xuICAgICAgICAgICAgICAgICAgICB0WyduaW5ldGVlbnBhcmVuJ10gPSAweDI0ODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmV0ZWVucGVyaW9kJ10gPSAweDI0OUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25pbmV0aGFpJ10gPSAweDBFNTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25qJ10gPSAweDAxQ0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25qZWN5cmlsbGljJ10gPSAweDA0NUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25rYXRha2FuYSddID0gMHgzMEYzO1xuICAgICAgICAgICAgICAgICAgICB0Wydua2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbmxlZ3JpZ2h0bG9uZyddID0gMHgwMTlFO1xuICAgICAgICAgICAgICAgICAgICB0WydubGluZWJlbG93J10gPSAweDFFNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25tb25vc3BhY2UnXSA9IDB4RkY0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm1zcXVhcmUnXSA9IDB4MzM5QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm5hYmVuZ2FsaSddID0gMHgwOUEzO1xuICAgICAgICAgICAgICAgICAgICB0WydubmFkZXZhJ10gPSAweDA5MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25uYWd1amFyYXRpJ10gPSAweDBBQTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25uYWd1cm11a2hpJ10gPSAweDBBMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25ubmFkZXZhJ10gPSAweDA5Mjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vaGlyYWdhbmEnXSA9IDB4MzA2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9rYXRha2FuYSddID0gMHgzMENFO1xuICAgICAgICAgICAgICAgICAgICB0Wydub2thdGFrYW5haGFsZndpZHRoJ10gPSAweEZGODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vbmJyZWFraW5nc3BhY2UnXSA9IDB4MDBBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9uZW50aGFpJ10gPSAweDBFMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vbnV0aGFpJ10gPSAweDBFMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25hcmFiaWMnXSA9IDB4MDY0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9vbmZpbmFsYXJhYmljJ10gPSAweEZFRTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25naHVubmFhcmFiaWMnXSA9IDB4MDZCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9vbmdodW5uYWZpbmFsYXJhYmljJ10gPSAweEZCOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25pbml0aWFsYXJhYmljJ10gPSAweEZFRTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25qZWVtaW5pdGlhbGFyYWJpYyddID0gMHhGQ0QyO1xuICAgICAgICAgICAgICAgICAgICB0Wydub29uamVlbWlzb2xhdGVkYXJhYmljJ10gPSAweEZDNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25tZWRpYWxhcmFiaWMnXSA9IDB4RkVFODtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9vbm1lZW1pbml0aWFsYXJhYmljJ10gPSAweEZDRDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vb25tZWVtaXNvbGF0ZWRhcmFiaWMnXSA9IDB4RkM0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm9vbm5vb25maW5hbGFyYWJpYyddID0gMHhGQzhEO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3Rjb250YWlucyddID0gMHgyMjBDO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RlbGVtZW50J10gPSAweDIyMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vdGVsZW1lbnRvZiddID0gMHgyMjA5O1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RlcXVhbCddID0gMHgyMjYwO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RncmVhdGVyJ10gPSAweDIyNkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vdGdyZWF0ZXJub3JlcXVhbCddID0gMHgyMjcxO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RncmVhdGVybm9ybGVzcyddID0gMHgyMjc5O1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RpZGVudGljYWwnXSA9IDB4MjI2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm90bGVzcyddID0gMHgyMjZFO1xuICAgICAgICAgICAgICAgICAgICB0Wydub3RsZXNzbm9yZXF1YWwnXSA9IDB4MjI3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm90cGFyYWxsZWwnXSA9IDB4MjIyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm90cHJlY2VkZXMnXSA9IDB4MjI4MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbm90c3Vic2V0J10gPSAweDIyODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vdHN1Y2NlZWRzJ10gPSAweDIyODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vdHN1cGVyc2V0J10gPSAweDIyODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25vd2FybWVuaWFuJ10gPSAweDA1NzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ25wYXJlbiddID0gMHgyNEE5O1xuICAgICAgICAgICAgICAgICAgICB0Wyduc3NxdWFyZSddID0gMHgzM0IxO1xuICAgICAgICAgICAgICAgICAgICB0Wyduc3VwZXJpb3InXSA9IDB4MjA3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSAweDAwRjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251J10gPSAweDAzQkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251aGlyYWdhbmEnXSA9IDB4MzA2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVrYXRha2FuYSddID0gMHgzMENDO1xuICAgICAgICAgICAgICAgICAgICB0WydudWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251a3RhYmVuZ2FsaSddID0gMHgwOUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydudWt0YWRldmEnXSA9IDB4MDkzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVrdGFndWphcmF0aSddID0gMHgwQUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydudWt0YWd1cm11a2hpJ10gPSAweDBBM0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251bWJlcnNpZ24nXSA9IDB4MDAyMztcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVtYmVyc2lnbm1vbm9zcGFjZSddID0gMHhGRjAzO1xuICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduc21hbGwnXSA9IDB4RkU1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVtZXJhbHNpZ25ncmVlayddID0gMHgwMzc0O1xuICAgICAgICAgICAgICAgICAgICB0WydudW1lcmFsc2lnbmxvd2VyZ3JlZWsnXSA9IDB4MDM3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVtZXJvJ10gPSAweDIxMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251biddID0gMHgwNUUwO1xuICAgICAgICAgICAgICAgICAgICB0WydudW5kYWdlc2gnXSA9IDB4RkI0MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnVuZGFnZXNoaGVicmV3J10gPSAweEZCNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ251bmhlYnJldyddID0gMHgwNUUwO1xuICAgICAgICAgICAgICAgICAgICB0WydudnNxdWFyZSddID0gMHgzM0I1O1xuICAgICAgICAgICAgICAgICAgICB0Wydud3NxdWFyZSddID0gMHgzM0JCO1xuICAgICAgICAgICAgICAgICAgICB0WydueWFiZW5nYWxpJ10gPSAweDA5OUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ255YWRldmEnXSA9IDB4MDkxRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnlhZ3VqYXJhdGknXSA9IDB4MEE5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbnlhZ3VybXVraGknXSA9IDB4MEExRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnbyddID0gMHgwMDZGO1xuICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDB4MDBGMztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2FuZ3RoYWknXSA9IDB4MEUyRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2JhcnJlZCddID0gMHgwMjc1O1xuICAgICAgICAgICAgICAgICAgICB0WydvYmFycmVkY3lyaWxsaWMnXSA9IDB4MDRFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2JhcnJlZGRpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRFQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2JlbmdhbGknXSA9IDB4MDk5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2JvcG9tb2ZvJ10gPSAweDMxMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29icmV2ZSddID0gMHgwMTRGO1xuICAgICAgICAgICAgICAgICAgICB0WydvY2FuZHJhZGV2YSddID0gMHgwOTExO1xuICAgICAgICAgICAgICAgICAgICB0WydvY2FuZHJhZ3VqYXJhdGknXSA9IDB4MEE5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2NhbmRyYXZvd2Vsc2lnbmRldmEnXSA9IDB4MDk0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jYXJvbiddID0gMHgwMUQyO1xuICAgICAgICAgICAgICAgICAgICB0WydvY2lyY2xlJ10gPSAweDI0REU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSAweDAwRjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4YWN1dGUnXSA9IDB4MUVEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2NpcmN1bWZsZXhkb3RiZWxvdyddID0gMHgxRUQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleGdyYXZlJ10gPSAweDFFRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4aG9va2Fib3ZlJ10gPSAweDFFRDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4dGlsZGUnXSA9IDB4MUVENztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2N5cmlsbGljJ10gPSAweDA0M0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29kYmxhY3V0ZSddID0gMHgwMTUxO1xuICAgICAgICAgICAgICAgICAgICB0WydvZGJsZ3JhdmUnXSA9IDB4MDIwRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2RldmEnXSA9IDB4MDkxMztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSAweDAwRjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29kaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0RTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29kb3RiZWxvdyddID0gMHgxRUNEO1xuICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gMHgwMTUzO1xuICAgICAgICAgICAgICAgICAgICB0WydvZWtvcmVhbiddID0gMHgzMTVBO1xuICAgICAgICAgICAgICAgICAgICB0WydvZ29uZWsnXSA9IDB4MDJEQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2dvbmVrY21iJ10gPSAweDAzMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29ncmF2ZSddID0gMHgwMEYyO1xuICAgICAgICAgICAgICAgICAgICB0WydvZ3VqYXJhdGknXSA9IDB4MEE5MztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2hhcm1lbmlhbiddID0gMHgwNTg1O1xuICAgICAgICAgICAgICAgICAgICB0WydvaGlyYWdhbmEnXSA9IDB4MzA0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2hvb2thYm92ZSddID0gMHgxRUNGO1xuICAgICAgICAgICAgICAgICAgICB0WydvaG9ybiddID0gMHgwMUExO1xuICAgICAgICAgICAgICAgICAgICB0WydvaG9ybmFjdXRlJ10gPSAweDFFREI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29ob3JuZG90YmVsb3cnXSA9IDB4MUVFMztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2hvcm5ncmF2ZSddID0gMHgxRUREO1xuICAgICAgICAgICAgICAgICAgICB0WydvaG9ybmhvb2thYm92ZSddID0gMHgxRURGO1xuICAgICAgICAgICAgICAgICAgICB0WydvaG9ybnRpbGRlJ10gPSAweDFFRTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDB4MDE1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2knXSA9IDB4MDFBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnb2ludmVydGVkYnJldmUnXSA9IDB4MDIwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb2thdGFrYW5hJ10gPSAweDMwQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjc1O1xuICAgICAgICAgICAgICAgICAgICB0Wydva29yZWFuJ10gPSAweDMxNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29sZWhlYnJldyddID0gMHgwNUFCO1xuICAgICAgICAgICAgICAgICAgICB0WydvbWFjcm9uJ10gPSAweDAxNEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tYWNyb25hY3V0ZSddID0gMHgxRTUzO1xuICAgICAgICAgICAgICAgICAgICB0WydvbWFjcm9uZ3JhdmUnXSA9IDB4MUU1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb21kZXZhJ10gPSAweDA5NTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhJ10gPSAweDAzQzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhMSddID0gMHgwM0Q2O1xuICAgICAgICAgICAgICAgICAgICB0WydvbWVnYWN5cmlsbGljJ10gPSAweDA0NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhbGF0aW5jbG9zZWQnXSA9IDB4MDI3NztcbiAgICAgICAgICAgICAgICAgICAgdFsnb21lZ2Fyb3VuZGN5cmlsbGljJ10gPSAweDA0N0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhdGl0bG9jeXJpbGxpYyddID0gMHgwNDdEO1xuICAgICAgICAgICAgICAgICAgICB0WydvbWVnYXRvbm9zJ10gPSAweDAzQ0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29tZ3VqYXJhdGknXSA9IDB4MEFEMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb21pY3JvbiddID0gMHgwM0JGO1xuICAgICAgICAgICAgICAgICAgICB0WydvbWljcm9udG9ub3MnXSA9IDB4MDNDQztcbiAgICAgICAgICAgICAgICAgICAgdFsnb21vbm9zcGFjZSddID0gMHhGRjRGO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmUnXSA9IDB4MDAzMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lYXJhYmljJ10gPSAweDA2NjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWJlbmdhbGknXSA9IDB4MDlFNztcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lY2lyY2xlJ10gPSAweDI0NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWNpcmNsZWludmVyc2VzYW5zc2VyaWYnXSA9IDB4Mjc4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lZGV2YSddID0gMHgwOTY3O1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVkb3RlbmxlYWRlciddID0gMHgyMDI0O1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVlaWdodGgnXSA9IDB4MjE1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lZml0dGVkJ10gPSAweEY2REM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWd1amFyYXRpJ10gPSAweDBBRTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWd1cm11a2hpJ10gPSAweDBBNjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWhhY2thcmFiaWMnXSA9IDB4MDY2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gMHgwMEJEO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVoYW5nemhvdSddID0gMHgzMDIxO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVpZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZWluZmVyaW9yJ10gPSAweDIwODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZW1vbm9zcGFjZSddID0gMHhGRjExO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVudW1lcmF0b3JiZW5nYWxpJ10gPSAweDA5RjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZW9sZHN0eWxlJ10gPSAweEY3MzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZXBhcmVuJ10gPSAweDI0NzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZXBlcmlvZCddID0gMHgyNDg4O1xuICAgICAgICAgICAgICAgICAgICB0WydvbmVwZXJzaWFuJ10gPSAweDA2RjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29uZXF1YXJ0ZXInXSA9IDB4MDBCQztcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lcm9tYW4nXSA9IDB4MjE3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDB4MDBCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb25ldGhhaSddID0gMHgwRTUxO1xuICAgICAgICAgICAgICAgICAgICB0WydvbmV0aGlyZCddID0gMHgyMTUzO1xuICAgICAgICAgICAgICAgICAgICB0Wydvb2dvbmVrJ10gPSAweDAxRUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29vZ29uZWttYWNyb24nXSA9IDB4MDFFRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb29ndXJtdWtoaSddID0gMHgwQTEzO1xuICAgICAgICAgICAgICAgICAgICB0Wydvb21hdHJhZ3VybXVraGknXSA9IDB4MEE0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb29wZW4nXSA9IDB4MDI1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3BhcmVuJ10gPSAweDI0QUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29wZW5idWxsZXQnXSA9IDB4MjVFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3B0aW9uJ10gPSAweDIzMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29yZGZlbWluaW5lJ10gPSAweDAwQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29yZG1hc2N1bGluZSddID0gMHgwMEJBO1xuICAgICAgICAgICAgICAgICAgICB0WydvcnRob2dvbmFsJ10gPSAweDIyMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29zaG9ydGRldmEnXSA9IDB4MDkxMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3Nob3J0dm93ZWxzaWduZGV2YSddID0gMHgwOTRBO1xuICAgICAgICAgICAgICAgICAgICB0Wydvc2xhc2gnXSA9IDB4MDBGODtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoYWN1dGUnXSA9IDB4MDFGRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3NtYWxsaGlyYWdhbmEnXSA9IDB4MzA0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3NtYWxsa2F0YWthbmEnXSA9IDB4MzBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3NtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnb3N0cm9rZWFjdXRlJ10gPSAweDAxRkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ29zdXBlcmlvciddID0gMHhGNkYwO1xuICAgICAgICAgICAgICAgICAgICB0WydvdGN5cmlsbGljJ10gPSAweDA0N0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ290aWxkZSddID0gMHgwMEY1O1xuICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGVhY3V0ZSddID0gMHgxRTREO1xuICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGVkaWVyZXNpcyddID0gMHgxRTRGO1xuICAgICAgICAgICAgICAgICAgICB0WydvdWJvcG9tb2ZvJ10gPSAweDMxMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ292ZXJsaW5lJ10gPSAweDIwM0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ292ZXJsaW5lY2VudGVybGluZSddID0gMHhGRTRBO1xuICAgICAgICAgICAgICAgICAgICB0WydvdmVybGluZWNtYiddID0gMHgwMzA1O1xuICAgICAgICAgICAgICAgICAgICB0WydvdmVybGluZWRhc2hlZCddID0gMHhGRTQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydvdmVybGluZWRibHdhdnknXSA9IDB4RkU0QztcbiAgICAgICAgICAgICAgICAgICAgdFsnb3ZlcmxpbmV3YXZ5J10gPSAweEZFNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ292ZXJzY29yZSddID0gMHgwMEFGO1xuICAgICAgICAgICAgICAgICAgICB0Wydvdm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUNCO1xuICAgICAgICAgICAgICAgICAgICB0Wydvdm93ZWxzaWduZGV2YSddID0gMHgwOTRCO1xuICAgICAgICAgICAgICAgICAgICB0Wydvdm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncCddID0gMHgwMDcwO1xuICAgICAgICAgICAgICAgICAgICB0WydwYWFtcHNzcXVhcmUnXSA9IDB4MzM4MDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFhc2VudG9zcXVhcmUnXSA9IDB4MzMyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFiZW5nYWxpJ10gPSAweDA5QUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhY3V0ZSddID0gMHgxRTU1O1xuICAgICAgICAgICAgICAgICAgICB0WydwYWRldmEnXSA9IDB4MDkyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFnZWRvd24nXSA9IDB4MjFERjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFnZXVwJ10gPSAweDIxREU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhZ3VqYXJhdGknXSA9IDB4MEFBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFndXJtdWtoaSddID0gMHgwQTJBO1xuICAgICAgICAgICAgICAgICAgICB0WydwYWhpcmFnYW5hJ10gPSAweDMwNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhaXlhbm5vaXRoYWknXSA9IDB4MEUyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFrYXRha2FuYSddID0gMHgzMEQxO1xuICAgICAgICAgICAgICAgICAgICB0WydwYWxhdGFsaXphdGlvbmN5cmlsbGljY21iJ10gPSAweDA0ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhbG9jaGthY3lyaWxsaWMnXSA9IDB4MDRDMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFuc2lvc2tvcmVhbiddID0gMHgzMTdGO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDB4MDBCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyYWxsZWwnXSA9IDB4MjIyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAweDAwMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdGFsdG9uZWFyYWJpYyddID0gMHhGRDNFO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRidCddID0gMHhGOEVEO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRleCddID0gMHhGOEVDO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRpbmZlcmlvciddID0gMHgyMDhEO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRtb25vc3BhY2UnXSA9IDB4RkYwODtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0c21hbGwnXSA9IDB4RkU1OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0c3VwZXJpb3InXSA9IDB4MjA3RDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0dHAnXSA9IDB4RjhFQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0dmVydGljYWwnXSA9IDB4RkUzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodCddID0gMHgwMDI5O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0YWx0b25lYXJhYmljJ10gPSAweEZEM0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRidCddID0gMHhGOEY4O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0ZXgnXSA9IDB4RjhGNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodGluZmVyaW9yJ10gPSAweDIwOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRtb25vc3BhY2UnXSA9IDB4RkYwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodHNtYWxsJ10gPSAweEZFNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRzdXBlcmlvciddID0gMHgyMDdFO1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0dHAnXSA9IDB4RjhGNjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodHZlcnRpY2FsJ10gPSAweEZFMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcnRpYWxkaWZmJ10gPSAweDIyMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bhc2VxaGVicmV3J10gPSAweDA1QzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bhc2h0YWhlYnJldyddID0gMHgwNTk5O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXNxdWFyZSddID0gMHgzM0E5O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaCddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaDExJ10gPSAweDA1Qjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhdGFoMWQnXSA9IDB4MDVCNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGF0YWgyYSddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaGhlYnJldyddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaG5hcnJvd2hlYnJldyddID0gMHgwNUI3O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXRhaHF1YXJ0ZXJoZWJyZXcnXSA9IDB4MDVCNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGF0YWh3aWRlaGVicmV3J10gPSAweDA1Qjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhemVyaGVicmV3J10gPSAweDA1QTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bib3BvbW9mbyddID0gMHgzMTA2O1xuICAgICAgICAgICAgICAgICAgICB0WydwY2lyY2xlJ10gPSAweDI0REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bkb3RhY2NlbnQnXSA9IDB4MUU1NztcbiAgICAgICAgICAgICAgICAgICAgdFsncGUnXSA9IDB4MDVFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVjeXJpbGxpYyddID0gMHgwNDNGO1xuICAgICAgICAgICAgICAgICAgICB0WydwZWRhZ2VzaCddID0gMHhGQjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydwZWRhZ2VzaGhlYnJldyddID0gMHhGQjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydwZWV6aXNxdWFyZSddID0gMHgzMzNCO1xuICAgICAgICAgICAgICAgICAgICB0WydwZWZpbmFsZGFnZXNoaGVicmV3J10gPSAweEZCNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlaGFyYWJpYyddID0gMHgwNjdFO1xuICAgICAgICAgICAgICAgICAgICB0WydwZWhhcm1lbmlhbiddID0gMHgwNTdBO1xuICAgICAgICAgICAgICAgICAgICB0WydwZWhlYnJldyddID0gMHgwNUU0O1xuICAgICAgICAgICAgICAgICAgICB0WydwZWhmaW5hbGFyYWJpYyddID0gMHhGQjU3O1xuICAgICAgICAgICAgICAgICAgICB0WydwZWhpbml0aWFsYXJhYmljJ10gPSAweEZCNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlaGlyYWdhbmEnXSA9IDB4MzA3QTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVobWVkaWFsYXJhYmljJ10gPSAweEZCNTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bla2F0YWthbmEnXSA9IDB4MzBEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVtaWRkbGVob29rY3lyaWxsaWMnXSA9IDB4MDRBNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyYWZlaGVicmV3J10gPSAweEZCNEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDB4MDAyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyY2VudGFyYWJpYyddID0gMHgwNjZBO1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJjZW50bW9ub3NwYWNlJ10gPSAweEZGMDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnRzbWFsbCddID0gMHhGRTZBO1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2QnXSA9IDB4MDAyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kYXJtZW5pYW4nXSA9IDB4MDU4OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kY2VudGVyZWQnXSA9IDB4MDBCNztcbiAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kaGFsZndpZHRoJ10gPSAweEZGNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGluZmVyaW9yJ10gPSAweEY2RTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZG1vbm9zcGFjZSddID0gMHhGRjBFO1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RzbWFsbCddID0gMHhGRTUyO1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RzdXBlcmlvciddID0gMHhGNkU4O1xuICAgICAgICAgICAgICAgICAgICB0WydwZXJpc3BvbWVuaWdyZWVrY21iJ10gPSAweDAzNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BlcnBlbmRpY3VsYXInXSA9IDB4MjJBNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVydGhvdXNhbmQnXSA9IDB4MjAzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGVzZXRhJ10gPSAweDIwQTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bmc3F1YXJlJ10gPSAweDMzOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BoYWJlbmdhbGknXSA9IDB4MDlBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhhZGV2YSddID0gMHgwOTJCO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGFndWphcmF0aSddID0gMHgwQUFCO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGFndXJtdWtoaSddID0gMHgwQTJCO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGknXSA9IDB4MDNDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpMSddID0gMHgwM0Q1O1xuICAgICAgICAgICAgICAgICAgICB0WydwaGlldXBoYWNpcmNsZWtvcmVhbiddID0gMHgzMjdBO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGlldXBoYXBhcmVua29yZWFuJ10gPSAweDMyMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BoaWV1cGhjaXJjbGVrb3JlYW4nXSA9IDB4MzI2QztcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpZXVwaGtvcmVhbiddID0gMHgzMTREO1xuICAgICAgICAgICAgICAgICAgICB0WydwaGlldXBocGFyZW5rb3JlYW4nXSA9IDB4MzIwQztcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpbGF0aW4nXSA9IDB4MDI3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpbnRodXRoYWknXSA9IDB4MEUzQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhpc3ltYm9sZ3JlZWsnXSA9IDB4MDNENTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhvb2snXSA9IDB4MDFBNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhvcGhhbnRoYWknXSA9IDB4MEUxRTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGhvcGh1bmd0aGFpJ10gPSAweDBFMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bob3NhbXBoYW90aGFpJ10gPSAweDBFMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpJ10gPSAweDAzQzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwYWNpcmNsZWtvcmVhbiddID0gMHgzMjczO1xuICAgICAgICAgICAgICAgICAgICB0WydwaWV1cGFwYXJlbmtvcmVhbiddID0gMHgzMjEzO1xuICAgICAgICAgICAgICAgICAgICB0WydwaWV1cGNpZXVja29yZWFuJ10gPSAweDMxNzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwY2lyY2xla29yZWFuJ10gPSAweDMyNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwa2l5ZW9ra29yZWFuJ10gPSAweDMxNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwa29yZWFuJ10gPSAweDMxNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwcGFyZW5rb3JlYW4nXSA9IDB4MzIwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGlldXBzaW9za2l5ZW9ra29yZWFuJ10gPSAweDMxNzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwc2lvc2tvcmVhbiddID0gMHgzMTQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydwaWV1cHNpb3N0aWtldXRrb3JlYW4nXSA9IDB4MzE3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsncGlldXB0aGlldXRoa29yZWFuJ10gPSAweDMxNzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpZXVwdGlrZXV0a29yZWFuJ10gPSAweDMxNzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BpaGlyYWdhbmEnXSA9IDB4MzA3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsncGlrYXRha2FuYSddID0gMHgzMEQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydwaXN5bWJvbGdyZWVrJ10gPSAweDAzRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bpd3Jhcm1lbmlhbiddID0gMHgwNTgzO1xuICAgICAgICAgICAgICAgICAgICB0WydwbHVzJ10gPSAweDAwMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNiZWxvd2NtYiddID0gMHgwMzFGO1xuICAgICAgICAgICAgICAgICAgICB0WydwbHVzY2lyY2xlJ10gPSAweDIyOTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNtaW51cyddID0gMHgwMEIxO1xuICAgICAgICAgICAgICAgICAgICB0WydwbHVzbW9kJ10gPSAweDAyRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNtb25vc3BhY2UnXSA9IDB4RkYwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncGx1c3NtYWxsJ10gPSAweEZFNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNzdXBlcmlvciddID0gMHgyMDdBO1xuICAgICAgICAgICAgICAgICAgICB0WydwbW9ub3NwYWNlJ10gPSAweEZGNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Btc3F1YXJlJ10gPSAweDMzRDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BvaGlyYWdhbmEnXSA9IDB4MzA3RDtcbiAgICAgICAgICAgICAgICAgICAgdFsncG9pbnRpbmdpbmRleGRvd253aGl0ZSddID0gMHgyNjFGO1xuICAgICAgICAgICAgICAgICAgICB0Wydwb2ludGluZ2luZGV4bGVmdHdoaXRlJ10gPSAweDI2MUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BvaW50aW5naW5kZXhyaWdodHdoaXRlJ10gPSAweDI2MUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BvaW50aW5naW5kZXh1cHdoaXRlJ10gPSAweDI2MUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bva2F0YWthbmEnXSA9IDB4MzBERDtcbiAgICAgICAgICAgICAgICAgICAgdFsncG9wbGF0aGFpJ10gPSAweDBFMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Bvc3RhbG1hcmsnXSA9IDB4MzAxMjtcbiAgICAgICAgICAgICAgICAgICAgdFsncG9zdGFsbWFya2ZhY2UnXSA9IDB4MzAyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncHBhcmVuJ10gPSAweDI0QUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ByZWNlZGVzJ10gPSAweDIyN0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ByZXNjcmlwdGlvbiddID0gMHgyMTFFO1xuICAgICAgICAgICAgICAgICAgICB0WydwcmltZW1vZCddID0gMHgwMkI5O1xuICAgICAgICAgICAgICAgICAgICB0WydwcmltZXJldmVyc2VkJ10gPSAweDIwMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Byb2R1Y3QnXSA9IDB4MjIwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsncHJvamVjdGl2ZSddID0gMHgyMzA1O1xuICAgICAgICAgICAgICAgICAgICB0Wydwcm9sb25nZWRrYW5hJ10gPSAweDMwRkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Byb3BlbGxvciddID0gMHgyMzE4O1xuICAgICAgICAgICAgICAgICAgICB0Wydwcm9wZXJzdWJzZXQnXSA9IDB4MjI4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsncHJvcGVyc3VwZXJzZXQnXSA9IDB4MjI4MztcbiAgICAgICAgICAgICAgICAgICAgdFsncHJvcG9ydGlvbiddID0gMHgyMjM3O1xuICAgICAgICAgICAgICAgICAgICB0Wydwcm9wb3J0aW9uYWwnXSA9IDB4MjIxRDtcbiAgICAgICAgICAgICAgICAgICAgdFsncHNpJ10gPSAweDAzQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BzaWN5cmlsbGljJ10gPSAweDA0NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYiddID0gMHgwNDg2O1xuICAgICAgICAgICAgICAgICAgICB0Wydwc3NxdWFyZSddID0gMHgzM0IwO1xuICAgICAgICAgICAgICAgICAgICB0WydwdWhpcmFnYW5hJ10gPSAweDMwNzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3B1a2F0YWthbmEnXSA9IDB4MzBENztcbiAgICAgICAgICAgICAgICAgICAgdFsncHZzcXVhcmUnXSA9IDB4MzNCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsncHdzcXVhcmUnXSA9IDB4MzNCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncSddID0gMHgwMDcxO1xuICAgICAgICAgICAgICAgICAgICB0WydxYWRldmEnXSA9IDB4MDk1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsncWFkbWFoZWJyZXcnXSA9IDB4MDVBODtcbiAgICAgICAgICAgICAgICAgICAgdFsncWFmYXJhYmljJ10gPSAweDA2NDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhZmZpbmFsYXJhYmljJ10gPSAweEZFRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhZmluaXRpYWxhcmFiaWMnXSA9IDB4RkVENztcbiAgICAgICAgICAgICAgICAgICAgdFsncWFmbWVkaWFsYXJhYmljJ10gPSAweEZFRDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhbWF0cyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMxMCddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMxYSddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMxYyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMyNyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMyOSddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHMzMyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHNkZSddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHNoZWJyZXcnXSA9IDB4MDVCODtcbiAgICAgICAgICAgICAgICAgICAgdFsncWFtYXRzbmFycm93aGVicmV3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhbWF0c3FhdGFuaGVicmV3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhbWF0c3FhdGFubmFycm93aGVicmV3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FhbWF0c3FhdGFucXVhcnRlcmhlYnJldyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHNxYXRhbndpZGVoZWJyZXcnXSA9IDB4MDVCODtcbiAgICAgICAgICAgICAgICAgICAgdFsncWFtYXRzcXVhcnRlcmhlYnJldyddID0gMHgwNUI4O1xuICAgICAgICAgICAgICAgICAgICB0WydxYW1hdHN3aWRlaGVicmV3J10gPSAweDA1Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Fhcm5leXBhcmFoZWJyZXcnXSA9IDB4MDU5RjtcbiAgICAgICAgICAgICAgICAgICAgdFsncWJvcG9tb2ZvJ10gPSAweDMxMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FjaXJjbGUnXSA9IDB4MjRFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncWhvb2snXSA9IDB4MDJBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncW1vbm9zcGFjZSddID0gMHhGRjUxO1xuICAgICAgICAgICAgICAgICAgICB0Wydxb2YnXSA9IDB4MDVFNztcbiAgICAgICAgICAgICAgICAgICAgdFsncW9mZGFnZXNoJ10gPSAweEZCNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3FvZmRhZ2VzaGhlYnJldyddID0gMHhGQjQ3O1xuICAgICAgICAgICAgICAgICAgICB0Wydxb2ZoZWJyZXcnXSA9IDB4MDVFNztcbiAgICAgICAgICAgICAgICAgICAgdFsncXBhcmVuJ10gPSAweDI0QUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1YXJ0ZXJub3RlJ10gPSAweDI2Njk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1YnV0cyddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWJ1dHMxOCddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWJ1dHMyNSddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWJ1dHMzMSddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWJ1dHNoZWJyZXcnXSA9IDB4MDVCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVidXRzbmFycm93aGVicmV3J10gPSAweDA1QkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1YnV0c3F1YXJ0ZXJoZWJyZXcnXSA9IDB4MDVCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVidXRzd2lkZWhlYnJldyddID0gMHgwNUJCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbiddID0gMHgwMDNGO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmFyYWJpYyddID0gMHgwNjFGO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmFybWVuaWFuJ10gPSAweDA1NUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uZG93biddID0gMHgwMEJGO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmRvd25zbWFsbCddID0gMHhGN0JGO1xuICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmdyZWVrJ10gPSAweDAzN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9ubW9ub3NwYWNlJ10gPSAweEZGMUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uc21hbGwnXSA9IDB4RjczRjtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmwnXSA9IDB4MDAyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxiYXNlJ10gPSAweDIwMUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsbGVmdCddID0gMHgyMDFDO1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibG1vbm9zcGFjZSddID0gMHhGRjAyO1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibHByaW1lJ10gPSAweDMwMUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJscHJpbWVyZXZlcnNlZCddID0gMHgzMDFEO1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibHJpZ2h0J10gPSAweDIwMUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlbGVmdCddID0gMHgyMDE4O1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWxlZnRyZXZlcnNlZCddID0gMHgyMDFCO1xuICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXJldmVyc2VkJ10gPSAweDIwMUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlcmlnaHQnXSA9IDB4MjAxOTtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodG4nXSA9IDB4MDE0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDB4MjAxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGUnXSA9IDB4MDAyNztcbiAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGVtb25vc3BhY2UnXSA9IDB4RkYwNztcbiAgICAgICAgICAgICAgICAgICAgdFsnciddID0gMHgwMDcyO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWFybWVuaWFuJ10gPSAweDA1N0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhYmVuZ2FsaSddID0gMHgwOUIwO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWN1dGUnXSA9IDB4MDE1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFkZXZhJ10gPSAweDA5MzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZGljYWwnXSA9IDB4MjIxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbGV4J10gPSAweEY4RTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZG92ZXJzc3F1YXJlJ10gPSAweDMzQUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZG92ZXJzc3F1YXJlZHNxdWFyZSddID0gMHgzM0FGO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWRzcXVhcmUnXSA9IDB4MzNBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFmZSddID0gMHgwNUJGO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWZlaGVicmV3J10gPSAweDA1QkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZ3VqYXJhdGknXSA9IDB4MEFCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFndXJtdWtoaSddID0gMHgwQTMwO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWhpcmFnYW5hJ10gPSAweDMwODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jha2F0YWthbmEnXSA9IDB4MzBFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjk3O1xuICAgICAgICAgICAgICAgICAgICB0WydyYWxvd2VyZGlhZ29uYWxiZW5nYWxpJ10gPSAweDA5RjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhbWlkZGxlZGlhZ29uYWxiZW5nYWxpJ10gPSAweDA5RjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhbXNob3JuJ10gPSAweDAyNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhdGlvJ10gPSAweDIyMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jib3BvbW9mbyddID0gMHgzMTE2O1xuICAgICAgICAgICAgICAgICAgICB0WydyY2Fyb24nXSA9IDB4MDE1OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmNlZGlsbGEnXSA9IDB4MDE1NztcbiAgICAgICAgICAgICAgICAgICAgdFsncmNpcmNsZSddID0gMHgyNEUxO1xuICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDB4MDE1NztcbiAgICAgICAgICAgICAgICAgICAgdFsncmRibGdyYXZlJ10gPSAweDAyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jkb3RhY2NlbnQnXSA9IDB4MUU1OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmRvdGJlbG93J10gPSAweDFFNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jkb3RiZWxvd21hY3JvbiddID0gMHgxRTVEO1xuICAgICAgICAgICAgICAgICAgICB0WydyZWZlcmVuY2VtYXJrJ10gPSAweDIwM0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JlZmxleHN1YnNldCddID0gMHgyMjg2O1xuICAgICAgICAgICAgICAgICAgICB0WydyZWZsZXhzdXBlcnNldCddID0gMHgyMjg3O1xuICAgICAgICAgICAgICAgICAgICB0WydyZWdpc3RlcmVkJ10gPSAweDAwQUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyc2FucyddID0gMHhGOEU4O1xuICAgICAgICAgICAgICAgICAgICB0WydyZWdpc3RlcnNlcmlmJ10gPSAweEY2REE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JlaGFyYWJpYyddID0gMHgwNjMxO1xuICAgICAgICAgICAgICAgICAgICB0WydyZWhhcm1lbmlhbiddID0gMHgwNTgwO1xuICAgICAgICAgICAgICAgICAgICB0WydyZWhmaW5hbGFyYWJpYyddID0gMHhGRUFFO1xuICAgICAgICAgICAgICAgICAgICB0WydyZWhpcmFnYW5hJ10gPSAweDMwOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jla2F0YWthbmEnXSA9IDB4MzBFQztcbiAgICAgICAgICAgICAgICAgICAgdFsncmVrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjlBO1xuICAgICAgICAgICAgICAgICAgICB0WydyZXNoJ10gPSAweDA1RTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jlc2hkYWdlc2hoZWJyZXcnXSA9IDB4RkI0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsncmVzaGhlYnJldyddID0gMHgwNUU4O1xuICAgICAgICAgICAgICAgICAgICB0WydyZXZlcnNlZHRpbGRlJ10gPSAweDIyM0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JldmlhaGVicmV3J10gPSAweDA1OTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JldmlhbXVncmFzaGhlYnJldyddID0gMHgwNTk3O1xuICAgICAgICAgICAgICAgICAgICB0WydyZXZsb2dpY2Fsbm90J10gPSAweDIzMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JmaXNoaG9vayddID0gMHgwMjdFO1xuICAgICAgICAgICAgICAgICAgICB0WydyZmlzaGhvb2tyZXZlcnNlZCddID0gMHgwMjdGO1xuICAgICAgICAgICAgICAgICAgICB0WydyaGFiZW5nYWxpJ10gPSAweDA5REQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JoYWRldmEnXSA9IDB4MDk1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmhvJ10gPSAweDAzQzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Job29rJ10gPSAweDAyN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Job29rdHVybmVkJ10gPSAweDAyN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Job29rdHVybmVkc3VwZXJpb3InXSA9IDB4MDJCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmhvc3ltYm9sZ3JlZWsnXSA9IDB4MDNGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmhvdGljaG9va21vZCddID0gMHgwMkRFO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bGFjaXJjbGVrb3JlYW4nXSA9IDB4MzI3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxhcGFyZW5rb3JlYW4nXSA9IDB4MzIxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxjaXJjbGVrb3JlYW4nXSA9IDB4MzI2MztcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxoaWV1aGtvcmVhbiddID0gMHgzMTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bGtpeWVva2tvcmVhbiddID0gMHgzMTNBO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bGtpeWVva3Npb3Nrb3JlYW4nXSA9IDB4MzE2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxrb3JlYW4nXSA9IDB4MzEzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxtaWV1bWtvcmVhbiddID0gMHgzMTNCO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bHBhbnNpb3Nrb3JlYW4nXSA9IDB4MzE2QztcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxwYXJlbmtvcmVhbiddID0gMHgzMjAzO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bHBoaWV1cGhrb3JlYW4nXSA9IDB4MzEzRjtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWxwaWV1cGtvcmVhbiddID0gMHgzMTNDO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bHBpZXVwc2lvc2tvcmVhbiddID0gMHgzMTZCO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWV1bHNpb3Nrb3JlYW4nXSA9IDB4MzEzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlldWx0aGlldXRoa29yZWFuJ10gPSAweDMxM0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpZXVsdGlrZXV0a29yZWFuJ10gPSAweDMxNkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpZXVseWVvcmluaGlldWhrb3JlYW4nXSA9IDB4MzE2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlnaHRhbmdsZSddID0gMHgyMjFGO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWdodHRhY2tiZWxvd2NtYiddID0gMHgwMzE5O1xuICAgICAgICAgICAgICAgICAgICB0WydyaWdodHRyaWFuZ2xlJ10gPSAweDIyQkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpaGlyYWdhbmEnXSA9IDB4MzA4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmlrYXRha2FuYSddID0gMHgzMEVBO1xuICAgICAgICAgICAgICAgICAgICB0WydyaWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmcnXSA9IDB4MDJEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmluZ2JlbG93Y21iJ10gPSAweDAzMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdjbWInXSA9IDB4MDMwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmluZ2hhbGZsZWZ0J10gPSAweDAyQkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmbGVmdGFybWVuaWFuJ10gPSAweDA1NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmbGVmdGJlbG93Y21iJ10gPSAweDAzMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmbGVmdGNlbnRlcmVkJ10gPSAweDAyRDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmcmlnaHQnXSA9IDB4MDJCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmluZ2hhbGZyaWdodGJlbG93Y21iJ10gPSAweDAzMzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JpbmdoYWxmcmlnaHRjZW50ZXJlZCddID0gMHgwMkQyO1xuICAgICAgICAgICAgICAgICAgICB0WydyaW52ZXJ0ZWRicmV2ZSddID0gMHgwMjEzO1xuICAgICAgICAgICAgICAgICAgICB0WydyaXR0b3J1c3F1YXJlJ10gPSAweDMzNTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JsaW5lYmVsb3cnXSA9IDB4MUU1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsncmxvbmdsZWcnXSA9IDB4MDI3QztcbiAgICAgICAgICAgICAgICAgICAgdFsncmxvbmdsZWd0dXJuZWQnXSA9IDB4MDI3QTtcbiAgICAgICAgICAgICAgICAgICAgdFsncm1vbm9zcGFjZSddID0gMHhGRjUyO1xuICAgICAgICAgICAgICAgICAgICB0Wydyb2hpcmFnYW5hJ10gPSAweDMwOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jva2F0YWthbmEnXSA9IDB4MzBFRDtcbiAgICAgICAgICAgICAgICAgICAgdFsncm9rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjlCO1xuICAgICAgICAgICAgICAgICAgICB0Wydyb3J1YXRoYWknXSA9IDB4MEUyMztcbiAgICAgICAgICAgICAgICAgICAgdFsncnBhcmVuJ10gPSAweDI0QUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JyYWJlbmdhbGknXSA9IDB4MDlEQztcbiAgICAgICAgICAgICAgICAgICAgdFsncnJhZGV2YSddID0gMHgwOTMxO1xuICAgICAgICAgICAgICAgICAgICB0WydycmFndXJtdWtoaSddID0gMHgwQTVDO1xuICAgICAgICAgICAgICAgICAgICB0WydycmVoYXJhYmljJ10gPSAweDA2OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JyZWhmaW5hbGFyYWJpYyddID0gMHhGQjhEO1xuICAgICAgICAgICAgICAgICAgICB0WydycnZvY2FsaWNiZW5nYWxpJ10gPSAweDA5RTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jydm9jYWxpY2RldmEnXSA9IDB4MDk2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsncnJ2b2NhbGljZ3VqYXJhdGknXSA9IDB4MEFFMDtcbiAgICAgICAgICAgICAgICAgICAgdFsncnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUM0O1xuICAgICAgICAgICAgICAgICAgICB0WydycnZvY2FsaWN2b3dlbHNpZ25kZXZhJ10gPSAweDA5NDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Jydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpJ10gPSAweDBBQzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JzdXBlcmlvciddID0gMHhGNkYxO1xuICAgICAgICAgICAgICAgICAgICB0WydydGJsb2NrJ10gPSAweDI1OTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J0dXJuZWQnXSA9IDB4MDI3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsncnR1cm5lZHN1cGVyaW9yJ10gPSAweDAyQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J1aGlyYWdhbmEnXSA9IDB4MzA4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsncnVrYXRha2FuYSddID0gMHgzMEVCO1xuICAgICAgICAgICAgICAgICAgICB0WydydWthdGFrYW5haGFsZndpZHRoJ10gPSAweEZGOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J1cGVlbWFya2JlbmdhbGknXSA9IDB4MDlGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsncnVwZWVzaWduYmVuZ2FsaSddID0gMHgwOUYzO1xuICAgICAgICAgICAgICAgICAgICB0WydydXBpYWgnXSA9IDB4RjZERDtcbiAgICAgICAgICAgICAgICAgICAgdFsncnV0aGFpJ10gPSAweDBFMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J2b2NhbGljYmVuZ2FsaSddID0gMHgwOThCO1xuICAgICAgICAgICAgICAgICAgICB0Wydydm9jYWxpY2RldmEnXSA9IDB4MDkwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsncnZvY2FsaWNndWphcmF0aSddID0gMHgwQThCO1xuICAgICAgICAgICAgICAgICAgICB0Wydydm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGknXSA9IDB4MDlDMztcbiAgICAgICAgICAgICAgICAgICAgdFsncnZvY2FsaWN2b3dlbHNpZ25kZXZhJ10gPSAweDA5NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3J2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDMztcbiAgICAgICAgICAgICAgICAgICAgdFsncyddID0gMHgwMDczO1xuICAgICAgICAgICAgICAgICAgICB0WydzYWJlbmdhbGknXSA9IDB4MDlCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FjdXRlJ10gPSAweDAxNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZWRvdGFjY2VudCddID0gMHgxRTY1O1xuICAgICAgICAgICAgICAgICAgICB0WydzYWRhcmFiaWMnXSA9IDB4MDYzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FkZXZhJ10gPSAweDA5Mzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhZGZpbmFsYXJhYmljJ10gPSAweEZFQkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhZGluaXRpYWxhcmFiaWMnXSA9IDB4RkVCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FkbWVkaWFsYXJhYmljJ10gPSAweEZFQkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhZ3VqYXJhdGknXSA9IDB4MEFCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FndXJtdWtoaSddID0gMHgwQTM4O1xuICAgICAgICAgICAgICAgICAgICB0WydzYWhpcmFnYW5hJ10gPSAweDMwNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nha2F0YWthbmEnXSA9IDB4MzBCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjdCO1xuICAgICAgICAgICAgICAgICAgICB0WydzYWxsYWxsYWhvdWFsYXloZXdhc2FsbGFtYXJhYmljJ10gPSAweEZERkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhbWVraCddID0gMHgwNUUxO1xuICAgICAgICAgICAgICAgICAgICB0WydzYW1la2hkYWdlc2gnXSA9IDB4RkI0MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FtZWtoZGFnZXNoaGVicmV3J10gPSAweEZCNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhbWVraGhlYnJldyddID0gMHgwNUUxO1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhYWF0aGFpJ10gPSAweDBFMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFhZXRoYWknXSA9IDB4MEU0MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYWFpbWFpbWFsYWl0aGFpJ10gPSAweDBFNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFhaW1haW11YW50aGFpJ10gPSAweDBFNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFhbXRoYWknXSA9IDB4MEUzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYWF0aGFpJ10gPSAweDBFMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFldGhhaSddID0gMHgwRTQwO1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhaWlsZWZ0dGhhaSddID0gMHhGODg2O1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhaWl0aGFpJ10gPSAweDBFMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFpbGVmdHRoYWknXSA9IDB4Rjg4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYWl0aGFpJ10gPSAweDBFMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NhcmFvdGhhaSddID0gMHgwRTQyO1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhdWVlbGVmdHRoYWknXSA9IDB4Rjg4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYXVlZXRoYWknXSA9IDB4MEUzNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYXVlbGVmdHRoYWknXSA9IDB4Rjg4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYXVldGhhaSddID0gMHgwRTM2O1xuICAgICAgICAgICAgICAgICAgICB0WydzYXJhdXRoYWknXSA9IDB4MEUzODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2FyYXV1dGhhaSddID0gMHgwRTM5O1xuICAgICAgICAgICAgICAgICAgICB0WydzYm9wb21vZm8nXSA9IDB4MzExOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2Nhcm9uJ10gPSAweDAxNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NjYXJvbmRvdGFjY2VudCddID0gMHgxRTY3O1xuICAgICAgICAgICAgICAgICAgICB0WydzY2VkaWxsYSddID0gMHgwMTVGO1xuICAgICAgICAgICAgICAgICAgICB0WydzY2h3YSddID0gMHgwMjU5O1xuICAgICAgICAgICAgICAgICAgICB0WydzY2h3YWN5cmlsbGljJ10gPSAweDA0RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NjaHdhZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNERCO1xuICAgICAgICAgICAgICAgICAgICB0WydzY2h3YWhvb2snXSA9IDB4MDI1QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2NpcmNsZSddID0gMHgyNEUyO1xuICAgICAgICAgICAgICAgICAgICB0WydzY2lyY3VtZmxleCddID0gMHgwMTVEO1xuICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDB4MDIxOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2RvdGFjY2VudCddID0gMHgxRTYxO1xuICAgICAgICAgICAgICAgICAgICB0WydzZG90YmVsb3cnXSA9IDB4MUU2MztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2RvdGJlbG93ZG90YWNjZW50J10gPSAweDFFNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlYWd1bGxiZWxvd2NtYiddID0gMHgwMzNDO1xuICAgICAgICAgICAgICAgICAgICB0WydzZWNvbmQnXSA9IDB4MjAzMztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2Vjb25kdG9uZWNoaW5lc2UnXSA9IDB4MDJDQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gMHgwMEE3O1xuICAgICAgICAgICAgICAgICAgICB0WydzZWVuYXJhYmljJ10gPSAweDA2MzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZW5maW5hbGFyYWJpYyddID0gMHhGRUIyO1xuICAgICAgICAgICAgICAgICAgICB0WydzZWVuaW5pdGlhbGFyYWJpYyddID0gMHhGRUIzO1xuICAgICAgICAgICAgICAgICAgICB0WydzZWVubWVkaWFsYXJhYmljJ10gPSAweEZFQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29sJ10gPSAweDA1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29sMTMnXSA9IDB4MDVCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2Vnb2wxZiddID0gMHgwNUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzZWdvbDJjJ10gPSAweDA1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29saGVicmV3J10gPSAweDA1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29sbmFycm93aGVicmV3J10gPSAweDA1QjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29scXVhcnRlcmhlYnJldyddID0gMHgwNUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzZWdvbHRhaGVicmV3J10gPSAweDA1OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlZ29sd2lkZWhlYnJldyddID0gMHgwNUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzZWhhcm1lbmlhbiddID0gMHgwNTdEO1xuICAgICAgICAgICAgICAgICAgICB0WydzZWhpcmFnYW5hJ10gPSAweDMwNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nla2F0YWthbmEnXSA9IDB4MzBCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2VrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjdFO1xuICAgICAgICAgICAgICAgICAgICB0WydzZW1pY29sb24nXSA9IDB4MDAzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2VtaWNvbG9uYXJhYmljJ10gPSAweDA2MUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbm1vbm9zcGFjZSddID0gMHhGRjFCO1xuICAgICAgICAgICAgICAgICAgICB0WydzZW1pY29sb25zbWFsbCddID0gMHhGRTU0O1xuICAgICAgICAgICAgICAgICAgICB0WydzZW1pdm9pY2VkbWFya2thbmEnXSA9IDB4MzA5QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2VtaXZvaWNlZG1hcmtrYW5haGFsZndpZHRoJ10gPSAweEZGOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlbnRpc3F1YXJlJ10gPSAweDMzMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NlbnRvc3F1YXJlJ10gPSAweDMzMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSAweDAwMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuYXJhYmljJ10gPSAweDA2Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuYmVuZ2FsaSddID0gMHgwOUVEO1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbmNpcmNsZSddID0gMHgyNDY2O1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWYnXSA9IDB4Mjc5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5kZXZhJ10gPSAweDA5NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuZWlnaHRocyddID0gMHgyMTVFO1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbmd1amFyYXRpJ10gPSAweDBBRUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuZ3VybXVraGknXSA9IDB4MEE2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5oYWNrYXJhYmljJ10gPSAweDA2Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuaGFuZ3pob3UnXSA9IDB4MzAyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5pZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuaW5mZXJpb3InXSA9IDB4MjA4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5tb25vc3BhY2UnXSA9IDB4RkYxNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW5vbGRzdHlsZSddID0gMHhGNzM3O1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbnBhcmVuJ10gPSAweDI0N0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVucGVyaW9kJ10gPSAweDI0OEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVucGVyc2lhbiddID0gMHgwNkY3O1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbnJvbWFuJ10gPSAweDIxNzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuc3VwZXJpb3InXSA9IDB4MjA3NztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW50ZWVuY2lyY2xlJ10gPSAweDI0NzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVudGVlbnBhcmVuJ10gPSAweDI0ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NldmVudGVlbnBlcmlvZCddID0gMHgyNDk4O1xuICAgICAgICAgICAgICAgICAgICB0WydzZXZlbnRoYWknXSA9IDB4MEU1NztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2Z0aHlwaGVuJ10gPSAweDAwQUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWFybWVuaWFuJ10gPSAweDA1Nzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWJlbmdhbGknXSA9IDB4MDlCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhY3lyaWxsaWMnXSA9IDB4MDQ0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhZGRhYXJhYmljJ10gPSAweDA2NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWRhbW1hYXJhYmljJ10gPSAweEZDNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWRhbW1hdGFuYXJhYmljJ10gPSAweEZDNUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWZhdGhhYXJhYmljJ10gPSAweEZDNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWthc3JhYXJhYmljJ10gPSAweEZDNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRkYWthc3JhdGFuYXJhYmljJ10gPSAweEZDNUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRlJ10gPSAweDI1OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRlZGFyayddID0gMHgyNTkzO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGFkZWxpZ2h0J10gPSAweDI1OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRlbWVkaXVtJ10gPSAweDI1OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoYWRldmEnXSA9IDB4MDkzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhZ3VqYXJhdGknXSA9IDB4MEFCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhZ3VybXVraGknXSA9IDB4MEEzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hhbHNoZWxldGhlYnJldyddID0gMHgwNTkzO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGJvcG9tb2ZvJ10gPSAweDMxMTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoY2hhY3lyaWxsaWMnXSA9IDB4MDQ0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlZW5hcmFiaWMnXSA9IDB4MDYzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlZW5maW5hbGFyYWJpYyddID0gMHhGRUI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaGVlbmluaXRpYWxhcmFiaWMnXSA9IDB4RkVCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlZW5tZWRpYWxhcmFiaWMnXSA9IDB4RkVCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlaWNvcHRpYyddID0gMHgwM0UzO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGVxZWwnXSA9IDB4MjBBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hlcWVsaGVicmV3J10gPSAweDIwQUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhJ10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhMTE1J10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhMTUnXSA9IDB4MDVCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hldmEyMiddID0gMHgwNUIwO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGV2YTJlJ10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhaGVicmV3J10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhbmFycm93aGVicmV3J10gPSAweDA1QjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoZXZhcXVhcnRlcmhlYnJldyddID0gMHgwNUIwO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGV2YXdpZGVoZWJyZXcnXSA9IDB4MDVCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hoYWN5cmlsbGljJ10gPSAweDA0QkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW1hY29wdGljJ10gPSAweDAzRUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW4nXSA9IDB4MDVFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbmRhZ2VzaCddID0gMHhGQjQ5O1xuICAgICAgICAgICAgICAgICAgICB0WydzaGluZGFnZXNoaGVicmV3J10gPSAweEZCNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW5kYWdlc2hzaGluZG90J10gPSAweEZCMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW5kYWdlc2hzaGluZG90aGVicmV3J10gPSAweEZCMkM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW5kYWdlc2hzaW5kb3QnXSA9IDB4RkIyRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbmRhZ2VzaHNpbmRvdGhlYnJldyddID0gMHhGQjJEO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGluZG90aGVicmV3J10gPSAweDA1QzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NoaW5oZWJyZXcnXSA9IDB4MDVFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbnNoaW5kb3QnXSA9IDB4RkIyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbnNoaW5kb3RoZWJyZXcnXSA9IDB4RkIyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2hpbnNpbmRvdCddID0gMHhGQjJCO1xuICAgICAgICAgICAgICAgICAgICB0WydzaGluc2luZG90aGVicmV3J10gPSAweEZCMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nob29rJ10gPSAweDAyODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpZ21hJ10gPSAweDAzQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpZ21hMSddID0gMHgwM0MyO1xuICAgICAgICAgICAgICAgICAgICB0WydzaWdtYWZpbmFsJ10gPSAweDAzQzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpZ21hbHVuYXRlc3ltYm9sZ3JlZWsnXSA9IDB4MDNGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2loaXJhZ2FuYSddID0gMHgzMDU3O1xuICAgICAgICAgICAgICAgICAgICB0WydzaWthdGFrYW5hJ10gPSAweDMwQjc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lsdXFoZWJyZXcnXSA9IDB4MDVCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lsdXFsZWZ0aGVicmV3J10gPSAweDA1QkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpbWlsYXInXSA9IDB4MjIzQztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2luZG90aGVicmV3J10gPSAweDA1QzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3NhY2lyY2xla29yZWFuJ10gPSAweDMyNzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3NhcGFyZW5rb3JlYW4nXSA9IDB4MzIxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lvc2NpZXVja29yZWFuJ10gPSAweDMxN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3NjaXJjbGVrb3JlYW4nXSA9IDB4MzI2NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lvc2tpeWVva2tvcmVhbiddID0gMHgzMTdBO1xuICAgICAgICAgICAgICAgICAgICB0WydzaW9za29yZWFuJ10gPSAweDMxNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3NuaWV1bmtvcmVhbiddID0gMHgzMTdCO1xuICAgICAgICAgICAgICAgICAgICB0WydzaW9zcGFyZW5rb3JlYW4nXSA9IDB4MzIwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2lvc3BpZXVwa29yZWFuJ10gPSAweDMxN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Npb3N0aWtldXRrb3JlYW4nXSA9IDB4MzE3QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4J10gPSAweDAwMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeGFyYWJpYyddID0gMHgwNjY2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhiZW5nYWxpJ10gPSAweDA5RUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeGNpcmNsZSddID0gMHgyNDY1O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmJ10gPSAweDI3OEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeGRldmEnXSA9IDB4MDk2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4Z3VqYXJhdGknXSA9IDB4MEFFQztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4Z3VybXVraGknXSA9IDB4MEE2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4aGFja2FyYWJpYyddID0gMHgwNjY2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhoYW5nemhvdSddID0gMHgzMDI2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhpZGVvZ3JhcGhpY3BhcmVuJ10gPSAweDMyMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeGluZmVyaW9yJ10gPSAweDIwODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeG1vbm9zcGFjZSddID0gMHhGRjE2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhvbGRzdHlsZSddID0gMHhGNzM2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhwYXJlbiddID0gMHgyNDc5O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhwZXJpb2QnXSA9IDB4MjQ4RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4cGVyc2lhbiddID0gMHgwNkY2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhyb21hbiddID0gMHgyMTc1O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXhzdXBlcmlvciddID0gMHgyMDc2O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXh0ZWVuY2lyY2xlJ10gPSAweDI0NkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaSddID0gMHgwOUY5O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXh0ZWVucGFyZW4nXSA9IDB4MjQ4MztcbiAgICAgICAgICAgICAgICAgICAgdFsnc2l4dGVlbnBlcmlvZCddID0gMHgyNDk3O1xuICAgICAgICAgICAgICAgICAgICB0WydzaXh0aGFpJ10gPSAweDBFNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNoJ10gPSAweDAwMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNobW9ub3NwYWNlJ10gPSAweEZGMEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nsb25nJ10gPSAweDAxN0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nsb25nZG90YWNjZW50J10gPSAweDFFOUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NtaWxlZmFjZSddID0gMHgyNjNBO1xuICAgICAgICAgICAgICAgICAgICB0WydzbW9ub3NwYWNlJ10gPSAweEZGNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NvZnBhc3VxaGVicmV3J10gPSAweDA1QzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NvZnRoeXBoZW4nXSA9IDB4MDBBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29mdHNpZ25jeXJpbGxpYyddID0gMHgwNDRDO1xuICAgICAgICAgICAgICAgICAgICB0Wydzb2hpcmFnYW5hJ10gPSAweDMwNUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nva2F0YWthbmEnXSA9IDB4MzBCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjdGO1xuICAgICAgICAgICAgICAgICAgICB0Wydzb2xpZHVzbG9uZ292ZXJsYXljbWInXSA9IDB4MDMzODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29saWR1c3Nob3J0b3ZlcmxheWNtYiddID0gMHgwMzM3O1xuICAgICAgICAgICAgICAgICAgICB0Wydzb3J1c2l0aGFpJ10gPSAweDBFMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nvc2FsYXRoYWknXSA9IDB4MEUyODtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29zb3RoYWknXSA9IDB4MEUwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc29zdWF0aGFpJ10gPSAweDBFMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAweDAwMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlaGFja2FyYWJpYyddID0gMHgwMDIwO1xuICAgICAgICAgICAgICAgICAgICB0WydzcGFkZSddID0gMHgyNjYwO1xuICAgICAgICAgICAgICAgICAgICB0WydzcGFkZXN1aXRibGFjayddID0gMHgyNjYwO1xuICAgICAgICAgICAgICAgICAgICB0WydzcGFkZXN1aXR3aGl0ZSddID0gMHgyNjY0O1xuICAgICAgICAgICAgICAgICAgICB0WydzcGFyZW4nXSA9IDB4MjRBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlYmVsb3djbWInXSA9IDB4MDMzQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlY2MnXSA9IDB4MzNDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlY20nXSA9IDB4MzM5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbCddID0gMHgyNUE5O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVob3Jpem9udGFsZmlsbCddID0gMHgyNUE0O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVrZyddID0gMHgzMzhGO1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVrbSddID0gMHgzMzlFO1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVrbWNhcGl0YWwnXSA9IDB4MzNDRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlbG4nXSA9IDB4MzNEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJlbG9nJ10gPSAweDMzRDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NxdWFyZW1nJ10gPSAweDMzOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NxdWFyZW1pbCddID0gMHgzM0Q1O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVtbSddID0gMHgzMzlDO1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVtc3F1YXJlZCddID0gMHgzM0ExO1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmVvcnRob2dvbmFsY3Jvc3NoYXRjaGZpbGwnXSA9IDB4MjVBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbCddID0gMHgyNUE3O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmV1cHBlcnJpZ2h0dG9sb3dlcmxlZnRmaWxsJ10gPSAweDI1QTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NxdWFyZXZlcnRpY2FsZmlsbCddID0gMHgyNUE1O1xuICAgICAgICAgICAgICAgICAgICB0WydzcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrJ10gPSAweDI1QTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Nyc3F1YXJlJ10gPSAweDMzREI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzYWJlbmdhbGknXSA9IDB4MDlCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnc3NhZGV2YSddID0gMHgwOTM3O1xuICAgICAgICAgICAgICAgICAgICB0Wydzc2FndWphcmF0aSddID0gMHgwQUI3O1xuICAgICAgICAgICAgICAgICAgICB0Wydzc2FuZ2NpZXVja29yZWFuJ10gPSAweDMxNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzYW5naGlldWhrb3JlYW4nXSA9IDB4MzE4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3NhbmdpZXVuZ2tvcmVhbiddID0gMHgzMTgwO1xuICAgICAgICAgICAgICAgICAgICB0Wydzc2FuZ2tpeWVva2tvcmVhbiddID0gMHgzMTMyO1xuICAgICAgICAgICAgICAgICAgICB0Wydzc2FuZ25pZXVua29yZWFuJ10gPSAweDMxNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzYW5ncGlldXBrb3JlYW4nXSA9IDB4MzE0MztcbiAgICAgICAgICAgICAgICAgICAgdFsnc3NhbmdzaW9za29yZWFuJ10gPSAweDMxNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzYW5ndGlrZXV0a29yZWFuJ10gPSAweDMxMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NzdXBlcmlvciddID0gMHhGNkYyO1xuICAgICAgICAgICAgICAgICAgICB0WydzdGVybGluZyddID0gMHgwMEEzO1xuICAgICAgICAgICAgICAgICAgICB0WydzdGVybGluZ21vbm9zcGFjZSddID0gMHhGRkUxO1xuICAgICAgICAgICAgICAgICAgICB0WydzdHJva2Vsb25nb3ZlcmxheWNtYiddID0gMHgwMzM2O1xuICAgICAgICAgICAgICAgICAgICB0WydzdHJva2VzaG9ydG92ZXJsYXljbWInXSA9IDB4MDMzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3Vic2V0J10gPSAweDIyODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1YnNldG5vdGVxdWFsJ10gPSAweDIyOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1YnNldG9yZXF1YWwnXSA9IDB4MjI4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VjY2VlZHMnXSA9IDB4MjI3QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VjaHRoYXQnXSA9IDB4MjIwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VoaXJhZ2FuYSddID0gMHgzMDU5O1xuICAgICAgICAgICAgICAgICAgICB0WydzdWthdGFrYW5hJ10gPSAweDMwQjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1a2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VrdW5hcmFiaWMnXSA9IDB4MDY1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSAweDIyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1biddID0gMHgyNjNDO1xuICAgICAgICAgICAgICAgICAgICB0WydzdXBlcnNldCddID0gMHgyMjgzO1xuICAgICAgICAgICAgICAgICAgICB0WydzdXBlcnNldG5vdGVxdWFsJ10gPSAweDIyOEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1cGVyc2V0b3JlcXVhbCddID0gMHgyMjg3O1xuICAgICAgICAgICAgICAgICAgICB0WydzdnNxdWFyZSddID0gMHgzM0RDO1xuICAgICAgICAgICAgICAgICAgICB0WydzeW91d2FlcmFzcXVhcmUnXSA9IDB4MzM3QztcbiAgICAgICAgICAgICAgICAgICAgdFsndCddID0gMHgwMDc0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YWJlbmdhbGknXSA9IDB4MDlBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFja2Rvd24nXSA9IDB4MjJBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFja2xlZnQnXSA9IDB4MjJBMztcbiAgICAgICAgICAgICAgICAgICAgdFsndGFkZXZhJ10gPSAweDA5MjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RhZ3VqYXJhdGknXSA9IDB4MEFBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFndXJtdWtoaSddID0gMHgwQTI0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YWhhcmFiaWMnXSA9IDB4MDYzNztcbiAgICAgICAgICAgICAgICAgICAgdFsndGFoZmluYWxhcmFiaWMnXSA9IDB4RkVDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFoaW5pdGlhbGFyYWJpYyddID0gMHhGRUMzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YWhpcmFnYW5hJ10gPSAweDMwNUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RhaG1lZGlhbGFyYWJpYyddID0gMHhGRUM0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YWlzeW91ZXJhc3F1YXJlJ10gPSAweDMzN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rha2F0YWthbmEnXSA9IDB4MzBCRjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGFrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjgwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YXR3ZWVsYXJhYmljJ10gPSAweDA2NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RhdSddID0gMHgwM0M0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YXYnXSA9IDB4MDVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGF2ZGFnZXMnXSA9IDB4RkI0QTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGF2ZGFnZXNoJ10gPSAweEZCNEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RhdmRhZ2VzaGhlYnJldyddID0gMHhGQjRBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0YXZoZWJyZXcnXSA9IDB4MDVFQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGJhciddID0gMHgwMTY3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Ym9wb21vZm8nXSA9IDB4MzEwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGNhcm9uJ10gPSAweDAxNjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RjY3VybCddID0gMHgwMkE4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2VkaWxsYSddID0gMHgwMTYzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2hlaGFyYWJpYyddID0gMHgwNjg2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2hlaGZpbmFsYXJhYmljJ10gPSAweEZCN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RjaGVoaW5pdGlhbGFyYWJpYyddID0gMHhGQjdDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2hlaG1lZGlhbGFyYWJpYyddID0gMHhGQjdEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0Y2lyY2xlJ10gPSAweDI0RTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAweDAxNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RkaWVyZXNpcyddID0gMHgxRTk3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZG90YWNjZW50J10gPSAweDFFNkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rkb3RiZWxvdyddID0gMHgxRTZEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWN5cmlsbGljJ10gPSAweDA0NDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDRBRDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVoYXJhYmljJ10gPSAweDA2MkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaGZpbmFsYXJhYmljJ10gPSAweEZFOTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaGhhaGluaXRpYWxhcmFiaWMnXSA9IDB4RkNBMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVoaGFoaXNvbGF0ZWRhcmFiaWMnXSA9IDB4RkMwQztcbiAgICAgICAgICAgICAgICAgICAgdFsndGVoaW5pdGlhbGFyYWJpYyddID0gMHhGRTk3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWhpcmFnYW5hJ10gPSAweDMwNjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaGplZW1pbml0aWFsYXJhYmljJ10gPSAweEZDQTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaGplZW1pc29sYXRlZGFyYWJpYyddID0gMHhGQzBCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWhtYXJidXRhYXJhYmljJ10gPSAweDA2Mjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaG1hcmJ1dGFmaW5hbGFyYWJpYyddID0gMHhGRTk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWhtZWRpYWxhcmFiaWMnXSA9IDB4RkU5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVobWVlbWluaXRpYWxhcmFiaWMnXSA9IDB4RkNBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVobWVlbWlzb2xhdGVkYXJhYmljJ10gPSAweEZDMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlaG5vb25maW5hbGFyYWJpYyddID0gMHhGQzczO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZWthdGFrYW5hJ10gPSAweDMwQzY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rla2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY4MztcbiAgICAgICAgICAgICAgICAgICAgdFsndGVsZXBob25lJ10gPSAweDIxMjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlbGVwaG9uZWJsYWNrJ10gPSAweDI2MEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RlbGlzaGFnZWRvbGFoZWJyZXcnXSA9IDB4MDVBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVsaXNoYXFldGFuYWhlYnJldyddID0gMHgwNUE5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZW5jaXJjbGUnXSA9IDB4MjQ2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVuaWRlb2dyYXBoaWNwYXJlbiddID0gMHgzMjI5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZW5wYXJlbiddID0gMHgyNDdEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZW5wZXJpb2QnXSA9IDB4MjQ5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVucm9tYW4nXSA9IDB4MjE3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGVzaCddID0gMHgwMkE3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZXQnXSA9IDB4MDVEODtcbiAgICAgICAgICAgICAgICAgICAgdFsndGV0ZGFnZXNoJ10gPSAweEZCMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RldGRhZ2VzaGhlYnJldyddID0gMHhGQjM4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZXRoZWJyZXcnXSA9IDB4MDVEODtcbiAgICAgICAgICAgICAgICAgICAgdFsndGV0c2VjeXJpbGxpYyddID0gMHgwNEI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZXZpcmhlYnJldyddID0gMHgwNTlCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0ZXZpcmxlZnRoZWJyZXcnXSA9IDB4MDU5QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhhYmVuZ2FsaSddID0gMHgwOUE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGFkZXZhJ10gPSAweDA5MjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYWd1amFyYXRpJ10gPSAweDBBQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYWd1cm11a2hpJ10gPSAweDBBMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYWxhcmFiaWMnXSA9IDB4MDYzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhhbGZpbmFsYXJhYmljJ10gPSAweEZFQUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYW50aGFraGF0bG93bGVmdHRoYWknXSA9IDB4Rjg5ODtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhhbnRoYWtoYXRsb3dyaWdodHRoYWknXSA9IDB4Rjg5NztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhhbnRoYWtoYXR0aGFpJ10gPSAweDBFNEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoYW50aGFraGF0dXBwZXJsZWZ0dGhhaSddID0gMHhGODk2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGVoYXJhYmljJ10gPSAweDA2MkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoZWhmaW5hbGFyYWJpYyddID0gMHhGRTlBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGVoaW5pdGlhbGFyYWJpYyddID0gMHhGRTlCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGVobWVkaWFsYXJhYmljJ10gPSAweEZFOUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoZXJlZXhpc3RzJ10gPSAweDIyMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoZXJlZm9yZSddID0gMHgyMjM0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGV0YSddID0gMHgwM0I4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGV0YTEnXSA9IDB4MDNEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhldGFzeW1ib2xncmVlayddID0gMHgwM0QxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGlldXRoYWNpcmNsZWtvcmVhbiddID0gMHgzMjc5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGlldXRoYXBhcmVua29yZWFuJ10gPSAweDMyMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoaWV1dGhjaXJjbGVrb3JlYW4nXSA9IDB4MzI2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhpZXV0aGtvcmVhbiddID0gMHgzMTRDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGlldXRocGFyZW5rb3JlYW4nXSA9IDB4MzIwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhpcnRlZW5jaXJjbGUnXSA9IDB4MjQ2QztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhpcnRlZW5wYXJlbiddID0gMHgyNDgwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aGlydGVlbnBlcmlvZCddID0gMHgyNDk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG9uYW5nbW9udGhvdGhhaSddID0gMHgwRTExO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG9vayddID0gMHgwMUFEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG9waHV0aGFvdGhhaSddID0gMHgwRTEyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG9ybiddID0gMHgwMEZFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG90aGFoYW50aGFpJ10gPSAweDBFMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rob3RoYW50aGFpJ10gPSAweDBFMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rob3Rob25ndGhhaSddID0gMHgwRTE4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG90aHVuZ3RoYWknXSA9IDB4MEUxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhvdXNhbmRjeXJpbGxpYyddID0gMHgwNDgyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aG91c2FuZHNzZXBhcmF0b3JhcmFiaWMnXSA9IDB4MDY2QztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbiddID0gMHgwNjZDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZSddID0gMHgwMDMzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWFyYWJpYyddID0gMHgwNjYzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWJlbmdhbGknXSA9IDB4MDlFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVjaXJjbGUnXSA9IDB4MjQ2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmJ10gPSAweDI3OEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlZGV2YSddID0gMHgwOTY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWVpZ2h0aHMnXSA9IDB4MjE1QztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVndWphcmF0aSddID0gMHgwQUU5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWd1cm11a2hpJ10gPSAweDBBNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlaGFja2FyYWJpYyddID0gMHgwNjYzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWhhbmd6aG91J10gPSAweDMwMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlaWRlb2dyYXBoaWNwYXJlbiddID0gMHgzMjIyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZWluZmVyaW9yJ10gPSAweDIwODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlbW9ub3NwYWNlJ10gPSAweEZGMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlbnVtZXJhdG9yYmVuZ2FsaSddID0gMHgwOUY2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZW9sZHN0eWxlJ10gPSAweEY3MzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlcGFyZW4nXSA9IDB4MjQ3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVwZXJpb2QnXSA9IDB4MjQ4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVwZXJzaWFuJ10gPSAweDA2RjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlcXVhcnRlcnMnXSA9IDB4MDBCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVyc2VtZGFzaCddID0gMHhGNkRFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXJvbWFuJ10gPSAweDIxNzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlc3VwZXJpb3InXSA9IDB4MDBCMztcbiAgICAgICAgICAgICAgICAgICAgdFsndGhyZWV0aGFpJ10gPSAweDBFNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RoenNxdWFyZSddID0gMHgzMzk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aWhpcmFnYW5hJ10gPSAweDMwNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rpa2F0YWthbmEnXSA9IDB4MzBDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjgxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aWtldXRhY2lyY2xla29yZWFuJ10gPSAweDMyNzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rpa2V1dGFwYXJlbmtvcmVhbiddID0gMHgzMjEwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aWtldXRjaXJjbGVrb3JlYW4nXSA9IDB4MzI2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlrZXV0a29yZWFuJ10gPSAweDMxMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rpa2V1dHBhcmVua29yZWFuJ10gPSAweDMyMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlJ10gPSAweDAyREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlYmVsb3djbWInXSA9IDB4MDMzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGVjbWInXSA9IDB4MDMwMztcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGVjb21iJ10gPSAweDAzMDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlZG91YmxlY21iJ10gPSAweDAzNjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlb3BlcmF0b3InXSA9IDB4MjIzQztcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGVvdmVybGF5Y21iJ10gPSAweDAzMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRldmVydGljYWxjbWInXSA9IDB4MDMzRTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGltZXNjaXJjbGUnXSA9IDB4MjI5NztcbiAgICAgICAgICAgICAgICAgICAgdFsndGlwZWhhaGVicmV3J10gPSAweDA1OTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpcGVoYWxlZnRoZWJyZXcnXSA9IDB4MDU5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlwcGlndXJtdWtoaSddID0gMHgwQTcwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0aXRsb2N5cmlsbGljY21iJ10gPSAweDA0ODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rpd25hcm1lbmlhbiddID0gMHgwNTdGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0bGluZWJlbG93J10gPSAweDFFNkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rtb25vc3BhY2UnXSA9IDB4RkY1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9hcm1lbmlhbiddID0gMHgwNTY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b2hpcmFnYW5hJ10gPSAweDMwNjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rva2F0YWthbmEnXSA9IDB4MzBDODtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjg0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b25lYmFyZXh0cmFoaWdobW9kJ10gPSAweDAyRTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RvbmViYXJleHRyYWxvd21vZCddID0gMHgwMkU5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b25lYmFyaGlnaG1vZCddID0gMHgwMkU2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b25lYmFybG93bW9kJ10gPSAweDAyRTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RvbmViYXJtaWRtb2QnXSA9IDB4MDJFNztcbiAgICAgICAgICAgICAgICAgICAgdFsndG9uZWZpdmUnXSA9IDB4MDFCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9uZXNpeCddID0gMHgwMTg1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b25ldHdvJ10gPSAweDAxQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Rvbm9zJ10gPSAweDAzODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RvbnNxdWFyZSddID0gMHgzMzI3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b3BhdGFrdGhhaSddID0gMHgwRTBGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQnXSA9IDB4MzAxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0c21hbGwnXSA9IDB4RkU1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWwnXSA9IDB4RkUzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodCddID0gMHgzMDE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0c21hbGwnXSA9IDB4RkU1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsndG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsJ10gPSAweEZFM0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RvdGFvdGhhaSddID0gMHgwRTE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0cGFsYXRhbGhvb2snXSA9IDB4MDFBQjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHBhcmVuJ10gPSAweDI0QUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMHgyMTIyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0cmFkZW1hcmtzYW5zJ10gPSAweEY4RUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFya3NlcmlmJ10gPSAweEY2REI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyZXRyb2ZsZXhob29rJ10gPSAweDAyODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyaWFnZG4nXSA9IDB4MjVCQztcbiAgICAgICAgICAgICAgICAgICAgdFsndHJpYWdsZiddID0gMHgyNUM0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0cmlhZ3J0J10gPSAweDI1QkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RyaWFndXAnXSA9IDB4MjVCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHMnXSA9IDB4MDJBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNhZGknXSA9IDB4MDVFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNhZGlkYWdlc2gnXSA9IDB4RkI0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNhZGlkYWdlc2hoZWJyZXcnXSA9IDB4RkI0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNhZGloZWJyZXcnXSA9IDB4MDVFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlY3lyaWxsaWMnXSA9IDB4MDQ0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmUnXSA9IDB4MDVCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmUxMiddID0gMHgwNUI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0c2VyZTFlJ10gPSAweDA1QjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RzZXJlMmInXSA9IDB4MDVCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmVoZWJyZXcnXSA9IDB4MDVCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmVuYXJyb3doZWJyZXcnXSA9IDB4MDVCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHNlcmVxdWFydGVyaGVicmV3J10gPSAweDA1QjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RzZXJld2lkZWhlYnJldyddID0gMHgwNUI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0c2hlY3lyaWxsaWMnXSA9IDB4MDQ1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHN1cGVyaW9yJ10gPSAweEY2RjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0YWJlbmdhbGknXSA9IDB4MDk5RjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHRhZGV2YSddID0gMHgwOTFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGFndWphcmF0aSddID0gMHgwQTlGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGFndXJtdWtoaSddID0gMHgwQTFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGVoYXJhYmljJ10gPSAweDA2Nzk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0ZWhmaW5hbGFyYWJpYyddID0gMHhGQjY3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGVoaW5pdGlhbGFyYWJpYyddID0gMHhGQjY4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGVobWVkaWFsYXJhYmljJ10gPSAweEZCNjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0aGFiZW5nYWxpJ10gPSAweDA5QTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0aGFkZXZhJ10gPSAweDA5MjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R0aGFndWphcmF0aSddID0gMHgwQUEwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dGhhZ3VybXVraGknXSA9IDB4MEEyMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndHR1cm5lZCddID0gMHgwMjg3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dWhpcmFnYW5hJ10gPSAweDMwNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R1a2F0YWthbmEnXSA9IDB4MzBDNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndHVrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjgyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0dXNtYWxsaGlyYWdhbmEnXSA9IDB4MzA2MztcbiAgICAgICAgICAgICAgICAgICAgdFsndHVzbWFsbGthdGFrYW5hJ10gPSAweDMwQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R1c21hbGxrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjZGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d2VsdmVjaXJjbGUnXSA9IDB4MjQ2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdlbHZlcGFyZW4nXSA9IDB4MjQ3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdlbHZlcGVyaW9kJ10gPSAweDI0OTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3ZWx2ZXJvbWFuJ10gPSAweDIxN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3ZW50eWNpcmNsZSddID0gMHgyNDczO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d2VudHloYW5nemhvdSddID0gMHg1MzQ0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d2VudHlwYXJlbiddID0gMHgyNDg3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d2VudHlwZXJpb2QnXSA9IDB4MjQ5QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvJ10gPSAweDAwMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2FyYWJpYyddID0gMHgwNjYyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29iZW5nYWxpJ10gPSAweDA5RTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2NpcmNsZSddID0gMHgyNDYxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmJ10gPSAweDI3OEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2RldmEnXSA9IDB4MDk2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvZG90ZW5sZWFkZXInXSA9IDB4MjAyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvZG90bGVhZGVyJ10gPSAweDIwMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2RvdGxlYWRlcnZlcnRpY2FsJ10gPSAweEZFMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2d1amFyYXRpJ10gPSAweDBBRTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2d1cm11a2hpJ10gPSAweDBBNjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3R3b2hhY2thcmFiaWMnXSA9IDB4MDY2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvaGFuZ3pob3UnXSA9IDB4MzAyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvaWRlb2dyYXBoaWNwYXJlbiddID0gMHgzMjIxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29pbmZlcmlvciddID0gMHgyMDgyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29tb25vc3BhY2UnXSA9IDB4RkYxMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvbnVtZXJhdG9yYmVuZ2FsaSddID0gMHgwOUY1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29vbGRzdHlsZSddID0gMHhGNzMyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29wYXJlbiddID0gMHgyNDc1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29wZXJpb2QnXSA9IDB4MjQ4OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvcGVyc2lhbiddID0gMHgwNkYyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29yb21hbiddID0gMHgyMTcxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d29zdHJva2UnXSA9IDB4MDFCQjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvc3VwZXJpb3InXSA9IDB4MDBCMjtcbiAgICAgICAgICAgICAgICAgICAgdFsndHdvdGhhaSddID0gMHgwRTUyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd0d290aGlyZHMnXSA9IDB4MjE1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsndSddID0gMHgwMDc1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1YWN1dGUnXSA9IDB4MDBGQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWJhciddID0gMHgwMjg5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1YmVuZ2FsaSddID0gMHgwOTg5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1Ym9wb21vZm8nXSA9IDB4MzEyODtcbiAgICAgICAgICAgICAgICAgICAgdFsndWJyZXZlJ10gPSAweDAxNkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VjYXJvbiddID0gMHgwMUQ0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY2xlJ10gPSAweDI0RTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VjaXJjdW1mbGV4J10gPSAweDAwRkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VjaXJjdW1mbGV4YmVsb3cnXSA9IDB4MUU3NztcbiAgICAgICAgICAgICAgICAgICAgdFsndWN5cmlsbGljJ10gPSAweDA0NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VkYXR0YWRldmEnXSA9IDB4MDk1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWRibGFjdXRlJ10gPSAweDAxNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VkYmxncmF2ZSddID0gMHgwMjE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1ZGV2YSddID0gMHgwOTA5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDB4MDBGQztcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzYWN1dGUnXSA9IDB4MDFEODtcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzYmVsb3cnXSA9IDB4MUU3MztcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzY2Fyb24nXSA9IDB4MDFEQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzY3lyaWxsaWMnXSA9IDB4MDRGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzZ3JhdmUnXSA9IDB4MDFEQztcbiAgICAgICAgICAgICAgICAgICAgdFsndWRpZXJlc2lzbWFjcm9uJ10gPSAweDAxRDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Vkb3RiZWxvdyddID0gMHgxRUU1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1Z3JhdmUnXSA9IDB4MDBGOTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWd1amFyYXRpJ10gPSAweDBBODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VndXJtdWtoaSddID0gMHgwQTA5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aGlyYWdhbmEnXSA9IDB4MzA0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsndWhvb2thYm92ZSddID0gMHgxRUU3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aG9ybiddID0gMHgwMUIwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aG9ybmFjdXRlJ10gPSAweDFFRTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Vob3JuZG90YmVsb3cnXSA9IDB4MUVGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWhvcm5ncmF2ZSddID0gMHgxRUVCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aG9ybmhvb2thYm92ZSddID0gMHgxRUVEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1aG9ybnRpbGRlJ10gPSAweDFFRUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VodW5nYXJ1bWxhdXQnXSA9IDB4MDE3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dGN5cmlsbGljJ10gPSAweDA0RjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VpbnZlcnRlZGJyZXZlJ10gPSAweDAyMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VrYXRha2FuYSddID0gMHgzMEE2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1a2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY3MztcbiAgICAgICAgICAgICAgICAgICAgdFsndWtjeXJpbGxpYyddID0gMHgwNDc5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1a29yZWFuJ10gPSAweDMxNUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VtYWNyb24nXSA9IDB4MDE2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndW1hY3JvbmN5cmlsbGljJ10gPSAweDA0RUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VtYWNyb25kaWVyZXNpcyddID0gMHgxRTdCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bWF0cmFndXJtdWtoaSddID0gMHgwQTQxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bW9ub3NwYWNlJ10gPSAweEZGNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmUnXSA9IDB4MDA1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZWRibCddID0gMHgyMDE3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bmRlcnNjb3JlbW9ub3NwYWNlJ10gPSAweEZGM0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmV2ZXJ0aWNhbCddID0gMHhGRTMzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bmRlcnNjb3Jld2F2eSddID0gMHhGRTRGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bmlvbiddID0gMHgyMjJBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1bml2ZXJzYWwnXSA9IDB4MjIwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndW9nb25layddID0gMHgwMTczO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cGFyZW4nXSA9IDB4MjRCMDtcbiAgICAgICAgICAgICAgICAgICAgdFsndXBibG9jayddID0gMHgyNTgwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cHBlcmRvdGhlYnJldyddID0gMHgwNUM0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cHNpbG9uJ10gPSAweDAzQzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Vwc2lsb25kaWVyZXNpcyddID0gMHgwM0NCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cHNpbG9uZGllcmVzaXN0b25vcyddID0gMHgwM0IwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cHNpbG9ubGF0aW4nXSA9IDB4MDI4QTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXBzaWxvbnRvbm9zJ10gPSAweDAzQ0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VwdGFja2JlbG93Y21iJ10gPSAweDAzMUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VwdGFja21vZCddID0gMHgwMkQ0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cmFndXJtdWtoaSddID0gMHgwQTczO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gMHgwMTZGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c2hvcnRjeXJpbGxpYyddID0gMHgwNDVFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c21hbGxoaXJhZ2FuYSddID0gMHgzMDQ1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c21hbGxrYXRha2FuYSddID0gMHgzMEE1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c21hbGxrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c3RyYWlnaHRjeXJpbGxpYyddID0gMHgwNEFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1c3RyYWlnaHRzdHJva2VjeXJpbGxpYyddID0gMHgwNEIxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dGlsZGUnXSA9IDB4MDE2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXRpbGRlYWN1dGUnXSA9IDB4MUU3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXRpbGRlYmVsb3cnXSA9IDB4MUU3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXViZW5nYWxpJ10gPSAweDA5OEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3V1ZGV2YSddID0gMHgwOTBBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dWd1amFyYXRpJ10gPSAweDBBOEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3V1Z3VybXVraGknXSA9IDB4MEEwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsndXVtYXRyYWd1cm11a2hpJ10gPSAweDBBNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3V1dm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUMyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dXZvd2Vsc2lnbmRldmEnXSA9IDB4MDk0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsndXV2b3dlbHNpZ25ndWphcmF0aSddID0gMHgwQUMyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dm93ZWxzaWduYmVuZ2FsaSddID0gMHgwOUMxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dm93ZWxzaWduZGV2YSddID0gMHgwOTQxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd1dm93ZWxzaWduZ3VqYXJhdGknXSA9IDB4MEFDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndiddID0gMHgwMDc2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YWRldmEnXSA9IDB4MDkzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndmFndWphcmF0aSddID0gMHgwQUI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YWd1cm11a2hpJ10gPSAweDBBMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zha2F0YWthbmEnXSA9IDB4MzBGNztcbiAgICAgICAgICAgICAgICAgICAgdFsndmF2J10gPSAweDA1RDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZhdmRhZ2VzaCddID0gMHhGQjM1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YXZkYWdlc2g2NSddID0gMHhGQjM1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YXZkYWdlc2hoZWJyZXcnXSA9IDB4RkIzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsndmF2aGVicmV3J10gPSAweDA1RDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZhdmhvbGFtJ10gPSAweEZCNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZhdmhvbGFtaGVicmV3J10gPSAweEZCNEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZhdnZhdmhlYnJldyddID0gMHgwNUYwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2YXZ5b2RoZWJyZXcnXSA9IDB4MDVGMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndmNpcmNsZSddID0gMHgyNEU1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZG90YmVsb3cnXSA9IDB4MUU3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsndmVjeXJpbGxpYyddID0gMHgwNDMyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZWhhcmFiaWMnXSA9IDB4MDZBNDtcbiAgICAgICAgICAgICAgICAgICAgdFsndmVoZmluYWxhcmFiaWMnXSA9IDB4RkI2QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndmVoaW5pdGlhbGFyYWJpYyddID0gMHhGQjZDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZWhtZWRpYWxhcmFiaWMnXSA9IDB4RkI2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsndmVrYXRha2FuYSddID0gMHgzMEY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZW51cyddID0gMHgyNjQwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXJ0aWNhbGJhciddID0gMHgwMDdDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXJ0aWNhbGxpbmVhYm92ZWNtYiddID0gMHgwMzBEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXJ0aWNhbGxpbmViZWxvd2NtYiddID0gMHgwMzI5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXJ0aWNhbGxpbmVsb3dtb2QnXSA9IDB4MDJDQztcbiAgICAgICAgICAgICAgICAgICAgdFsndmVydGljYWxsaW5lbW9kJ10gPSAweDAyQzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zld2FybWVuaWFuJ10gPSAweDA1N0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zob29rJ10gPSAweDAyOEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zpa2F0YWthbmEnXSA9IDB4MzBGODtcbiAgICAgICAgICAgICAgICAgICAgdFsndmlyYW1hYmVuZ2FsaSddID0gMHgwOUNEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2aXJhbWFkZXZhJ10gPSAweDA5NEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZpcmFtYWd1amFyYXRpJ10gPSAweDBBQ0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zpc2FyZ2FiZW5nYWxpJ10gPSAweDA5ODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zpc2FyZ2FkZXZhJ10gPSAweDA5MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Zpc2FyZ2FndWphcmF0aSddID0gMHgwQTgzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2bW9ub3NwYWNlJ10gPSAweEZGNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZvYXJtZW5pYW4nXSA9IDB4MDU3ODtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9pY2VkaXRlcmF0aW9uaGlyYWdhbmEnXSA9IDB4MzA5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9pY2VkaXRlcmF0aW9ua2F0YWthbmEnXSA9IDB4MzBGRTtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9pY2VkbWFya2thbmEnXSA9IDB4MzA5QjtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9pY2VkbWFya2thbmFoYWxmd2lkdGgnXSA9IDB4RkY5RTtcbiAgICAgICAgICAgICAgICAgICAgdFsndm9rYXRha2FuYSddID0gMHgzMEZBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2cGFyZW4nXSA9IDB4MjRCMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndnRpbGRlJ10gPSAweDFFN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Z0dXJuZWQnXSA9IDB4MDI4QztcbiAgICAgICAgICAgICAgICAgICAgdFsndnVoaXJhZ2FuYSddID0gMHgzMDk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd2dWthdGFrYW5hJ10gPSAweDMwRjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3cnXSA9IDB4MDA3NztcbiAgICAgICAgICAgICAgICAgICAgdFsnd2FjdXRlJ10gPSAweDFFODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhZWtvcmVhbiddID0gMHgzMTU5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3YWhpcmFnYW5hJ10gPSAweDMwOEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dha2F0YWthbmEnXSA9IDB4MzBFRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2FrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjlDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3YWtvcmVhbiddID0gMHgzMTU4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3YXNtYWxsaGlyYWdhbmEnXSA9IDB4MzA4RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2FzbWFsbGthdGFrYW5hJ10gPSAweDMwRUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhdHRvc3F1YXJlJ10gPSAweDMzNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhdmVkYXNoJ10gPSAweDMwMUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhdnl1bmRlcnNjb3JldmVydGljYWwnXSA9IDB4RkUzNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2F3YXJhYmljJ10gPSAweDA2NDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhd2ZpbmFsYXJhYmljJ10gPSAweEZFRUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dhd2hhbXphYWJvdmVhcmFiaWMnXSA9IDB4MDYyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2F3aGFtemFhYm92ZWZpbmFsYXJhYmljJ10gPSAweEZFODY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dic3F1YXJlJ10gPSAweDMzREQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3djaXJjbGUnXSA9IDB4MjRFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2NpcmN1bWZsZXgnXSA9IDB4MDE3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2RpZXJlc2lzJ10gPSAweDFFODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dkb3RhY2NlbnQnXSA9IDB4MUU4NztcbiAgICAgICAgICAgICAgICAgICAgdFsnd2RvdGJlbG93J10gPSAweDFFODk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dlaGlyYWdhbmEnXSA9IDB4MzA5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2VpZXJzdHJhc3MnXSA9IDB4MjExODtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2VrYXRha2FuYSddID0gMHgzMEYxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3ZWtvcmVhbiddID0gMHgzMTVFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3ZW9rb3JlYW4nXSA9IDB4MzE1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2dyYXZlJ10gPSAweDFFODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlYnVsbGV0J10gPSAweDI1RTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlY2lyY2xlJ10gPSAweDI1Q0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlY2lyY2xlaW52ZXJzZSddID0gMHgyNUQ5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0J10gPSAweDMwMEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbCddID0gMHhGRTQzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodCddID0gMHgzMDBGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZWNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsJ10gPSAweEZFNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlZGlhbW9uZCddID0gMHgyNUM3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZWRpYW1vbmRjb250YWluaW5nYmxhY2tzbWFsbGRpYW1vbmQnXSA9IDB4MjVDODtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlJ10gPSAweDI1QkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlZG93bnBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVCRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVsZWZ0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlJ10gPSAweDI1QzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlbGVmdHBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVDMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVsZW50aWN1bGFyYnJhY2tldGxlZnQnXSA9IDB4MzAxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0J10gPSAweDMwMTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlcmlnaHRwb2ludGluZ3NtYWxsdHJpYW5nbGUnXSA9IDB4MjVCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGUnXSA9IDB4MjVCNztcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGVzbWFsbHNxdWFyZSddID0gMHgyNUFCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXNtaWxpbmdmYWNlJ10gPSAweDI2M0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlc3F1YXJlJ10gPSAweDI1QTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3doaXRlc3RhciddID0gMHgyNjA2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXRlbGVwaG9uZSddID0gMHgyNjBGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdCddID0gMHgzMDE4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQnXSA9IDB4MzAxOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2hpdGV1cHBvaW50aW5nc21hbGx0cmlhbmdsZSddID0gMHgyNUI1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aGl0ZXVwcG9pbnRpbmd0cmlhbmdsZSddID0gMHgyNUIzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd3aWhpcmFnYW5hJ10gPSAweDMwOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dpa2F0YWthbmEnXSA9IDB4MzBGMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnd2lrb3JlYW4nXSA9IDB4MzE1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd21vbm9zcGFjZSddID0gMHhGRjU3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3b2hpcmFnYW5hJ10gPSAweDMwOTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dva2F0YWthbmEnXSA9IDB4MzBGMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnd29rYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjY2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3b24nXSA9IDB4MjBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnd29ubW9ub3NwYWNlJ10gPSAweEZGRTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dvd2FlbnRoYWknXSA9IDB4MEUyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnd3BhcmVuJ10gPSAweDI0QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dyaW5nJ10gPSAweDFFOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3dzdXBlcmlvciddID0gMHgwMkI3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd3dHVybmVkJ10gPSAweDAyOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3d5bm4nXSA9IDB4MDFCRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneCddID0gMHgwMDc4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd4YWJvdmVjbWInXSA9IDB4MDMzRDtcbiAgICAgICAgICAgICAgICAgICAgdFsneGJvcG9tb2ZvJ10gPSAweDMxMTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3hjaXJjbGUnXSA9IDB4MjRFNztcbiAgICAgICAgICAgICAgICAgICAgdFsneGRpZXJlc2lzJ10gPSAweDFFOEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3hkb3RhY2NlbnQnXSA9IDB4MUU4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsneGVoYXJtZW5pYW4nXSA9IDB4MDU2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsneGknXSA9IDB4MDNCRTtcbiAgICAgICAgICAgICAgICAgICAgdFsneG1vbm9zcGFjZSddID0gMHhGRjU4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd4cGFyZW4nXSA9IDB4MjRCMztcbiAgICAgICAgICAgICAgICAgICAgdFsneHN1cGVyaW9yJ10gPSAweDAyRTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3knXSA9IDB4MDA3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFhZG9zcXVhcmUnXSA9IDB4MzM0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFiZW5nYWxpJ10gPSAweDA5QUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lhY3V0ZSddID0gMHgwMEZEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YWRldmEnXSA9IDB4MDkyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFla29yZWFuJ10gPSAweDMxNTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lhZ3VqYXJhdGknXSA9IDB4MEFBRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFndXJtdWtoaSddID0gMHgwQTJGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YWhpcmFnYW5hJ10gPSAweDMwODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lha2F0YWthbmEnXSA9IDB4MzBFNDtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YWtvcmVhbiddID0gMHgzMTUxO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YW1ha2thbnRoYWknXSA9IDB4MEU0RTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWFzbWFsbGhpcmFnYW5hJ10gPSAweDMwODM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lhc21hbGxrYXRha2FuYSddID0gMHgzMEUzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5YXNtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2QztcbiAgICAgICAgICAgICAgICAgICAgdFsneWF0Y3lyaWxsaWMnXSA9IDB4MDQ2MztcbiAgICAgICAgICAgICAgICAgICAgdFsneWNpcmNsZSddID0gMHgyNEU4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5Y2lyY3VtZmxleCddID0gMHgwMTc3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZGllcmVzaXMnXSA9IDB4MDBGRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWRvdGFjY2VudCddID0gMHgxRThGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZG90YmVsb3cnXSA9IDB4MUVGNTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVoYXJhYmljJ10gPSAweDA2NEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaGJhcnJlZWFyYWJpYyddID0gMHgwNkQyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhiYXJyZWVmaW5hbGFyYWJpYyddID0gMHhGQkFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhmaW5hbGFyYWJpYyddID0gMHhGRUYyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhoYW16YWFib3ZlYXJhYmljJ10gPSAweDA2MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaGhhbXphYWJvdmVmaW5hbGFyYWJpYyddID0gMHhGRThBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhoYW16YWFib3ZlaW5pdGlhbGFyYWJpYyddID0gMHhGRThCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhoYW16YWFib3ZlbWVkaWFsYXJhYmljJ10gPSAweEZFOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaGluaXRpYWxhcmFiaWMnXSA9IDB4RkVGMztcbiAgICAgICAgICAgICAgICAgICAgdFsneWVobWVkaWFsYXJhYmljJ10gPSAweEZFRjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaG1lZW1pbml0aWFsYXJhYmljJ10gPSAweEZDREQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llaG1lZW1pc29sYXRlZGFyYWJpYyddID0gMHhGQzU4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZWhub29uZmluYWxhcmFiaWMnXSA9IDB4RkM5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVodGhyZWVkb3RzYmVsb3dhcmFiaWMnXSA9IDB4MDZEMTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVrb3JlYW4nXSA9IDB4MzE1NjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVuJ10gPSAweDAwQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llbm1vbm9zcGFjZSddID0gMHhGRkU1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZW9rb3JlYW4nXSA9IDB4MzE1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVvcmluaGlldWhrb3JlYW4nXSA9IDB4MzE4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVyYWhiZW55b21vaGVicmV3J10gPSAweDA1QUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llcmFoYmVueW9tb2xlZnRoZWJyZXcnXSA9IDB4MDVBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWVyaWN5cmlsbGljJ10gPSAweDA0NEI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llcnVkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0Rjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llc2lldW5na29yZWFuJ10gPSAweDMxODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3llc2lldW5ncGFuc2lvc2tvcmVhbiddID0gMHgzMTgzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5ZXNpZXVuZ3Npb3Nrb3JlYW4nXSA9IDB4MzE4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWV0aXZoZWJyZXcnXSA9IDB4MDU5QTtcbiAgICAgICAgICAgICAgICAgICAgdFsneWdyYXZlJ10gPSAweDFFRjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lob29rJ10gPSAweDAxQjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lob29rYWJvdmUnXSA9IDB4MUVGNztcbiAgICAgICAgICAgICAgICAgICAgdFsneWlhcm1lbmlhbiddID0gMHgwNTc1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5aWN5cmlsbGljJ10gPSAweDA0NTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lpa29yZWFuJ10gPSAweDMxNjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lpbnlhbmcnXSA9IDB4MjYyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsneWl3bmFybWVuaWFuJ10gPSAweDA1ODI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ltb25vc3BhY2UnXSA9IDB4RkY1OTtcbiAgICAgICAgICAgICAgICAgICAgdFsneW9kJ10gPSAweDA1RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lvZGRhZ2VzaCddID0gMHhGQjM5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b2RkYWdlc2hoZWJyZXcnXSA9IDB4RkIzOTtcbiAgICAgICAgICAgICAgICAgICAgdFsneW9kaGVicmV3J10gPSAweDA1RDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lvZHlvZGhlYnJldyddID0gMHgwNUYyO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b2R5b2RwYXRhaGhlYnJldyddID0gMHhGQjFGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b2hpcmFnYW5hJ10gPSAweDMwODg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lvaWtvcmVhbiddID0gMHgzMTg5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b2thdGFrYW5hJ10gPSAweDMwRTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lva2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY5NjtcbiAgICAgICAgICAgICAgICAgICAgdFsneW9rb3JlYW4nXSA9IDB4MzE1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsneW9zbWFsbGhpcmFnYW5hJ10gPSAweDMwODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3lvc21hbGxrYXRha2FuYSddID0gMHgzMEU3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b3NtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsneW90Z3JlZWsnXSA9IDB4MDNGMztcbiAgICAgICAgICAgICAgICAgICAgdFsneW95YWVrb3JlYW4nXSA9IDB4MzE4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsneW95YWtvcmVhbiddID0gMHgzMTg3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5b3lha3RoYWknXSA9IDB4MEUyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsneW95aW5ndGhhaSddID0gMHgwRTBEO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5cGFyZW4nXSA9IDB4MjRCNDtcbiAgICAgICAgICAgICAgICAgICAgdFsneXBvZ2VncmFtbWVuaSddID0gMHgwMzdBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5cG9nZWdyYW1tZW5pZ3JlZWtjbWInXSA9IDB4MDM0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsneXInXSA9IDB4MDFBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsneXJpbmcnXSA9IDB4MUU5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsneXN1cGVyaW9yJ10gPSAweDAyQjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l0aWxkZSddID0gMHgxRUY5O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dHVybmVkJ10gPSAweDAyOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1aGlyYWdhbmEnXSA9IDB4MzA4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsneXVpa29yZWFuJ10gPSAweDMxOEM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1a2F0YWthbmEnXSA9IDB4MzBFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsneXVrYXRha2FuYWhhbGZ3aWR0aCddID0gMHhGRjk1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dWtvcmVhbiddID0gMHgzMTYwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dXNiaWdjeXJpbGxpYyddID0gMHgwNDZCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dXNiaWdpb3RpZmllZGN5cmlsbGljJ10gPSAweDA0NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1c2xpdHRsZWN5cmlsbGljJ10gPSAweDA0Njc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWMnXSA9IDB4MDQ2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsneXVzbWFsbGhpcmFnYW5hJ10gPSAweDMwODU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l1c21hbGxrYXRha2FuYSddID0gMHgzMEU1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dXNtYWxsa2F0YWthbmFoYWxmd2lkdGgnXSA9IDB4RkY2RDtcbiAgICAgICAgICAgICAgICAgICAgdFsneXV5ZWtvcmVhbiddID0gMHgzMThCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5dXllb2tvcmVhbiddID0gMHgzMThBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd5eWFiZW5nYWxpJ10gPSAweDA5REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3l5YWRldmEnXSA9IDB4MDk1RjtcbiAgICAgICAgICAgICAgICAgICAgdFsneiddID0gMHgwMDdBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWFybWVuaWFuJ10gPSAweDA1NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gMHgwMTdBO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWRldmEnXSA9IDB4MDk1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemFndXJtdWtoaSddID0gMHgwQTVCO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWhhcmFiaWMnXSA9IDB4MDYzODtcbiAgICAgICAgICAgICAgICAgICAgdFsnemFoZmluYWxhcmFiaWMnXSA9IDB4RkVDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemFoaW5pdGlhbGFyYWJpYyddID0gMHhGRUM3O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWhpcmFnYW5hJ10gPSAweDMwNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3phaG1lZGlhbGFyYWJpYyddID0gMHhGRUM4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWluYXJhYmljJ10gPSAweDA2MzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3phaW5maW5hbGFyYWJpYyddID0gMHhGRUIwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YWthdGFrYW5hJ10gPSAweDMwQjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3phcWVmZ2Fkb2xoZWJyZXcnXSA9IDB4MDU5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemFxZWZxYXRhbmhlYnJldyddID0gMHgwNTk0O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXJxYWhlYnJldyddID0gMHgwNTk4O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXlpbiddID0gMHgwNUQ2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXlpbmRhZ2VzaCddID0gMHhGQjM2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXlpbmRhZ2VzaGhlYnJldyddID0gMHhGQjM2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6YXlpbmhlYnJldyddID0gMHgwNUQ2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6Ym9wb21vZm8nXSA9IDB4MzExNztcbiAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSAweDAxN0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3pjaXJjbGUnXSA9IDB4MjRFOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemNpcmN1bWZsZXgnXSA9IDB4MUU5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemN1cmwnXSA9IDB4MDI5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemRvdCddID0gMHgwMTdDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSAweDAxN0M7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RiZWxvdyddID0gMHgxRTkzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZWN5cmlsbGljJ10gPSAweDA0Mzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDQ5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVkaWVyZXNpc2N5cmlsbGljJ10gPSAweDA0REY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plaGlyYWdhbmEnXSA9IDB4MzA1QztcbiAgICAgICAgICAgICAgICAgICAgdFsnemVrYXRha2FuYSddID0gMHgzMEJDO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvJ10gPSAweDAwMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plcm9hcmFiaWMnXSA9IDB4MDY2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb2JlbmdhbGknXSA9IDB4MDlFNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb2RldmEnXSA9IDB4MDk2NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb2d1amFyYXRpJ10gPSAweDBBRTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plcm9ndXJtdWtoaSddID0gMHgwQTY2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvaGFja2FyYWJpYyddID0gMHgwNjYwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvaW5mZXJpb3InXSA9IDB4MjA4MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb21vbm9zcGFjZSddID0gMHhGRjEwO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvb2xkc3R5bGUnXSA9IDB4RjczMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb3BlcnNpYW4nXSA9IDB4MDZGMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb3N1cGVyaW9yJ10gPSAweDIwNzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plcm90aGFpJ10gPSAweDBFNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3plcm93aWR0aGpvaW5lciddID0gMHhGRUZGO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvd2lkdGhub25qb2luZXInXSA9IDB4MjAwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnemVyb3dpZHRoc3BhY2UnXSA9IDB4MjAwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemV0YSddID0gMHgwM0I2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6aGJvcG9tb2ZvJ10gPSAweDMxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3poZWFybWVuaWFuJ10gPSAweDA1NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3poZWJyZXZlY3lyaWxsaWMnXSA9IDB4MDRDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemhlY3lyaWxsaWMnXSA9IDB4MDQzNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnemhlZGVzY2VuZGVyY3lyaWxsaWMnXSA9IDB4MDQ5NztcbiAgICAgICAgICAgICAgICAgICAgdFsnemhlZGllcmVzaXNjeXJpbGxpYyddID0gMHgwNEREO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6aWhpcmFnYW5hJ10gPSAweDMwNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ppa2F0YWthbmEnXSA9IDB4MzBCODtcbiAgICAgICAgICAgICAgICAgICAgdFsnemlub3JoZWJyZXcnXSA9IDB4MDVBRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnemxpbmViZWxvdyddID0gMHgxRTk1O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6bW9ub3NwYWNlJ10gPSAweEZGNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3pvaGlyYWdhbmEnXSA9IDB4MzA1RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnem9rYXRha2FuYSddID0gMHgzMEJFO1xuICAgICAgICAgICAgICAgICAgICB0Wyd6cGFyZW4nXSA9IDB4MjRCNTtcbiAgICAgICAgICAgICAgICAgICAgdFsnenJldHJvZmxleGhvb2snXSA9IDB4MDI5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnenN0cm9rZSddID0gMHgwMUI2O1xuICAgICAgICAgICAgICAgICAgICB0Wyd6dWhpcmFnYW5hJ10gPSAweDMwNUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3p1a2F0YWthbmEnXSA9IDB4MzBCQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnLm5vdGRlZiddID0gMHgwMDAwO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0bGVmdGJpZyddID0gMHgyMzI5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0bGVmdEJpZyddID0gMHgyMzI5O1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0bGVmdGJpZ2cnXSA9IDB4MjMyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYW5nYnJhY2tldGxlZnRCaWdnJ10gPSAweDIzMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2JyYWNrZXRyaWdodEJpZyddID0gMHgyMzJBO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0cmlnaHRiaWcnXSA9IDB4MjMyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYW5nYnJhY2tldHJpZ2h0QmlnZyddID0gMHgyMzJBO1xuICAgICAgICAgICAgICAgICAgICB0WydhbmdicmFja2V0cmlnaHRiaWdnJ10gPSAweDIzMkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aG9va2xlZnQnXSA9IDB4MjFBQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dob29rcmlnaHQnXSA9IDB4MjFBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dsZWZ0dG9waGFsZiddID0gMHgyMUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2xlZnRib3RoYWxmJ10gPSAweDIxQkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93bm9ydGhlYXN0J10gPSAweDIxOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93bm9ydGh3ZXN0J10gPSAweDIxOTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93cmlnaHR0b3BoYWxmJ10gPSAweDIxQzA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93cmlnaHRib3RoYWxmJ10gPSAweDIxQzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93c291dGhlYXN0J10gPSAweDIxOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93c291dGh3ZXN0J10gPSAweDIxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaGJpZyddID0gMHgyMjE2O1xuICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2hCaWcnXSA9IDB4MjIxNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYmFja3NsYXNoQmlnZyddID0gMHgyMjE2O1xuICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2hiaWdnJ10gPSAweDIyMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JhcmRibCddID0gMHgyMDE2O1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWh0aXBkb3dubGVmdCddID0gMHhGRTM3O1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWh0aXBkb3ducmlnaHQnXSA9IDB4RkUzNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VodGlwdXBsZWZ0J10gPSAweEZFMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlaHRpcHVwcmlnaHQnXSA9IDB4RkUzODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0QmlnJ10gPSAweDAwN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdGJpZyddID0gMHgwMDdCO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnRiaWdnJ10gPSAweDAwN0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdEJpZ2cnXSA9IDB4MDA3QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodEJpZyddID0gMHgwMDdEO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFjZXJpZ2h0YmlnJ10gPSAweDAwN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHRiaWdnJ10gPSAweDAwN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHRCaWdnJ10gPSAweDAwN0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0YmlnJ10gPSAweDAwNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0QmlnJ10gPSAweDAwNUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0YmlnZyddID0gMHgwMDVCO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdEJpZ2cnXSA9IDB4MDA1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0QmlnJ10gPSAweDAwNUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodGJpZyddID0gMHgwMDVEO1xuICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0cmlnaHRiaWdnJ10gPSAweDAwNUQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodEJpZ2cnXSA9IDB4MDA1RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ2xlZnRiaWcnXSA9IDB4MjMwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ2xlZnRCaWcnXSA9IDB4MjMwODtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ2xlZnRCaWdnJ10gPSAweDIzMDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlaWxpbmdsZWZ0YmlnZyddID0gMHgyMzA4O1xuICAgICAgICAgICAgICAgICAgICB0WydjZWlsaW5ncmlnaHRiaWcnXSA9IDB4MjMwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ3JpZ2h0QmlnJ10gPSAweDIzMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NlaWxpbmdyaWdodGJpZ2cnXSA9IDB4MjMwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2VpbGluZ3JpZ2h0QmlnZyddID0gMHgyMzA5O1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVkb3RkaXNwbGF5J10gPSAweDIyOTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZWRvdHRleHQnXSA9IDB4MjI5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlbXVsdGlwbHlkaXNwbGF5J10gPSAweDIyOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZW11bHRpcGx5dGV4dCddID0gMHgyMjk3O1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVwbHVzZGlzcGxheSddID0gMHgyMjk1O1xuICAgICAgICAgICAgICAgICAgICB0WydjaXJjbGVwbHVzdGV4dCddID0gMHgyMjk1O1xuICAgICAgICAgICAgICAgICAgICB0Wydjb250aW50ZWdyYWxkaXNwbGF5J10gPSAweDIyMkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2NvbnRpbnRlZ3JhbHRleHQnXSA9IDB4MjIyRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnY29wcm9kdWN0ZGlzcGxheSddID0gMHgyMjEwO1xuICAgICAgICAgICAgICAgICAgICB0Wydjb3Byb2R1Y3R0ZXh0J10gPSAweDIyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zsb29ybGVmdEJpZyddID0gMHgyMzBBO1xuICAgICAgICAgICAgICAgICAgICB0WydmbG9vcmxlZnRiaWcnXSA9IDB4MjMwQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmxvb3JsZWZ0YmlnZyddID0gMHgyMzBBO1xuICAgICAgICAgICAgICAgICAgICB0WydmbG9vcmxlZnRCaWdnJ10gPSAweDIzMEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2Zsb29ycmlnaHRiaWcnXSA9IDB4MjMwQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnZmxvb3JyaWdodEJpZyddID0gMHgyMzBCO1xuICAgICAgICAgICAgICAgICAgICB0WydmbG9vcnJpZ2h0QmlnZyddID0gMHgyMzBCO1xuICAgICAgICAgICAgICAgICAgICB0WydmbG9vcnJpZ2h0YmlnZyddID0gMHgyMzBCO1xuICAgICAgICAgICAgICAgICAgICB0WydoYXR3aWRlJ10gPSAweDAzMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdHdpZGVyJ10gPSAweDAzMDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2hhdHdpZGVzdCddID0gMHgwMzAyO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlcmNhbCddID0gMHgxRDQwO1xuICAgICAgICAgICAgICAgICAgICB0WydpbnRlZ3JhbGRpc3BsYXknXSA9IDB4MjIyQjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50ZWdyYWx0ZXh0J10gPSAweDIyMkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ludGVyc2VjdGlvbmRpc3BsYXknXSA9IDB4MjJDMjtcbiAgICAgICAgICAgICAgICAgICAgdFsnaW50ZXJzZWN0aW9udGV4dCddID0gMHgyMkMyO1xuICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2FsYW5kZGlzcGxheSddID0gMHgyMjI3O1xuICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2FsYW5kdGV4dCddID0gMHgyMjI3O1xuICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsb3JkaXNwbGF5J10gPSAweDIyMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2xvZ2ljYWxvcnRleHQnXSA9IDB4MjIyODtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0QmlnJ10gPSAweDAwMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdGJpZyddID0gMHgwMDI4O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnRCaWdnJ10gPSAweDAwMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdGJpZ2cnXSA9IDB4MDAyODtcbiAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodEJpZyddID0gMHgwMDI5O1xuICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0YmlnJ10gPSAweDAwMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRCaWdnJ10gPSAweDAwMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHRiaWdnJ10gPSAweDAwMjk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ByaW1lJ10gPSAweDIwMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Byb2R1Y3RkaXNwbGF5J10gPSAweDIyMEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3Byb2R1Y3R0ZXh0J10gPSAweDIyMEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZGljYWxiaWcnXSA9IDB4MjIxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbEJpZyddID0gMHgyMjFBO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsQmlnZyddID0gMHgyMjFBO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsYmlnZyddID0gMHgyMjFBO1xuICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsYnQnXSA9IDB4MjIxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbHRwJ10gPSAweDIyMUE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3JhZGljYWx2ZXJ0ZXgnXSA9IDB4MjIxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2hiaWcnXSA9IDB4MDAyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2hCaWcnXSA9IDB4MDAyRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2hCaWdnJ10gPSAweDAwMkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNoYmlnZyddID0gMHgwMDJGO1xuICAgICAgICAgICAgICAgICAgICB0WydzdW1tYXRpb25kaXNwbGF5J10gPSAweDIyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3N1bW1hdGlvbnRleHQnXSA9IDB4MjIxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGV3aWRlJ10gPSAweDAyREM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRld2lkZXInXSA9IDB4MDJEQztcbiAgICAgICAgICAgICAgICAgICAgdFsndGlsZGV3aWRlc3QnXSA9IDB4MDJEQztcbiAgICAgICAgICAgICAgICAgICAgdFsndW5pb25kaXNwbGF5J10gPSAweDIyQzM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9ubXVsdGlkaXNwbGF5J10gPSAweDIyOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9ubXVsdGl0ZXh0J10gPSAweDIyOEU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9uc3FkaXNwbGF5J10gPSAweDIyOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9uc3F0ZXh0J10gPSAweDIyOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9udGV4dCddID0gMHgyMkMzO1xuICAgICAgICAgICAgICAgICAgICB0Wyd2ZXh0ZW5kZG91YmxlJ10gPSAweDIyMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3ZleHRlbmRzaW5nbGUnXSA9IDB4MjIyMztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB2YXIgZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAweDAwMjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExJ10gPSAweDI3MDE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyJ10gPSAweDI3MDI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDInXSA9IDB4MjcwMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTMnXSA9IDB4MjcwNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTQnXSA9IDB4MjYwRTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTUnXSA9IDB4MjcwNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTExOSddID0gMHgyNzA3O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTE4J10gPSAweDI3MDg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMTcnXSA9IDB4MjcwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTExJ10gPSAweDI2MUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMiddID0gMHgyNjFFO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTMnXSA9IDB4MjcwQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0J10gPSAweDI3MEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNSddID0gMHgyNzBFO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTYnXSA9IDB4MjcwRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEwNSddID0gMHgyNzEwO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTcnXSA9IDB4MjcxMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE4J10gPSAweDI3MTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOSddID0gMHgyNzEzO1xuICAgICAgICAgICAgICAgICAgICB0WydhMjAnXSA9IDB4MjcxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTIxJ10gPSAweDI3MTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMiddID0gMHgyNzE2O1xuICAgICAgICAgICAgICAgICAgICB0WydhMjMnXSA9IDB4MjcxNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTI0J10gPSAweDI3MTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyNSddID0gMHgyNzE5O1xuICAgICAgICAgICAgICAgICAgICB0WydhMjYnXSA9IDB4MjcxQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTI3J10gPSAweDI3MUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyOCddID0gMHgyNzFDO1xuICAgICAgICAgICAgICAgICAgICB0WydhNiddID0gMHgyNzFEO1xuICAgICAgICAgICAgICAgICAgICB0WydhNyddID0gMHgyNzFFO1xuICAgICAgICAgICAgICAgICAgICB0WydhOCddID0gMHgyNzFGO1xuICAgICAgICAgICAgICAgICAgICB0WydhOSddID0gMHgyNzIwO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTAnXSA9IDB4MjcyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTI5J10gPSAweDI3MjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EzMCddID0gMHgyNzIzO1xuICAgICAgICAgICAgICAgICAgICB0WydhMzEnXSA9IDB4MjcyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTMyJ10gPSAweDI3MjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EzMyddID0gMHgyNzI2O1xuICAgICAgICAgICAgICAgICAgICB0WydhMzQnXSA9IDB4MjcyNztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTM1J10gPSAweDI2MDU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EzNiddID0gMHgyNzI5O1xuICAgICAgICAgICAgICAgICAgICB0WydhMzcnXSA9IDB4MjcyQTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTM4J10gPSAweDI3MkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EzOSddID0gMHgyNzJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhNDAnXSA9IDB4MjcyRDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTQxJ10gPSAweDI3MkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E0MiddID0gMHgyNzJGO1xuICAgICAgICAgICAgICAgICAgICB0WydhNDMnXSA9IDB4MjczMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTQ0J10gPSAweDI3MzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E0NSddID0gMHgyNzMyO1xuICAgICAgICAgICAgICAgICAgICB0WydhNDYnXSA9IDB4MjczMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTQ3J10gPSAweDI3MzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E0OCddID0gMHgyNzM1O1xuICAgICAgICAgICAgICAgICAgICB0WydhNDknXSA9IDB4MjczNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTUwJ10gPSAweDI3Mzc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E1MSddID0gMHgyNzM4O1xuICAgICAgICAgICAgICAgICAgICB0WydhNTInXSA9IDB4MjczOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTUzJ10gPSAweDI3M0E7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E1NCddID0gMHgyNzNCO1xuICAgICAgICAgICAgICAgICAgICB0WydhNTUnXSA9IDB4MjczQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTU2J10gPSAweDI3M0Q7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E1NyddID0gMHgyNzNFO1xuICAgICAgICAgICAgICAgICAgICB0WydhNTgnXSA9IDB4MjczRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTU5J10gPSAweDI3NDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E2MCddID0gMHgyNzQxO1xuICAgICAgICAgICAgICAgICAgICB0WydhNjEnXSA9IDB4Mjc0MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTYyJ10gPSAweDI3NDM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E2MyddID0gMHgyNzQ0O1xuICAgICAgICAgICAgICAgICAgICB0WydhNjQnXSA9IDB4Mjc0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTY1J10gPSAweDI3NDY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E2NiddID0gMHgyNzQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydhNjcnXSA9IDB4Mjc0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTY4J10gPSAweDI3NDk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E2OSddID0gMHgyNzRBO1xuICAgICAgICAgICAgICAgICAgICB0WydhNzAnXSA9IDB4Mjc0QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTcxJ10gPSAweDI1Q0Y7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E3MiddID0gMHgyNzREO1xuICAgICAgICAgICAgICAgICAgICB0WydhNzMnXSA9IDB4MjVBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTc0J10gPSAweDI3NEY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDMnXSA9IDB4Mjc1MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTc1J10gPSAweDI3NTE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDQnXSA9IDB4Mjc1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTc2J10gPSAweDI1QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E3NyddID0gMHgyNUJDO1xuICAgICAgICAgICAgICAgICAgICB0WydhNzgnXSA9IDB4MjVDNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTc5J10gPSAweDI3NTY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E4MSddID0gMHgyNUQ3O1xuICAgICAgICAgICAgICAgICAgICB0WydhODInXSA9IDB4Mjc1ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTgzJ10gPSAweDI3NTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E4NCddID0gMHgyNzVBO1xuICAgICAgICAgICAgICAgICAgICB0WydhOTcnXSA9IDB4Mjc1QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTk4J10gPSAweDI3NUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E5OSddID0gMHgyNzVEO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTAwJ10gPSAweDI3NUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMDEnXSA9IDB4Mjc2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEwMiddID0gMHgyNzYyO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTAzJ10gPSAweDI3NjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMDQnXSA9IDB4Mjc2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEwNiddID0gMHgyNzY1O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTA3J10gPSAweDI3NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMDgnXSA9IDB4Mjc2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTExMiddID0gMHgyNjYzO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTExJ10gPSAweDI2NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMTAnXSA9IDB4MjY2NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEwOSddID0gMHgyNjYwO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTIwJ10gPSAweDI0NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMjEnXSA9IDB4MjQ2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEyMiddID0gMHgyNDYyO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTIzJ10gPSAweDI0NjM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMjQnXSA9IDB4MjQ2NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEyNSddID0gMHgyNDY1O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTI2J10gPSAweDI0NjY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMjcnXSA9IDB4MjQ2NztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEyOCddID0gMHgyNDY4O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTI5J10gPSAweDI0Njk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMzAnXSA9IDB4Mjc3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEzMSddID0gMHgyNzc3O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTMyJ10gPSAweDI3Nzg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMzMnXSA9IDB4Mjc3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEzNCddID0gMHgyNzdBO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTM1J10gPSAweDI3N0I7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMzYnXSA9IDB4Mjc3QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTEzNyddID0gMHgyNzdEO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTM4J10gPSAweDI3N0U7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExMzknXSA9IDB4Mjc3RjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0MCddID0gMHgyNzgwO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTQxJ10gPSAweDI3ODE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNDInXSA9IDB4Mjc4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0MyddID0gMHgyNzgzO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTQ0J10gPSAweDI3ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNDUnXSA9IDB4Mjc4NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0NiddID0gMHgyNzg2O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTQ3J10gPSAweDI3ODc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNDgnXSA9IDB4Mjc4ODtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE0OSddID0gMHgyNzg5O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTUwJ10gPSAweDI3OEE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNTEnXSA9IDB4Mjc4QjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE1MiddID0gMHgyNzhDO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTUzJ10gPSAweDI3OEQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNTQnXSA9IDB4Mjc4RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE1NSddID0gMHgyNzhGO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTU2J10gPSAweDI3OTA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNTcnXSA9IDB4Mjc5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE1OCddID0gMHgyNzkyO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTU5J10gPSAweDI3OTM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNjAnXSA9IDB4Mjc5NDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE2MSddID0gMHgyMTkyO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTYzJ10gPSAweDIxOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNjQnXSA9IDB4MjE5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5NiddID0gMHgyNzk4O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTY1J10gPSAweDI3OTk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOTInXSA9IDB4Mjc5QTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE2NiddID0gMHgyNzlCO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTY3J10gPSAweDI3OUM7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNjgnXSA9IDB4Mjc5RDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE2OSddID0gMHgyNzlFO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTcwJ10gPSAweDI3OUY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNzEnXSA9IDB4MjdBMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE3MiddID0gMHgyN0ExO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTczJ10gPSAweDI3QTI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNjInXSA9IDB4MjdBMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE3NCddID0gMHgyN0E0O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTc1J10gPSAweDI3QTU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNzYnXSA9IDB4MjdBNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE3NyddID0gMHgyN0E3O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTc4J10gPSAweDI3QTg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExNzknXSA9IDB4MjdBOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5MyddID0gMHgyN0FBO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTgwJ10gPSAweDI3QUI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOTknXSA9IDB4MjdBQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE4MSddID0gMHgyN0FEO1xuICAgICAgICAgICAgICAgICAgICB0WydhMjAwJ10gPSAweDI3QUU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExODInXSA9IDB4MjdBRjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTIwMSddID0gMHgyN0IxO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTgzJ10gPSAweDI3QjI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExODQnXSA9IDB4MjdCMztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5NyddID0gMHgyN0I0O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTg1J10gPSAweDI3QjU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOTQnXSA9IDB4MjdCNjtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5OCddID0gMHgyN0I3O1xuICAgICAgICAgICAgICAgICAgICB0WydhMTg2J10gPSAweDI3Qjg7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExOTUnXSA9IDB4MjdCOTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE4NyddID0gMHgyN0JBO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTg4J10gPSAweDI3QkI7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2ExODknXSA9IDB4MjdCQztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTE5MCddID0gMHgyN0JEO1xuICAgICAgICAgICAgICAgICAgICB0WydhMTkxJ10gPSAweDI3QkU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E4OSddID0gMHgyNzY4O1xuICAgICAgICAgICAgICAgICAgICB0WydhOTAnXSA9IDB4Mjc2OTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTkzJ10gPSAweDI3NkE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E5NCddID0gMHgyNzZCO1xuICAgICAgICAgICAgICAgICAgICB0WydhOTEnXSA9IDB4Mjc2QztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTkyJ10gPSAweDI3NkQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDUnXSA9IDB4Mjc2RTtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTg1J10gPSAweDI3NkY7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2EyMDYnXSA9IDB4Mjc3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsnYTg2J10gPSAweDI3NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E4NyddID0gMHgyNzcyO1xuICAgICAgICAgICAgICAgICAgICB0WydhODgnXSA9IDB4Mjc3MztcbiAgICAgICAgICAgICAgICAgICAgdFsnYTk1J10gPSAweDI3NzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbJ2E5NiddID0gMHgyNzc1O1xuICAgICAgICAgICAgICAgICAgICB0Wycubm90ZGVmJ10gPSAweDAwMDA7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRHbHlwaHNVbmljb2RlID0gZ2V0R2x5cGhzVW5pY29kZTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldERpbmdiYXRzR2x5cGhzVW5pY29kZSA9IGdldERpbmdiYXRzR2x5cGhzVW5pY29kZTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTc4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkgPSBleHBvcnRzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9IGV4cG9ydHMuZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzID0gZXhwb3J0cy5nZXRTeW1ib2xzRm9udHMgPSBleHBvcnRzLmdldFNlcmlmRm9udHMgPSBleHBvcnRzLmdldE5vblN0ZEZvbnRNYXAgPSBleHBvcnRzLmdldFN0ZEZvbnRNYXAgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldFN0ZEZvbnRNYXAgPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbE5hcnJvdyddID0gJ0hlbHZldGljYSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsTmFycm93LUJvbGQnXSA9ICdIZWx2ZXRpY2EtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsTmFycm93LUJvbGRJdGFsaWMnXSA9ICdIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbE5hcnJvdy1JdGFsaWMnXSA9ICdIZWx2ZXRpY2EtT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsQmxhY2snXSA9ICdIZWx2ZXRpY2EnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbEJsYWNrLUJvbGQnXSA9ICdIZWx2ZXRpY2EtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsQmxhY2stQm9sZEl0YWxpYyddID0gJ0hlbHZldGljYS1Cb2xkT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsQmxhY2stSXRhbGljJ10gPSAnSGVsdmV0aWNhLU9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbC1CbGFjayddID0gJ0hlbHZldGljYSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsLUJsYWNrLUJvbGQnXSA9ICdIZWx2ZXRpY2EtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsLUJsYWNrLUJvbGRJdGFsaWMnXSA9ICdIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbC1CbGFjay1JdGFsaWMnXSA9ICdIZWx2ZXRpY2EtT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsJ10gPSAnSGVsdmV0aWNhJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWwtQm9sZCddID0gJ0hlbHZldGljYS1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWwtQm9sZEl0YWxpYyddID0gJ0hlbHZldGljYS1Cb2xkT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FyaWFsLUl0YWxpYyddID0gJ0hlbHZldGljYS1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWwtQm9sZEl0YWxpY01UJ10gPSAnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWwtQm9sZE1UJ10gPSAnSGVsdmV0aWNhLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydBcmlhbC1JdGFsaWNNVCddID0gJ0hlbHZldGljYS1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQXJpYWxNVCddID0gJ0hlbHZldGljYSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXItQm9sZCddID0gJ0NvdXJpZXItQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXItQm9sZEl0YWxpYyddID0gJ0NvdXJpZXItQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydDb3VyaWVyLUl0YWxpYyddID0gJ0NvdXJpZXItT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXJOZXcnXSA9ICdDb3VyaWVyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ldy1Cb2xkJ10gPSAnQ291cmllci1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ldy1Cb2xkSXRhbGljJ10gPSAnQ291cmllci1Cb2xkT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXJOZXctSXRhbGljJ10gPSAnQ291cmllci1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ld1BTLUJvbGRJdGFsaWNNVCddID0gJ0NvdXJpZXItQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydDb3VyaWVyTmV3UFMtQm9sZE1UJ10gPSAnQ291cmllci1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ld1BTLUl0YWxpY01UJ10gPSAnQ291cmllci1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllck5ld1BTTVQnXSA9ICdDb3VyaWVyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhJ10gPSAnSGVsdmV0aWNhJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhLUJvbGQnXSA9ICdIZWx2ZXRpY2EtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hlbHZldGljYS1Cb2xkSXRhbGljJ10gPSAnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJ10gPSAnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhLUl0YWxpYyddID0gJ0hlbHZldGljYS1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnSGVsdmV0aWNhLU9ibGlxdWUnXSA9ICdIZWx2ZXRpY2EtT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NlZ29lVUlTeW1ib2wnXSA9ICdIZWx2ZXRpY2EnO1xuICAgICAgICAgICAgICAgICAgICB0WydTeW1ib2wtQm9sZCddID0gJ1N5bWJvbCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1N5bWJvbC1Cb2xkSXRhbGljJ10gPSAnU3ltYm9sJztcbiAgICAgICAgICAgICAgICAgICAgdFsnU3ltYm9sLUl0YWxpYyddID0gJ1N5bWJvbCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW4nXSA9ICdUaW1lcy1Sb21hbic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW4tQm9sZCddID0gJ1RpbWVzLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lc05ld1JvbWFuLUJvbGRJdGFsaWMnXSA9ICdUaW1lcy1Cb2xkSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hbi1JdGFsaWMnXSA9ICdUaW1lcy1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lc05ld1JvbWFuUFMnXSA9ICdUaW1lcy1Sb21hbic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW5QUy1Cb2xkJ10gPSAnVGltZXMtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljJ10gPSAnVGltZXMtQm9sZEl0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW5QUy1Cb2xkSXRhbGljTVQnXSA9ICdUaW1lcy1Cb2xkSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hblBTLUJvbGRNVCddID0gJ1RpbWVzLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lc05ld1JvbWFuUFMtSXRhbGljJ10gPSAnVGltZXMtSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hblBTLUl0YWxpY01UJ10gPSAnVGltZXMtSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hblBTTVQnXSA9ICdUaW1lcy1Sb21hbic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzTmV3Um9tYW5QU01ULUJvbGQnXSA9ICdUaW1lcy1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXNOZXdSb21hblBTTVQtQm9sZEl0YWxpYyddID0gJ1RpbWVzLUJvbGRJdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lc05ld1JvbWFuUFNNVC1JdGFsaWMnXSA9ICdUaW1lcy1JdGFsaWMnO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0U3RkRm9udE1hcCA9IGdldFN0ZEZvbnRNYXA7XG4gICAgICAgICAgICAgICAgdmFyIGdldE5vblN0ZEZvbnRNYXAgPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICB0WydDYWxpYnJpJ10gPSAnSGVsdmV0aWNhJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2FsaWJyaS1Cb2xkJ10gPSAnSGVsdmV0aWNhLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWxpYnJpLUJvbGRJdGFsaWMnXSA9ICdIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWxpYnJpLUl0YWxpYyddID0gJ0hlbHZldGljYS1PYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2VudHVyeUdvdGhpYyddID0gJ0hlbHZldGljYSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NlbnR1cnlHb3RoaWMtQm9sZCddID0gJ0hlbHZldGljYS1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2VudHVyeUdvdGhpYy1Cb2xkSXRhbGljJ10gPSAnSGVsdmV0aWNhLUJvbGRPYmxpcXVlJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2VudHVyeUdvdGhpYy1JdGFsaWMnXSA9ICdIZWx2ZXRpY2EtT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbWljU2Fuc01TJ10gPSAnQ29taWMgU2FucyBNUyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbWljU2Fuc01TLUJvbGQnXSA9ICdDb21pYyBTYW5zIE1TLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydDb21pY1NhbnNNUy1Cb2xkSXRhbGljJ10gPSAnQ29taWMgU2FucyBNUy1Cb2xkSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnQ29taWNTYW5zTVMtSXRhbGljJ10gPSAnQ29taWMgU2FucyBNUy1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydMdWNpZGFDb25zb2xlJ10gPSAnQ291cmllcic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0x1Y2lkYUNvbnNvbGUtQm9sZCddID0gJ0NvdXJpZXItQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0x1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyddID0gJ0NvdXJpZXItQm9sZE9ibGlxdWUnO1xuICAgICAgICAgICAgICAgICAgICB0WydMdWNpZGFDb25zb2xlLUl0YWxpYyddID0gJ0NvdXJpZXItT2JsaXF1ZSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0x1Y2lkYVNhbnMtRGVtaSddID0gJ0hlbHZldGljYS1Cb2xkJztcbiAgICAgICAgICAgICAgICAgICAgdFsnTVMtR290aGljJ10gPSAnTVMgR290aGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnTVMtR290aGljLUJvbGQnXSA9ICdNUyBHb3RoaWMtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLUdvdGhpYy1Cb2xkSXRhbGljJ10gPSAnTVMgR290aGljLUJvbGRJdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydNUy1Hb3RoaWMtSXRhbGljJ10gPSAnTVMgR290aGljLUl0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLU1pbmNobyddID0gJ01TIE1pbmNobyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLU1pbmNoby1Cb2xkJ10gPSAnTVMgTWluY2hvLUJvbGQnO1xuICAgICAgICAgICAgICAgICAgICB0WydNUy1NaW5jaG8tQm9sZEl0YWxpYyddID0gJ01TIE1pbmNoby1Cb2xkSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnTVMtTWluY2hvLUl0YWxpYyddID0gJ01TIE1pbmNoby1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydNUy1QR290aGljJ10gPSAnTVMgUEdvdGhpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBHb3RoaWMtQm9sZCddID0gJ01TIFBHb3RoaWMtQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBHb3RoaWMtQm9sZEl0YWxpYyddID0gJ01TIFBHb3RoaWMtQm9sZEl0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBHb3RoaWMtSXRhbGljJ10gPSAnTVMgUEdvdGhpYy1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydNUy1QTWluY2hvJ10gPSAnTVMgUE1pbmNobyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBNaW5jaG8tQm9sZCddID0gJ01TIFBNaW5jaG8tQm9sZCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBNaW5jaG8tQm9sZEl0YWxpYyddID0gJ01TIFBNaW5jaG8tQm9sZEl0YWxpYyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01TLVBNaW5jaG8tSXRhbGljJ10gPSAnTVMgUE1pbmNoby1JdGFsaWMnO1xuICAgICAgICAgICAgICAgICAgICB0WydOdXB0aWFsU2NyaXB0J10gPSAnVGltZXMtSXRhbGljJztcbiAgICAgICAgICAgICAgICAgICAgdFsnV2luZ2RpbmdzJ10gPSAnWmFwZkRpbmdiYXRzJztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldE5vblN0ZEZvbnRNYXAgPSBnZXROb25TdGRGb250TWFwO1xuICAgICAgICAgICAgICAgIHZhciBnZXRTZXJpZkZvbnRzID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWRvYmUgSmVuc29uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBZG9iZSBUZXh0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBbGJlcnR1cyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQWxkdXMnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FsZXhhbmRyaWEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0FsZ2VyaWFuJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBbWVyaWNhbiBUeXBld3JpdGVyJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBbnRpcXVhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBcGV4J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBcm5vJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydBc3RlciddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQXVyb3JhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydCYXNrZXJ2aWxsZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmVsbCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmVtYm8nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JlbWJvIFNjaG9vbGJvb2snXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Jlbmd1aWF0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydCZXJrZWxleSBPbGQgU3R5bGUnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Jlcm5oYXJkIE1vZGVybiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQmVydGhvbGQgQ2l0eSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQm9kb25pJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydCYXVlciBCb2RvbmknXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Jvb2sgQW50aXF1YSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQm9va21hbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQm9yZGVhdXggUm9tYW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NhbGlmb3JuaWFuIEZCJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWxpc3RvJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDYWx2ZXJ0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDYXBpdGFscyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2FtYnJpYSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2FydGllciddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2FzbG9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDYXR1bGwnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NlbnRhdXInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NlbnR1cnkgT2xkIFN0eWxlJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDZW50dXJ5IFNjaG9vbGJvb2snXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NoYXBhcnJhbCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2hhcmlzIFNJTCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2hlbHRlbmhhbSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2hvbGxhIFNsYWInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NsYXJlbmRvbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ2xlYXJmYWNlJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydDb2NoaW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbG9ubmEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbXB1dGVyIE1vZGVybiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ29uY3JldGUgUm9tYW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvbnN0YW50aWEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0Nvb3BlciBCbGFjayddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ29yb25hJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydFY290eXBlJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydFZ3lwdGllbm5lJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydFbGVwaGFudCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRXhjZWxzaW9yJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydGYWlyZmllbGQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ZGIFNjYWxhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydGb2xrYXJkJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydGb290bGlnaHQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0ZyZWVTZXJpZiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnRnJpeiBRdWFkcmF0YSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnR2FyYW1vbmQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dlbnRpdW0nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dlb3JnaWEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dsb3VjZXN0ZXInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dvdWR5IE9sZCBTdHlsZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnR291ZHkgU2Nob29sYm9vayddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnR291ZHkgUHJvIEZvbnQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0dyYW5qb24nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0d1YXJkaWFuIEVneXB0aWFuJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydIZWF0aGVyJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydIZXJjdWxlcyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSGlnaCBUb3dlciBUZXh0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydIaXJvc2hpZ2UnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hvZWZsZXIgVGV4dCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSHVtYW5hIFNlcmlmJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydJbXByaW50J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydJb25pYyBOby4gNSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnSmFuc29uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydKb2FubmEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0tvcmlubmEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xleGljb24nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xpYmVyYXRpb24gU2VyaWYnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0xpbnV4IExpYmVydGluZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTGl0ZXJhdHVybmF5YSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTHVjaWRhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydMdWNpZGEgQnJpZ2h0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydNZWxpb3InXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01lbXBoaXMnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01pbGxlciddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTWluaW9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydNb2Rlcm4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ01vbmEgTGlzYSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTXJzIEVhdmVzJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydNUyBTZXJpZiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTXVzZW8gU2xhYiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTmV3IFlvcmsnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ05pbWJ1cyBSb21hbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnTlBTIFJhd2xpbnNvbiBSb2Fkd2F5J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydOdXB0aWFsU2NyaXB0J10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydQYWxhdGlubyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGVycGV0dWEnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BsYW50aW4nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1BsYW50aW4gU2Nob29sYm9vayddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUGxheWJpbGwnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1Bvb3IgUmljaGFyZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUmF3bGluc29uIFJvYWR3YXknXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JlbmF1bHQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JlcXVpZW0nXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1JvY2t3ZWxsJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydSb21hbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnUm90aXMgU2VyaWYnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NhYm9uJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydTY2FsYSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2VhZ3VsbCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU2lzdGluYSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU291dmVuaXInXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1NUSVgnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1N0b25lIEluZm9ybWFsJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydTdG9uZSBTZXJpZiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnU3lsZmFlbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXMnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RyYWphbiddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVHJpbml0w6knXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RydW1wIE1lZGlhZXZhbCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVXRvcGlhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydWYWxlIFR5cGUnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0JpdHN0cmVhbSBWZXJhJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydWZXJhIFNlcmlmJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydWZXJzYWlsbGVzJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydXYW50ZWQnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1dlaXNzJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydXaWRlIExhdGluJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydXaW5kc29yJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydYSVRTJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0U2VyaWZGb250cyA9IGdldFNlcmlmRm9udHM7XG4gICAgICAgICAgICAgICAgdmFyIGdldFN5bWJvbHNGb250cyA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0RpbmdiYXRzJ10gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0WydTeW1ib2wnXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1phcGZEaW5nYmF0cyddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldFN5bWJvbHNGb250cyA9IGdldFN5bWJvbHNGb250cztcbiAgICAgICAgICAgICAgICB2YXIgZ2V0R2x5cGhNYXBGb3JTdGFuZGFyZEZvbnRzID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgdFsyXSA9IDEwO1xuICAgICAgICAgICAgICAgICAgICB0WzNdID0gMzI7XG4gICAgICAgICAgICAgICAgICAgIHRbNF0gPSAzMztcbiAgICAgICAgICAgICAgICAgICAgdFs1XSA9IDM0O1xuICAgICAgICAgICAgICAgICAgICB0WzZdID0gMzU7XG4gICAgICAgICAgICAgICAgICAgIHRbN10gPSAzNjtcbiAgICAgICAgICAgICAgICAgICAgdFs4XSA9IDM3O1xuICAgICAgICAgICAgICAgICAgICB0WzldID0gMzg7XG4gICAgICAgICAgICAgICAgICAgIHRbMTBdID0gMzk7XG4gICAgICAgICAgICAgICAgICAgIHRbMTFdID0gNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbMTJdID0gNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTNdID0gNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbMTRdID0gNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbMTVdID0gNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTZdID0gNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbMTddID0gNDY7XG4gICAgICAgICAgICAgICAgICAgIHRbMThdID0gNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbMTldID0gNDg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjBdID0gNDk7XG4gICAgICAgICAgICAgICAgICAgIHRbMjFdID0gNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjJdID0gNTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMjNdID0gNTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjRdID0gNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjVdID0gNTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjZdID0gNTU7XG4gICAgICAgICAgICAgICAgICAgIHRbMjddID0gNTY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjhdID0gNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbMjldID0gNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzBdID0gODk0O1xuICAgICAgICAgICAgICAgICAgICB0WzMxXSA9IDYwO1xuICAgICAgICAgICAgICAgICAgICB0WzMyXSA9IDYxO1xuICAgICAgICAgICAgICAgICAgICB0WzMzXSA9IDYyO1xuICAgICAgICAgICAgICAgICAgICB0WzM0XSA9IDYzO1xuICAgICAgICAgICAgICAgICAgICB0WzM1XSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICB0WzM2XSA9IDY1O1xuICAgICAgICAgICAgICAgICAgICB0WzM3XSA9IDY2O1xuICAgICAgICAgICAgICAgICAgICB0WzM4XSA9IDY3O1xuICAgICAgICAgICAgICAgICAgICB0WzM5XSA9IDY4O1xuICAgICAgICAgICAgICAgICAgICB0WzQwXSA9IDY5O1xuICAgICAgICAgICAgICAgICAgICB0WzQxXSA9IDcwO1xuICAgICAgICAgICAgICAgICAgICB0WzQyXSA9IDcxO1xuICAgICAgICAgICAgICAgICAgICB0WzQzXSA9IDcyO1xuICAgICAgICAgICAgICAgICAgICB0WzQ0XSA9IDczO1xuICAgICAgICAgICAgICAgICAgICB0WzQ1XSA9IDc0O1xuICAgICAgICAgICAgICAgICAgICB0WzQ2XSA9IDc1O1xuICAgICAgICAgICAgICAgICAgICB0WzQ3XSA9IDc2O1xuICAgICAgICAgICAgICAgICAgICB0WzQ4XSA9IDc3O1xuICAgICAgICAgICAgICAgICAgICB0WzQ5XSA9IDc4O1xuICAgICAgICAgICAgICAgICAgICB0WzUwXSA9IDc5O1xuICAgICAgICAgICAgICAgICAgICB0WzUxXSA9IDgwO1xuICAgICAgICAgICAgICAgICAgICB0WzUyXSA9IDgxO1xuICAgICAgICAgICAgICAgICAgICB0WzUzXSA9IDgyO1xuICAgICAgICAgICAgICAgICAgICB0WzU0XSA9IDgzO1xuICAgICAgICAgICAgICAgICAgICB0WzU1XSA9IDg0O1xuICAgICAgICAgICAgICAgICAgICB0WzU2XSA9IDg1O1xuICAgICAgICAgICAgICAgICAgICB0WzU3XSA9IDg2O1xuICAgICAgICAgICAgICAgICAgICB0WzU4XSA9IDg3O1xuICAgICAgICAgICAgICAgICAgICB0WzU5XSA9IDg4O1xuICAgICAgICAgICAgICAgICAgICB0WzYwXSA9IDg5O1xuICAgICAgICAgICAgICAgICAgICB0WzYxXSA9IDkwO1xuICAgICAgICAgICAgICAgICAgICB0WzYyXSA9IDkxO1xuICAgICAgICAgICAgICAgICAgICB0WzYzXSA9IDkyO1xuICAgICAgICAgICAgICAgICAgICB0WzY0XSA9IDkzO1xuICAgICAgICAgICAgICAgICAgICB0WzY1XSA9IDk0O1xuICAgICAgICAgICAgICAgICAgICB0WzY2XSA9IDk1O1xuICAgICAgICAgICAgICAgICAgICB0WzY3XSA9IDk2O1xuICAgICAgICAgICAgICAgICAgICB0WzY4XSA9IDk3O1xuICAgICAgICAgICAgICAgICAgICB0WzY5XSA9IDk4O1xuICAgICAgICAgICAgICAgICAgICB0WzcwXSA9IDk5O1xuICAgICAgICAgICAgICAgICAgICB0WzcxXSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdFs3Ml0gPSAxMDE7XG4gICAgICAgICAgICAgICAgICAgIHRbNzNdID0gMTAyO1xuICAgICAgICAgICAgICAgICAgICB0Wzc0XSA9IDEwMztcbiAgICAgICAgICAgICAgICAgICAgdFs3NV0gPSAxMDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbNzZdID0gMTA1O1xuICAgICAgICAgICAgICAgICAgICB0Wzc3XSA9IDEwNjtcbiAgICAgICAgICAgICAgICAgICAgdFs3OF0gPSAxMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbNzldID0gMTA4O1xuICAgICAgICAgICAgICAgICAgICB0WzgwXSA9IDEwOTtcbiAgICAgICAgICAgICAgICAgICAgdFs4MV0gPSAxMTA7XG4gICAgICAgICAgICAgICAgICAgIHRbODJdID0gMTExO1xuICAgICAgICAgICAgICAgICAgICB0WzgzXSA9IDExMjtcbiAgICAgICAgICAgICAgICAgICAgdFs4NF0gPSAxMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbODVdID0gMTE0O1xuICAgICAgICAgICAgICAgICAgICB0Wzg2XSA9IDExNTtcbiAgICAgICAgICAgICAgICAgICAgdFs4N10gPSAxMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbODhdID0gMTE3O1xuICAgICAgICAgICAgICAgICAgICB0Wzg5XSA9IDExODtcbiAgICAgICAgICAgICAgICAgICAgdFs5MF0gPSAxMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbOTFdID0gMTIwO1xuICAgICAgICAgICAgICAgICAgICB0WzkyXSA9IDEyMTtcbiAgICAgICAgICAgICAgICAgICAgdFs5M10gPSAxMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbOTRdID0gMTIzO1xuICAgICAgICAgICAgICAgICAgICB0Wzk1XSA9IDEyNDtcbiAgICAgICAgICAgICAgICAgICAgdFs5Nl0gPSAxMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbOTddID0gMTI2O1xuICAgICAgICAgICAgICAgICAgICB0Wzk4XSA9IDE5NjtcbiAgICAgICAgICAgICAgICAgICAgdFs5OV0gPSAxOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAwXSA9IDE5OTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDFdID0gMjAxO1xuICAgICAgICAgICAgICAgICAgICB0WzEwMl0gPSAyMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAzXSA9IDIxNDtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDRdID0gMjIwO1xuICAgICAgICAgICAgICAgICAgICB0WzEwNV0gPSAyMjU7XG4gICAgICAgICAgICAgICAgICAgIHRbMTA2XSA9IDIyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDddID0gMjI2O1xuICAgICAgICAgICAgICAgICAgICB0WzEwOF0gPSAyMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbMTA5XSA9IDIyNztcbiAgICAgICAgICAgICAgICAgICAgdFsxMTBdID0gMjI5O1xuICAgICAgICAgICAgICAgICAgICB0WzExMV0gPSAyMzE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTEyXSA9IDIzMztcbiAgICAgICAgICAgICAgICAgICAgdFsxMTNdID0gMjMyO1xuICAgICAgICAgICAgICAgICAgICB0WzExNF0gPSAyMzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTE1XSA9IDIzNTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMTZdID0gMjM3O1xuICAgICAgICAgICAgICAgICAgICB0WzExN10gPSAyMzY7XG4gICAgICAgICAgICAgICAgICAgIHRbMTE4XSA9IDIzODtcbiAgICAgICAgICAgICAgICAgICAgdFsxMTldID0gMjM5O1xuICAgICAgICAgICAgICAgICAgICB0WzEyMF0gPSAyNDE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTIxXSA9IDI0MztcbiAgICAgICAgICAgICAgICAgICAgdFsxMjJdID0gMjQyO1xuICAgICAgICAgICAgICAgICAgICB0WzEyM10gPSAyNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTI0XSA9IDI0NjtcbiAgICAgICAgICAgICAgICAgICAgdFsxMjVdID0gMjQ1O1xuICAgICAgICAgICAgICAgICAgICB0WzEyNl0gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMTI3XSA9IDI0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMjhdID0gMjUxO1xuICAgICAgICAgICAgICAgICAgICB0WzEyOV0gPSAyNTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMTMwXSA9IDgyMjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTMxXSA9IDE3NjtcbiAgICAgICAgICAgICAgICAgICAgdFsxMzJdID0gMTYyO1xuICAgICAgICAgICAgICAgICAgICB0WzEzM10gPSAxNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMTM0XSA9IDE2NztcbiAgICAgICAgICAgICAgICAgICAgdFsxMzVdID0gODIyNjtcbiAgICAgICAgICAgICAgICAgICAgdFsxMzZdID0gMTgyO1xuICAgICAgICAgICAgICAgICAgICB0WzEzN10gPSAyMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMTM4XSA9IDE3NDtcbiAgICAgICAgICAgICAgICAgICAgdFsxMzldID0gMTY5O1xuICAgICAgICAgICAgICAgICAgICB0WzE0MF0gPSA4NDgyO1xuICAgICAgICAgICAgICAgICAgICB0WzE0MV0gPSAxODA7XG4gICAgICAgICAgICAgICAgICAgIHRbMTQyXSA9IDE2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsxNDNdID0gODgwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsxNDRdID0gMTk4O1xuICAgICAgICAgICAgICAgICAgICB0WzE0NV0gPSAyMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbMTQ2XSA9IDg3MzQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTQ3XSA9IDE3NztcbiAgICAgICAgICAgICAgICAgICAgdFsxNDhdID0gODgwNDtcbiAgICAgICAgICAgICAgICAgICAgdFsxNDldID0gODgwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsxNTBdID0gMTY1O1xuICAgICAgICAgICAgICAgICAgICB0WzE1MV0gPSAxODE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTUyXSA9IDg3MDY7XG4gICAgICAgICAgICAgICAgICAgIHRbMTUzXSA9IDg3MjE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTU0XSA9IDg3MTk7XG4gICAgICAgICAgICAgICAgICAgIHRbMTU2XSA9IDg3NDc7XG4gICAgICAgICAgICAgICAgICAgIHRbMTU3XSA9IDE3MDtcbiAgICAgICAgICAgICAgICAgICAgdFsxNThdID0gMTg2O1xuICAgICAgICAgICAgICAgICAgICB0WzE1OV0gPSA4NDg2O1xuICAgICAgICAgICAgICAgICAgICB0WzE2MF0gPSAyMzA7XG4gICAgICAgICAgICAgICAgICAgIHRbMTYxXSA9IDI0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsxNjJdID0gMTkxO1xuICAgICAgICAgICAgICAgICAgICB0WzE2M10gPSAxNjE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTY0XSA9IDE3MjtcbiAgICAgICAgICAgICAgICAgICAgdFsxNjVdID0gODczMDtcbiAgICAgICAgICAgICAgICAgICAgdFsxNjZdID0gNDAyO1xuICAgICAgICAgICAgICAgICAgICB0WzE2N10gPSA4Nzc2O1xuICAgICAgICAgICAgICAgICAgICB0WzE2OF0gPSA4NzEwO1xuICAgICAgICAgICAgICAgICAgICB0WzE2OV0gPSAxNzE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTcwXSA9IDE4NztcbiAgICAgICAgICAgICAgICAgICAgdFsxNzFdID0gODIzMDtcbiAgICAgICAgICAgICAgICAgICAgdFsyMTBdID0gMjE4O1xuICAgICAgICAgICAgICAgICAgICB0WzIyM10gPSA3MTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMjI0XSA9IDMyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsyMjVdID0gMzIyO1xuICAgICAgICAgICAgICAgICAgICB0WzIyN10gPSAzNTM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjI5XSA9IDM4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsyMzRdID0gMjUzO1xuICAgICAgICAgICAgICAgICAgICB0WzI1Ml0gPSAyNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjUzXSA9IDI2ODtcbiAgICAgICAgICAgICAgICAgICAgdFsyNTRdID0gMjY5O1xuICAgICAgICAgICAgICAgICAgICB0WzI1OF0gPSAyNTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjYwXSA9IDI2MDtcbiAgICAgICAgICAgICAgICAgICAgdFsyNjFdID0gMjYxO1xuICAgICAgICAgICAgICAgICAgICB0WzI2NV0gPSAyODA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjY2XSA9IDI4MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyNjhdID0gMjgzO1xuICAgICAgICAgICAgICAgICAgICB0WzI2OV0gPSAzMTM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjc1XSA9IDMyMztcbiAgICAgICAgICAgICAgICAgICAgdFsyNzZdID0gMzI0O1xuICAgICAgICAgICAgICAgICAgICB0WzI3OF0gPSAzMjg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjg0XSA9IDM0NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODVdID0gMzQ2O1xuICAgICAgICAgICAgICAgICAgICB0WzI4Nl0gPSAzNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkyXSA9IDM2NztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTVdID0gMzc3O1xuICAgICAgICAgICAgICAgICAgICB0WzI5Nl0gPSAzNzg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk4XSA9IDM4MDtcbiAgICAgICAgICAgICAgICAgICAgdFszMDVdID0gOTYzO1xuICAgICAgICAgICAgICAgICAgICB0WzMwNl0gPSA5NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA3XSA9IDk2NjtcbiAgICAgICAgICAgICAgICAgICAgdFszMDhdID0gODIxNTtcbiAgICAgICAgICAgICAgICAgICAgdFszMDldID0gODI1MjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTBdID0gODMxOTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTFdID0gODM1OTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTJdID0gODU5MjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTNdID0gODU5MztcbiAgICAgICAgICAgICAgICAgICAgdFszMzddID0gOTU1MjtcbiAgICAgICAgICAgICAgICAgICAgdFs0OTNdID0gMTAzOTtcbiAgICAgICAgICAgICAgICAgICAgdFs0OTRdID0gMTA0MDtcbiAgICAgICAgICAgICAgICAgICAgdFs3MDVdID0gMTUyNDtcbiAgICAgICAgICAgICAgICAgICAgdFs3MDZdID0gODM2MjtcbiAgICAgICAgICAgICAgICAgICAgdFs3MTBdID0gNjQyODg7XG4gICAgICAgICAgICAgICAgICAgIHRbNzExXSA9IDY0Mjk4O1xuICAgICAgICAgICAgICAgICAgICB0Wzc1OV0gPSAxNjE3O1xuICAgICAgICAgICAgICAgICAgICB0Wzc2MV0gPSAxNzc2O1xuICAgICAgICAgICAgICAgICAgICB0Wzc2M10gPSAxNzc4O1xuICAgICAgICAgICAgICAgICAgICB0Wzc3NV0gPSAxNjUyO1xuICAgICAgICAgICAgICAgICAgICB0Wzc3N10gPSAxNzY0O1xuICAgICAgICAgICAgICAgICAgICB0Wzc3OF0gPSAxNzgwO1xuICAgICAgICAgICAgICAgICAgICB0Wzc3OV0gPSAxNzgxO1xuICAgICAgICAgICAgICAgICAgICB0Wzc4MF0gPSAxNzgyO1xuICAgICAgICAgICAgICAgICAgICB0Wzc4Ml0gPSA3NzE7XG4gICAgICAgICAgICAgICAgICAgIHRbNzgzXSA9IDY0NzI2O1xuICAgICAgICAgICAgICAgICAgICB0Wzc4Nl0gPSA4MzYzO1xuICAgICAgICAgICAgICAgICAgICB0Wzc4OF0gPSA4NTMyO1xuICAgICAgICAgICAgICAgICAgICB0Wzc5MF0gPSA3Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbNzkxXSA9IDc2OTtcbiAgICAgICAgICAgICAgICAgICAgdFs3OTJdID0gNzY4O1xuICAgICAgICAgICAgICAgICAgICB0Wzc5NV0gPSA4MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbNzk3XSA9IDY0MzM2O1xuICAgICAgICAgICAgICAgICAgICB0Wzc5OF0gPSA2NDMzNztcbiAgICAgICAgICAgICAgICAgICAgdFs3OTldID0gNjQzNDI7XG4gICAgICAgICAgICAgICAgICAgIHRbODAwXSA9IDY0MzQzO1xuICAgICAgICAgICAgICAgICAgICB0WzgwMV0gPSA2NDM0NDtcbiAgICAgICAgICAgICAgICAgICAgdFs4MDJdID0gNjQzNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbODAzXSA9IDY0MzYyO1xuICAgICAgICAgICAgICAgICAgICB0WzgwNF0gPSA2NDM2MztcbiAgICAgICAgICAgICAgICAgICAgdFs4MDVdID0gNjQzNjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjQyNF0gPSA3ODIxO1xuICAgICAgICAgICAgICAgICAgICB0WzI0MjVdID0gNzgyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsyNDI2XSA9IDc4MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjQyN10gPSA3ODI0O1xuICAgICAgICAgICAgICAgICAgICB0WzI0MjhdID0gNzgyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsyNDI5XSA9IDc4MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjQzMF0gPSA3ODI3O1xuICAgICAgICAgICAgICAgICAgICB0WzI0MzNdID0gNzY4MjtcbiAgICAgICAgICAgICAgICAgICAgdFsyNjc4XSA9IDgwNDU7XG4gICAgICAgICAgICAgICAgICAgIHRbMjY3OV0gPSA4MDQ2O1xuICAgICAgICAgICAgICAgICAgICB0WzI4MzBdID0gMTU1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsyODM4XSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgdFsyODQwXSA9IDc1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODQyXSA9IDc1MztcbiAgICAgICAgICAgICAgICAgICAgdFsyODQzXSA9IDc1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsyODQ0XSA9IDc1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODQ2XSA9IDc1NztcbiAgICAgICAgICAgICAgICAgICAgdFsyODU2XSA9IDc2NztcbiAgICAgICAgICAgICAgICAgICAgdFsyODU3XSA9IDg0ODtcbiAgICAgICAgICAgICAgICAgICAgdFsyODU4XSA9IDg0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODYyXSA9IDg1MztcbiAgICAgICAgICAgICAgICAgICAgdFsyODYzXSA9IDg1NDtcbiAgICAgICAgICAgICAgICAgICAgdFsyODY0XSA9IDg1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODY1XSA9IDg2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyODY2XSA9IDg2MjtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTA2XSA9IDc0NjA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkwOF0gPSA3NDYyO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MDldID0gNzQ2MztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTEwXSA9IDc0NjQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkxMl0gPSA3NDY2O1xuICAgICAgICAgICAgICAgICAgICB0WzI5MTNdID0gNzQ2NztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTE0XSA9IDc0Njg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkxNl0gPSA3NDcwO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MTddID0gNzQ3MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTE4XSA9IDc0NzI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkyMF0gPSA3NDc0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5MjFdID0gNzQ3NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTIyXSA9IDc0NzY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkyNF0gPSA3NDc4O1xuICAgICAgICAgICAgICAgICAgICB0WzI5MjVdID0gNzQ3OTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTI2XSA9IDc0ODA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkyOF0gPSA3NDgyO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MjldID0gNzQ4MztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTMwXSA9IDc0ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkzMl0gPSA3NDg2O1xuICAgICAgICAgICAgICAgICAgICB0WzI5MzNdID0gNzQ4NztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTM0XSA9IDc0ODg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjkzNl0gPSA3NDkwO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MzddID0gNzQ5MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTM4XSA9IDc0OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk0MF0gPSA3NDk0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NDFdID0gNzQ5NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTQyXSA9IDc0OTY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk0NF0gPSA3NDk4O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NDZdID0gNzUwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTQ4XSA9IDc1MDI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk1MF0gPSA3NTA0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NTFdID0gNzUwNTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTUyXSA9IDc1MDY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk1NF0gPSA3NTA4O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NTVdID0gNzUwOTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTU2XSA9IDc1MTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk1OF0gPSA3NTEyO1xuICAgICAgICAgICAgICAgICAgICB0WzI5NTldID0gNzUxMztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTYwXSA9IDc1MTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk2Ml0gPSA3NTE2O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NjNdID0gNzUxNztcbiAgICAgICAgICAgICAgICAgICAgdFsyOTY0XSA9IDc1MTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk2Nl0gPSA3NTIwO1xuICAgICAgICAgICAgICAgICAgICB0WzI5NjddID0gNzUyMTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTY4XSA9IDc1MjI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk3MF0gPSA3NTI0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NzFdID0gNzUyNTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTcyXSA9IDc1MjY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk3NF0gPSA3NTI4O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NzVdID0gNzUyOTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTc2XSA9IDc1MzA7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk3OF0gPSAxNTM3O1xuICAgICAgICAgICAgICAgICAgICB0WzI5NzldID0gMTUzODtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTgwXSA9IDE1Mzk7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk4Ml0gPSAxNTQ5O1xuICAgICAgICAgICAgICAgICAgICB0WzI5ODNdID0gMTU1MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTg0XSA9IDE1NTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk4Nl0gPSAxNTU0O1xuICAgICAgICAgICAgICAgICAgICB0WzI5ODddID0gMTU1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTg4XSA9IDE1NTY7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk5MF0gPSAxNjIzO1xuICAgICAgICAgICAgICAgICAgICB0WzI5OTFdID0gMTYyNDtcbiAgICAgICAgICAgICAgICAgICAgdFsyOTk1XSA9IDE3NzU7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk5OV0gPSAxNzkxO1xuICAgICAgICAgICAgICAgICAgICB0WzMwMDJdID0gNjQyOTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMzAwM10gPSA2NDI5MTtcbiAgICAgICAgICAgICAgICAgICAgdFszMDA0XSA9IDY0MjkyO1xuICAgICAgICAgICAgICAgICAgICB0WzMwMDZdID0gNjQyOTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMzAwN10gPSA2NDI5NTtcbiAgICAgICAgICAgICAgICAgICAgdFszMDA4XSA9IDY0Mjk2O1xuICAgICAgICAgICAgICAgICAgICB0WzMwMTFdID0gMTkwMDtcbiAgICAgICAgICAgICAgICAgICAgdFszMDE0XSA9IDgyMjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzAxNV0gPSA4MjQ0O1xuICAgICAgICAgICAgICAgICAgICB0WzMwMTddID0gNzUzMjtcbiAgICAgICAgICAgICAgICAgICAgdFszMDE4XSA9IDc1MzM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzAxOV0gPSA3NTM0O1xuICAgICAgICAgICAgICAgICAgICB0WzMwNzVdID0gNzU5MDtcbiAgICAgICAgICAgICAgICAgICAgdFszMDc2XSA9IDc1OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA3OV0gPSA3NTk0O1xuICAgICAgICAgICAgICAgICAgICB0WzMwODBdID0gNzU5NTtcbiAgICAgICAgICAgICAgICAgICAgdFszMDgzXSA9IDc1OTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA4NF0gPSA3NTk5O1xuICAgICAgICAgICAgICAgICAgICB0WzMwODddID0gNzYwMjtcbiAgICAgICAgICAgICAgICAgICAgdFszMDg4XSA9IDc2MDM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA5MV0gPSA3NjA2O1xuICAgICAgICAgICAgICAgICAgICB0WzMwOTJdID0gNzYwNztcbiAgICAgICAgICAgICAgICAgICAgdFszMDk1XSA9IDc2MTA7XG4gICAgICAgICAgICAgICAgICAgIHRbMzA5Nl0gPSA3NjExO1xuICAgICAgICAgICAgICAgICAgICB0WzMwOTldID0gNzYxNDtcbiAgICAgICAgICAgICAgICAgICAgdFszMTAwXSA9IDc2MTU7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEwM10gPSA3NjE4O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMDRdID0gNzYxOTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTA3XSA9IDgzMzc7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEwOF0gPSA4MzM4O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMTZdID0gMTg4NDtcbiAgICAgICAgICAgICAgICAgICAgdFszMTE5XSA9IDE4ODU7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEyMF0gPSAxODg1O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMjNdID0gMTg4NjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTI0XSA9IDE4ODY7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEyN10gPSAxODg3O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMjhdID0gMTg4NztcbiAgICAgICAgICAgICAgICAgICAgdFszMTMxXSA9IDE4ODg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEzMl0gPSAxODg4O1xuICAgICAgICAgICAgICAgICAgICB0WzMxMzVdID0gMTg4OTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTM2XSA9IDE4ODk7XG4gICAgICAgICAgICAgICAgICAgIHRbMzEzOV0gPSAxODkwO1xuICAgICAgICAgICAgICAgICAgICB0WzMxNDBdID0gMTg5MDtcbiAgICAgICAgICAgICAgICAgICAgdFszMTQzXSA9IDE4OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE0NF0gPSAxODkxO1xuICAgICAgICAgICAgICAgICAgICB0WzMxNDddID0gMTg5MjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTQ4XSA9IDE4OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE1M10gPSA1ODA7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE1NF0gPSA1ODE7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE1N10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE1OF0gPSA1ODU7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2MV0gPSA1ODg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2Ml0gPSA1ODk7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2NV0gPSA4OTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2Nl0gPSA4OTI7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE2OV0gPSAxMjc0O1xuICAgICAgICAgICAgICAgICAgICB0WzMxNzBdID0gMTI3NTtcbiAgICAgICAgICAgICAgICAgICAgdFszMTczXSA9IDEyNzg7XG4gICAgICAgICAgICAgICAgICAgIHRbMzE3NF0gPSAxMjc5O1xuICAgICAgICAgICAgICAgICAgICB0WzMxODFdID0gNzYyMjtcbiAgICAgICAgICAgICAgICAgICAgdFszMTgyXSA9IDc2MjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzI4Ml0gPSAxMTc5OTtcbiAgICAgICAgICAgICAgICAgICAgdFszMzE2XSA9IDU3ODtcbiAgICAgICAgICAgICAgICAgICAgdFszMzc5XSA9IDQyNzg1O1xuICAgICAgICAgICAgICAgICAgICB0WzMzOTNdID0gMTE1OTtcbiAgICAgICAgICAgICAgICAgICAgdFszNDE2XSA9IDgzNzc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHMgPSBnZXRHbHlwaE1hcEZvclN0YW5kYXJkRm9udHM7XG4gICAgICAgICAgICAgICAgdmFyIGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjayA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbMjI3XSA9IDMyMjtcbiAgICAgICAgICAgICAgICAgICAgdFsyNjRdID0gMjYxO1xuICAgICAgICAgICAgICAgICAgICB0WzI5MV0gPSAzNDY7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2sgPSBnZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2s7XG4gICAgICAgICAgICAgICAgdmFyIGdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbMV0gPSAzMjtcbiAgICAgICAgICAgICAgICAgICAgdFs0XSA9IDY1O1xuICAgICAgICAgICAgICAgICAgICB0WzE3XSA9IDY2O1xuICAgICAgICAgICAgICAgICAgICB0WzE4XSA9IDY3O1xuICAgICAgICAgICAgICAgICAgICB0WzI0XSA9IDY4O1xuICAgICAgICAgICAgICAgICAgICB0WzI4XSA9IDY5O1xuICAgICAgICAgICAgICAgICAgICB0WzM4XSA9IDcwO1xuICAgICAgICAgICAgICAgICAgICB0WzM5XSA9IDcxO1xuICAgICAgICAgICAgICAgICAgICB0WzQ0XSA9IDcyO1xuICAgICAgICAgICAgICAgICAgICB0WzQ3XSA9IDczO1xuICAgICAgICAgICAgICAgICAgICB0WzU4XSA9IDc0O1xuICAgICAgICAgICAgICAgICAgICB0WzYwXSA9IDc1O1xuICAgICAgICAgICAgICAgICAgICB0WzYyXSA9IDc2O1xuICAgICAgICAgICAgICAgICAgICB0WzY4XSA9IDc3O1xuICAgICAgICAgICAgICAgICAgICB0WzY5XSA9IDc4O1xuICAgICAgICAgICAgICAgICAgICB0Wzc1XSA9IDc5O1xuICAgICAgICAgICAgICAgICAgICB0Wzg3XSA9IDgwO1xuICAgICAgICAgICAgICAgICAgICB0Wzg5XSA9IDgxO1xuICAgICAgICAgICAgICAgICAgICB0WzkwXSA9IDgyO1xuICAgICAgICAgICAgICAgICAgICB0Wzk0XSA9IDgzO1xuICAgICAgICAgICAgICAgICAgICB0WzEwMF0gPSA4NDtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDRdID0gODU7XG4gICAgICAgICAgICAgICAgICAgIHRbMTE1XSA9IDg2O1xuICAgICAgICAgICAgICAgICAgICB0WzExNl0gPSA4NztcbiAgICAgICAgICAgICAgICAgICAgdFsxMjFdID0gODg7XG4gICAgICAgICAgICAgICAgICAgIHRbMTIyXSA9IDg5O1xuICAgICAgICAgICAgICAgICAgICB0WzEyN10gPSA5MDtcbiAgICAgICAgICAgICAgICAgICAgdFsyNThdID0gOTc7XG4gICAgICAgICAgICAgICAgICAgIHRbMjY4XSA9IDI2MTtcbiAgICAgICAgICAgICAgICAgICAgdFsyNzFdID0gOTg7XG4gICAgICAgICAgICAgICAgICAgIHRbMjcyXSA9IDk5O1xuICAgICAgICAgICAgICAgICAgICB0WzI3M10gPSAyNjM7XG4gICAgICAgICAgICAgICAgICAgIHRbMjgyXSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsyODZdID0gMTAxO1xuICAgICAgICAgICAgICAgICAgICB0WzI5NV0gPSAyODE7XG4gICAgICAgICAgICAgICAgICAgIHRbMjk2XSA9IDEwMjtcbiAgICAgICAgICAgICAgICAgICAgdFszMzZdID0gMTAzO1xuICAgICAgICAgICAgICAgICAgICB0WzM0Nl0gPSAxMDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMzQ5XSA9IDEwNTtcbiAgICAgICAgICAgICAgICAgICAgdFszNjFdID0gMTA2O1xuICAgICAgICAgICAgICAgICAgICB0WzM2NF0gPSAxMDc7XG4gICAgICAgICAgICAgICAgICAgIHRbMzY3XSA9IDEwODtcbiAgICAgICAgICAgICAgICAgICAgdFszNzFdID0gMzIyO1xuICAgICAgICAgICAgICAgICAgICB0WzM3M10gPSAxMDk7XG4gICAgICAgICAgICAgICAgICAgIHRbMzc0XSA9IDExMDtcbiAgICAgICAgICAgICAgICAgICAgdFszODFdID0gMTExO1xuICAgICAgICAgICAgICAgICAgICB0WzM4M10gPSAyNDM7XG4gICAgICAgICAgICAgICAgICAgIHRbMzkzXSA9IDExMjtcbiAgICAgICAgICAgICAgICAgICAgdFszOTVdID0gMTEzO1xuICAgICAgICAgICAgICAgICAgICB0WzM5Nl0gPSAxMTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbNDAwXSA9IDExNTtcbiAgICAgICAgICAgICAgICAgICAgdFs0MDFdID0gMzQ3O1xuICAgICAgICAgICAgICAgICAgICB0WzQxMF0gPSAxMTY7XG4gICAgICAgICAgICAgICAgICAgIHRbNDM3XSA9IDExNztcbiAgICAgICAgICAgICAgICAgICAgdFs0NDhdID0gMTE4O1xuICAgICAgICAgICAgICAgICAgICB0WzQ0OV0gPSAxMTk7XG4gICAgICAgICAgICAgICAgICAgIHRbNDU0XSA9IDEyMDtcbiAgICAgICAgICAgICAgICAgICAgdFs0NTVdID0gMTIxO1xuICAgICAgICAgICAgICAgICAgICB0WzQ2MF0gPSAxMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbNDYzXSA9IDM4MDtcbiAgICAgICAgICAgICAgICAgICAgdFs4NTNdID0gNDQ7XG4gICAgICAgICAgICAgICAgICAgIHRbODU1XSA9IDU4O1xuICAgICAgICAgICAgICAgICAgICB0Wzg1Nl0gPSA0NjtcbiAgICAgICAgICAgICAgICAgICAgdFs4NzZdID0gNDc7XG4gICAgICAgICAgICAgICAgICAgIHRbODc4XSA9IDQ1O1xuICAgICAgICAgICAgICAgICAgICB0Wzg4Ml0gPSA0NTtcbiAgICAgICAgICAgICAgICAgICAgdFs4OTRdID0gNDA7XG4gICAgICAgICAgICAgICAgICAgIHRbODk1XSA9IDQxO1xuICAgICAgICAgICAgICAgICAgICB0Wzg5Nl0gPSA5MTtcbiAgICAgICAgICAgICAgICAgICAgdFs4OTddID0gOTM7XG4gICAgICAgICAgICAgICAgICAgIHRbOTIzXSA9IDY0O1xuICAgICAgICAgICAgICAgICAgICB0WzEwMDRdID0gNDg7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAwNV0gPSA0OTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDA2XSA9IDUwO1xuICAgICAgICAgICAgICAgICAgICB0WzEwMDddID0gNTE7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAwOF0gPSA1MjtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDA5XSA9IDUzO1xuICAgICAgICAgICAgICAgICAgICB0WzEwMTBdID0gNTQ7XG4gICAgICAgICAgICAgICAgICAgIHRbMTAxMV0gPSA1NTtcbiAgICAgICAgICAgICAgICAgICAgdFsxMDEyXSA9IDU2O1xuICAgICAgICAgICAgICAgICAgICB0WzEwMTNdID0gNTc7XG4gICAgICAgICAgICAgICAgICAgIHRbMTA4MV0gPSAzNztcbiAgICAgICAgICAgICAgICAgICAgdFsxMDg1XSA9IDQzO1xuICAgICAgICAgICAgICAgICAgICB0WzEwODZdID0gNDU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmkgPSBnZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckNhbGlicmk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE3OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldExvb2t1cFRhYmxlRmFjdG9yeSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNikuZ2V0TG9va3VwVGFibGVGYWN0b3J5O1xuICAgICAgICAgICAgICAgIHZhciBnZXRTcGVjaWFsUFVBU3ltYm9scyA9IGdldExvb2t1cFRhYmxlRmFjdG9yeShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzIxXSA9IDB4MDBBOTtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzE5M10gPSAweDAwQTk7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MjBdID0gMHgwMEFFO1xuICAgICAgICAgICAgICAgICAgICB0WzYzMTk0XSA9IDB4MDBBRTtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzcyMl0gPSAweDIxMjI7XG4gICAgICAgICAgICAgICAgICAgIHRbNjMxOTVdID0gMHgyMTIyO1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzI5XSA9IDB4MjNBNztcbiAgICAgICAgICAgICAgICAgICAgdFs2MzczMF0gPSAweDIzQTg7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MzFdID0gMHgyM0E5O1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzQwXSA9IDB4MjNBQjtcbiAgICAgICAgICAgICAgICAgICAgdFs2Mzc0MV0gPSAweDIzQUM7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3NDJdID0gMHgyM0FEO1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzI2XSA9IDB4MjNBMTtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzcyN10gPSAweDIzQTI7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MjhdID0gMHgyM0EzO1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzM3XSA9IDB4MjNBNDtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzczOF0gPSAweDIzQTU7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MzldID0gMHgyM0E2O1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzIzXSA9IDB4MjM5QjtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzcyNF0gPSAweDIzOUM7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MjVdID0gMHgyMzlEO1xuICAgICAgICAgICAgICAgICAgICB0WzYzNzM0XSA9IDB4MjM5RTtcbiAgICAgICAgICAgICAgICAgICAgdFs2MzczNV0gPSAweDIzOUY7XG4gICAgICAgICAgICAgICAgICAgIHRbNjM3MzZdID0gMHgyM0EwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPj0gMHhGRkYwICYmIGNvZGUgPD0gMHhGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID49IDB4RjYwMCAmJiBjb2RlIDw9IDB4RjhGRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFNwZWNpYWxQVUFTeW1ib2xzKClbY29kZV0gfHwgY29kZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RlID09PSAweDAwQUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAweDAwMkQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFVuaWNvZGVGb3JHbHlwaChuYW1lLCBnbHlwaHNVbmljb2RlTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB1bmljb2RlID0gZ2x5cGhzVW5pY29kZU1hcFtuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVbMF0gPT09ICd1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVMZW4gPSBuYW1lLmxlbmd0aCwgaGV4U3RyO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVMZW4gPT09IDcgJiYgbmFtZVsxXSA9PT0gJ24nICYmIG5hbWVbMl0gPT09ICdpJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleFN0ciA9IG5hbWUuc3Vic3RyaW5nKDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lTGVuID49IDUgJiYgbmFtZUxlbiA8PSA3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4U3RyID0gbmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoZXhTdHIgPT09IGhleFN0ci50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZSA9IHBhcnNlSW50KGhleFN0ciwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIFVuaWNvZGVSYW5nZXMgPSBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDAwN0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwMDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDBGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDAxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwMTdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDE4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDAyNEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwMjUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDJBRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDAyQjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwMkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDAzNkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwMzcwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDNGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDJDODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyQ0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDQwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDA0RkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwNTMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDU4RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDA1OTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwNUZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4QTUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEE2M0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwNjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDZGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDA3QzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwN0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDkwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDA5N0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwOTgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDlGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBBMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwQTdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MEE4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDBBRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwQjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MEI3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBCODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwQkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MEMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDBDN0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwQzgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MENGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBEMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwRDdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MEUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDBFN0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwRTgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MEVGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwQTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMEZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDFCN0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTFGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFFMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxRUZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUYwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDFGRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjA2RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDIwNzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyMDlGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjBBMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDIwQ0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyMEQwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjBGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDIxMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyMTRGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjE1MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDIxOEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyMTkwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjFGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDIyMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyMkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDIzRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyNDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjQzRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDI0NDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyNDVGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjQ2MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDI0RkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyNTAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjU3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDI1ODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyNTlGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MjVBMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDI1RkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyNjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MjZGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDI3MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyN0JGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MzAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDMwM0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgzMDQwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MzA5RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDMwQTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgzMEZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MzEwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDMxMkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgzMTMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MzE4RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEE4NDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhBODdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MzIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDMyRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgzMzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MzNGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEFDMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhEN0FGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RDgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweERGRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDkwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwOTFGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4NEUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDlGRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhFMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4RjhGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDMxQzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgzMUVGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RkIwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEZCNEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhGQjUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4RkRGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEZFMjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhGRTJGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RkUxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEZFMUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhGRTUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4RkU2RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEZFNzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhGRUZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RkYwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEZGRUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhGRkYwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4RkZGRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBGMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwRkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MDcwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDA3NEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgwNzgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MDdCRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDBEODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgwREZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwOUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMjAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTM3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEzQTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxM0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTQwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDE2N0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxNjgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTY5RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDE2QTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxNkZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTc4MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDE3RkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxODAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MThBRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDI4MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgyOEZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4QTAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEE0OEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxNzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTcxRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwMzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTAzMkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDMzMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwMzRGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTA0MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMDQ0RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFEMDAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MUQwRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxRDQwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDFEN0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RkYwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhGRkZGRFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEZFMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhGRTBGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4RTAwMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhFMDA3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDE5MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxOTRGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTk1MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDE5N0ZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxOTgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTlERlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFBMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxQTFGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MkMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDJDNUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgyRDMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MkQ3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDREQzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHg0REZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4QTgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEE4MkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwMDdGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTAxNDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMDE4RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwMzgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTAzOUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDNBMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwM0RGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTA0NTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMDQ3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwNDgwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTA0QUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDgwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwODNGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTBBMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMEE1RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFEMzAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MUQzNUZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMjAwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEyM0ZGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUQzNjAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxRDM3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDFCODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxQkJGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUMwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDFDNEZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxQzUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MUM3RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEE4ODAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhBOERGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4QTkwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweEE5MkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHhBOTMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4QTk1RlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweEFBMDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHhBQTVGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MTAxOTAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxMDFDRlxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnYmVnaW4nOiAweDEwMUQwLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2VuZCc6IDB4MTAxRkZcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2JlZ2luJzogMHgxMDJBMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiAweDEwMkRGXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdiZWdpbic6IDB4MUYwMzAsXG4gICAgICAgICAgICAgICAgICAgICAgICAnZW5kJzogMHgxRjA5RlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRVbmljb2RlUmFuZ2VGb3IodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gVW5pY29kZVJhbmdlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBVbmljb2RlUmFuZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID49IHJhbmdlLmJlZ2luICYmIHZhbHVlIDwgcmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1JUTFJhbmdlRm9yKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZSA9IFVuaWNvZGVSYW5nZXNbMTNdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPj0gcmFuZ2UuYmVnaW4gJiYgdmFsdWUgPCByYW5nZS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJhbmdlID0gVW5pY29kZVJhbmdlc1sxMV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+PSByYW5nZS5iZWdpbiAmJiB2YWx1ZSA8IHJhbmdlLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZ2V0Tm9ybWFsaXplZFVuaWNvZGVzID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5KGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAwQTgnXSA9ICdcXHUwMDIwXFx1MDMwOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAwQUYnXSA9ICdcXHUwMDIwXFx1MDMwNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAwQjQnXSA9ICdcXHUwMDIwXFx1MDMwMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAwQjUnXSA9ICdcXHUwM0JDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDBCOCddID0gJ1xcdTAwMjBcXHUwMzI3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDEzMiddID0gJ1xcdTAwNDlcXHUwMDRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDEzMyddID0gJ1xcdTAwNjlcXHUwMDZBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDEzRiddID0gJ1xcdTAwNENcXHUwMEI3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDE0MCddID0gJ1xcdTAwNkNcXHUwMEI3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDE0OSddID0gJ1xcdTAyQkNcXHUwMDZFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDE3RiddID0gJ1xcdTAwNzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM0J10gPSAnXFx1MDA0NFxcdTAxN0QnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM1J10gPSAnXFx1MDA0NFxcdTAxN0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM2J10gPSAnXFx1MDA2NFxcdTAxN0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM3J10gPSAnXFx1MDA0Q1xcdTAwNEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM4J10gPSAnXFx1MDA0Q1xcdTAwNkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUM5J10gPSAnXFx1MDA2Q1xcdTAwNkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUNBJ10gPSAnXFx1MDA0RVxcdTAwNEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUNCJ10gPSAnXFx1MDA0RVxcdTAwNkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUNDJ10gPSAnXFx1MDA2RVxcdTAwNkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUYxJ10gPSAnXFx1MDA0NFxcdTAwNUEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUYyJ10gPSAnXFx1MDA0NFxcdTAwN0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMUYzJ10gPSAnXFx1MDA2NFxcdTAwN0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkQ4J10gPSAnXFx1MDAyMFxcdTAzMDYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkQ5J10gPSAnXFx1MDAyMFxcdTAzMDcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkRBJ10gPSAnXFx1MDAyMFxcdTAzMEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkRCJ10gPSAnXFx1MDAyMFxcdTAzMjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkRDJ10gPSAnXFx1MDAyMFxcdTAzMDMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMkREJ10gPSAnXFx1MDAyMFxcdTAzMEInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMzdBJ10gPSAnXFx1MDAyMFxcdTAzNDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwMzg0J10gPSAnXFx1MDAyMFxcdTAzMDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwM0QwJ10gPSAnXFx1MDNCMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAzRDEnXSA9ICdcXHUwM0I4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDNEMiddID0gJ1xcdTAzQTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwM0Q1J10gPSAnXFx1MDNDNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAzRDYnXSA9ICdcXHUwM0MwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDNGMCddID0gJ1xcdTAzQkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwM0YxJ10gPSAnXFx1MDNDMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAzRjInXSA9ICdcXHUwM0MyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDNGNCddID0gJ1xcdTAzOTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUwM0Y1J10gPSAnXFx1MDNCNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTAzRjknXSA9ICdcXHUwM0EzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDU4NyddID0gJ1xcdTA1NjVcXHUwNTgyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDY3NSddID0gJ1xcdTA2MjdcXHUwNjc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDY3NiddID0gJ1xcdTA2NDhcXHUwNjc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDY3NyddID0gJ1xcdTA2QzdcXHUwNjc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MDY3OCddID0gJ1xcdTA2NEFcXHUwNjc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEUzMyddID0gJ1xcdTBFNERcXHUwRTMyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEVCMyddID0gJ1xcdTBFQ0RcXHUwRUIyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEVEQyddID0gJ1xcdTBFQUJcXHUwRTk5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEVERCddID0gJ1xcdTBFQUJcXHUwRUExJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEY3NyddID0gJ1xcdTBGQjJcXHUwRjgxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MEY3OSddID0gJ1xcdTBGQjNcXHUwRjgxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUU5QSddID0gJ1xcdTAwNjFcXHUwMkJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUZCRCddID0gJ1xcdTAwMjBcXHUwMzEzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUZCRiddID0gJ1xcdTAwMjBcXHUwMzEzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUZDMCddID0gJ1xcdTAwMjBcXHUwMzQyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MUZGRSddID0gJ1xcdTAwMjBcXHUwMzE0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAwMiddID0gJ1xcdTAwMjAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDAzJ10gPSAnXFx1MDAyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMDQnXSA9ICdcXHUwMDIwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAwNSddID0gJ1xcdTAwMjAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDA2J10gPSAnXFx1MDAyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMDgnXSA9ICdcXHUwMDIwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAwOSddID0gJ1xcdTAwMjAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDBBJ10gPSAnXFx1MDAyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMTcnXSA9ICdcXHUwMDIwXFx1MDMzMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMjQnXSA9ICdcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAyNSddID0gJ1xcdTAwMkVcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAyNiddID0gJ1xcdTAwMkVcXHUwMDJFXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMzMnXSA9ICdcXHUyMDMyXFx1MjAzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwMzQnXSA9ICdcXHUyMDMyXFx1MjAzMlxcdTIwMzInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDM2J10gPSAnXFx1MjAzNVxcdTIwMzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDM3J10gPSAnXFx1MjAzNVxcdTIwMzVcXHUyMDM1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAzQyddID0gJ1xcdTAwMjFcXHUwMDIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjAzRSddID0gJ1xcdTAwMjBcXHUwMzA1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjA0NyddID0gJ1xcdTAwM0ZcXHUwMDNGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjA0OCddID0gJ1xcdTAwM0ZcXHUwMDIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjA0OSddID0gJ1xcdTAwMjFcXHUwMDNGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjA1NyddID0gJ1xcdTIwMzJcXHUyMDMyXFx1MjAzMlxcdTIwMzInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMDVGJ10gPSAnXFx1MDAyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIwQTgnXSA9ICdcXHUwMDUyXFx1MDA3Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMDAnXSA9ICdcXHUwMDYxXFx1MDAyRlxcdTAwNjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTAxJ10gPSAnXFx1MDA2MVxcdTAwMkZcXHUwMDczJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjEwMyddID0gJ1xcdTAwQjBcXHUwMDQzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjEwNSddID0gJ1xcdTAwNjNcXHUwMDJGXFx1MDA2Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMDYnXSA9ICdcXHUwMDYzXFx1MDAyRlxcdTAwNzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTA3J10gPSAnXFx1MDE5MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMDknXSA9ICdcXHUwMEIwXFx1MDA0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMTYnXSA9ICdcXHUwMDRFXFx1MDA2Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMjEnXSA9ICdcXHUwMDU0XFx1MDA0NVxcdTAwNEMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTM1J10gPSAnXFx1MDVEMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxMzYnXSA9ICdcXHUwNUQxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjEzNyddID0gJ1xcdTA1RDInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTM4J10gPSAnXFx1MDVEMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxM0InXSA9ICdcXHUwMDQ2XFx1MDA0MVxcdTAwNTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTYwJ10gPSAnXFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjEnXSA9ICdcXHUwMDQ5XFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjInXSA9ICdcXHUwMDQ5XFx1MDA0OVxcdTAwNDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTYzJ10gPSAnXFx1MDA0OVxcdTAwNTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTY0J10gPSAnXFx1MDA1Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjUnXSA9ICdcXHUwMDU2XFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjYnXSA9ICdcXHUwMDU2XFx1MDA0OVxcdTAwNDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTY3J10gPSAnXFx1MDA1NlxcdTAwNDlcXHUwMDQ5XFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjgnXSA9ICdcXHUwMDQ5XFx1MDA1OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNjknXSA9ICdcXHUwMDU4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE2QSddID0gJ1xcdTAwNThcXHUwMDQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE2QiddID0gJ1xcdTAwNThcXHUwMDQ5XFx1MDA0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNkMnXSA9ICdcXHUwMDRDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE2RCddID0gJ1xcdTAwNDMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTZFJ10gPSAnXFx1MDA0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxNkYnXSA9ICdcXHUwMDREJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3MCddID0gJ1xcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTcxJ10gPSAnXFx1MDA2OVxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTcyJ10gPSAnXFx1MDA2OVxcdTAwNjlcXHUwMDY5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3MyddID0gJ1xcdTAwNjlcXHUwMDc2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3NCddID0gJ1xcdTAwNzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTc1J10gPSAnXFx1MDA3NlxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTc2J10gPSAnXFx1MDA3NlxcdTAwNjlcXHUwMDY5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3NyddID0gJ1xcdTAwNzZcXHUwMDY5XFx1MDA2OVxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTc4J10gPSAnXFx1MDA2OVxcdTAwNzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTc5J10gPSAnXFx1MDA3OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxN0EnXSA9ICdcXHUwMDc4XFx1MDA2OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxN0InXSA9ICdcXHUwMDc4XFx1MDA2OVxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTdDJ10gPSAnXFx1MDA2Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIxN0QnXSA9ICdcXHUwMDYzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjE3RSddID0gJ1xcdTAwNjQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMTdGJ10gPSAnXFx1MDA2RCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIyMkMnXSA9ICdcXHUyMjJCXFx1MjIyQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTIyMkQnXSA9ICdcXHUyMjJCXFx1MjIyQlxcdTIyMkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMjJGJ10gPSAnXFx1MjIyRVxcdTIyMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyMjMwJ10gPSAnXFx1MjIyRVxcdTIyMkVcXHUyMjJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ3NCddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0NzUnXSA9ICdcXHUwMDI4XFx1MDAzMlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDc2J10gPSAnXFx1MDAyOFxcdTAwMzNcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ3NyddID0gJ1xcdTAwMjhcXHUwMDM0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0NzgnXSA9ICdcXHUwMDI4XFx1MDAzNVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDc5J10gPSAnXFx1MDAyOFxcdTAwMzZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ3QSddID0gJ1xcdTAwMjhcXHUwMDM3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0N0InXSA9ICdcXHUwMDI4XFx1MDAzOFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDdDJ10gPSAnXFx1MDAyOFxcdTAwMzlcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ3RCddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAzMFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDdFJ10gPSAnXFx1MDAyOFxcdTAwMzFcXHUwMDMxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0N0YnXSA9ICdcXHUwMDI4XFx1MDAzMVxcdTAwMzJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ4MCddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAzM1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDgxJ10gPSAnXFx1MDAyOFxcdTAwMzFcXHUwMDM0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0ODInXSA9ICdcXHUwMDI4XFx1MDAzMVxcdTAwMzVcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ4MyddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAzNlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDg0J10gPSAnXFx1MDAyOFxcdTAwMzFcXHUwMDM3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0ODUnXSA9ICdcXHUwMDI4XFx1MDAzMVxcdTAwMzhcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ4NiddID0gJ1xcdTAwMjhcXHUwMDMxXFx1MDAzOVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDg3J10gPSAnXFx1MDAyOFxcdTAwMzJcXHUwMDMwXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0ODgnXSA9ICdcXHUwMDMxXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0ODknXSA9ICdcXHUwMDMyXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEEnXSA9ICdcXHUwMDMzXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEInXSA9ICdcXHUwMDM0XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEMnXSA9ICdcXHUwMDM1XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEQnXSA9ICdcXHUwMDM2XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEUnXSA9ICdcXHUwMDM3XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OEYnXSA9ICdcXHUwMDM4XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OTAnXSA9ICdcXHUwMDM5XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OTEnXSA9ICdcXHUwMDMxXFx1MDAzMFxcdTAwMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDkyJ10gPSAnXFx1MDAzMVxcdTAwMzFcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5MyddID0gJ1xcdTAwMzFcXHUwMDMyXFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OTQnXSA9ICdcXHUwMDMxXFx1MDAzM1xcdTAwMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDk1J10gPSAnXFx1MDAzMVxcdTAwMzRcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5NiddID0gJ1xcdTAwMzFcXHUwMDM1XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OTcnXSA9ICdcXHUwMDMxXFx1MDAzNlxcdTAwMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDk4J10gPSAnXFx1MDAzMVxcdTAwMzdcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5OSddID0gJ1xcdTAwMzFcXHUwMDM4XFx1MDAyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OUEnXSA9ICdcXHUwMDMxXFx1MDAzOVxcdTAwMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDlCJ10gPSAnXFx1MDAzMlxcdTAwMzBcXHUwMDJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5QyddID0gJ1xcdTAwMjhcXHUwMDYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0OUQnXSA9ICdcXHUwMDI4XFx1MDA2MlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNDlFJ10gPSAnXFx1MDAyOFxcdTAwNjNcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjQ5RiddID0gJ1xcdTAwMjhcXHUwMDY0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QTAnXSA9ICdcXHUwMDI4XFx1MDA2NVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEExJ10gPSAnXFx1MDAyOFxcdTAwNjZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBMiddID0gJ1xcdTAwMjhcXHUwMDY3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QTMnXSA9ICdcXHUwMDI4XFx1MDA2OFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEE0J10gPSAnXFx1MDAyOFxcdTAwNjlcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBNSddID0gJ1xcdTAwMjhcXHUwMDZBXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QTYnXSA9ICdcXHUwMDI4XFx1MDA2QlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEE3J10gPSAnXFx1MDAyOFxcdTAwNkNcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBOCddID0gJ1xcdTAwMjhcXHUwMDZEXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QTknXSA9ICdcXHUwMDI4XFx1MDA2RVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEFBJ10gPSAnXFx1MDAyOFxcdTAwNkZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBQiddID0gJ1xcdTAwMjhcXHUwMDcwXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QUMnXSA9ICdcXHUwMDI4XFx1MDA3MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEFEJ10gPSAnXFx1MDAyOFxcdTAwNzJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRBRSddID0gJ1xcdTAwMjhcXHUwMDczXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QUYnXSA9ICdcXHUwMDI4XFx1MDA3NFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEIwJ10gPSAnXFx1MDAyOFxcdTAwNzVcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRCMSddID0gJ1xcdTAwMjhcXHUwMDc2XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QjInXSA9ICdcXHUwMDI4XFx1MDA3N1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyNEIzJ10gPSAnXFx1MDAyOFxcdTAwNzhcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MjRCNCddID0gJ1xcdTAwMjhcXHUwMDc5XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTI0QjUnXSA9ICdcXHUwMDI4XFx1MDA3QVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyQTBDJ10gPSAnXFx1MjIyQlxcdTIyMkJcXHUyMjJCXFx1MjIyQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJBNzQnXSA9ICdcXHUwMDNBXFx1MDAzQVxcdTAwM0QnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyQTc1J10gPSAnXFx1MDAzRFxcdTAwM0QnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyQTc2J10gPSAnXFx1MDAzRFxcdTAwM0RcXHUwMDNEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkU5RiddID0gJ1xcdTZCQ0QnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRUYzJ10gPSAnXFx1OUY5Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMDAnXSA9ICdcXHU0RTAwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwMSddID0gJ1xcdTRFMjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjAyJ10gPSAnXFx1NEUzNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMDMnXSA9ICdcXHU0RTNGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwNCddID0gJ1xcdTRFNTknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjA1J10gPSAnXFx1NEU4NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMDYnXSA9ICdcXHU0RThDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwNyddID0gJ1xcdTRFQTAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjA4J10gPSAnXFx1NEVCQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMDknXSA9ICdcXHU1MTNGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwQSddID0gJ1xcdTUxNjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjBCJ10gPSAnXFx1NTE2Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMEMnXSA9ICdcXHU1MTgyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYwRCddID0gJ1xcdTUxOTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjBFJ10gPSAnXFx1NTFBQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMEYnXSA9ICdcXHU1MUUwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxMCddID0gJ1xcdTUxRjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjExJ10gPSAnXFx1NTIwMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMTInXSA9ICdcXHU1MjlCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxMyddID0gJ1xcdTUyRjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjE0J10gPSAnXFx1NTMxNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMTUnXSA9ICdcXHU1MzFBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxNiddID0gJ1xcdTUzMzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjE3J10gPSAnXFx1NTM0MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMTgnXSA9ICdcXHU1MzVDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxOSddID0gJ1xcdTUzNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjFBJ10gPSAnXFx1NTM4Mic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMUInXSA9ICdcXHU1M0I2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxQyddID0gJ1xcdTUzQzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjFEJ10gPSAnXFx1NTNFMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMUUnXSA9ICdcXHU1NkQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYxRiddID0gJ1xcdTU3MUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjIwJ10gPSAnXFx1NThFQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMjEnXSA9ICdcXHU1OTAyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyMiddID0gJ1xcdTU5MEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjIzJ10gPSAnXFx1NTkxNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMjQnXSA9ICdcXHU1OTI3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyNSddID0gJ1xcdTU5NzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjI2J10gPSAnXFx1NUI1MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMjcnXSA9ICdcXHU1QjgwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyOCddID0gJ1xcdTVCRjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjI5J10gPSAnXFx1NUMwRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMkEnXSA9ICdcXHU1QzIyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyQiddID0gJ1xcdTVDMzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjJDJ10gPSAnXFx1NUM2RSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMkQnXSA9ICdcXHU1QzcxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYyRSddID0gJ1xcdTVEREInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjJGJ10gPSAnXFx1NURFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMzAnXSA9ICdcXHU1REYxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzMSddID0gJ1xcdTVERkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjMyJ10gPSAnXFx1NUU3Mic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMzMnXSA9ICdcXHU1RTdBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzNCddID0gJ1xcdTVFN0YnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjM1J10gPSAnXFx1NUVGNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMzYnXSA9ICdcXHU1RUZFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzNyddID0gJ1xcdTVGMEInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjM4J10gPSAnXFx1NUYxMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGMzknXSA9ICdcXHU1RjUwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzQSddID0gJ1xcdTVGNjEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjNCJ10gPSAnXFx1NUY3Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGM0MnXSA9ICdcXHU1RkMzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkYzRCddID0gJ1xcdTYyMDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjNFJ10gPSAnXFx1NjIzNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGM0YnXSA9ICdcXHU2MjRCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0MCddID0gJ1xcdTY1MkYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjQxJ10gPSAnXFx1NjUzNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNDInXSA9ICdcXHU2NTg3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0MyddID0gJ1xcdTY1OTcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjQ0J10gPSAnXFx1NjVBNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNDUnXSA9ICdcXHU2NUI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0NiddID0gJ1xcdTY1RTAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjQ3J10gPSAnXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNDgnXSA9ICdcXHU2NkYwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0OSddID0gJ1xcdTY3MDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjRBJ10gPSAnXFx1NjcyOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNEInXSA9ICdcXHU2QjIwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0QyddID0gJ1xcdTZCNjInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjREJ10gPSAnXFx1NkI3OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNEUnXSA9ICdcXHU2QkIzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY0RiddID0gJ1xcdTZCQ0InO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjUwJ10gPSAnXFx1NkJENCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNTEnXSA9ICdcXHU2QkRCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1MiddID0gJ1xcdTZDMEYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjUzJ10gPSAnXFx1NkMxNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNTQnXSA9ICdcXHU2QzM0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1NSddID0gJ1xcdTcwNkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjU2J10gPSAnXFx1NzIyQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNTcnXSA9ICdcXHU3MjM2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1OCddID0gJ1xcdTcyM0InO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjU5J10gPSAnXFx1NzIzRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNUEnXSA9ICdcXHU3MjQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1QiddID0gJ1xcdTcyNTknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjVDJ10gPSAnXFx1NzI1Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNUQnXSA9ICdcXHU3MkFDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY1RSddID0gJ1xcdTczODQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjVGJ10gPSAnXFx1NzM4OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNjAnXSA9ICdcXHU3NERDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2MSddID0gJ1xcdTc0RTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjYyJ10gPSAnXFx1NzUxOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNjMnXSA9ICdcXHU3NTFGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2NCddID0gJ1xcdTc1MjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjY1J10gPSAnXFx1NzUzMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNjYnXSA9ICdcXHU3NThCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2NyddID0gJ1xcdTc1OTInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjY4J10gPSAnXFx1NzY3Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNjknXSA9ICdcXHU3NjdEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2QSddID0gJ1xcdTc2QUUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjZCJ10gPSAnXFx1NzZCRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNkMnXSA9ICdcXHU3NkVFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY2RCddID0gJ1xcdTc3REInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjZFJ10gPSAnXFx1NzdFMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNkYnXSA9ICdcXHU3N0YzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3MCddID0gJ1xcdTc5M0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjcxJ10gPSAnXFx1NzlCOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNzInXSA9ICdcXHU3OUJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3MyddID0gJ1xcdTdBNzQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjc0J10gPSAnXFx1N0FDQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNzUnXSA9ICdcXHU3QUY5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3NiddID0gJ1xcdTdDNzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjc3J10gPSAnXFx1N0NGOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGNzgnXSA9ICdcXHU3RjM2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3OSddID0gJ1xcdTdGNTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjdBJ10gPSAnXFx1N0Y4QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGN0InXSA9ICdcXHU3RkJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3QyddID0gJ1xcdTgwMDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjdEJ10gPSAnXFx1ODAwQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGN0UnXSA9ICdcXHU4MDEyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY3RiddID0gJ1xcdTgwMzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjgwJ10gPSAnXFx1ODA3Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGODEnXSA9ICdcXHU4MDg5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4MiddID0gJ1xcdTgxRTMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjgzJ10gPSAnXFx1ODFFQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGODQnXSA9ICdcXHU4MUYzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4NSddID0gJ1xcdTgxRkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjg2J10gPSAnXFx1ODIwQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGODcnXSA9ICdcXHU4MjFCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4OCddID0gJ1xcdTgyMUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjg5J10gPSAnXFx1ODI2RSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOEEnXSA9ICdcXHU4MjcyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4QiddID0gJ1xcdTgyNzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjhDJ10gPSAnXFx1ODY0RCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOEQnXSA9ICdcXHU4NjZCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY4RSddID0gJ1xcdTg4NDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjhGJ10gPSAnXFx1ODg0Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOTAnXSA9ICdcXHU4ODYzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5MSddID0gJ1xcdTg5N0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjkyJ10gPSAnXFx1ODk4Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOTMnXSA9ICdcXHU4OUQyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5NCddID0gJ1xcdThBMDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjk1J10gPSAnXFx1OEMzNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOTYnXSA9ICdcXHU4QzQ2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5NyddID0gJ1xcdThDNTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjk4J10gPSAnXFx1OEM3OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOTknXSA9ICdcXHU4QzlEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5QSddID0gJ1xcdThENjQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjlCJ10gPSAnXFx1OEQ3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOUMnXSA9ICdcXHU4REIzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkY5RCddID0gJ1xcdThFQUInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRjlFJ10gPSAnXFx1OEVDQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGOUYnXSA9ICdcXHU4RjlCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBMCddID0gJ1xcdThGQjAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkExJ10gPSAnXFx1OEZCNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQTInXSA9ICdcXHU5MDkxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBMyddID0gJ1xcdTkxNDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkE0J10gPSAnXFx1OTFDNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQTUnXSA9ICdcXHU5MUNDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBNiddID0gJ1xcdTkxRDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkE3J10gPSAnXFx1OTU3Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQTgnXSA9ICdcXHU5NTgwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBOSddID0gJ1xcdTk2MUMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkFBJ10gPSAnXFx1OTZCNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQUInXSA9ICdcXHU5NkI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBQyddID0gJ1xcdTk2RTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkFEJ10gPSAnXFx1OTc1MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQUUnXSA9ICdcXHU5NzVFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZBRiddID0gJ1xcdTk3NjInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkIwJ10gPSAnXFx1OTc2OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQjEnXSA9ICdcXHU5N0NCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCMiddID0gJ1xcdTk3RUQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkIzJ10gPSAnXFx1OTdGMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQjQnXSA9ICdcXHU5ODAxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCNSddID0gJ1xcdTk4QTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkI2J10gPSAnXFx1OThEQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQjcnXSA9ICdcXHU5OERGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCOCddID0gJ1xcdTk5OTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkI5J10gPSAnXFx1OTk5OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQkEnXSA9ICdcXHU5OUFDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCQiddID0gJ1xcdTlBQTgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkJDJ10gPSAnXFx1OUFEOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQkQnXSA9ICdcXHU5QURGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZCRSddID0gJ1xcdTlCMjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkJGJ10gPSAnXFx1OUIyRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQzAnXSA9ICdcXHU5QjMyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDMSddID0gJ1xcdTlCM0MnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkMyJ10gPSAnXFx1OUI1QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQzMnXSA9ICdcXHU5Q0U1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDNCddID0gJ1xcdTlFNzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkM1J10gPSAnXFx1OUU3Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQzYnXSA9ICdcXHU5RUE1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDNyddID0gJ1xcdTlFQkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkM4J10gPSAnXFx1OUVDMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQzknXSA9ICdcXHU5RUNEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDQSddID0gJ1xcdTlFRDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkNCJ10gPSAnXFx1OUVGOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQ0MnXSA9ICdcXHU5RUZEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZDRCddID0gJ1xcdTlGMEUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkNFJ10gPSAnXFx1OUYxMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGQ0YnXSA9ICdcXHU5RjIwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZEMCddID0gJ1xcdTlGM0InO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkQxJ10gPSAnXFx1OUY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGRDInXSA9ICdcXHU5RjUyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MkZEMyddID0gJ1xcdTlGOEQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUyRkQ0J10gPSAnXFx1OUY5Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTJGRDUnXSA9ICdcXHU5RkEwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzAzNiddID0gJ1xcdTMwMTInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMDM4J10gPSAnXFx1NTM0MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMwMzknXSA9ICdcXHU1MzQ0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzAzQSddID0gJ1xcdTUzNDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMDlCJ10gPSAnXFx1MDAyMFxcdTMwOTknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMDlDJ10gPSAnXFx1MDAyMFxcdTMwOUEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTMxJ10gPSAnXFx1MTEwMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxMzInXSA9ICdcXHUxMTAxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzMyddID0gJ1xcdTExQUEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTM0J10gPSAnXFx1MTEwMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxMzUnXSA9ICdcXHUxMUFDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzNiddID0gJ1xcdTExQUQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTM3J10gPSAnXFx1MTEwMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxMzgnXSA9ICdcXHUxMTA0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzOSddID0gJ1xcdTExMDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTNBJ10gPSAnXFx1MTFCMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxM0InXSA9ICdcXHUxMUIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzQyddID0gJ1xcdTExQjInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTNEJ10gPSAnXFx1MTFCMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxM0UnXSA9ICdcXHUxMUI0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzEzRiddID0gJ1xcdTExQjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTQwJ10gPSAnXFx1MTExQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNDEnXSA9ICdcXHUxMTA2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0MiddID0gJ1xcdTExMDcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTQzJ10gPSAnXFx1MTEwOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNDQnXSA9ICdcXHUxMTIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0NSddID0gJ1xcdTExMDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTQ2J10gPSAnXFx1MTEwQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNDcnXSA9ICdcXHUxMTBCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0OCddID0gJ1xcdTExMEMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTQ5J10gPSAnXFx1MTEwRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNEEnXSA9ICdcXHUxMTBFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0QiddID0gJ1xcdTExMEYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTRDJ10gPSAnXFx1MTExMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNEQnXSA9ICdcXHUxMTExJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE0RSddID0gJ1xcdTExMTInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTRGJ10gPSAnXFx1MTE2MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNTAnXSA9ICdcXHUxMTYyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1MSddID0gJ1xcdTExNjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTUyJ10gPSAnXFx1MTE2NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNTMnXSA9ICdcXHUxMTY1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1NCddID0gJ1xcdTExNjYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTU1J10gPSAnXFx1MTE2Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNTYnXSA9ICdcXHUxMTY4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1NyddID0gJ1xcdTExNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTU4J10gPSAnXFx1MTE2QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNTknXSA9ICdcXHUxMTZCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1QSddID0gJ1xcdTExNkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTVCJ10gPSAnXFx1MTE2RCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNUMnXSA9ICdcXHUxMTZFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE1RCddID0gJ1xcdTExNkYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTVFJ10gPSAnXFx1MTE3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNUYnXSA9ICdcXHUxMTcxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2MCddID0gJ1xcdTExNzInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTYxJ10gPSAnXFx1MTE3Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNjInXSA9ICdcXHUxMTc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2MyddID0gJ1xcdTExNzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTY0J10gPSAnXFx1MTE2MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNjUnXSA9ICdcXHUxMTE0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2NiddID0gJ1xcdTExMTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTY3J10gPSAnXFx1MTFDNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNjgnXSA9ICdcXHUxMUM4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2OSddID0gJ1xcdTExQ0MnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTZBJ10gPSAnXFx1MTFDRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNkInXSA9ICdcXHUxMUQzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2QyddID0gJ1xcdTExRDcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTZEJ10gPSAnXFx1MTFEOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNkUnXSA9ICdcXHUxMTFDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE2RiddID0gJ1xcdTExREQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTcwJ10gPSAnXFx1MTFERic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNzEnXSA9ICdcXHUxMTFEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3MiddID0gJ1xcdTExMUUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTczJ10gPSAnXFx1MTEyMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNzQnXSA9ICdcXHUxMTIyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3NSddID0gJ1xcdTExMjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTc2J10gPSAnXFx1MTEyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxNzcnXSA9ICdcXHUxMTI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3OCddID0gJ1xcdTExMkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTc5J10gPSAnXFx1MTEyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxN0EnXSA9ICdcXHUxMTJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3QiddID0gJ1xcdTExMkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTdDJ10gPSAnXFx1MTEyRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxN0QnXSA9ICdcXHUxMTMyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE3RSddID0gJ1xcdTExMzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTdGJ10gPSAnXFx1MTE0MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxODAnXSA9ICdcXHUxMTQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4MSddID0gJ1xcdTExNEMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTgyJ10gPSAnXFx1MTFGMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxODMnXSA9ICdcXHUxMUYyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4NCddID0gJ1xcdTExNTcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTg1J10gPSAnXFx1MTE1OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxODYnXSA9ICdcXHUxMTU5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4NyddID0gJ1xcdTExODQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMTg4J10gPSAnXFx1MTE4NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxODknXSA9ICdcXHUxMTg4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4QSddID0gJ1xcdTExOTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMThCJ10gPSAnXFx1MTE5Mic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMxOEMnXSA9ICdcXHUxMTk0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzE4RCddID0gJ1xcdTExOUUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMThFJ10gPSAnXFx1MTFBMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMDAnXSA9ICdcXHUwMDI4XFx1MTEwMFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjAxJ10gPSAnXFx1MDAyOFxcdTExMDJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwMiddID0gJ1xcdTAwMjhcXHUxMTAzXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMDMnXSA9ICdcXHUwMDI4XFx1MTEwNVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjA0J10gPSAnXFx1MDAyOFxcdTExMDZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwNSddID0gJ1xcdTAwMjhcXHUxMTA3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMDYnXSA9ICdcXHUwMDI4XFx1MTEwOVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjA3J10gPSAnXFx1MDAyOFxcdTExMEJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwOCddID0gJ1xcdTAwMjhcXHUxMTBDXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMDknXSA9ICdcXHUwMDI4XFx1MTEwRVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjBBJ10gPSAnXFx1MDAyOFxcdTExMEZcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwQiddID0gJ1xcdTAwMjhcXHUxMTEwXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMEMnXSA9ICdcXHUwMDI4XFx1MTExMVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjBEJ10gPSAnXFx1MDAyOFxcdTExMTJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIwRSddID0gJ1xcdTAwMjhcXHUxMTAwXFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjBGJ10gPSAnXFx1MDAyOFxcdTExMDJcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMTAnXSA9ICdcXHUwMDI4XFx1MTEwM1xcdTExNjFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxMSddID0gJ1xcdTAwMjhcXHUxMTA1XFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjEyJ10gPSAnXFx1MDAyOFxcdTExMDZcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMTMnXSA9ICdcXHUwMDI4XFx1MTEwN1xcdTExNjFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxNCddID0gJ1xcdTAwMjhcXHUxMTA5XFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjE1J10gPSAnXFx1MDAyOFxcdTExMEJcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMTYnXSA9ICdcXHUwMDI4XFx1MTEwQ1xcdTExNjFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxNyddID0gJ1xcdTAwMjhcXHUxMTBFXFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjE4J10gPSAnXFx1MDAyOFxcdTExMEZcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMTknXSA9ICdcXHUwMDI4XFx1MTExMFxcdTExNjFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxQSddID0gJ1xcdTAwMjhcXHUxMTExXFx1MTE2MVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjFCJ10gPSAnXFx1MDAyOFxcdTExMTJcXHUxMTYxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMUMnXSA9ICdcXHUwMDI4XFx1MTEwQ1xcdTExNkVcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIxRCddID0gJ1xcdTAwMjhcXHUxMTBCXFx1MTE2OVxcdTExMENcXHUxMTY1XFx1MTFBQlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjFFJ10gPSAnXFx1MDAyOFxcdTExMEJcXHUxMTY5XFx1MTExMlxcdTExNkVcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyMCddID0gJ1xcdTAwMjhcXHU0RTAwXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMjEnXSA9ICdcXHUwMDI4XFx1NEU4Q1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjIyJ10gPSAnXFx1MDAyOFxcdTRFMDlcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyMyddID0gJ1xcdTAwMjhcXHU1NkRCXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMjQnXSA9ICdcXHUwMDI4XFx1NEU5NFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjI1J10gPSAnXFx1MDAyOFxcdTUxNkRcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyNiddID0gJ1xcdTAwMjhcXHU0RTAzXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMjcnXSA9ICdcXHUwMDI4XFx1NTE2QlxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjI4J10gPSAnXFx1MDAyOFxcdTRFNURcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyOSddID0gJ1xcdTAwMjhcXHU1MzQxXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMkEnXSA9ICdcXHUwMDI4XFx1NjcwOFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjJCJ10gPSAnXFx1MDAyOFxcdTcwNkJcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyQyddID0gJ1xcdTAwMjhcXHU2QzM0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMkQnXSA9ICdcXHUwMDI4XFx1NjcyOFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjJFJ10gPSAnXFx1MDAyOFxcdTkxRDFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIyRiddID0gJ1xcdTAwMjhcXHU1NzFGXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMzAnXSA9ICdcXHUwMDI4XFx1NjVFNVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjMxJ10gPSAnXFx1MDAyOFxcdTY4MkFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzMiddID0gJ1xcdTAwMjhcXHU2NzA5XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMzMnXSA9ICdcXHUwMDI4XFx1NzkzRVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjM0J10gPSAnXFx1MDAyOFxcdTU0MERcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzNSddID0gJ1xcdTAwMjhcXHU3Mjc5XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMzYnXSA9ICdcXHUwMDI4XFx1OENBMVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjM3J10gPSAnXFx1MDAyOFxcdTc5NURcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzOCddID0gJ1xcdTAwMjhcXHU1MkI0XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyMzknXSA9ICdcXHUwMDI4XFx1NEVFM1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjNBJ10gPSAnXFx1MDAyOFxcdTU0N0NcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzQiddID0gJ1xcdTAwMjhcXHU1QjY2XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyM0MnXSA9ICdcXHUwMDI4XFx1NzZFM1xcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjNEJ10gPSAnXFx1MDAyOFxcdTRGMDFcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzIzRSddID0gJ1xcdTAwMjhcXHU4Q0M3XFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyM0YnXSA9ICdcXHUwMDI4XFx1NTM1NFxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjQwJ10gPSAnXFx1MDAyOFxcdTc5NkRcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzI0MSddID0gJ1xcdTAwMjhcXHU0RjExXFx1MDAyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyNDInXSA9ICdcXHUwMDI4XFx1ODFFQVxcdTAwMjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMjQzJ10gPSAnXFx1MDAyOFxcdTgxRjNcXHUwMDI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDMCddID0gJ1xcdTAwMzFcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDMSddID0gJ1xcdTAwMzJcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDMiddID0gJ1xcdTAwMzNcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDMyddID0gJ1xcdTAwMzRcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDNCddID0gJ1xcdTAwMzVcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDNSddID0gJ1xcdTAwMzZcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDNiddID0gJ1xcdTAwMzdcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDNyddID0gJ1xcdTAwMzhcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDOCddID0gJ1xcdTAwMzlcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzJDOSddID0gJ1xcdTAwMzFcXHUwMDMwXFx1NjcwOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMyQ0EnXSA9ICdcXHUwMDMxXFx1MDAzMVxcdTY3MDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMkNCJ10gPSAnXFx1MDAzMVxcdTAwMzJcXHU2NzA4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1OCddID0gJ1xcdTAwMzBcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1OSddID0gJ1xcdTAwMzFcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1QSddID0gJ1xcdTAwMzJcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1QiddID0gJ1xcdTAwMzNcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1QyddID0gJ1xcdTAwMzRcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1RCddID0gJ1xcdTAwMzVcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1RSddID0gJ1xcdTAwMzZcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM1RiddID0gJ1xcdTAwMzdcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2MCddID0gJ1xcdTAwMzhcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2MSddID0gJ1xcdTAwMzlcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2MiddID0gJ1xcdTAwMzFcXHUwMDMwXFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNjMnXSA9ICdcXHUwMDMxXFx1MDAzMVxcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzY0J10gPSAnXFx1MDAzMVxcdTAwMzJcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2NSddID0gJ1xcdTAwMzFcXHUwMDMzXFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNjYnXSA9ICdcXHUwMDMxXFx1MDAzNFxcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzY3J10gPSAnXFx1MDAzMVxcdTAwMzVcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2OCddID0gJ1xcdTAwMzFcXHUwMDM2XFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNjknXSA9ICdcXHUwMDMxXFx1MDAzN1xcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzZBJ10gPSAnXFx1MDAzMVxcdTAwMzhcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2QiddID0gJ1xcdTAwMzFcXHUwMDM5XFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNkMnXSA9ICdcXHUwMDMyXFx1MDAzMFxcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzZEJ10gPSAnXFx1MDAzMlxcdTAwMzFcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzM2RSddID0gJ1xcdTAwMzJcXHUwMDMyXFx1NzBCOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzNkYnXSA9ICdcXHUwMDMyXFx1MDAzM1xcdTcwQjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzMzcwJ10gPSAnXFx1MDAzMlxcdTAwMzRcXHU3MEI5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFMCddID0gJ1xcdTAwMzFcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFMSddID0gJ1xcdTAwMzJcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFMiddID0gJ1xcdTAwMzNcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFMyddID0gJ1xcdTAwMzRcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFNCddID0gJ1xcdTAwMzVcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFNSddID0gJ1xcdTAwMzZcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFNiddID0gJ1xcdTAwMzdcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFNyddID0gJ1xcdTAwMzhcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFOCddID0gJ1xcdTAwMzlcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFOSddID0gJ1xcdTAwMzFcXHUwMDMwXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRUEnXSA9ICdcXHUwMDMxXFx1MDAzMVxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0VCJ10gPSAnXFx1MDAzMVxcdTAwMzJcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFQyddID0gJ1xcdTAwMzFcXHUwMDMzXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRUQnXSA9ICdcXHUwMDMxXFx1MDAzNFxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0VFJ10gPSAnXFx1MDAzMVxcdTAwMzVcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNFRiddID0gJ1xcdTAwMzFcXHUwMDM2XFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRjAnXSA9ICdcXHUwMDMxXFx1MDAzN1xcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0YxJ10gPSAnXFx1MDAzMVxcdTAwMzhcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGMiddID0gJ1xcdTAwMzFcXHUwMDM5XFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRjMnXSA9ICdcXHUwMDMyXFx1MDAzMFxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0Y0J10gPSAnXFx1MDAzMlxcdTAwMzFcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGNSddID0gJ1xcdTAwMzJcXHUwMDMyXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRjYnXSA9ICdcXHUwMDMyXFx1MDAzM1xcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0Y3J10gPSAnXFx1MDAzMlxcdTAwMzRcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGOCddID0gJ1xcdTAwMzJcXHUwMDM1XFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRjknXSA9ICdcXHUwMDMyXFx1MDAzNlxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0ZBJ10gPSAnXFx1MDAzMlxcdTAwMzdcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGQiddID0gJ1xcdTAwMzJcXHUwMDM4XFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdTMzRkMnXSA9ICdcXHUwMDMyXFx1MDAzOVxcdTY1RTUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHUzM0ZEJ10gPSAnXFx1MDAzM1xcdTAwMzBcXHU2NUU1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1MzNGRSddID0gJ1xcdTAwMzNcXHUwMDMxXFx1NjVFNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCMDAnXSA9ICdcXHUwMDY2XFx1MDA2Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCMDEnXSA9ICdcXHUwMDY2XFx1MDA2OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCMDInXSA9ICdcXHUwMDY2XFx1MDA2Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCMDMnXSA9ICdcXHUwMDY2XFx1MDA2NlxcdTAwNjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjA0J10gPSAnXFx1MDA2NlxcdTAwNjZcXHUwMDZDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIwNSddID0gJ1xcdTAxN0ZcXHUwMDc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIwNiddID0gJ1xcdTAwNzNcXHUwMDc0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxMyddID0gJ1xcdTA1NzRcXHUwNTc2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxNCddID0gJ1xcdTA1NzRcXHUwNTY1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxNSddID0gJ1xcdTA1NzRcXHUwNTZCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxNiddID0gJ1xcdTA1N0VcXHUwNTc2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkIxNyddID0gJ1xcdTA1NzRcXHUwNTZEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI0RiddID0gJ1xcdTA1RDBcXHUwNURDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1MCddID0gJ1xcdTA2NzEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjUxJ10gPSAnXFx1MDY3MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNTInXSA9ICdcXHUwNjdCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1MyddID0gJ1xcdTA2N0InO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjU0J10gPSAnXFx1MDY3Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNTUnXSA9ICdcXHUwNjdCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1NiddID0gJ1xcdTA2N0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjU3J10gPSAnXFx1MDY3RSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNTgnXSA9ICdcXHUwNjdFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1OSddID0gJ1xcdTA2N0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjVBJ10gPSAnXFx1MDY4MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNUInXSA9ICdcXHUwNjgwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1QyddID0gJ1xcdTA2ODAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjVEJ10gPSAnXFx1MDY4MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNUUnXSA9ICdcXHUwNjdBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI1RiddID0gJ1xcdTA2N0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjYwJ10gPSAnXFx1MDY3QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNjEnXSA9ICdcXHUwNjdBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2MiddID0gJ1xcdTA2N0YnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjYzJ10gPSAnXFx1MDY3Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNjQnXSA9ICdcXHUwNjdGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2NSddID0gJ1xcdTA2N0YnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjY2J10gPSAnXFx1MDY3OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNjcnXSA9ICdcXHUwNjc5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2OCddID0gJ1xcdTA2NzknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjY5J10gPSAnXFx1MDY3OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNkEnXSA9ICdcXHUwNkE0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2QiddID0gJ1xcdTA2QTQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjZDJ10gPSAnXFx1MDZBNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNkQnXSA9ICdcXHUwNkE0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI2RSddID0gJ1xcdTA2QTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjZGJ10gPSAnXFx1MDZBNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNzAnXSA9ICdcXHUwNkE2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3MSddID0gJ1xcdTA2QTYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjcyJ10gPSAnXFx1MDY4NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNzMnXSA9ICdcXHUwNjg0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3NCddID0gJ1xcdTA2ODQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjc1J10gPSAnXFx1MDY4NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNzYnXSA9ICdcXHUwNjgzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3NyddID0gJ1xcdTA2ODMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjc4J10gPSAnXFx1MDY4Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCNzknXSA9ICdcXHUwNjgzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3QSddID0gJ1xcdTA2ODYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjdCJ10gPSAnXFx1MDY4Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCN0MnXSA9ICdcXHUwNjg2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI3RCddID0gJ1xcdTA2ODYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjdFJ10gPSAnXFx1MDY4Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCN0YnXSA9ICdcXHUwNjg3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4MCddID0gJ1xcdTA2ODcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjgxJ10gPSAnXFx1MDY4Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCODInXSA9ICdcXHUwNjhEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4MyddID0gJ1xcdTA2OEQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjg0J10gPSAnXFx1MDY4Qyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCODUnXSA9ICdcXHUwNjhDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4NiddID0gJ1xcdTA2OEUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjg3J10gPSAnXFx1MDY4RSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCODgnXSA9ICdcXHUwNjg4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4OSddID0gJ1xcdTA2ODgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjhBJ10gPSAnXFx1MDY5OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOEInXSA9ICdcXHUwNjk4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4QyddID0gJ1xcdTA2OTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjhEJ10gPSAnXFx1MDY5MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOEUnXSA9ICdcXHUwNkE5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI4RiddID0gJ1xcdTA2QTknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjkwJ10gPSAnXFx1MDZBOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOTEnXSA9ICdcXHUwNkE5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5MiddID0gJ1xcdTA2QUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjkzJ10gPSAnXFx1MDZBRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOTQnXSA9ICdcXHUwNkFGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5NSddID0gJ1xcdTA2QUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjk2J10gPSAnXFx1MDZCMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOTcnXSA9ICdcXHUwNkIzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5OCddID0gJ1xcdTA2QjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjk5J10gPSAnXFx1MDZCMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOUEnXSA9ICdcXHUwNkIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5QiddID0gJ1xcdTA2QjEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjlDJ10gPSAnXFx1MDZCMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCOUQnXSA9ICdcXHUwNkIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkI5RSddID0gJ1xcdTA2QkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQjlGJ10gPSAnXFx1MDZCQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQTAnXSA9ICdcXHUwNkJCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBMSddID0gJ1xcdTA2QkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkEyJ10gPSAnXFx1MDZCQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQTMnXSA9ICdcXHUwNkJCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBNCddID0gJ1xcdTA2QzAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkE1J10gPSAnXFx1MDZDMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQTYnXSA9ICdcXHUwNkMxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBNyddID0gJ1xcdTA2QzEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkE4J10gPSAnXFx1MDZDMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQTknXSA9ICdcXHUwNkMxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBQSddID0gJ1xcdTA2QkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkFCJ10gPSAnXFx1MDZCRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQUMnXSA9ICdcXHUwNkJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJBRCddID0gJ1xcdTA2QkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkFFJ10gPSAnXFx1MDZEMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCQUYnXSA9ICdcXHUwNkQyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJCMCddID0gJ1xcdTA2RDMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkIxJ10gPSAnXFx1MDZEMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRDMnXSA9ICdcXHUwNkFEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJENCddID0gJ1xcdTA2QUQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkQ1J10gPSAnXFx1MDZBRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRDYnXSA9ICdcXHUwNkFEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJENyddID0gJ1xcdTA2QzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkQ4J10gPSAnXFx1MDZDNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRDknXSA9ICdcXHUwNkM2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJEQSddID0gJ1xcdTA2QzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkRCJ10gPSAnXFx1MDZDOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCREMnXSA9ICdcXHUwNkM4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJERCddID0gJ1xcdTA2NzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkRFJ10gPSAnXFx1MDZDQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCREYnXSA9ICdcXHUwNkNCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJFMCddID0gJ1xcdTA2QzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkUxJ10gPSAnXFx1MDZDNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRTInXSA9ICdcXHUwNkM5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJFMyddID0gJ1xcdTA2QzknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkU0J10gPSAnXFx1MDZEMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRTUnXSA9ICdcXHUwNkQwJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJFNiddID0gJ1xcdTA2RDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkU3J10gPSAnXFx1MDZEMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRTgnXSA9ICdcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJFOSddID0gJ1xcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVBJ10gPSAnXFx1MDYyNlxcdTA2MjcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVCJ10gPSAnXFx1MDYyNlxcdTA2MjcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVDJ10gPSAnXFx1MDYyNlxcdTA2RDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVEJ10gPSAnXFx1MDYyNlxcdTA2RDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVFJ10gPSAnXFx1MDYyNlxcdTA2NDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkVGJ10gPSAnXFx1MDYyNlxcdTA2NDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkYwJ10gPSAnXFx1MDYyNlxcdTA2QzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkYxJ10gPSAnXFx1MDYyNlxcdTA2QzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkYyJ10gPSAnXFx1MDYyNlxcdTA2QzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkYzJ10gPSAnXFx1MDYyNlxcdTA2QzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY0J10gPSAnXFx1MDYyNlxcdTA2QzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY1J10gPSAnXFx1MDYyNlxcdTA2QzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY2J10gPSAnXFx1MDYyNlxcdTA2RDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY3J10gPSAnXFx1MDYyNlxcdTA2RDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY4J10gPSAnXFx1MDYyNlxcdTA2RDAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkY5J10gPSAnXFx1MDYyNlxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkZBJ10gPSAnXFx1MDYyNlxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkZCJ10gPSAnXFx1MDYyNlxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkZDJ10gPSAnXFx1MDZDQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZCRkQnXSA9ICdcXHUwNkNDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkJGRSddID0gJ1xcdTA2Q0MnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQkZGJ10gPSAnXFx1MDZDQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDAnXSA9ICdcXHUwNjI2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDEnXSA9ICdcXHUwNjI2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDInXSA9ICdcXHUwNjI2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDMnXSA9ICdcXHUwNjI2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDQnXSA9ICdcXHUwNjI2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDUnXSA9ICdcXHUwNjI4XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDYnXSA9ICdcXHUwNjI4XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDcnXSA9ICdcXHUwNjI4XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDgnXSA9ICdcXHUwNjI4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMDknXSA9ICdcXHUwNjI4XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEEnXSA9ICdcXHUwNjI4XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEInXSA9ICdcXHUwNjJBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEMnXSA9ICdcXHUwNjJBXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEQnXSA9ICdcXHUwNjJBXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEUnXSA9ICdcXHUwNjJBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMEYnXSA9ICdcXHUwNjJBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTAnXSA9ICdcXHUwNjJBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTEnXSA9ICdcXHUwNjJCXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTInXSA9ICdcXHUwNjJCXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTMnXSA9ICdcXHUwNjJCXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTQnXSA9ICdcXHUwNjJCXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTUnXSA9ICdcXHUwNjJDXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTYnXSA9ICdcXHUwNjJDXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTcnXSA9ICdcXHUwNjJEXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTgnXSA9ICdcXHUwNjJEXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMTknXSA9ICdcXHUwNjJFXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUEnXSA9ICdcXHUwNjJFXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUInXSA9ICdcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUMnXSA9ICdcXHUwNjMzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUQnXSA9ICdcXHUwNjMzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUUnXSA9ICdcXHUwNjMzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMUYnXSA9ICdcXHUwNjMzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjAnXSA9ICdcXHUwNjM1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjEnXSA9ICdcXHUwNjM1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjInXSA9ICdcXHUwNjM2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjMnXSA9ICdcXHUwNjM2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjQnXSA9ICdcXHUwNjM2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjUnXSA9ICdcXHUwNjM2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjYnXSA9ICdcXHUwNjM3XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjcnXSA9ICdcXHUwNjM3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjgnXSA9ICdcXHUwNjM4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMjknXSA9ICdcXHUwNjM5XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkEnXSA9ICdcXHUwNjM5XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkInXSA9ICdcXHUwNjNBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkMnXSA9ICdcXHUwNjNBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkQnXSA9ICdcXHUwNjQxXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkUnXSA9ICdcXHUwNjQxXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMkYnXSA9ICdcXHUwNjQxXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzAnXSA9ICdcXHUwNjQxXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzEnXSA9ICdcXHUwNjQxXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzInXSA9ICdcXHUwNjQxXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzMnXSA9ICdcXHUwNjQyXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzQnXSA9ICdcXHUwNjQyXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzUnXSA9ICdcXHUwNjQyXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzYnXSA9ICdcXHUwNjQyXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzcnXSA9ICdcXHUwNjQzXFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzgnXSA9ICdcXHUwNjQzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDMzknXSA9ICdcXHUwNjQzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0EnXSA9ICdcXHUwNjQzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0InXSA9ICdcXHUwNjQzXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0MnXSA9ICdcXHUwNjQzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0QnXSA9ICdcXHUwNjQzXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0UnXSA9ICdcXHUwNjQzXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDM0YnXSA9ICdcXHUwNjQ0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDAnXSA9ICdcXHUwNjQ0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDEnXSA9ICdcXHUwNjQ0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDInXSA9ICdcXHUwNjQ0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDMnXSA9ICdcXHUwNjQ0XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDQnXSA9ICdcXHUwNjQ0XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDUnXSA9ICdcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDYnXSA9ICdcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDcnXSA9ICdcXHUwNjQ1XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDgnXSA9ICdcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNDknXSA9ICdcXHUwNjQ1XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEEnXSA9ICdcXHUwNjQ1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEInXSA9ICdcXHUwNjQ2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEMnXSA9ICdcXHUwNjQ2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEQnXSA9ICdcXHUwNjQ2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEUnXSA9ICdcXHUwNjQ2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNEYnXSA9ICdcXHUwNjQ2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTAnXSA9ICdcXHUwNjQ2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTEnXSA9ICdcXHUwNjQ3XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTInXSA9ICdcXHUwNjQ3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTMnXSA9ICdcXHUwNjQ3XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTQnXSA9ICdcXHUwNjQ3XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTUnXSA9ICdcXHUwNjRBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTYnXSA9ICdcXHUwNjRBXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTcnXSA9ICdcXHUwNjRBXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTgnXSA9ICdcXHUwNjRBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNTknXSA9ICdcXHUwNjRBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUEnXSA9ICdcXHUwNjRBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUInXSA9ICdcXHUwNjMwXFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUMnXSA9ICdcXHUwNjMxXFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUQnXSA9ICdcXHUwNjQ5XFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNUUnXSA9ICdcXHUwMDIwXFx1MDY0Q1xcdTA2NTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQzVGJ10gPSAnXFx1MDAyMFxcdTA2NERcXHUwNjUxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkM2MCddID0gJ1xcdTAwMjBcXHUwNjRFXFx1MDY1MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjEnXSA9ICdcXHUwMDIwXFx1MDY0RlxcdTA2NTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQzYyJ10gPSAnXFx1MDAyMFxcdTA2NTBcXHUwNjUxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkM2MyddID0gJ1xcdTAwMjBcXHUwNjUxXFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjQnXSA9ICdcXHUwNjI2XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjUnXSA9ICdcXHUwNjI2XFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjYnXSA9ICdcXHUwNjI2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjcnXSA9ICdcXHUwNjI2XFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjgnXSA9ICdcXHUwNjI2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNjknXSA9ICdcXHUwNjI2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkEnXSA9ICdcXHUwNjI4XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkInXSA9ICdcXHUwNjI4XFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkMnXSA9ICdcXHUwNjI4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkQnXSA9ICdcXHUwNjI4XFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkUnXSA9ICdcXHUwNjI4XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNkYnXSA9ICdcXHUwNjI4XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzAnXSA9ICdcXHUwNjJBXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzEnXSA9ICdcXHUwNjJBXFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzInXSA9ICdcXHUwNjJBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzMnXSA9ICdcXHUwNjJBXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzQnXSA9ICdcXHUwNjJBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzUnXSA9ICdcXHUwNjJBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzYnXSA9ICdcXHUwNjJCXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzcnXSA9ICdcXHUwNjJCXFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzgnXSA9ICdcXHUwNjJCXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDNzknXSA9ICdcXHUwNjJCXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0EnXSA9ICdcXHUwNjJCXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0InXSA9ICdcXHUwNjJCXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0MnXSA9ICdcXHUwNjQxXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0QnXSA9ICdcXHUwNjQxXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0UnXSA9ICdcXHUwNjQyXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDN0YnXSA9ICdcXHUwNjQyXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODAnXSA9ICdcXHUwNjQzXFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODEnXSA9ICdcXHUwNjQzXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODInXSA9ICdcXHUwNjQzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODMnXSA9ICdcXHUwNjQzXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODQnXSA9ICdcXHUwNjQzXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODUnXSA9ICdcXHUwNjQ0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODYnXSA9ICdcXHUwNjQ0XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODcnXSA9ICdcXHUwNjQ0XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODgnXSA9ICdcXHUwNjQ1XFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDODknXSA9ICdcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEEnXSA9ICdcXHUwNjQ2XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEInXSA9ICdcXHUwNjQ2XFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEMnXSA9ICdcXHUwNjQ2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEQnXSA9ICdcXHUwNjQ2XFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEUnXSA9ICdcXHUwNjQ2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOEYnXSA9ICdcXHUwNjQ2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTAnXSA9ICdcXHUwNjQ5XFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTEnXSA9ICdcXHUwNjRBXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTInXSA9ICdcXHUwNjRBXFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTMnXSA9ICdcXHUwNjRBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTQnXSA9ICdcXHUwNjRBXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTUnXSA9ICdcXHUwNjRBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTYnXSA9ICdcXHUwNjRBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTcnXSA9ICdcXHUwNjI2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTgnXSA9ICdcXHUwNjI2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOTknXSA9ICdcXHUwNjI2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUEnXSA9ICdcXHUwNjI2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUInXSA9ICdcXHUwNjI2XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUMnXSA9ICdcXHUwNjI4XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUQnXSA9ICdcXHUwNjI4XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUUnXSA9ICdcXHUwNjI4XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDOUYnXSA9ICdcXHUwNjI4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTAnXSA9ICdcXHUwNjI4XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTEnXSA9ICdcXHUwNjJBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTInXSA9ICdcXHUwNjJBXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTMnXSA9ICdcXHUwNjJBXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTQnXSA9ICdcXHUwNjJBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTUnXSA9ICdcXHUwNjJBXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTYnXSA9ICdcXHUwNjJCXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTcnXSA9ICdcXHUwNjJDXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTgnXSA9ICdcXHUwNjJDXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQTknXSA9ICdcXHUwNjJEXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUEnXSA9ICdcXHUwNjJEXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUInXSA9ICdcXHUwNjJFXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUMnXSA9ICdcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUQnXSA9ICdcXHUwNjMzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUUnXSA9ICdcXHUwNjMzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQUYnXSA9ICdcXHUwNjMzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjAnXSA9ICdcXHUwNjMzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjEnXSA9ICdcXHUwNjM1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjInXSA9ICdcXHUwNjM1XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjMnXSA9ICdcXHUwNjM1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjQnXSA9ICdcXHUwNjM2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjUnXSA9ICdcXHUwNjM2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjYnXSA9ICdcXHUwNjM2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjcnXSA9ICdcXHUwNjM2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjgnXSA9ICdcXHUwNjM3XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQjknXSA9ICdcXHUwNjM4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkEnXSA9ICdcXHUwNjM5XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkInXSA9ICdcXHUwNjM5XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkMnXSA9ICdcXHUwNjNBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkQnXSA9ICdcXHUwNjNBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkUnXSA9ICdcXHUwNjQxXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQkYnXSA9ICdcXHUwNjQxXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzAnXSA9ICdcXHUwNjQxXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzEnXSA9ICdcXHUwNjQxXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzInXSA9ICdcXHUwNjQyXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzMnXSA9ICdcXHUwNjQyXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzQnXSA9ICdcXHUwNjQzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzUnXSA9ICdcXHUwNjQzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzYnXSA9ICdcXHUwNjQzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzcnXSA9ICdcXHUwNjQzXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzgnXSA9ICdcXHUwNjQzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQzknXSA9ICdcXHUwNjQ0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0EnXSA9ICdcXHUwNjQ0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0InXSA9ICdcXHUwNjQ0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0MnXSA9ICdcXHUwNjQ0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0QnXSA9ICdcXHUwNjQ0XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0UnXSA9ICdcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDQ0YnXSA9ICdcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDAnXSA9ICdcXHUwNjQ1XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDEnXSA9ICdcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDInXSA9ICdcXHUwNjQ2XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDMnXSA9ICdcXHUwNjQ2XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDQnXSA9ICdcXHUwNjQ2XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDUnXSA9ICdcXHUwNjQ2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDYnXSA9ICdcXHUwNjQ2XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDcnXSA9ICdcXHUwNjQ3XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDgnXSA9ICdcXHUwNjQ3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRDknXSA9ICdcXHUwNjQ3XFx1MDY3MCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREEnXSA9ICdcXHUwNjRBXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREInXSA9ICdcXHUwNjRBXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREMnXSA9ICdcXHUwNjRBXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREQnXSA9ICdcXHUwNjRBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREUnXSA9ICdcXHUwNjRBXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDREYnXSA9ICdcXHUwNjI2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTAnXSA9ICdcXHUwNjI2XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTEnXSA9ICdcXHUwNjI4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTInXSA9ICdcXHUwNjI4XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTMnXSA9ICdcXHUwNjJBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTQnXSA9ICdcXHUwNjJBXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTUnXSA9ICdcXHUwNjJCXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTYnXSA9ICdcXHUwNjJCXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTcnXSA9ICdcXHUwNjMzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTgnXSA9ICdcXHUwNjMzXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRTknXSA9ICdcXHUwNjM0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUEnXSA9ICdcXHUwNjM0XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUInXSA9ICdcXHUwNjQzXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUMnXSA9ICdcXHUwNjQzXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUQnXSA9ICdcXHUwNjQ0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUUnXSA9ICdcXHUwNjQ2XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRUYnXSA9ICdcXHUwNjQ2XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjAnXSA9ICdcXHUwNjRBXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjEnXSA9ICdcXHUwNjRBXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjInXSA9ICdcXHUwNjQwXFx1MDY0RVxcdTA2NTEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGQ0YzJ10gPSAnXFx1MDY0MFxcdTA2NEZcXHUwNjUxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkNGNCddID0gJ1xcdTA2NDBcXHUwNjUwXFx1MDY1MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjUnXSA9ICdcXHUwNjM3XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjYnXSA9ICdcXHUwNjM3XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjcnXSA9ICdcXHUwNjM5XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjgnXSA9ICdcXHUwNjM5XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRjknXSA9ICdcXHUwNjNBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkEnXSA9ICdcXHUwNjNBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkInXSA9ICdcXHUwNjMzXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkMnXSA9ICdcXHUwNjMzXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkQnXSA9ICdcXHUwNjM0XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkUnXSA9ICdcXHUwNjM0XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZDRkYnXSA9ICdcXHUwNjJEXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDAnXSA9ICdcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDEnXSA9ICdcXHUwNjJDXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDInXSA9ICdcXHUwNjJDXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDMnXSA9ICdcXHUwNjJFXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDQnXSA9ICdcXHUwNjJFXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDUnXSA9ICdcXHUwNjM1XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDYnXSA9ICdcXHUwNjM1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDcnXSA9ICdcXHUwNjM2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDgnXSA9ICdcXHUwNjM2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMDknXSA9ICdcXHUwNjM0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEEnXSA9ICdcXHUwNjM0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEInXSA9ICdcXHUwNjM0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEMnXSA9ICdcXHUwNjM0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEQnXSA9ICdcXHUwNjM0XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEUnXSA9ICdcXHUwNjMzXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMEYnXSA9ICdcXHUwNjM1XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTAnXSA9ICdcXHUwNjM2XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTEnXSA9ICdcXHUwNjM3XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTInXSA9ICdcXHUwNjM3XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTMnXSA9ICdcXHUwNjM5XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTQnXSA9ICdcXHUwNjM5XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTUnXSA9ICdcXHUwNjNBXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTYnXSA9ICdcXHUwNjNBXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTcnXSA9ICdcXHUwNjMzXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTgnXSA9ICdcXHUwNjMzXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMTknXSA9ICdcXHUwNjM0XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUEnXSA9ICdcXHUwNjM0XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUInXSA9ICdcXHUwNjJEXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUMnXSA9ICdcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUQnXSA9ICdcXHUwNjJDXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUUnXSA9ICdcXHUwNjJDXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMUYnXSA9ICdcXHUwNjJFXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjAnXSA9ICdcXHUwNjJFXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjEnXSA9ICdcXHUwNjM1XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjInXSA9ICdcXHUwNjM1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjMnXSA9ICdcXHUwNjM2XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjQnXSA9ICdcXHUwNjM2XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjUnXSA9ICdcXHUwNjM0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjYnXSA9ICdcXHUwNjM0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjcnXSA9ICdcXHUwNjM0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjgnXSA9ICdcXHUwNjM0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMjknXSA9ICdcXHUwNjM0XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkEnXSA9ICdcXHUwNjMzXFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkInXSA9ICdcXHUwNjM1XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkMnXSA9ICdcXHUwNjM2XFx1MDYzMSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkQnXSA9ICdcXHUwNjM0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkUnXSA9ICdcXHUwNjM0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMkYnXSA9ICdcXHUwNjM0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzAnXSA9ICdcXHUwNjM0XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzEnXSA9ICdcXHUwNjMzXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzInXSA9ICdcXHUwNjM0XFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzMnXSA9ICdcXHUwNjM3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzQnXSA9ICdcXHUwNjMzXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzUnXSA9ICdcXHUwNjMzXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzYnXSA9ICdcXHUwNjMzXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzcnXSA9ICdcXHUwNjM0XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzgnXSA9ICdcXHUwNjM0XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEMzknXSA9ICdcXHUwNjM0XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEM0EnXSA9ICdcXHUwNjM3XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEM0InXSA9ICdcXHUwNjM4XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEM0MnXSA9ICdcXHUwNjI3XFx1MDY0Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEM0QnXSA9ICdcXHUwNjI3XFx1MDY0Qic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENTAnXSA9ICdcXHUwNjJBXFx1MDYyQ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDUxJ10gPSAnXFx1MDYyQVxcdTA2MkRcXHUwNjJDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1MiddID0gJ1xcdTA2MkFcXHUwNjJEXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENTMnXSA9ICdcXHUwNjJBXFx1MDYyRFxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDU0J10gPSAnXFx1MDYyQVxcdTA2MkVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1NSddID0gJ1xcdTA2MkFcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENTYnXSA9ICdcXHUwNjJBXFx1MDY0NVxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDU3J10gPSAnXFx1MDYyQVxcdTA2NDVcXHUwNjJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1OCddID0gJ1xcdTA2MkNcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENTknXSA9ICdcXHUwNjJDXFx1MDY0NVxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDVBJ10gPSAnXFx1MDYyRFxcdTA2NDVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1QiddID0gJ1xcdTA2MkRcXHUwNjQ1XFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENUMnXSA9ICdcXHUwNjMzXFx1MDYyRFxcdTA2MkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDVEJ10gPSAnXFx1MDYzM1xcdTA2MkNcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ1RSddID0gJ1xcdTA2MzNcXHUwNjJDXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENUYnXSA9ICdcXHUwNjMzXFx1MDY0NVxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDYwJ10gPSAnXFx1MDYzM1xcdTA2NDVcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2MSddID0gJ1xcdTA2MzNcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENjInXSA9ICdcXHUwNjMzXFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDYzJ10gPSAnXFx1MDYzM1xcdTA2NDVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2NCddID0gJ1xcdTA2MzVcXHUwNjJEXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENjUnXSA9ICdcXHUwNjM1XFx1MDYyRFxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDY2J10gPSAnXFx1MDYzNVxcdTA2NDVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2NyddID0gJ1xcdTA2MzRcXHUwNjJEXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENjgnXSA9ICdcXHUwNjM0XFx1MDYyRFxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDY5J10gPSAnXFx1MDYzNFxcdTA2MkNcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2QSddID0gJ1xcdTA2MzRcXHUwNjQ1XFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENkInXSA9ICdcXHUwNjM0XFx1MDY0NVxcdTA2MkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDZDJ10gPSAnXFx1MDYzNFxcdTA2NDVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ2RCddID0gJ1xcdTA2MzRcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENkUnXSA9ICdcXHUwNjM2XFx1MDYyRFxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDZGJ10gPSAnXFx1MDYzNlxcdTA2MkVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3MCddID0gJ1xcdTA2MzZcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENzEnXSA9ICdcXHUwNjM3XFx1MDY0NVxcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDcyJ10gPSAnXFx1MDYzN1xcdTA2NDVcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3MyddID0gJ1xcdTA2MzdcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENzQnXSA9ICdcXHUwNjM3XFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDc1J10gPSAnXFx1MDYzOVxcdTA2MkNcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3NiddID0gJ1xcdTA2MzlcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZENzcnXSA9ICdcXHUwNjM5XFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDc4J10gPSAnXFx1MDYzOVxcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3OSddID0gJ1xcdTA2M0FcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEN0EnXSA9ICdcXHUwNjNBXFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDdCJ10gPSAnXFx1MDYzQVxcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3QyddID0gJ1xcdTA2NDFcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEN0QnXSA9ICdcXHUwNjQxXFx1MDYyRVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDdFJ10gPSAnXFx1MDY0MlxcdTA2NDVcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ3RiddID0gJ1xcdTA2NDJcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEODAnXSA9ICdcXHUwNjQ0XFx1MDYyRFxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDgxJ10gPSAnXFx1MDY0NFxcdTA2MkRcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4MiddID0gJ1xcdTA2NDRcXHUwNjJEXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEODMnXSA9ICdcXHUwNjQ0XFx1MDYyQ1xcdTA2MkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDg0J10gPSAnXFx1MDY0NFxcdTA2MkNcXHUwNjJDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4NSddID0gJ1xcdTA2NDRcXHUwNjJFXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEODYnXSA9ICdcXHUwNjQ0XFx1MDYyRVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDg3J10gPSAnXFx1MDY0NFxcdTA2NDVcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4OCddID0gJ1xcdTA2NDRcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEODknXSA9ICdcXHUwNjQ1XFx1MDYyRFxcdTA2MkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDhBJ10gPSAnXFx1MDY0NVxcdTA2MkRcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4QiddID0gJ1xcdTA2NDVcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOEMnXSA9ICdcXHUwNjQ1XFx1MDYyQ1xcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDhEJ10gPSAnXFx1MDY0NVxcdTA2MkNcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ4RSddID0gJ1xcdTA2NDVcXHUwNjJFXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOEYnXSA9ICdcXHUwNjQ1XFx1MDYyRVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDkyJ10gPSAnXFx1MDY0NVxcdTA2MkNcXHUwNjJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5MyddID0gJ1xcdTA2NDdcXHUwNjQ1XFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOTQnXSA9ICdcXHUwNjQ3XFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDk1J10gPSAnXFx1MDY0NlxcdTA2MkRcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5NiddID0gJ1xcdTA2NDZcXHUwNjJEXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOTcnXSA9ICdcXHUwNjQ2XFx1MDYyQ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDk4J10gPSAnXFx1MDY0NlxcdTA2MkNcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5OSddID0gJ1xcdTA2NDZcXHUwNjJDXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOUEnXSA9ICdcXHUwNjQ2XFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDlCJ10gPSAnXFx1MDY0NlxcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5QyddID0gJ1xcdTA2NEFcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEOUQnXSA9ICdcXHUwNjRBXFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRDlFJ10gPSAnXFx1MDYyOFxcdTA2MkVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkQ5RiddID0gJ1xcdTA2MkFcXHUwNjJDXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQTAnXSA9ICdcXHUwNjJBXFx1MDYyQ1xcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREExJ10gPSAnXFx1MDYyQVxcdTA2MkVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBMiddID0gJ1xcdTA2MkFcXHUwNjJFXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQTMnXSA9ICdcXHUwNjJBXFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREE0J10gPSAnXFx1MDYyQVxcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBNSddID0gJ1xcdTA2MkNcXHUwNjQ1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQTYnXSA9ICdcXHUwNjJDXFx1MDYyRFxcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREE3J10gPSAnXFx1MDYyQ1xcdTA2NDVcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBOCddID0gJ1xcdTA2MzNcXHUwNjJFXFx1MDY0OSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQTknXSA9ICdcXHUwNjM1XFx1MDYyRFxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREFBJ10gPSAnXFx1MDYzNFxcdTA2MkRcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBQiddID0gJ1xcdTA2MzZcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQUMnXSA9ICdcXHUwNjQ0XFx1MDYyQ1xcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREFEJ10gPSAnXFx1MDY0NFxcdTA2NDVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRBRSddID0gJ1xcdTA2NEFcXHUwNjJEXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQUYnXSA9ICdcXHUwNjRBXFx1MDYyQ1xcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREIwJ10gPSAnXFx1MDY0QVxcdTA2NDVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCMSddID0gJ1xcdTA2NDVcXHUwNjQ1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQjInXSA9ICdcXHUwNjQyXFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREIzJ10gPSAnXFx1MDY0NlxcdTA2MkRcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCNCddID0gJ1xcdTA2NDJcXHUwNjQ1XFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQjUnXSA9ICdcXHUwNjQ0XFx1MDYyRFxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREI2J10gPSAnXFx1MDYzOVxcdTA2NDVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCNyddID0gJ1xcdTA2NDNcXHUwNjQ1XFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQjgnXSA9ICdcXHUwNjQ2XFx1MDYyQ1xcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREI5J10gPSAnXFx1MDY0NVxcdTA2MkVcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCQSddID0gJ1xcdTA2NDRcXHUwNjJDXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQkInXSA9ICdcXHUwNjQzXFx1MDY0NVxcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREJDJ10gPSAnXFx1MDY0NFxcdTA2MkNcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRCRCddID0gJ1xcdTA2NDZcXHUwNjJDXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQkUnXSA9ICdcXHUwNjJDXFx1MDYyRFxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREJGJ10gPSAnXFx1MDYyRFxcdTA2MkNcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRDMCddID0gJ1xcdTA2NDVcXHUwNjJDXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQzEnXSA9ICdcXHUwNjQxXFx1MDY0NVxcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREMyJ10gPSAnXFx1MDYyOFxcdTA2MkRcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRDMyddID0gJ1xcdTA2NDNcXHUwNjQ1XFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQzQnXSA9ICdcXHUwNjM5XFx1MDYyQ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGREM1J10gPSAnXFx1MDYzNVxcdTA2NDVcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkRDNiddID0gJ1xcdTA2MzNcXHUwNjJFXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZEQzcnXSA9ICdcXHUwNjQ2XFx1MDYyQ1xcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTQ5J10gPSAnXFx1MjAzRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFNEEnXSA9ICdcXHUyMDNFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU0QiddID0gJ1xcdTIwM0UnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTRDJ10gPSAnXFx1MjAzRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFNEQnXSA9ICdcXHUwMDVGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU0RSddID0gJ1xcdTAwNUYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTRGJ10gPSAnXFx1MDA1Ric7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFODAnXSA9ICdcXHUwNjIxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4MSddID0gJ1xcdTA2MjInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTgyJ10gPSAnXFx1MDYyMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFODMnXSA9ICdcXHUwNjIzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4NCddID0gJ1xcdTA2MjMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTg1J10gPSAnXFx1MDYyNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFODYnXSA9ICdcXHUwNjI0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4NyddID0gJ1xcdTA2MjUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTg4J10gPSAnXFx1MDYyNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFODknXSA9ICdcXHUwNjI2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4QSddID0gJ1xcdTA2MjYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRThCJ10gPSAnXFx1MDYyNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOEMnXSA9ICdcXHUwNjI2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU4RCddID0gJ1xcdTA2MjcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRThFJ10gPSAnXFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOEYnXSA9ICdcXHUwNjI4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5MCddID0gJ1xcdTA2MjgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTkxJ10gPSAnXFx1MDYyOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOTInXSA9ICdcXHUwNjI4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5MyddID0gJ1xcdTA2MjknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTk0J10gPSAnXFx1MDYyOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOTUnXSA9ICdcXHUwNjJBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5NiddID0gJ1xcdTA2MkEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTk3J10gPSAnXFx1MDYyQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOTgnXSA9ICdcXHUwNjJBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5OSddID0gJ1xcdTA2MkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTlBJ10gPSAnXFx1MDYyQic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOUInXSA9ICdcXHUwNjJCJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5QyddID0gJ1xcdTA2MkInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRTlEJ10gPSAnXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFOUUnXSA9ICdcXHUwNjJDJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkU5RiddID0gJ1xcdTA2MkMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUEwJ10gPSAnXFx1MDYyQyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQTEnXSA9ICdcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBMiddID0gJ1xcdTA2MkQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUEzJ10gPSAnXFx1MDYyRCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQTQnXSA9ICdcXHUwNjJEJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBNSddID0gJ1xcdTA2MkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUE2J10gPSAnXFx1MDYyRSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQTcnXSA9ICdcXHUwNjJFJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBOCddID0gJ1xcdTA2MkUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUE5J10gPSAnXFx1MDYyRic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQUEnXSA9ICdcXHUwNjJGJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBQiddID0gJ1xcdTA2MzAnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUFDJ10gPSAnXFx1MDYzMCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQUQnXSA9ICdcXHUwNjMxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVBRSddID0gJ1xcdTA2MzEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUFGJ10gPSAnXFx1MDYzMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQjAnXSA9ICdcXHUwNjMyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCMSddID0gJ1xcdTA2MzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUIyJ10gPSAnXFx1MDYzMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQjMnXSA9ICdcXHUwNjMzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCNCddID0gJ1xcdTA2MzMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUI1J10gPSAnXFx1MDYzNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQjYnXSA9ICdcXHUwNjM0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCNyddID0gJ1xcdTA2MzQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUI4J10gPSAnXFx1MDYzNCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQjknXSA9ICdcXHUwNjM1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCQSddID0gJ1xcdTA2MzUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUJCJ10gPSAnXFx1MDYzNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQkMnXSA9ICdcXHUwNjM1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVCRCddID0gJ1xcdTA2MzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUJFJ10gPSAnXFx1MDYzNic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQkYnXSA9ICdcXHUwNjM2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDMCddID0gJ1xcdTA2MzYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUMxJ10gPSAnXFx1MDYzNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQzInXSA9ICdcXHUwNjM3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDMyddID0gJ1xcdTA2MzcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUM0J10gPSAnXFx1MDYzNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQzUnXSA9ICdcXHUwNjM4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDNiddID0gJ1xcdTA2MzgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUM3J10gPSAnXFx1MDYzOCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQzgnXSA9ICdcXHUwNjM4JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDOSddID0gJ1xcdTA2MzknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUNBJ10gPSAnXFx1MDYzOSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQ0InXSA9ICdcXHUwNjM5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDQyddID0gJ1xcdTA2MzknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUNEJ10gPSAnXFx1MDYzQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFQ0UnXSA9ICdcXHUwNjNBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVDRiddID0gJ1xcdTA2M0EnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUQwJ10gPSAnXFx1MDYzQSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRDEnXSA9ICdcXHUwNjQxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVEMiddID0gJ1xcdTA2NDEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUQzJ10gPSAnXFx1MDY0MSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRDQnXSA9ICdcXHUwNjQxJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVENSddID0gJ1xcdTA2NDInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUQ2J10gPSAnXFx1MDY0Mic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRDcnXSA9ICdcXHUwNjQyJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVEOCddID0gJ1xcdTA2NDInO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUQ5J10gPSAnXFx1MDY0Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFREEnXSA9ICdcXHUwNjQzJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVEQiddID0gJ1xcdTA2NDMnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRURDJ10gPSAnXFx1MDY0Myc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFREQnXSA9ICdcXHUwNjQ0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVERSddID0gJ1xcdTA2NDQnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRURGJ10gPSAnXFx1MDY0NCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRTAnXSA9ICdcXHUwNjQ0JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFMSddID0gJ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUUyJ10gPSAnXFx1MDY0NSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRTMnXSA9ICdcXHUwNjQ1JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFNCddID0gJ1xcdTA2NDUnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUU1J10gPSAnXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRTYnXSA9ICdcXHUwNjQ2JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFNyddID0gJ1xcdTA2NDYnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUU4J10gPSAnXFx1MDY0Nic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRTknXSA9ICdcXHUwNjQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFQSddID0gJ1xcdTA2NDcnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUVCJ10gPSAnXFx1MDY0Nyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRUMnXSA9ICdcXHUwNjQ3JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVFRCddID0gJ1xcdTA2NDgnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUVFJ10gPSAnXFx1MDY0OCc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRUYnXSA9ICdcXHUwNjQ5JztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVGMCddID0gJ1xcdTA2NDknO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUYxJ10gPSAnXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjInXSA9ICdcXHUwNjRBJztcbiAgICAgICAgICAgICAgICAgICAgdFsnXFx1RkVGMyddID0gJ1xcdTA2NEEnO1xuICAgICAgICAgICAgICAgICAgICB0WydcXHVGRUY0J10gPSAnXFx1MDY0QSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjUnXSA9ICdcXHUwNjQ0XFx1MDYyMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjYnXSA9ICdcXHUwNjQ0XFx1MDYyMic7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjcnXSA9ICdcXHUwNjQ0XFx1MDYyMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjgnXSA9ICdcXHUwNjQ0XFx1MDYyMyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRjknXSA9ICdcXHUwNjQ0XFx1MDYyNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRkEnXSA9ICdcXHUwNjQ0XFx1MDYyNSc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRkInXSA9ICdcXHUwNjQ0XFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1xcdUZFRkMnXSA9ICdcXHUwNjQ0XFx1MDYyNyc7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV2ZXJzZUlmUnRsKGNoYXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjaGFyc0xlbmd0aCA9IGNoYXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzTGVuZ3RoIDw9IDEgfHwgIWlzUlRMUmFuZ2VGb3IoY2hhcnMuY2hhckNvZGVBdCgwKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFycztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YXIgcyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpaSA9IGNoYXJzTGVuZ3RoIC0gMTsgaWkgPj0gMDsgaWktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcyArPSBjaGFyc1tpaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cG9ydHMubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMgPSBtYXBTcGVjaWFsVW5pY29kZVZhbHVlcztcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJldmVyc2VJZlJ0bCA9IHJldmVyc2VJZlJ0bDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldFVuaWNvZGVSYW5nZUZvciA9IGdldFVuaWNvZGVSYW5nZUZvcjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldE5vcm1hbGl6ZWRVbmljb2RlcyA9IGdldE5vcm1hbGl6ZWRVbmljb2RlcztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldFVuaWNvZGVGb3JHbHlwaCA9IGdldFVuaWNvZGVGb3JHbHlwaDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTgwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250UmVuZGVyZXJGYWN0b3J5ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY2ZmX3BhcnNlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc0KTtcblxuICAgICAgICAgICAgICAgIHZhciBfZ2x5cGhsaXN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNzcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9lbmNvZGluZ3MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU3KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgRm9udFJlbmRlcmVyRmFjdG9yeSA9IGZ1bmN0aW9uIEZvbnRSZW5kZXJlckZhY3RvcnlDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRMb25nKGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCAyNCB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTYgfCBkYXRhW29mZnNldCArIDJdIDw8IDggfCBkYXRhW29mZnNldCArIDNdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VXNob3J0KGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbb2Zmc2V0XSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlQ21hcChkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgMikgPT09IDEgPyBnZXRMb25nKGRhdGEsIHN0YXJ0ICsgOCkgOiBnZXRMb25nKGRhdGEsIHN0YXJ0ICsgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdldFVzaG9ydChkYXRhLCBzdGFydCArIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VzLCBwLCBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlZ0NvdW50ID0gZ2V0VXNob3J0KGRhdGEsIHN0YXJ0ICsgb2Zmc2V0ICsgNikgPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RhcnQgKyBvZmZzZXQgKyAxNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBnZXRVc2hvcnQoZGF0YSwgcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VnQ291bnQ7IGkrKywgcCArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5zdGFydCA9IGdldFVzaG9ydChkYXRhLCBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2VnQ291bnQ7IGkrKywgcCArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlc1tpXS5pZERlbHRhID0gZ2V0VXNob3J0KGRhdGEsIHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWdDb3VudDsgaSsrLCBwICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkT2Zmc2V0ID0gZ2V0VXNob3J0KGRhdGEsIHApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZE9mZnNldCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbaV0uaWRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gcmFuZ2VzW2ldLmVuZCAtIHJhbmdlc1tpXS5zdGFydCArIDE7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXNbaV0uaWRzW2pdID0gZ2V0VXNob3J0KGRhdGEsIHAgKyBpZE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZE9mZnNldCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldExvbmcoZGF0YSwgc3RhcnQgKyBvZmZzZXQgKyA0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBzID0gZ2V0TG9uZyhkYXRhLCBzdGFydCArIG9mZnNldCArIDEyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gc3RhcnQgKyBvZmZzZXQgKyAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBncm91cHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZ2V0TG9uZyhkYXRhLCBwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogZ2V0TG9uZyhkYXRhLCBwICsgNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZERlbHRhOiBnZXRMb25nKGRhdGEsIHAgKyA4KSAtIGdldExvbmcoZGF0YSwgcClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5zdXBwb3J0ZWQgY21hcDogXCIuY29uY2F0KGZvcm1hdCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFyc2VDZmYoZGF0YSwgc3RhcnQsIGVuZCwgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX2NmZl9wYXJzZXIuQ0ZGUGFyc2VyKG5ldyBfc3RyZWFtLlN0cmVhbShkYXRhLCBzdGFydCwgZW5kIC0gc3RhcnQpLCBwcm9wZXJ0aWVzLCBzZWFjQW5hbHlzaXNFbmFibGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZmYgPSBwYXJzZXIucGFyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzOiBjZmYuY2hhclN0cmluZ3Mub2JqZWN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyczogY2ZmLnRvcERpY3QucHJpdmF0ZURpY3QgJiYgY2ZmLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleCAmJiBjZmYudG9wRGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N1YnJzOiBjZmYuZ2xvYmFsU3VickluZGV4ICYmIGNmZi5nbG9iYWxTdWJySW5kZXgub2JqZWN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NGRkNJREZvbnQ6IGNmZi5pc0NJREZvbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRTZWxlY3Q6IGNmZi5mZFNlbGVjdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZEFycmF5OiBjZmYuZmRBcnJheVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlR2x5ZlRhYmxlKGdseWYsIGxvY2EsIGlzR2x5cGhMb2NhdGlvbnNMb25nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbVNpemUsIGl0ZW1EZWNvZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0dseXBoTG9jYXRpb25zTG9uZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplID0gNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EZWNvZGUgPSBmdW5jdGlvbiBmb250SXRlbURlY29kZUxvbmcoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgMjQgfCBkYXRhW29mZnNldCArIDFdIDw8IDE2IHwgZGF0YVtvZmZzZXQgKyAyXSA8PCA4IHwgZGF0YVtvZmZzZXQgKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZSA9IDI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGVjb2RlID0gZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW29mZnNldF0gPDwgOSB8IGRhdGFbb2Zmc2V0ICsgMV0gPDwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRPZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2EsIDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gaXRlbVNpemU7IGogPCBsb2NhLmxlbmd0aDsgaiArPSBpdGVtU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRPZmZzZXQgPSBpdGVtRGVjb2RlKGxvY2EsIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBocy5wdXNoKGdseWYuc3ViYXJyYXkoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2x5cGhzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9va3VwQ21hcChyYW5nZXMsIHVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gdW5pY29kZS5jb2RlUG9pbnRBdCgwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByYW5nZXMubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGwgPCByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBsICsgciArIDEgPj4gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlIDwgcmFuZ2VzW2NdLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIgPSBjIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZXNbbF0uc3RhcnQgPD0gY29kZSAmJiBjb2RlIDw9IHJhbmdlc1tsXS5lbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaWQgPSByYW5nZXNbbF0uaWREZWx0YSArIChyYW5nZXNbbF0uaWRzID8gcmFuZ2VzW2xdLmlkc1tjb2RlIC0gcmFuZ2VzW2xdLnN0YXJ0XSA6IGNvZGUpICYgMHhGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJDb2RlOiBjb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoSWQ6IGdpZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIGZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1vdmVUbyh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAnbW92ZVRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW3gsIHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGxpbmVUbyh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAnbGluZVRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogW3gsIHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHF1YWRyYXRpY0N1cnZlVG8oeGEsIHlhLCB4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAncXVhZHJhdGljQ3VydmVUbycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFt4YSwgeWEsIHgsIHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJPZkNvbnRvdXJzID0gKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmxhZ3M7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtYmVyT2ZDb250b3VycyA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzID0gY29kZVtpXSA8PCA4IHwgY29kZVtpICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaEluZGV4ID0gY29kZVtpICsgMl0gPDwgOCB8IGNvZGVbaSArIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmcxLCBhcmcyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzIgPSAoY29kZVtpICsgMl0gPDwgMjQgfCBjb2RlW2kgKyAzXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcxID0gY29kZVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMiA9IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIDB4MDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBhcmcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGFyZzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlWCA9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVkgPSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUwMSA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTEwID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiAweDA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVggPSBzY2FsZVkgPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiAweDQwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVggPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVkgPSAoY29kZVtpICsgMl0gPDwgMjQgfCBjb2RlW2kgKyAzXSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZsYWdzICYgMHg4MCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVYID0gKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgLyAxMDczNzQxODI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUwMSA9IChjb2RlW2kgKyAyXSA8PCAyNCB8IGNvZGVbaSArIDNdIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTEwID0gKGNvZGVbaSArIDRdIDw8IDI0IHwgY29kZVtpICsgNV0gPDwgMTYpIC8gMTA3Mzc0MTgyNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWSA9IChjb2RlW2kgKyA2XSA8PCAyNCB8IGNvZGVbaSArIDddIDw8IDE2KSAvIDEwNzM3NDE4MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ViZ2x5cGggPSBmb250LmdseXBoc1tnbHlwaEluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViZ2x5cGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAnc2F2ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFtzY2FsZVgsIHNjYWxlMDEsIHNjYWxlMTAsIHNjYWxlWSwgeCwgeV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUdseWYoc3ViZ2x5cGgsIGNtZHMsIGZvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdyZXN0b3JlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChmbGFncyAmIDB4MjApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kUHRzT2ZDb250b3VycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqLCBqajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1iZXJPZkNvbnRvdXJzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUHRzT2ZDb250b3Vycy5wdXNoKGNvZGVbaV0gPDwgOCB8IGNvZGVbaSArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnN0cnVjdGlvbkxlbmd0aCA9IGNvZGVbaV0gPDwgOCB8IGNvZGVbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMiArIGluc3RydWN0aW9uTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1iZXJPZlBvaW50cyA9IGVuZFB0c09mQ29udG91cnNbZW5kUHRzT2ZDb250b3Vycy5sZW5ndGggLSAxXSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvaW50cy5sZW5ndGggPCBudW1iZXJPZlBvaW50cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyA9IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGVhdCA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgMHgwOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ICs9IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZXBlYXQtLSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogZmxhZ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bWJlck9mUG9pbnRzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwb2ludHNbal0uZmxhZ3MgJiAweDEyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCArPSAoY29kZVtpXSA8PCAyNCB8IGNvZGVbaSArIDFdIDw8IDE2KSA+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgwMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4IC09IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDEyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gY29kZVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2pdLnggPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBudW1iZXJPZlBvaW50czsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocG9pbnRzW2pdLmZsYWdzICYgMHgyNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgPj4gMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSAtPSBjb2RlW2krK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMHgyNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICs9IGNvZGVbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tqXS55ID0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb2ludCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyT2ZDb250b3VyczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRQb2ludCA9IGVuZFB0c09mQ29udG91cnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250b3VyID0gcG9pbnRzLnNsaWNlKHN0YXJ0UG9pbnQsIGVuZFBvaW50ICsgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRvdXJbMF0uZmxhZ3MgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250b3VyLnB1c2goY29udG91clswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdLmZsYWdzICYgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udG91ci51bnNoaWZ0KGNvbnRvdXJbY29udG91ci5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiAoY29udG91clswXS54ICsgY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdLngpIC8gMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAoY29udG91clswXS55ICsgY29udG91cltjb250b3VyLmxlbmd0aCAtIDFdLnkpIC8gMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvdXIudW5zaGlmdChwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRvdXIucHVzaChwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUbyhjb250b3VyWzBdLngsIGNvbnRvdXJbMF0ueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMSwgamogPSBjb250b3VyLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250b3VyW2pdLmZsYWdzICYgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRvdXJbaiArIDFdLmZsYWdzICYgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRyYXRpY0N1cnZlVG8oY29udG91cltqXS54LCBjb250b3VyW2pdLnksIGNvbnRvdXJbaiArIDFdLngsIGNvbnRvdXJbaiArIDFdLnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGorKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZHJhdGljQ3VydmVUbyhjb250b3VyW2pdLngsIGNvbnRvdXJbal0ueSwgKGNvbnRvdXJbal0ueCArIGNvbnRvdXJbaiArIDFdLngpIC8gMiwgKGNvbnRvdXJbal0ueSArIGNvbnRvdXJbaiArIDFdLnkpIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvaW50ID0gZW5kUG9pbnQgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBpbGVDaGFyU3RyaW5nKGNvZGUsIGNtZHMsIGZvbnQsIGdseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZW1zID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbW92ZVRvKHgsIHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdtb3ZlVG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbeCwgeV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbGluZVRvKHgsIHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdsaW5lVG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbeCwgeV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYmV6aWVyQ3VydmVUbyh4MSwgeTEsIHgyLCB5MiwgeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZDogJ2JlemllckN1cnZlVG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzOiBbeDEsIHkxLCB4MiwgeTIsIHgsIHldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlKGNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGNvZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFja0NsZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gY29kZVtpKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGEsIHhiLCB5YSwgeWIsIHkxLCB5MiwgeTMsIG4sIHN1YnJDb2RlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlbXMgKz0gc3RhY2subGVuZ3RoID4+IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUbyh4LCB5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJDb2RlID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250LmlzQ0ZGQ0lERm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmRJbmRleCA9IGZvbnQuZmRTZWxlY3QuZ2V0RkRJbmRleChnbHlwaElkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCBmb250LmZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpY3QgPSBmb250LmZkQXJyYXlbZmRJbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicnMgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250RGljdC5wcml2YXRlRGljdCAmJiBmb250RGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicnMgPSBmb250RGljdC5wcml2YXRlRGljdC5zdWJyc0luZGV4Lm9iamVjdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1TdWJycyA9IHN1YnJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuICs9IG51bVN1YnJzIDwgMTI0MCA/IDEwNyA6IG51bVN1YnJzIDwgMzM5MDAgPyAxMTMxIDogMzI3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VickNvZGUgPSBzdWJyc1tuXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyQ29kZSA9IGZvbnQuc3VicnNbbiArIGZvbnQuc3VicnNCaWFzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VickNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Uoc3VickNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDExOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gY29kZVtpKytdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHksIHhiLCB5MSwgeCwgeTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHkxLCB4YiwgeSwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YiA9IHlhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5MSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeTEsIHhiLCB5MiwgeCwgeTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTMgPSB5MiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeTIsIHhiLCB5MywgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM3OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHgwID0geCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MCA9IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHhiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMoeCAtIHgwKSA+IE1hdGguYWJzKHkgLSB5MCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwidW5rbm93biBvcGVyYXRvcjogMTIgXCIuY29uY2F0KHYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID49IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjaGFyID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiY2hhciA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZDogJ3NhdmUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAndHJhbnNsYXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFt4LCB5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNtYXAgPSBsb29rdXBDbWFwKGZvbnQuY21hcCwgU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdseXBoTmFtZU1hcFtfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2RpbmdbYWNoYXJdXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlQ2hhclN0cmluZyhmb250LmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWRzLCBmb250LCBjbWFwLmdseXBoSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAncmVzdG9yZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtYXAgPSBsb29rdXBDbWFwKGZvbnQuY21hcCwgU3RyaW5nLmZyb21DaGFyQ29kZShmb250LmdseXBoTmFtZU1hcFtfZW5jb2RpbmdzLlN0YW5kYXJkRW5jb2RpbmdbYmNoYXJdXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlQ2hhclN0cmluZyhmb250LmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWRzLCBmb250LCBjbWFwLmdseXBoSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IHN0ZW1zICsgNyA+PiAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrQ2xlYW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDIwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZW1zICs9IHN0YWNrLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gc3RlbXMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tDbGVhbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVtcyArPSBzdGFjay5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja0NsZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhY2subGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHggKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVG8oeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhiID0geGEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoICUgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHliICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV6aWVyQ3VydmVUbyh4YSwgeWEsIHhiLCB5YiwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCAlIDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSArPSBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geWI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI4OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNikgPj4gMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gc3RhY2sucG9wKCkgKyBmb250LmdzdWJyc0JpYXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VickNvZGUgPSBmb250LmdzdWJyc1tuXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZShzdWJyQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5YSA9IHkgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB5YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGEgPSB4ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWEgPSB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHhhICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWIgPSB5YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSB5YiArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4YiArIChzdGFjay5sZW5ndGggPT09IDEgPyBzdGFjay5zaGlmdCgpIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlemllckN1cnZlVG8oeGEsIHlhLCB4YiwgeWIsIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDMxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geCArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlhID0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geWIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWEgPSB5ICsgc3RhY2suc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGIgPSB4YSArIHN0YWNrLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHliID0geWEgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0geGIgKyBzdGFjay5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0geWIgKyAoc3RhY2subGVuZ3RoID09PSAxID8gc3RhY2suc2hpZnQoKSA6IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXppZXJDdXJ2ZVRvKHhhLCB5YSwgeGIsIHliLCB4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA8IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcInVua25vd24gb3BlcmF0b3I6IFwiLmNvbmNhdCh2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPCAyNDcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh2IC0gMTM5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHYgPCAyNTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCgodiAtIDI0NykgKiAyNTYgKyBjb2RlW2krK10gKyAxMDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodiA8IDI1NSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKC0odiAtIDI1MSkgKiAyNTYgLSBjb2RlW2krK10gLSAxMDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goKGNvZGVbaV0gPDwgMjQgfCBjb2RlW2kgKyAxXSA8PCAxNiB8IGNvZGVbaSArIDJdIDw8IDggfCBjb2RlW2kgKyAzXSkgLyA2NTUzNik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFja0NsZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5sZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZShjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBOT09QID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIENvbXBpbGVkRm9udCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ29tcGlsZWRGb250KGZvbnRNYXRyaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENvbXBpbGVkRm9udCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uc3RydWN0b3IgPT09IENvbXBpbGVkRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQ2Fubm90IGluaXRpYWxpemUgQ29tcGlsZWRGb250LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250TWF0cml4ID0gZm9udE1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21waWxlZEdseXBocyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKENvbXBpbGVkRm9udCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFBhdGhKc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGF0aEpzKHVuaWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwID0gbG9va3VwQ21hcCh0aGlzLmNtYXAsIHVuaWNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gdGhpcy5jb21waWxlZEdseXBoc1tjbWFwLmdseXBoSWRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSB0aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tjbWFwLmdseXBoSWRdLCBjbWFwLmdseXBoSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZWRHbHlwaHNbY21hcC5nbHlwaElkXSA9IGZuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW2NtYXAuY2hhckNvZGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY21hcC5jaGFyQ29kZV0gPSBjbWFwLmdseXBoSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbXBpbGVHbHlwaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29tcGlsZUdseXBoKGNvZGUsIGdseXBoSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29kZSB8fCBjb2RlLmxlbmd0aCA9PT0gMCB8fCBjb2RlWzBdID09PSAxNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOT09QO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE1hdHJpeCA9IHRoaXMuZm9udE1hdHJpeDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNDRkZDSURGb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZkSW5kZXggPSB0aGlzLmZkU2VsZWN0LmdldEZESW5kZXgoZ2x5cGhJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmRJbmRleCA+PSAwICYmIGZkSW5kZXggPCB0aGlzLmZkQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250RGljdCA9IHRoaXMuZmRBcnJheVtmZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udE1hdHJpeCA9IGZvbnREaWN0LmdldEJ5TmFtZSgnRm9udE1hdHJpeCcpIHx8IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21kcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdzYXZlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZDogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczogZm9udE1hdHJpeC5zbGljZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAnc2NhbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M6IFsnc2l6ZScsICctc2l6ZSddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZUdseXBoSW1wbChjb2RlLCBjbWRzLCBnbHlwaElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kOiAncmVzdG9yZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNtZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb21waWxlR2x5cGhJbXBsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21waWxlR2x5cGhJbXBsKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQ2hpbGRyZW4gY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IHRoaXMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoYXNCdWlsdFBhdGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGhhc0J1aWx0UGF0aCh1bmljb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY21hcCA9IGxvb2t1cENtYXAodGhpcy5jbWFwLCB1bmljb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NtYXAuZ2x5cGhJZF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbY21hcC5jaGFyQ29kZV0gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb21waWxlZEZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRydWVUeXBlQ29tcGlsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db21waWxlZEZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoVHJ1ZVR5cGVDb21waWxlZCwgX0NvbXBpbGVkRm9udCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcnVlVHlwZUNvbXBpbGVkKGdseXBocywgY21hcCwgZm9udE1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRydWVUeXBlQ29tcGlsZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFRydWVUeXBlQ29tcGlsZWQpLmNhbGwodGhpcywgZm9udE1hdHJpeCB8fCBbMC4wMDA0ODgsIDAsIDAsIDAuMDAwNDg4LCAwLCAwXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5nbHlwaHMgPSBnbHlwaHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNtYXAgPSBjbWFwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFRydWVUeXBlQ29tcGlsZWQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb21waWxlR2x5cGhJbXBsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21waWxlR2x5cGhJbXBsKGNvZGUsIGNtZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVHbHlmKGNvZGUsIGNtZHMsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWVUeXBlQ29tcGlsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KENvbXBpbGVkRm9udCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFR5cGUyQ29tcGlsZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Db21waWxlZEZvbnQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFR5cGUyQ29tcGlsZWQsIF9Db21waWxlZEZvbnQyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFR5cGUyQ29tcGlsZWQoY2ZmSW5mbywgY21hcCwgZm9udE1hdHJpeCwgZ2x5cGhOYW1lTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFR5cGUyQ29tcGlsZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihUeXBlMkNvbXBpbGVkKS5jYWxsKHRoaXMsIGZvbnRNYXRyaXggfHwgWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLmdseXBocyA9IGNmZkluZm8uZ2x5cGhzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZ3N1YnJzID0gY2ZmSW5mby5nc3VicnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zdWJycyA9IGNmZkluZm8uc3VicnMgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5jbWFwID0gY21hcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLmdseXBoTmFtZU1hcCA9IGdseXBoTmFtZU1hcCB8fCAoMCwgX2dseXBobGlzdC5nZXRHbHlwaHNVbmljb2RlKSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZ3N1YnJzQmlhcyA9IF90aGlzMi5nc3VicnMubGVuZ3RoIDwgMTI0MCA/IDEwNyA6IF90aGlzMi5nc3VicnMubGVuZ3RoIDwgMzM5MDAgPyAxMTMxIDogMzI3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zdWJyc0JpYXMgPSBfdGhpczIuc3VicnMubGVuZ3RoIDwgMTI0MCA/IDEwNyA6IF90aGlzMi5zdWJycy5sZW5ndGggPCAzMzkwMCA/IDExMzEgOiAzMjc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLmlzQ0ZGQ0lERm9udCA9IGNmZkluZm8uaXNDRkZDSURGb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZmRTZWxlY3QgPSBjZmZJbmZvLmZkU2VsZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuZmRBcnJheSA9IGNmZkluZm8uZmRBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoVHlwZTJDb21waWxlZCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbXBpbGVHbHlwaEltcGxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbXBpbGVHbHlwaEltcGwoY29kZSwgY21kcywgZ2x5cGhJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZUNoYXJTdHJpbmcoY29kZSwgY21kcywgdGhpcywgZ2x5cGhJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZTJDb21waWxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oQ29tcGlsZWRGb250KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiBGb250UmVuZGVyZXJGYWN0b3J5X2NyZWF0ZShmb250LCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShmb250LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWFwLCBnbHlmLCBsb2NhLCBjZmYsIGluZGV4VG9Mb2NGb3JtYXQsIHVuaXRzUGVyRW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bVRhYmxlcyA9IGdldFVzaG9ydChkYXRhLCA0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gMTI7IGkgPCBudW1UYWJsZXM7IGkrKywgcCArPSAxNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gKDAsIF91dGlsLmJ5dGVzVG9TdHJpbmcpKGRhdGEuc3ViYXJyYXkocCwgcCArIDQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGdldExvbmcoZGF0YSwgcCArIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gZ2V0TG9uZyhkYXRhLCBwICsgMTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjbWFwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWFwID0gcGFyc2VDbWFwKGRhdGEsIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZ2x5Zic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5ZiA9IGRhdGEuc3ViYXJyYXkob2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsb2NhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhID0gZGF0YS5zdWJhcnJheShvZmZzZXQsIG9mZnNldCArIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzUGVyRW0gPSBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0ICsgMTgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4VG9Mb2NGb3JtYXQgPSBnZXRVc2hvcnQoZGF0YSwgb2Zmc2V0ICsgNTApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDRkYgJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZmYgPSBwYXJzZUNmZihkYXRhLCBvZmZzZXQsIG9mZnNldCArIGxlbmd0aCwgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE1hdHJpeCA9ICF1bml0c1BlckVtID8gZm9udC5mb250TWF0cml4IDogWzEgLyB1bml0c1BlckVtLCAwLCAwLCAxIC8gdW5pdHNQZXJFbSwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHJ1ZVR5cGVDb21waWxlZChwYXJzZUdseWZUYWJsZShnbHlmLCBsb2NhLCBpbmRleFRvTG9jRm9ybWF0KSwgY21hcCwgZm9udE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlMkNvbXBpbGVkKGNmZiwgY21hcCwgZm9udC5mb250TWF0cml4LCBmb250LmdseXBoTmFtZU1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250UmVuZGVyZXJGYWN0b3J5ID0gRm9udFJlbmRlcmVyRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTgxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5UeXBlMVBhcnNlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2VuY29kaW5ncyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTc2KTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEhJTlRJTkdfRU5BQkxFRCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgdmFyIFR5cGUxQ2hhclN0cmluZyA9IGZ1bmN0aW9uIFR5cGUxQ2hhclN0cmluZ0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDT01NQU5EX01BUCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdoc3RlbSc6IFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2c3RlbSc6IFszXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2bW92ZXRvJzogWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JsaW5ldG8nOiBbNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnaGxpbmV0byc6IFs2XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2bGluZXRvJzogWzddLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JyY3VydmV0byc6IFs4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdjYWxsc3Vicic6IFsxMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAnZmxleCc6IFsxMiwgMzVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Ryb3AnOiBbMTIsIDE4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdlbmRjaGFyJzogWzE0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdybW92ZXRvJzogWzIxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdobW92ZXRvJzogWzIyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICd2aGN1cnZldG8nOiBbMzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2h2Y3VydmV0byc6IFszMV1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubHNiID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxleGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFR5cGUxQ2hhclN0cmluZy5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb252ZXJ0OiBmdW5jdGlvbiBUeXBlMUNoYXJTdHJpbmdfY29udmVydChlbmNvZGVkLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IGVuY29kZWQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3eCwgc2J4LCBzdWJyTnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGVuY29kZWRbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlIDwgMzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCA4KSArIGVuY29kZWRbKytpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhzdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSElOVElOR19FTkFCTEVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdGhpcy5leGVjdXRlQ29tbWFuZCgyLCBDT01NQU5EX01BUC52c3RlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mbGV4aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFjay5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHkgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKDAsIGR5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLnZtb3ZldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLnJsaW5ldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLmhsaW5ldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDEsIENPTU1BTkRfTUFQLnZsaW5ldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDYsIENPTU1BTkRfTUFQLnJyY3VydmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtYmVyID0gdGhpcy5zdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN1YnJzW3N1YnJOdW1iZXJdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdGhpcy5jb252ZXJ0KHN1YnJzW3N1YnJOdW1iZXJdLCBzdWJycywgc2VhY0FuYWx5c2lzRW5hYmxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNieCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubHNiID0gc2J4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd3g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaCh3eCwgc2J4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhtb3ZldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goQ09NTUFORF9NQVAuZW5kY2hhclswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmxleGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAucm1vdmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmxleGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwgQ09NTUFORF9NQVAuaG1vdmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLnZoY3VydmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDQsIENPTU1BTkRfTUFQLmh2Y3VydmV0byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUhJTlRJTkdfRU5BQkxFRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMiwgQ09NTUFORF9NQVAudnN0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDIsIENPTU1BTkRfTUFQLmhzdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYWMgPSB0aGlzLnN0YWNrLnNwbGljZSgtNCwgNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMCwgQ09NTUFORF9NQVAuZW5kY2hhcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoNCwgQ09NTUFORF9NQVAuZW5kY2hhcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3eCA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzYnkgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYnggPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxzYiA9IHNieDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHd4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2god3gsIHNieCwgc2J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0aGlzLmV4ZWN1dGVDb21tYW5kKDMsIENPTU1BTkRfTUFQLnJtb3ZldG8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKDEyIDw8IDgpICsgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bTIgPSB0aGlzLnN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtMSA9IHRoaXMuc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChudW0xIC8gbnVtMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyTnVtYmVyID0gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUFyZ3MgPSB0aGlzLnN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJyTnVtYmVyID09PSAwICYmIG51bUFyZ3MgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbGV4QXJncyA9IHRoaXMuc3RhY2suc3BsaWNlKHRoaXMuc3RhY2subGVuZ3RoIC0gMTcsIDE3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sucHVzaChmbGV4QXJnc1syXSArIGZsZXhBcmdzWzBdLCBmbGV4QXJnc1szXSArIGZsZXhBcmdzWzFdLCBmbGV4QXJnc1s0XSwgZmxleEFyZ3NbNV0sIGZsZXhBcmdzWzZdLCBmbGV4QXJnc1s3XSwgZmxleEFyZ3NbOF0sIGZsZXhBcmdzWzldLCBmbGV4QXJnc1sxMF0sIGZsZXhBcmdzWzExXSwgZmxleEFyZ3NbMTJdLCBmbGV4QXJnc1sxM10sIGZsZXhBcmdzWzE0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IHRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMsIENPTU1BTkRfTUFQLmZsZXgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGV4aW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmxleEFyZ3NbMTVdLCBmbGV4QXJnc1sxNl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1YnJOdW1iZXIgPT09IDEgJiYgbnVtQXJncyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGV4aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoMTIgPDwgOCkgKyAxNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICgxMiA8PCA4KSArIDMzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmtub3duIHR5cGUgMSBjaGFyc3RyaW5nIGNvbW1hbmQgb2YgXCInICsgdmFsdWUgKyAnXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA8PSAyNDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgLSAxMzk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjUwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDI0NykgKiAyNTYgKyBlbmNvZGVkWysraV0gKyAxMDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPD0gMjU0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC0oKHZhbHVlIC0gMjUxKSAqIDI1NikgLSBlbmNvZGVkWysraV0gLSAxMDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCAyNCB8IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCAxNiB8IChlbmNvZGVkWysraV0gJiAweGZmKSA8PCA4IHwgKGVuY29kZWRbKytpXSAmIDB4ZmYpIDw8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQ29tbWFuZDogZnVuY3Rpb24gZXhlY3V0ZUNvbW1hbmQoaG93TWFueUFyZ3MsIGNvbW1hbmQsIGtlZXBTdGFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFja0xlbmd0aCA9IHRoaXMuc3RhY2subGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhvd01hbnlBcmdzID4gc3RhY2tMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gc3RhY2tMZW5ndGggLSBob3dNYW55QXJncztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHN0YWNrTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5zdGFja1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goMjgsIHZhbHVlID4+IDggJiAweGZmLCB2YWx1ZSAmIDB4ZmYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSA2NTUzNiAqIHZhbHVlIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0LnB1c2goMjU1LCB2YWx1ZSA+PiAyNCAmIDB4RkYsIHZhbHVlID4+IDE2ICYgMHhGRiwgdmFsdWUgPj4gOCAmIDB4RkYsIHZhbHVlICYgMHhGRik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHB1dC5wdXNoLmFwcGx5KHRoaXMub3V0cHV0LCBjb21tYW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZWVwU3RhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5zcGxpY2Uoc3RhcnQsIGhvd01hbnlBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHlwZTFDaGFyU3RyaW5nO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBUeXBlMVBhcnNlciA9IGZ1bmN0aW9uIFR5cGUxUGFyc2VyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEVFWEVDX0VOQ1JZUFRfS0VZID0gNTU2NjU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDSEFSX1NUUlNfRU5DUllQVF9LRVkgPSA0MzMwO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzSGV4RGlnaXQoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NyB8fCBjb2RlID49IDY1ICYmIGNvZGUgPD0gNzAgfHwgY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEwMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY3J5cHQoZGF0YSwga2V5LCBkaXNjYXJkTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlzY2FyZE51bWJlciA+PSBkYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBrZXkgfCAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxID0gNTI4NDUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSAyMjcxOSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBkaXNjYXJkTnVtYmVyOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByID0gKGRhdGFbaV0gKyByKSAqIGMxICsgYzIgJiAoMSA8PCAxNikgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBkYXRhLmxlbmd0aCAtIGRpc2NhcmROdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjcnlwdGVkID0gbmV3IFVpbnQ4QXJyYXkoY291bnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSBkaXNjYXJkTnVtYmVyLCBqID0gMDsgaiA8IGNvdW50OyBpKyssIGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGRhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkW2pdID0gdmFsdWUgXiByID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNyeXB0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNyeXB0QXNjaWkoZGF0YSwga2V5LCBkaXNjYXJkTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IGtleSB8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEgPSA1Mjg0NSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IDIyNzE5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVMZW5ndGggPSBjb3VudCA+Pj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNyeXB0ZWQgPSBuZXcgVWludDhBcnJheShtYXliZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaiA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZ2l0MSA9IGRhdGFbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoZGlnaXQxKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZ2l0MjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgY291bnQgJiYgIWlzSGV4RGlnaXQoZGlnaXQyID0gZGF0YVtpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFyc2VJbnQoU3RyaW5nLmZyb21DaGFyQ29kZShkaWdpdDEsIGRpZ2l0MiksIDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjcnlwdGVkW2orK10gPSB2YWx1ZSBeIHIgPj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciA9ICh2YWx1ZSArIHIpICogYzEgKyBjMiAmICgxIDw8IDE2KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZGVjcnlwdGVkLCBkaXNjYXJkTnVtYmVyLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzU3BlY2lhbChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYyA9PT0gMHgyRiB8fCBjID09PSAweDVCIHx8IGMgPT09IDB4NUQgfHwgYyA9PT0gMHg3QiB8fCBjID09PSAweDdEIHx8IGMgPT09IDB4MjggfHwgYyA9PT0gMHgyOTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFR5cGUxUGFyc2VyKHN0cmVhbSwgZW5jcnlwdGVkLCBzZWFjQW5hbHlzaXNFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jcnlwdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBzdHJlYW0uZ2V0Qnl0ZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNCaW5hcnkgPSAhKGlzSGV4RGlnaXQoZGF0YVswXSkgJiYgaXNIZXhEaWdpdChkYXRhWzFdKSAmJiBpc0hleERpZ2l0KGRhdGFbMl0pICYmIGlzSGV4RGlnaXQoZGF0YVszXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IG5ldyBfc3RyZWFtLlN0cmVhbShpc0JpbmFyeSA/IGRlY3J5cHQoZGF0YSwgRUVYRUNfRU5DUllQVF9LRVksIDQpIDogZGVjcnlwdEFzY2lpKGRhdGEsIEVFWEVDX0VOQ1JZUFRfS0VZLCA0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCA9ICEhc2VhY0FuYWx5c2lzRW5hYmxlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgVHlwZTFQYXJzZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE51bWJlckFycmF5OiBmdW5jdGlvbiBUeXBlMVBhcnNlcl9yZWFkTnVtYmVyQXJyYXkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCB8fCB0b2tlbiA9PT0gJ10nIHx8IHRva2VuID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHVzaChwYXJzZUZsb2F0KHRva2VuIHx8IDApKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZE51bWJlcjogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodG9rZW4gfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEludDogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZEludCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRva2VuIHx8IDAsIDEwKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEJvb2xlYW46IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX3JlYWRCb29sZWFuKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW4gPT09ICd0cnVlJyA/IDEgOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRDaGFyOiBmdW5jdGlvbiBUeXBlMV9uZXh0Q2hhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50Q2hhciA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRUb2tlbjogZnVuY3Rpb24gVHlwZTFQYXJzZXJfZ2V0VG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbW1lbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSB0aGlzLmN1cnJlbnRDaGFyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAweDBBIHx8IGNoID09PSAweDBEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAweDI1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKDAsIF91dGlsLmlzU3BhY2UpKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGVjaWFsKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4gPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKGNoID49IDAgJiYgISgwLCBfdXRpbC5pc1NwYWNlKShjaCkgJiYgIWlzU3BlY2lhbChjaCkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDaGFyU3RyaW5nczogZnVuY3Rpb24gVHlwZTFQYXJzZXJfcmVhZENoYXJTdHJpbmdzKGJ5dGVzLCBsZW5JVikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW5JViA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ5dGVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNyeXB0KGJ5dGVzLCBDSEFSX1NUUlNfRU5DUllQVF9LRVksIGxlbklWKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0Rm9udFByb2dyYW06IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX2V4dHJhY3RGb250UHJvZ3JhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5zdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnJzID0gW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzdHJpbmdzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZhdGVEYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2YXRlRGF0YVsnbGVuSVYnXSA9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2dyYW0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnN0cmluZ3M6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpdmF0ZURhdGEnOiBwcml2YXRlRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW4sIGxlbmd0aCwgZGF0YSwgbGVuSVYsIGVuY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5nZXRUb2tlbigpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDaGFyU3RyaW5ncyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSBudWxsIHx8IHRva2VuID09PSAnZW5kJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBsZW5ndGggPiAwID8gc3RyZWFtLmdldEJ5dGVzKGxlbmd0aCkgOiBuZXcgVWludDhBcnJheSgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuSVYgPSBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbJ2xlbklWJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSB0aGlzLnJlYWRDaGFyU3RyaW5ncyhkYXRhLCBsZW5JVik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuID09PSAnbm9hY2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoOiBnbHlwaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWQ6IGVuY29kZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N1YnJzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5nZXRUb2tlbigpID09PSAnZHVwJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGxlbmd0aCA+IDAgPyBzdHJlYW0uZ2V0Qnl0ZXMobGVuZ3RoKSA6IG5ldyBVaW50OEFycmF5KDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5JViA9IHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVsnbGVuSVYnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IHRoaXMucmVhZENoYXJTdHJpbmdzKGRhdGEsIGxlbklWKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0Q2hhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09ICdub2FjY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnJzW2luZGV4XSA9IGVuY29kZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JsdWVWYWx1ZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnT3RoZXJCbHVlcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGYW1pbHlCbHVlcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGYW1pbHlPdGhlckJsdWVzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmx1ZUFycmF5ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibHVlQXJyYXkubGVuZ3RoID4gMCAmJiBibHVlQXJyYXkubGVuZ3RoICUgMiA9PT0gMCAmJiBISU5USU5HX0VOQUJMRUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IGJsdWVBcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU3RlbVNuYXBIJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0ZW1TbmFwVic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlckFycmF5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0ZEhXJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1N0ZFZXJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnByb3BlcnRpZXMucHJpdmF0ZURhdGFbdG9rZW5dID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQmx1ZVNoaWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2xlbklWJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JsdWVGdXp6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JsdWVTY2FsZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMYW5ndWFnZUdyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0V4cGFuc2lvbkZhY3Rvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW3Rva2VuXSA9IHRoaXMucmVhZE51bWJlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb3JjZUJvbGQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0ucHJvcGVydGllcy5wcml2YXRlRGF0YVt0b2tlbl0gPSB0aGlzLnJlYWRCb29sZWFuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoYXJzdHJpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gY2hhcnN0cmluZ3NbaV0uZ2x5cGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWQgPSBjaGFyc3RyaW5nc1tpXS5lbmNvZGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclN0cmluZyA9IG5ldyBUeXBlMUNoYXJTdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gY2hhclN0cmluZy5jb252ZXJ0KGVuY29kZWQsIHN1YnJzLCB0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0gY2hhclN0cmluZy5vdXRwdXQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBbMTRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS5jaGFyc3RyaW5ncy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoTmFtZTogZ2x5cGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc3RyaW5nOiBvdXRwdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogY2hhclN0cmluZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzYjogY2hhclN0cmluZy5sc2IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFjOiBjaGFyU3RyaW5nLnNlYWNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb2dyYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdEZvbnRIZWFkZXI6IGZ1bmN0aW9uIFR5cGUxUGFyc2VyX2V4dHJhY3RGb250SGVhZGVyKHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG9rZW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHRva2VuID0gdGhpcy5nZXRUb2tlbigpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250TWF0cml4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmZvbnRNYXRyaXggPSBtYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0VuY29kaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RpbmdBcmcgPSB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEvXlxcZCskLy50ZXN0KGVuY29kaW5nQXJnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyA9ICgwLCBfZW5jb2RpbmdzLmdldEVuY29kaW5nKShlbmNvZGluZ0FyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBwYXJzZUludChlbmNvZGluZ0FyZywgMTApIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc2l6ZTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9PSAnZHVwJyAmJiB0b2tlbiAhPT0gJ2RlZicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4gPT09ICdkZWYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoID0gdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmdbaW5kZXhdID0gZ2x5cGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmJ1aWx0SW5FbmNvZGluZyA9IGVuY29kaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250QkJveCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRCQm94ID0gdGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudCA9IE1hdGgubWF4KGZvbnRCQm94WzNdLCBmb250QkJveFsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5kZXNjZW50ID0gTWF0aC5taW4oZm9udEJCb3hbMV0sIGZvbnRCQm94WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmFzY2VudFNjYWxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUeXBlMVBhcnNlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlR5cGUxUGFyc2VyID0gVHlwZTFQYXJzZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0VGlsaW5nUGF0dGVybklSID0gZ2V0VGlsaW5nUGF0dGVybklSO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGF0dGVybiA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NvbG9yc3BhY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU2hhZGluZ1R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIEZVTkNUSU9OX0JBU0VEOiAxLFxuICAgICAgICAgICAgICAgICAgICBBWElBTDogMixcbiAgICAgICAgICAgICAgICAgICAgUkFESUFMOiAzLFxuICAgICAgICAgICAgICAgICAgICBGUkVFX0ZPUk1fTUVTSDogNCxcbiAgICAgICAgICAgICAgICAgICAgTEFUVElDRV9GT1JNX01FU0g6IDUsXG4gICAgICAgICAgICAgICAgICAgIENPT05TX1BBVENIX01FU0g6IDYsXG4gICAgICAgICAgICAgICAgICAgIFRFTlNPUl9QQVRDSF9NRVNIOiA3XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBQYXR0ZXJuID0gZnVuY3Rpb24gUGF0dGVybkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBhdHRlcm4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdzaG91bGQgbm90IGNhbGwgUGF0dGVybiBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUGF0dGVybi5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBQYXR0ZXJuX2dldFBhdHRlcm4oY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKShcIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuLmdldFN0eWxlOiBcIi5jb25jYXQoY3R4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgUGF0dGVybi5wYXJzZVNoYWRpbmcgPSBmdW5jdGlvbiAoc2hhZGluZywgbWF0cml4LCB4cmVmLCByZXMsIGhhbmRsZXIsIHBkZkZ1bmN0aW9uRmFjdG9yeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSAoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHNoYWRpbmcpID8gc2hhZGluZy5kaWN0IDogc2hhZGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gZGljdC5nZXQoJ1NoYWRpbmdUeXBlJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQVhJQUw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuUkFESUFMOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTaGFkaW5ncy5SYWRpYWxBeGlhbChkaWN0LCBtYXRyaXgsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkZSRUVfRk9STV9NRVNIOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkxBVFRJQ0VfRk9STV9NRVNIOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNoYWRpbmdUeXBlLkNPT05TX1BBVENIX01FU0g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuVEVOU09SX1BBVENIX01FU0g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoYWRpbmdzLk1lc2goc2hhZGluZywgbWF0cml4LCB4cmVmLCByZXMsIHBkZkZ1bmN0aW9uRmFjdG9yeSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVW5zdXBwb3J0ZWQgU2hhZGluZ1R5cGU6ICcgKyB0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdEYXRhRXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuc2VuZCgnVW5zdXBwb3J0ZWRGZWF0dXJlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlSWQ6IF91dGlsLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnNoYWRpbmdQYXR0ZXJuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNoYWRpbmdzLkR1bW15KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhdHRlcm47XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXR0ZXJuID0gUGF0dGVybjtcbiAgICAgICAgICAgICAgICB2YXIgU2hhZGluZ3MgPSB7fTtcbiAgICAgICAgICAgICAgICBTaGFkaW5ncy5TTUFMTF9OVU1CRVIgPSAxZS02O1xuXG4gICAgICAgICAgICAgICAgU2hhZGluZ3MuUmFkaWFsQXhpYWwgPSBmdW5jdGlvbiBSYWRpYWxBeGlhbENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJhZGlhbEF4aWFsKGRpY3QsIG1hdHJpeCwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0cml4ID0gbWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb29yZHNBcnIgPSBkaWN0LmdldEFycmF5KCdDb29yZHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhZGluZ1R5cGUgPSBkaWN0LmdldCgnU2hhZGluZ1R5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9ICdQYXR0ZXJuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IGRpY3QuZ2V0KCdDb2xvclNwYWNlJywgJ0NTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoY3MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3MgPSBjcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0MCA9IDAuMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IDEuMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpY3QuaGFzKCdEb21haW4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW5BcnIgPSBkaWN0LmdldEFycmF5KCdEb21haW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MCA9IGRvbWFpbkFyclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IGRvbWFpbkFyclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4dGVuZFN0YXJ0ID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kRW5kID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaWN0LmhhcygnRXh0ZW5kJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXh0ZW5kQXJyID0gZGljdC5nZXRBcnJheSgnRXh0ZW5kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kU3RhcnQgPSBleHRlbmRBcnJbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kRW5kID0gZXh0ZW5kQXJyWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuUkFESUFMICYmICghZXh0ZW5kU3RhcnQgfHwgIWV4dGVuZEVuZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDEgPSB0aGlzLmNvb3Jkc0FyclswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSB0aGlzLmNvb3Jkc0FyclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcjEgPSB0aGlzLmNvb3Jkc0FyclsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSB0aGlzLmNvb3Jkc0FyclszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTIgPSB0aGlzLmNvb3Jkc0Fycls0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcjIgPSB0aGlzLmNvb3Jkc0Fycls1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBNYXRoLnNxcnQoKHgxIC0geDIpICogKHgxIC0geDIpICsgKHkxIC0geTIpICogKHkxIC0geTIpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyMSA8PSByMiArIGRpc3RhbmNlICYmIHIyIDw9IHIxICsgZGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbnN1cHBvcnRlZCByYWRpYWwgZ3JhZGllbnQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4dGVuZFN0YXJ0ID0gZXh0ZW5kU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4dGVuZEVuZCA9IGV4dGVuZEVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbk9iaiA9IGRpY3QuZ2V0KCdGdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gcGRmRnVuY3Rpb25GYWN0b3J5LmNyZWF0ZUZyb21BcnJheShmbk9iaik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlmZiA9IHQxIC0gdDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RlcCA9IGRpZmYgLyAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvclN0b3BzID0gdGhpcy5jb2xvclN0b3BzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0MCA+PSB0MSB8fCBzdGVwIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0JhZCBzaGFkaW5nIGRvbWFpbi4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IG5ldyBGbG9hdDMyQXJyYXkoY3MubnVtQ29tcHMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhdGlvID0gbmV3IEZsb2F0MzJBcnJheSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZ2JDb2xvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHQwOyBpIDw9IHQxOyBpICs9IHN0ZXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXRpb1swXSA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4ocmF0aW8sIDAsIGNvbG9yLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZ2JDb2xvciA9IGNzLmdldFJnYihjb2xvciwgMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3NzQ29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IocmdiQ29sb3JbMF0sIHJnYkNvbG9yWzFdLCByZ2JDb2xvclsyXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzLnB1c2goWyhpIC0gdDApIC8gZGlmZiwgY3NzQ29sb3JdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGljdC5oYXMoJ0JhY2tncm91bmQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYkNvbG9yID0gY3MuZ2V0UmdiKGRpY3QuZ2V0KCdCYWNrZ3JvdW5kJyksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IocmdiQ29sb3JbMF0sIHJnYkNvbG9yWzFdLCByZ2JDb2xvclsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZXh0ZW5kU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzLnVuc2hpZnQoWzAsIGJhY2tncm91bmRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzWzFdWzBdICs9IFNoYWRpbmdzLlNNQUxMX05VTUJFUjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFleHRlbmRFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0b3BzW2NvbG9yU3RvcHMubGVuZ3RoIC0gMV1bMF0gLT0gU2hhZGluZ3MuU01BTExfTlVNQkVSO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3RvcHMucHVzaChbMSwgYmFja2dyb3VuZF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU3RvcHMgPSBjb2xvclN0b3BzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUmFkaWFsQXhpYWwucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SVI6IGZ1bmN0aW9uIFJhZGlhbEF4aWFsX2dldElSKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHNBcnIgPSB0aGlzLmNvb3Jkc0FycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGluZ1R5cGUgPSB0aGlzLnNoYWRpbmdUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlLCBwMCwgcDEsIHIwLCByMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkaW5nVHlwZSA9PT0gU2hhZGluZ1R5cGUuQVhJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgPSBbY29vcmRzQXJyWzBdLCBjb29yZHNBcnJbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IFtjb29yZHNBcnJbMl0sIGNvb3Jkc0FyclszXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcjEgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gJ2F4aWFsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNoYWRpbmdUeXBlID09PSBTaGFkaW5nVHlwZS5SQURJQUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgPSBbY29vcmRzQXJyWzBdLCBjb29yZHNBcnJbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IFtjb29yZHNBcnJbM10sIGNvb3Jkc0Fycls0XV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIwID0gY29vcmRzQXJyWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByMSA9IGNvb3Jkc0Fycls1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICdyYWRpYWwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoXCJnZXRQYXR0ZXJuIHR5cGUgdW5rbm93bjogXCIuY29uY2F0KHNoYWRpbmdUeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeCA9IHRoaXMubWF0cml4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMCA9IF91dGlsLlV0aWwuYXBwbHlUcmFuc2Zvcm0ocDAsIG1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShwMSwgbWF0cml4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZGluZ1R5cGUgPT09IFNoYWRpbmdUeXBlLlJBRElBTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShtYXRyaXgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByMCAqPSBzY2FsZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIxICo9IHNjYWxlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnUmFkaWFsQXhpYWwnLCB0eXBlLCB0aGlzLmNvbG9yU3RvcHMsIHAwLCBwMSwgcjAsIHIxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJhZGlhbEF4aWFsO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIFNoYWRpbmdzLk1lc2ggPSBmdW5jdGlvbiBNZXNoQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcihzdHJlYW0sIGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IGNvbnRleHQubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRtcENvbXBzQnVmID0gbmV3IEZsb2F0MzJBcnJheShudW1Db21wcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3NOdW1Db21wcyA9IGNvbnRleHQuY29sb3JTcGFjZS5udW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG1wQ3NDb21wc0J1ZiA9IGNvbnRleHQuY29sb3JGbiA/IG5ldyBGbG9hdDMyQXJyYXkoY3NOdW1Db21wcykgOiB0aGlzLnRtcENvbXBzQnVmO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTWVzaFN0cmVhbVJlYWRlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaGFzRGF0YSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHJlYW0uZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0cmVhbS5wb3MgPCB0aGlzLnN0cmVhbS5lbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYnVmZmVyTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEJ5dGUgPSB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dEJ5dGUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IG5leHRCeXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCaXRzOiBmdW5jdGlvbiBNZXNoU3RyZWFtUmVhZGVyX3JlYWRCaXRzKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlckxlbmd0aCA9IHRoaXMuYnVmZmVyTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT09IDMyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDI0IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDE2IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDggfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCkpID4+PiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyIDw8IDI0IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDE2IHwgdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpIDw8IDggfCB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0Qnl0ZSA9IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBuZXh0Qnl0ZSAmICgxIDw8IGJ1ZmZlckxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGJ1ZmZlciA8PCA4IC0gYnVmZmVyTGVuZ3RoIHwgKG5leHRCeXRlICYgMHhGRikgPj4gYnVmZmVyTGVuZ3RoKSA+Pj4gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PT0gOCAmJiBidWZmZXJMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYnVmZmVyTGVuZ3RoIDwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBidWZmZXIgPDwgOCB8IHRoaXMuc3RyZWFtLmdldEJ5dGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoICs9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyTGVuZ3RoIC09IG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSBidWZmZXJMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXIgJiAoMSA8PCBidWZmZXJMZW5ndGgpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyID4+IGJ1ZmZlckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbjogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9hbGlnbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRGbGFnOiBmdW5jdGlvbiBNZXNoU3RyZWFtUmVhZGVyX3JlYWRGbGFnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENvb3JkaW5hdGU6IGZ1bmN0aW9uIE1lc2hTdHJlYW1SZWFkZXJfcmVhZENvb3JkaW5hdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNQZXJDb29yZGluYXRlID0gdGhpcy5jb250ZXh0LmJpdHNQZXJDb29yZGluYXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aSA9IHRoaXMucmVhZEJpdHMoYml0c1BlckNvb3JkaW5hdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5aSA9IHRoaXMucmVhZEJpdHMoYml0c1BlckNvb3JkaW5hdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGUgPSB0aGlzLmNvbnRleHQuZGVjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IGJpdHNQZXJDb29yZGluYXRlIDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb29yZGluYXRlKSAtIDEpIDogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3hpICogc2NhbGUgKiAoZGVjb2RlWzFdIC0gZGVjb2RlWzBdKSArIGRlY29kZVswXSwgeWkgKiBzY2FsZSAqIChkZWNvZGVbM10gLSBkZWNvZGVbMl0pICsgZGVjb2RlWzJdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkQ29tcG9uZW50czogZnVuY3Rpb24gTWVzaFN0cmVhbVJlYWRlcl9yZWFkQ29tcG9uZW50cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQ29tcHMgPSB0aGlzLmNvbnRleHQubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJpdHNQZXJDb21wb25lbnQgPSB0aGlzLmNvbnRleHQuYml0c1BlckNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSBiaXRzUGVyQ29tcG9uZW50IDwgMzIgPyAxIC8gKCgxIDw8IGJpdHNQZXJDb21wb25lbnQpIC0gMSkgOiAyLjMyODMwNjQzNjUzODY5NjNlLTEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGUgPSB0aGlzLmNvbnRleHQuZGVjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb25lbnRzID0gdGhpcy50bXBDb21wc0J1ZjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gNDsgaSA8IG51bUNvbXBzOyBpKyssIGogKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2kgPSB0aGlzLnJlYWRCaXRzKGJpdHNQZXJDb21wb25lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzW2ldID0gY2kgKiBzY2FsZSAqIChkZWNvZGVbaiArIDFdIC0gZGVjb2RlW2pdKSArIGRlY29kZVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLnRtcENzQ29tcHNCdWY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0LmNvbG9yRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmNvbG9yRm4oY29tcG9uZW50cywgMCwgY29sb3IsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuY29sb3JTcGFjZS5nZXRSZ2IoY29sb3IsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZVR5cGU0U2hhZGluZyhtZXNoLCByZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHMgPSBtZXNoLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcGVyYXRvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzTGVmdCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gcmVhZGVyLnJlYWRGbGFnKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkID0gcmVhZGVyLnJlYWRDb29yZGluYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gcmVhZGVyLnJlYWRDb21wb25lbnRzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljZXNMZWZ0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAgPD0gZiAmJiBmIDw9IDIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1Vua25vd24gdHlwZTQgZmxhZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNMZWZ0ID0gMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzLnB1c2gocHNbcHMubGVuZ3RoIC0gMl0sIHBzW3BzLmxlbmd0aCAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc0xlZnQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMucHVzaChwc1twcy5sZW5ndGggLSAzXSwgcHNbcHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2VzTGVmdCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcnMucHVzaChmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKGNvb3Jkcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKGNvb3JkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMucHVzaChjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNMZWZ0LS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmFsaWduKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guZmlndXJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAndHJpYW5nbGVzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KHBzKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVUeXBlNVNoYWRpbmcobWVzaCwgcmVhZGVyLCB2ZXJ0aWNlc1BlclJvdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZCA9IHJlYWRlci5yZWFkQ29vcmRpbmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvciA9IHJlYWRlci5yZWFkQ29tcG9uZW50cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzLnB1c2goY29vcmRzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzLnB1c2goY29vcmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5maWd1cmVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdsYXR0aWNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNlc1BlclJvdzogdmVydGljZXNQZXJSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIE1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UID0gMztcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5UID0gMjA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBUUklBTkdMRV9ERU5TSVRZID0gMjA7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGdldEIgPSBmdW5jdGlvbiBnZXRCQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkQihjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsdXQgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBpIC8gY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0XyA9IDEgLSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsdXQucHVzaChuZXcgRmxvYXQzMkFycmF5KFt0XyAqIHRfICogdF8sIDMgKiB0ICogdF8gKiB0XywgMyAqIHQgKiB0ICogdF8sIHQgKiB0ICogdF0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBnZXRCKGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWNoZVtjb3VudF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVbY291bnRdID0gYnVpbGRCKGNvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVbY291bnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkRmlndXJlRnJvbVBhdGNoKG1lc2gsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlID0gbWVzaC5maWd1cmVzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGZpZ3VyZS50eXBlID09PSAncGF0Y2gnLCAnVW5leHBlY3RlZCBwYXRjaCBtZXNoIGZpZ3VyZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpID0gZmlndXJlLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaSA9IGZpZ3VyZS5jb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlTWluWCA9IE1hdGgubWluKGNvb3Jkc1twaVswXV1bMF0sIGNvb3Jkc1twaVszXV1bMF0sIGNvb3Jkc1twaVsxMl1dWzBdLCBjb29yZHNbcGlbMTVdXVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlTWluWSA9IE1hdGgubWluKGNvb3Jkc1twaVswXV1bMV0sIGNvb3Jkc1twaVszXV1bMV0sIGNvb3Jkc1twaVsxMl1dWzFdLCBjb29yZHNbcGlbMTVdXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlTWF4WCA9IE1hdGgubWF4KGNvb3Jkc1twaVswXV1bMF0sIGNvb3Jkc1twaVszXV1bMF0sIGNvb3Jkc1twaVsxMl1dWzBdLCBjb29yZHNbcGlbMTVdXVswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlTWF4WSA9IE1hdGgubWF4KGNvb3Jkc1twaVswXV1bMV0sIGNvb3Jkc1twaVszXV1bMV0sIGNvb3Jkc1twaVsxMl1dWzFdLCBjb29yZHNbcGlbMTVdXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRYQnkgPSBNYXRoLmNlaWwoKGZpZ3VyZU1heFggLSBmaWd1cmVNaW5YKSAqIFRSSUFOR0xFX0RFTlNJVFkgLyAobWVzaC5ib3VuZHNbMl0gLSBtZXNoLmJvdW5kc1swXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRYQnkgPSBNYXRoLm1heChNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgTWF0aC5taW4oTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIHNwbGl0WEJ5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BsaXRZQnkgPSBNYXRoLmNlaWwoKGZpZ3VyZU1heFkgLSBmaWd1cmVNaW5ZKSAqIFRSSUFOR0xFX0RFTlNJVFkgLyAobWVzaC5ib3VuZHNbM10gLSBtZXNoLmJvdW5kc1sxXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRZQnkgPSBNYXRoLm1heChNSU5fU1BMSVRfUEFUQ0hfQ0hVTktTX0FNT1VOVCwgTWF0aC5taW4oTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQsIHNwbGl0WUJ5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGljZXNQZXJSb3cgPSBzcGxpdFhCeSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlQ29vcmRzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlQ29sb3JzID0gbmV3IEludDMyQXJyYXkoKHNwbGl0WUJ5ICsgMSkgKiB2ZXJ0aWNlc1BlclJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2wgPSBuZXcgVWludDhBcnJheSgzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjciA9IG5ldyBVaW50OEFycmF5KDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMwID0gY29sb3JzW2NpWzBdXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSA9IGNvbG9yc1tjaVsxXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSBjb2xvcnNbY2lbMl1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMzID0gY29sb3JzW2NpWzNdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiUm93ID0gZ2V0QihzcGxpdFlCeSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYkNvbCA9IGdldEIoc3BsaXRYQnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciByb3cgPSAwOyByb3cgPD0gc3BsaXRZQnk7IHJvdysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xbMF0gPSAoYzBbMF0gKiAoc3BsaXRZQnkgLSByb3cpICsgYzJbMF0gKiByb3cpIC8gc3BsaXRZQnkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsWzFdID0gKGMwWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMyWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbFsyXSA9IChjMFsyXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjMlsyXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JbMF0gPSAoYzFbMF0gKiAoc3BsaXRZQnkgLSByb3cpICsgYzNbMF0gKiByb3cpIC8gc3BsaXRZQnkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyWzFdID0gKGMxWzFdICogKHNwbGl0WUJ5IC0gcm93KSArIGMzWzFdICogcm93KSAvIHNwbGl0WUJ5IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjclsyXSA9IChjMVsyXSAqIChzcGxpdFlCeSAtIHJvdykgKyBjM1syXSAqIHJvdykgLyBzcGxpdFlCeSB8IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAwOyBjb2wgPD0gc3BsaXRYQnk7IGNvbCsrLCBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyb3cgPT09IDAgfHwgcm93ID09PSBzcGxpdFlCeSkgJiYgKGNvbCA9PT0gMCB8fCBjb2wgPT09IHNwbGl0WEJ5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IDM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPD0gMzsgaisrLCBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IGJSb3dbcm93XVtpXSAqIGJDb2xbY29sXVtqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGNvb3Jkc1twaVtxXV1bMF0gKiBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgKz0gY29vcmRzW3BpW3FdXVsxXSAqIG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVDb29yZHNba10gPSBjb29yZHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbeCwgeV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVDb2xvcnNba10gPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3Q29sb3IgPSBuZXcgVWludDhBcnJheSgzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q29sb3JbMF0gPSAoY2xbMF0gKiAoc3BsaXRYQnkgLSBjb2wpICsgY3JbMF0gKiBjb2wpIC8gc3BsaXRYQnkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2xvclsxXSA9IChjbFsxXSAqIChzcGxpdFhCeSAtIGNvbCkgKyBjclsxXSAqIGNvbCkgLyBzcGxpdFhCeSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbG9yWzJdID0gKGNsWzJdICogKHNwbGl0WEJ5IC0gY29sKSArIGNyWzJdICogY29sKSAvIHNwbGl0WEJ5IHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzLnB1c2gobmV3Q29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZmlndXJlQ29vcmRzWzBdID0gcGlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVDb2xvcnNbMF0gPSBjaVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZUNvb3Jkc1tzcGxpdFhCeV0gPSBwaVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZUNvbG9yc1tzcGxpdFhCeV0gPSBjaVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZUNvb3Jkc1t2ZXJ0aWNlc1BlclJvdyAqIHNwbGl0WUJ5XSA9IHBpWzEyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZUNvbG9yc1t2ZXJ0aWNlc1BlclJvdyAqIHNwbGl0WUJ5XSA9IGNpWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlndXJlQ29vcmRzW3ZlcnRpY2VzUGVyUm93ICogc3BsaXRZQnkgKyBzcGxpdFhCeV0gPSBwaVsxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVDb2xvcnNbdmVydGljZXNQZXJSb3cgKiBzcGxpdFlCeSArIHNwbGl0WEJ5XSA9IGNpWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5maWd1cmVzW2luZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbGF0dGljZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzOiBmaWd1cmVDb29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzOiBmaWd1cmVDb2xvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljZXNQZXJSb3c6IHZlcnRpY2VzUGVyUm93XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVjb2RlVHlwZTZTaGFkaW5nKG1lc2gsIHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkcyA9IG1lc2guY29vcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG1lc2guY29sb3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBzID0gbmV3IEludDMyQXJyYXkoMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNzID0gbmV3IEludDMyQXJyYXkoNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChyZWFkZXIuaGFzRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gcmVhZGVyLnJlYWRGbGFnKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISgwIDw9IGYgJiYgZiA8PSAzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1Vua25vd24gdHlwZTYgZmxhZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGkgPSBjb29yZHMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBmICE9PSAwID8gOCA6IDEyOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChyZWFkZXIucmVhZENvb3JkaW5hdGUoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNpID0gY29sb3JzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZiAhPT0gMCA/IDIgOiA0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnMucHVzaChyZWFkZXIucmVhZENvbXBvbmVudHMoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTJdID0gcGkgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSBwaSArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s0XSA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzddID0gcGkgKyA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMF0gPSBwaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzNdID0gcGkgKyA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMl0gPSBjaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1szXSA9IGNpICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzBdID0gY2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBwc1sxMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAyID0gcHNbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMyA9IHBzWzE0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDQgPSBwc1sxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMl0gPSB0bXA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSB0bXAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbN10gPSBwaSArIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1swXSA9IHRtcDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxID0gY3NbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAyID0gY3NbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1syXSA9IHRtcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAxID0gcHNbMTVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMiA9IHBzWzExXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEyXSA9IHBzWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSBwc1s3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzRdID0gdG1wMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzddID0gcGkgKyA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMF0gPSB0bXAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMV0gPSBwaSArIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1syXSA9IHBpICsgNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzNdID0gcGkgKyA1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMSA9IGNzWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMl0gPSBjc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEyXSA9IHBzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSBwc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzExXSA9IHBpICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzRdID0gcHNbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzBdID0gcHNbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1syXSA9IGNzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzBdID0gY3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzVdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzBdXVswXSAtIGNvb3Jkc1twc1sxNV1dWzBdICsgNiAqIChjb29yZHNbcHNbNF1dWzBdICsgY29vcmRzW3BzWzFdXVswXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzBdICsgY29vcmRzW3BzWzNdXVswXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzBdICsgY29vcmRzW3BzWzddXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzBdXVsxXSAtIGNvb3Jkc1twc1sxNV1dWzFdICsgNiAqIChjb29yZHNbcHNbNF1dWzFdICsgY29vcmRzW3BzWzFdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1sxM11dWzFdICsgY29vcmRzW3BzWzddXVsxXSkpIC8gOV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzZdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzNdXVswXSAtIGNvb3Jkc1twc1sxMl1dWzBdICsgNiAqIChjb29yZHNbcHNbMl1dWzBdICsgY29vcmRzW3BzWzddXVswXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMF0gKyBjb29yZHNbcHNbMTVdXVswXSkgKyAzICogKGNvb3Jkc1twc1s0XV1bMF0gKyBjb29yZHNbcHNbMTRdXVswXSkpIC8gOSwgKC00ICogY29vcmRzW3BzWzNdXVsxXSAtIGNvb3Jkc1twc1sxMl1dWzFdICsgNiAqIChjb29yZHNbcHNbMl1dWzFdICsgY29vcmRzW3BzWzddXVsxXSkgLSAyICogKGNvb3Jkc1twc1swXV1bMV0gKyBjb29yZHNbcHNbMTVdXVsxXSkgKyAzICogKGNvb3Jkc1twc1s0XV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkpIC8gOV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzldID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzEyXV1bMF0gLSBjb29yZHNbcHNbM11dWzBdICsgNiAqIChjb29yZHNbcHNbOF1dWzBdICsgY29vcmRzW3BzWzEzXV1bMF0pIC0gMiAqIChjb29yZHNbcHNbMF1dWzBdICsgY29vcmRzW3BzWzE1XV1bMF0pICsgMyAqIChjb29yZHNbcHNbMTFdXVswXSArIGNvb3Jkc1twc1sxXV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1sxMl1dWzFdIC0gY29vcmRzW3BzWzNdXVsxXSArIDYgKiAoY29vcmRzW3BzWzhdXVsxXSArIGNvb3Jkc1twc1sxM11dWzFdKSAtIDIgKiAoY29vcmRzW3BzWzBdXVsxXSArIGNvb3Jkc1twc1sxNV1dWzFdKSArIDMgKiAoY29vcmRzW3BzWzExXV1bMV0gKyBjb29yZHNbcHNbMV1dWzFdKSkgLyA5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTBdID0gY29vcmRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHMucHVzaChbKC00ICogY29vcmRzW3BzWzE1XV1bMF0gLSBjb29yZHNbcHNbMF1dWzBdICsgNiAqIChjb29yZHNbcHNbMTFdXVswXSArIGNvb3Jkc1twc1sxNF1dWzBdKSAtIDIgKiAoY29vcmRzW3BzWzEyXV1bMF0gKyBjb29yZHNbcHNbM11dWzBdKSArIDMgKiAoY29vcmRzW3BzWzJdXVswXSArIGNvb3Jkc1twc1s4XV1bMF0pKSAvIDksICgtNCAqIGNvb3Jkc1twc1sxNV1dWzFdIC0gY29vcmRzW3BzWzBdXVsxXSArIDYgKiAoY29vcmRzW3BzWzExXV1bMV0gKyBjb29yZHNbcHNbMTRdXVsxXSkgLSAyICogKGNvb3Jkc1twc1sxMl1dWzFdICsgY29vcmRzW3BzWzNdXVsxXSkgKyAzICogKGNvb3Jkc1twc1syXV1bMV0gKyBjb29yZHNbcHNbOF1dWzFdKSkgLyA5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzaC5maWd1cmVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAncGF0Y2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHM6IG5ldyBJbnQzMkFycmF5KHBzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzOiBuZXcgSW50MzJBcnJheShjcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlY29kZVR5cGU3U2hhZGluZyhtZXNoLCByZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHMgPSBtZXNoLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcyA9IG5ldyBJbnQzMkFycmF5KDE2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IG5ldyBJbnQzMkFycmF5KDQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmVhZGVyLmhhc0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IHJlYWRlci5yZWFkRmxhZygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCA8PSBmICYmIGYgPD0gMykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdVbmtub3duIHR5cGU3IGZsYWcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpID0gY29vcmRzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZiAhPT0gMCA/IDEyIDogMTY7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHJlYWRlci5yZWFkQ29vcmRpbmF0ZSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2kgPSBjb2xvcnMubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBmICE9PSAwID8gMiA6IDQ7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9ycy5wdXNoKHJlYWRlci5yZWFkQ29tcG9uZW50cygpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMl0gPSBwaSArIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxM10gPSBwaSArIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxNF0gPSBwaSArIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxNV0gPSBwaSArIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s4XSA9IHBpICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzldID0gcGkgKyAxMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMV0gPSBwaSArIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s0XSA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzVdID0gcGkgKyAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzZdID0gcGkgKyAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzddID0gcGkgKyA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMF0gPSBwaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzFdID0gcGkgKyAxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzNdID0gcGkgKyA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMl0gPSBjaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1szXSA9IGNpICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzBdID0gY2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBwc1sxMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAyID0gcHNbMTNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wMyA9IHBzWzE0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDQgPSBwc1sxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMl0gPSB0bXA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTNdID0gcGkgKyAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTRdID0gcGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTVdID0gcGkgKyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOF0gPSB0bXAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBjc1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDIgPSBjc1szXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzJdID0gdG1wMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzNdID0gY2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1swXSA9IHRtcDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBwc1sxNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAyID0gcHNbMTFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTJdID0gcHNbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxM10gPSBwaSArIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxNF0gPSBwaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxNV0gPSBwaSArIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s4XSA9IHBzWzddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbOV0gPSBwaSArIDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMF0gPSBwaSArIDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMTFdID0gcGkgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNF0gPSB0bXAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzBdID0gdG1wMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzFdID0gcGkgKyA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbMl0gPSBwaSArIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1szXSA9IHBpICsgNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcDEgPSBjc1szXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzJdID0gY3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1szXSA9IGNpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMF0gPSB0bXAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbMV0gPSBjaSArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMl0gPSBwc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEzXSA9IHBpICsgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzE0XSA9IHBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzE1XSA9IHBpICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzhdID0gcHNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s5XSA9IHBpICsgOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzEwXSA9IHBpICsgMTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxMV0gPSBwaSArIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s0XSA9IHBzWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbNV0gPSBwaSArIDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s2XSA9IHBpICsgMTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1s3XSA9IHBpICsgNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzBdID0gcHNbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwc1sxXSA9IHBpICsgNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzWzJdID0gcGkgKyA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHNbM10gPSBwaSArIDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1syXSA9IGNzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NbM10gPSBjaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzWzBdID0gY3NbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc1sxXSA9IGNpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guZmlndXJlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3BhdGNoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzOiBuZXcgSW50MzJBcnJheShwcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczogbmV3IEludDMyQXJyYXkoY3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB1cGRhdGVCb3VuZHMobWVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pblggPSBtZXNoLmNvb3Jkc1swXVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5ZID0gbWVzaC5jb29yZHNbMF1bMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WCA9IG1pblgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WSA9IG1pblk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBpaSA9IG1lc2guY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IG1lc2guY29vcmRzW2ldWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gbWVzaC5jb29yZHNbaV1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluWCA9IG1pblggPiB4ID8geCA6IG1pblg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluWSA9IG1pblkgPiB5ID8geSA6IG1pblk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WCA9IG1heFggPCB4ID8geCA6IG1heFg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WSA9IG1heFkgPCB5ID8geSA6IG1heFk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guYm91bmRzID0gW21pblgsIG1pblksIG1heFgsIG1heFldO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGFja0RhdGEobWVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGlpLCBqLCBqajtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHMgPSBtZXNoLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb29yZHNQYWNrZWQgPSBuZXcgRmxvYXQzMkFycmF5KGNvb3Jkcy5sZW5ndGggKiAyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaiA9IDAsIGlpID0gY29vcmRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHkgPSBjb29yZHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzUGFja2VkW2orK10gPSB4eVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNQYWNrZWRbaisrXSA9IHh5WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNoLmNvb3JkcyA9IGNvb3Jkc1BhY2tlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSBtZXNoLmNvbG9ycztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNQYWNrZWQgPSBuZXcgVWludDhBcnJheShjb2xvcnMubGVuZ3RoICogMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGogPSAwLCBpaSA9IGNvbG9ycy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBjb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzUGFja2VkW2orK10gPSBjWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1BhY2tlZFtqKytdID0gY1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNQYWNrZWRbaisrXSA9IGNbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc2guY29sb3JzID0gY29sb3JzUGFja2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZ3VyZXMgPSBtZXNoLmZpZ3VyZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZ3VyZSA9IGZpZ3VyZXNbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzID0gZmlndXJlLmNvb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3MgPSBmaWd1cmUuY29sb3JzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBwcy5sZW5ndGg7IGogPCBqajsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzW2pdICo9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzW2pdICo9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWVzaChzdHJlYW0sIG1hdHJpeCwgeHJlZiwgcmVzLCBwZGZGdW5jdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShzdHJlYW0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdNZXNoIGRhdGEgaXMgbm90IGEgc3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gc3RyZWFtLmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHJpeCA9IG1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hhZGluZ1R5cGUgPSBkaWN0LmdldCgnU2hhZGluZ1R5cGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9ICdQYXR0ZXJuJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmJveCA9IGRpY3QuZ2V0QXJyYXkoJ0JCb3gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IGRpY3QuZ2V0KCdDb2xvclNwYWNlJywgJ0NTJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcyA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoY3MsIHhyZWYsIHJlcywgcGRmRnVuY3Rpb25GYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3MgPSBjcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZCA9IGRpY3QuaGFzKCdCYWNrZ3JvdW5kJykgPyBjcy5nZXRSZ2IoZGljdC5nZXQoJ0JhY2tncm91bmQnKSwgMCkgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuT2JqID0gZGljdC5nZXQoJ0Z1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBmbk9iaiA/IHBkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGVGcm9tQXJyYXkoZm5PYmopIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29vcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWd1cmVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzUGVyQ29vcmRpbmF0ZTogZGljdC5nZXQoJ0JpdHNQZXJDb29yZGluYXRlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0c1BlckNvbXBvbmVudDogZGljdC5nZXQoJ0JpdHNQZXJDb21wb25lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzUGVyRmxhZzogZGljdC5nZXQoJ0JpdHNQZXJGbGFnJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlOiBkaWN0LmdldEFycmF5KCdEZWNvZGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvckZuOiBmbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlOiBjcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Db21wczogZm4gPyAxIDogY3MubnVtQ29tcHNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IE1lc2hTdHJlYW1SZWFkZXIoc3RyZWFtLCBkZWNvZGVDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRjaE1lc2ggPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnNoYWRpbmdUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5GUkVFX0ZPUk1fTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVHlwZTRTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5MQVRUSUNFX0ZPUk1fTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzUGVyUm93ID0gZGljdC5nZXQoJ1ZlcnRpY2VzUGVyUm93JykgfCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNlc1BlclJvdyA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignSW52YWxpZCBWZXJ0aWNlc1BlclJvdycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVHlwZTVTaGFkaW5nKHRoaXMsIHJlYWRlciwgdmVydGljZXNQZXJSb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2hhZGluZ1R5cGUuQ09PTlNfUEFUQ0hfTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVHlwZTZTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoTWVzaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTaGFkaW5nVHlwZS5URU5TT1JfUEFUQ0hfTUVTSDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlVHlwZTdTaGFkaW5nKHRoaXMsIHJlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoTWVzaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnVW5zdXBwb3J0ZWQgbWVzaCB0eXBlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoTWVzaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUJvdW5kcyh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkRmlndXJlRnJvbVBhdGNoKHRoaXMsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlQm91bmRzKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFja0RhdGEodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBNZXNoLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldElSOiBmdW5jdGlvbiBNZXNoX2dldElSKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbJ01lc2gnLCB0aGlzLnNoYWRpbmdUeXBlLCB0aGlzLmNvb3JkcywgdGhpcy5jb2xvcnMsIHRoaXMuZmlndXJlcywgdGhpcy5ib3VuZHMsIHRoaXMubWF0cml4LCB0aGlzLmJib3gsIHRoaXMuYmFja2dyb3VuZF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXNoO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIFNoYWRpbmdzLkR1bW15ID0gZnVuY3Rpb24gRHVtbXlDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBEdW1teSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9ICdQYXR0ZXJuJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIER1bW15LnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldElSOiBmdW5jdGlvbiBEdW1teV9nZXRJUigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWydEdW1teSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRHVtbXk7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0VGlsaW5nUGF0dGVybklSKG9wZXJhdG9yTGlzdCwgZGljdCwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gZGljdC5nZXRBcnJheSgnTWF0cml4Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGJib3ggPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoZGljdC5nZXRBcnJheSgnQkJveCcpKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgeHN0ZXAgPSBkaWN0LmdldCgnWFN0ZXAnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHlzdGVwID0gZGljdC5nZXQoJ1lTdGVwJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYWludFR5cGUgPSBkaWN0LmdldCgnUGFpbnRUeXBlJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aWxpbmdUeXBlID0gZGljdC5nZXQoJ1RpbGluZ1R5cGUnKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoYmJveFsyXSAtIGJib3hbMF0gPT09IDAgfHwgYmJveFszXSAtIGJib3hbMV0gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcihcIkludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5OiBbXCIuY29uY2F0KGJib3gsIFwiXS5cIikpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsnVGlsaW5nUGF0dGVybicsIGFyZ3MsIG9wZXJhdG9yTGlzdCwgbWF0cml4LCBiYm94LCB4c3RlcCwgeXN0ZXAsIHBhaW50VHlwZSwgdGlsaW5nVHlwZV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxODMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmJpZGkgPSBiaWRpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2KTtcblxuICAgICAgICAgICAgICAgIHZhciBiYXNlVHlwZXMgPSBbJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ1MnLCAnQicsICdTJywgJ1dTJywgJ0InLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQicsICdCJywgJ0InLCAnUycsICdXUycsICdPTicsICdPTicsICdFVCcsICdFVCcsICdFVCcsICdPTicsICdPTicsICdPTicsICdPTicsICdPTicsICdFUycsICdDUycsICdFUycsICdDUycsICdDUycsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdFTicsICdDUycsICdPTicsICdPTicsICdPTicsICdPTicsICdPTicsICdPTicsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ09OJywgJ09OJywgJ09OJywgJ09OJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0JOJywgJ0InLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQk4nLCAnQ1MnLCAnT04nLCAnRVQnLCAnRVQnLCAnRVQnLCAnRVQnLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnTCcsICdPTicsICdPTicsICdCTicsICdPTicsICdPTicsICdFVCcsICdFVCcsICdFTicsICdFTicsICdPTicsICdMJywgJ09OJywgJ09OJywgJ09OJywgJ0VOJywgJ0wnLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnT04nLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ09OJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnT04nLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJywgJ0wnLCAnTCcsICdMJ107XG4gICAgICAgICAgICAgICAgdmFyIGFyYWJpY1R5cGVzID0gWydBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdPTicsICdPTicsICdBTCcsICdFVCcsICdFVCcsICdBTCcsICdDUycsICdBTCcsICdPTicsICdPTicsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ0FMJywgJ0FMJywgJycsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdBTCcsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdBTicsICdFVCcsICdBTicsICdBTicsICdBTCcsICdBTCcsICdBTCcsICdOU00nLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnQUwnLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ0FOJywgJ09OJywgJ05TTScsICdOU00nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ0FMJywgJ0FMJywgJ05TTScsICdOU00nLCAnT04nLCAnTlNNJywgJ05TTScsICdOU00nLCAnTlNNJywgJ0FMJywgJ0FMJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0VOJywgJ0FMJywgJ0FMJywgJ0FMJywgJ0FMJywgJ0FMJywgJ0FMJ107XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc09kZChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSAmIDEpICE9PSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzRXZlbihpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSAmIDEpID09PSAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmRVbmVxdWFsKGFyciwgc3RhcnQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydCwgamogPSBhcnIubGVuZ3RoOyBqIDwgamo7ICsraikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycltqXSAhPT0gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gajtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBqO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldFZhbHVlcyhhcnIsIHN0YXJ0LCBlbmQsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBzdGFydDsgaiA8IGVuZDsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJldmVyc2VWYWx1ZXMoYXJyLCBzdGFydCwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydCwgaiA9IGVuZCAtIDE7IGkgPCBqOyArK2ksIC0taikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBhcnJbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJbaV0gPSBhcnJbal07XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJbal0gPSB0ZW1wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoc3RyLCBpc0xUUiwgdmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cjogc3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiB2ZXJ0aWNhbCA/ICd0dGInIDogaXNMVFIgPyAnbHRyJyA6ICdydGwnXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGNoYXJzID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHR5cGVzID0gW107XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBiaWRpKHN0ciwgc3RhcnRMZXZlbCwgdmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzTFRSID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckxlbmd0aCA9IHN0ci5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0ckxlbmd0aCA9PT0gMCB8fCB2ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUJpZGlUZXh0KHN0ciwgaXNMVFIsIHZlcnRpY2FsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNoYXJzLmxlbmd0aCA9IHN0ckxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdHlwZXMubGVuZ3RoID0gc3RyTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbnVtQmlkaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzW2ldID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJUeXBlID0gJ0wnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hhckNvZGUgPD0gMHgwMGZmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclR5cGUgPSBiYXNlVHlwZXNbY2hhckNvZGVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgweDA1OTAgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gMHgwNWY0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhclR5cGUgPSAnUic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDB4MDYwMCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA2ZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyVHlwZSA9IGFyYWJpY1R5cGVzW2NoYXJDb2RlICYgMHhmZl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYXJUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnQmlkaTogaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciAnICsgY2hhckNvZGUudG9TdHJpbmcoMTYpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKDB4MDcwMCA8PSBjaGFyQ29kZSAmJiBjaGFyQ29kZSA8PSAweDA4QUMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyVHlwZSA9ICdBTCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGFyVHlwZSA9PT0gJ1InIHx8IGNoYXJUeXBlID09PSAnQUwnIHx8IGNoYXJUeXBlID09PSAnQU4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtQmlkaSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IGNoYXJUeXBlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bUJpZGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzTFRSID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVCaWRpVGV4dChzdHIsIGlzTFRSKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydExldmVsID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bUJpZGkgLyBzdHJMZW5ndGggPCAwLjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0xUUiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMZXZlbCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTFRSID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRMZXZlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgbGV2ZWxzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHNbaV0gPSBzdGFydExldmVsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSBpc09kZChzdGFydExldmVsKSA/ICdSJyA6ICdMJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNvciA9IGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlb3IgPSBzb3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBsYXN0VHlwZSA9IHNvcjtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlc1tpXSA9PT0gJ05TTScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0VHlwZSA9IHR5cGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbGFzdFR5cGUgPSBzb3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0O1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9PT0gJ0VOJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gbGFzdFR5cGUgPT09ICdBTCcgPyAnQU4nIDogJ0VOJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ1InIHx8IHQgPT09ICdMJyB8fCB0ID09PSAnQUwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFR5cGUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ID0gdHlwZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID09PSAnQUwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXNbaV0gPSAnUic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc3RyTGVuZ3RoIC0gMTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNbaV0gPT09ICdFUycgJiYgdHlwZXNbaSAtIDFdID09PSAnRU4nICYmIHR5cGVzW2kgKyAxXSA9PT0gJ0VOJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gJ0VOJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVzW2ldID09PSAnQ1MnICYmICh0eXBlc1tpIC0gMV0gPT09ICdFTicgfHwgdHlwZXNbaSAtIDFdID09PSAnQU4nKSAmJiB0eXBlc1tpICsgMV0gPT09IHR5cGVzW2kgLSAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gdHlwZXNbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNbaV0gPT09ICdFTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGkgLSAxOyBqID49IDA7IC0taikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNbal0gIT09ICdFVCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXNbal0gPSAnRU4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IGkgKyAxOyBqIDwgc3RyTGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVzW2pdICE9PSAnRVQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2pdID0gJ0VOJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0eXBlc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT09ICdXUycgfHwgdCA9PT0gJ0VTJyB8fCB0ID09PSAnRVQnIHx8IHQgPT09ICdDUycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1tpXSA9ICdPTic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsYXN0VHlwZSA9IHNvcjtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0eXBlc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT09ICdFTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlc1tpXSA9IGxhc3RUeXBlID09PSAnTCcgPyAnTCcgOiAnRU4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0ID09PSAnUicgfHwgdCA9PT0gJ0wnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFR5cGUgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0ckxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXNbaV0gPT09ICdPTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gZmluZFVuZXF1YWwodHlwZXMsIGkgKyAxLCAnT04nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVmb3JlID0gc29yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZSA9IHR5cGVzW2kgLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWZ0ZXIgPSBlb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kICsgMSA8IHN0ckxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZnRlciA9IHR5cGVzW2VuZCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiZWZvcmUgIT09ICdMJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgPSAnUic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmdGVyICE9PSAnTCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXIgPSAnUic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJlZm9yZSA9PT0gYWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VmFsdWVzKHR5cGVzLCBpLCBlbmQsIGJlZm9yZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGVuZCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyTGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlc1tpXSA9PT0gJ09OJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVzW2ldID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHR5cGVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFdmVuKGxldmVsc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodCA9PT0gJ1InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsc1tpXSArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodCA9PT0gJ0FOJyB8fCB0ID09PSAnRU4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsc1tpXSArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT09ICdMJyB8fCB0ID09PSAnQU4nIHx8IHQgPT09ICdFTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzW2ldICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGhpZ2hlc3RMZXZlbCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG93ZXN0T2RkTGV2ZWwgPSA5OTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxldmVsO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gbGV2ZWxzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsID0gbGV2ZWxzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGlnaGVzdExldmVsIDwgbGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoZXN0TGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvd2VzdE9kZExldmVsID4gbGV2ZWwgJiYgaXNPZGQobGV2ZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXN0T2RkTGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV2ZWwgPSBoaWdoZXN0TGV2ZWw7IGxldmVsID49IGxvd2VzdE9kZExldmVsOyAtLWxldmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnQgPSAtMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBsZXZlbHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbHNbaV0gPCBsZXZlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZVZhbHVlcyhjaGFycywgc3RhcnQsIGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZVZhbHVlcyhjaGFycywgc3RhcnQsIGxldmVscy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBjaGFycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSBjaGFyc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnPCcgfHwgY2ggPT09ICc+Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJzW2ldID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQmlkaVRleHQoY2hhcnMuam9pbignJyksIGlzTFRSKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0TWV0cmljcyA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0TWV0cmljcyA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXInXSA9IDYwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllci1Cb2xkJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0NvdXJpZXItQm9sZE9ibGlxdWUnXSA9IDYwMDtcbiAgICAgICAgICAgICAgICAgICAgdFsnQ291cmllci1PYmxpcXVlJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hlbHZldGljYSddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsJ10gPSAzNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gMTAxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0EnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0InXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0MnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0QnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0UnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0YnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0cnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0onXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0snXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0wnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ00nXSA9IDgzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ04nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ08nXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1AnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1EnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1InXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1MnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1QnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1UnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1YnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1cnXSA9IDk0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1gnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1knXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1onXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWljaXJjdW0nXSA9IDQ2OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlbGVmdCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaSddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaiddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnayddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0J10gPSAzMzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYXInXSA9IDI2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHQnXSA9IDMzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpdGlsZGUnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbWRvd24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N0ZXJsaW5nJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmcmFjdGlvbiddID0gMTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWVuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmbG9yaW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlY3Rpb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2N1cnJlbmN5J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXNpbmdsZSddID0gMTkxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RsZWZ0J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmknXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZsJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbmRhc2gnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2dlciddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyZGJsJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RjZW50ZXJlZCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyYWdyYXBoJ10gPSA1Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydidWxsZXQnXSA9IDM1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xiYXNlJ10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGJhc2UnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJscmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdHJpZ2h0J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbGxpcHNpcyddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcnRob3VzYW5kJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb25kb3duJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmF2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NpcmN1bWZsZXgnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpZXJlc2lzJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyaW5nJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjZWRpbGxhJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydodW5nYXJ1bWxhdXQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29nb25layddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Fyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtZGFzaCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkZmVtaW5pbmUnXSA9IDM3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xzbGFzaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPRSddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29yZG1hc2N1bGluZSddID0gMzY1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWUnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGxlc3NpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsc2xhc2gnXSA9IDIyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29zbGFzaCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2UnXSA9IDk0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dlcm1hbmRibHMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lkaWVyZXNpcyddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhYnJldmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VodW5nYXJ1bWxhdXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWRpZXJlc2lzJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaXZpZGUnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1lhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWNpcmN1bWZsZXgnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWNpcmN1bWZsZXgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3lhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NvbW1hYWNjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVXJpbmcnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VkaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW9nb25layddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1b2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0Rjcm9hdCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFhY2NlbnQnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvcHlyaWdodCddID0gNzM3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRW1hY3JvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Nhcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcmluZyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmNvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsYWN1dGUnXSA9IDIyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FncmF2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNvbW1hYWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2F0aWxkZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWRvdGFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2Nhcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2VkaWxsYSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWFjdXRlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb3plbmdlJ10gPSA0NzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0djb21tYWFjY2VudCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FjaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY2Fyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NjZWRpbGxhJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaZG90YWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUaG9ybiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT21hY3JvbiddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUmFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RjYXJvbiddID0gNjQzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVW1hY3JvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndXJpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlc3VwZXJpb3InXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09ncmF2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWdyYXZlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBYnJldmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211bHRpcGx5J10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1YWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RjYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFydGlhbGRpZmYnXSA9IDQ3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3lkaWVyZXNpcyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpY2lyY3VtZmxleCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXgnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FkaWVyZXNpcyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25hY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNtaW51cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJva2VuYmFyJ10gPSAyNjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyZWdpc3RlcmVkJ10gPSA3Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHYnJldmUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lkb3RhY2NlbnQnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N1bW1hdGlvbiddID0gNjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWdyYXZlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWN1dGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29tYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1phY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V0aCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2NlZGlsbGEnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjb21tYWFjY2VudCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNhcm9uJ10gPSAzMTc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydlb2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVb2dvbmVrJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6YWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lvZ29uZWsnXSA9IDIyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09hY3V0ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2FjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbWFjcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lkaWVyZXNpcyddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2NpcmN1bWZsZXgnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VncmF2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGVsdGEnXSA9IDYxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rob3JuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d29zdXBlcmlvciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2RpZXJlc2lzJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWdyYXZlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvaHVuZ2FydW1sYXV0J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFb2dvbmVrJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkY3JvYXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlcXVhcnRlcnMnXSA9IDgzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NjZWRpbGxhJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsY2Fyb24nXSA9IDI5OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0tjb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0cmFkZW1hcmsnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZG90YWNjZW50J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lcXVhcnRlciddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY29tbWFhY2NlbnQnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09odW5nYXJ1bWxhdXQnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RlZ3JlZSddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VncmF2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbCddID0gNDUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ050aWxkZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3RpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBb2dvbmVrJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3RpbGRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lvZ29uZWsnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rjb21tYWFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZXN1cGVyaW9yJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdXJvJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0WydIZWx2ZXRpY2EtQm9sZCddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsJ10gPSA0NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gOTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVsZWZ0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydqJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd2J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWl0aWxkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3RlcmxpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZyYWN0aW9uJ10gPSAxNjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY3VycmVuY3knXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xlJ10gPSAyMzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGxlZnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdGxlZnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmwnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXJkYmwnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGNlbnRlcmVkJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2J1bGxldCddID0gMzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsYmFzZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxyaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90cmlnaHQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVydGhvdXNhbmQnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmRvd24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2lyY3VtZmxleCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGlsZGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJldmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JpbmcnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlZGlsbGEnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h1bmdhcnVtbGF1dCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dvbmVrJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYXJvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1kYXNoJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQUUnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMzcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkbWFzY3VsaW5lJ10gPSAzNjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZSddID0gODg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90bGVzc2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2VybWFuZGJscyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhb2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VvZ29uZWsnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNyb2F0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYWFjY2VudCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0J10gPSA3Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjZWRpbGxhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2NvbW1hYWNjZW50J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY3VtZmxleCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FtYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2NlZGlsbGEnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNhcm9uJ10gPSA3NDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVzdXBlcmlvciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2dyYXZlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXVsdGlwbHknXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VhY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bWFjcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1c21pbnVzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydicm9rZW5iYXInXSA9IDI4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyZWQnXSA9IDczNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0dicmV2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb21hY3JvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0Y2Fyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2FjdXRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhvcm4nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3b3N1cGVyaW9yJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Rjcm9hdCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVycyddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2NlZGlsbGEnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjYXJvbiddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnS2NvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3RhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVoYWxmJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudGlsZGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VodW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2JyZXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVxdWFydGVyJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Njb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ3JhdmUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWdyYXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Jjb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Jjb21tYWFjY2VudCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBdGlsZGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsna2NvbW1hYWNjZW50J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtaW51cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZGllcmVzaXMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VkaWVyZXNpcyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbm90ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2djb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6Y2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V1cm8nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hlbHZldGljYS1Cb2xkT2JsaXF1ZSddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsJ10gPSA0NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gOTc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVsZWZ0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydqJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd2J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWl0aWxkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3RlcmxpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZyYWN0aW9uJ10gPSAxNjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY3VycmVuY3knXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xlJ10gPSAyMzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGxlZnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdGxlZnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmwnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXJkYmwnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGNlbnRlcmVkJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2J1bGxldCddID0gMzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsYmFzZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxyaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90cmlnaHQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVydGhvdXNhbmQnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmRvd24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2lyY3VtZmxleCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGlsZGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJldmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JpbmcnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlZGlsbGEnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h1bmdhcnVtbGF1dCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dvbmVrJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYXJvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1kYXNoJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQUUnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMzcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkbWFzY3VsaW5lJ10gPSAzNjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZSddID0gODg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90bGVzc2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2VybWFuZGJscyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhb2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VvZ29uZWsnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNyb2F0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYWFjY2VudCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0J10gPSA3Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjZWRpbGxhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2NvbW1hYWNjZW50J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY3VtZmxleCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FtYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2NlZGlsbGEnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNhcm9uJ10gPSA3NDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVzdXBlcmlvciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2dyYXZlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXVsdGlwbHknXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VhY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bWFjcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1c21pbnVzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydicm9rZW5iYXInXSA9IDI4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyZWQnXSA9IDczNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0dicmV2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb21hY3JvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0Y2Fyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2FjdXRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhvcm4nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3b3N1cGVyaW9yJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Rjcm9hdCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVycyddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2NlZGlsbGEnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjYXJvbiddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnS2NvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3RhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVoYWxmJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudGlsZGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VodW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2JyZXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVxdWFydGVyJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Njb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ3JhdmUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWdyYXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Jjb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Jjb21tYWFjY2VudCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBdGlsZGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsna2NvbW1hYWNjZW50J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtaW51cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZGllcmVzaXMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VkaWVyZXNpcyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbm90ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2djb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6Y2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V1cm8nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ0hlbHZldGljYS1PYmxpcXVlJ10gPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3BhY2UnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmwnXSA9IDM1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ251bWJlcnNpZ24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhciddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyY2VudCddID0gODg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW1wZXJzYW5kJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXJpZ2h0J10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVuJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2QnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3byddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXInXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NpeCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduaW5lJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VtaWNvbG9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlcXVhbCddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlciddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2F0J10gPSAxMDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnQnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gNDY5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVsZWZ0J10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpJ10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydqJ10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsJ10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtJ10gPSA4MzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd2J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDMzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gMzM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWl0aWxkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3RlcmxpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZyYWN0aW9uJ10gPSAxNjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZW4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY3VycmVuY3knXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xlJ10gPSAxOTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdGxlZnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmwnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXJkYmwnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGNlbnRlcmVkJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDUzNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2J1bGxldCddID0gMzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDIyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsYmFzZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90cmlnaHQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVydGhvdXNhbmQnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbmRvd24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyYXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY3V0ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2lyY3VtZmxleCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGlsZGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ21hY3JvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJldmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JpbmcnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlZGlsbGEnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h1bmdhcnVtbGF1dCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dvbmVrJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYXJvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1kYXNoJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQUUnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMzcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkbWFzY3VsaW5lJ10gPSAzNjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZSddID0gODg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90bGVzc2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2VybWFuZGJscyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZSddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWFjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhb2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNyb2F0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYWFjY2VudCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0J10gPSA3Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjZWRpbGxhJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDQ3MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2NvbW1hYWNjZW50J10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY3VtZmxleCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FtYWNyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JjYXJvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2NlZGlsbGEnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNhcm9uJ10gPSA2NDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVzdXBlcmlvciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2dyYXZlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXVsdGlwbHknXSA9IDU4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWRpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWRpZXJlc2lzJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bWFjcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1c21pbnVzJ10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydicm9rZW5iYXInXSA9IDI2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyZWQnXSA9IDczNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0dicmV2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JhY3V0ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb21hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNvbW1hYWNjZW50J10gPSAyMjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0Y2Fyb24nXSA9IDMxNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW9nb25layddID0gMjIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2FjdXRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtYWNyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhvcm4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3b3N1cGVyaW9yJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Rjcm9hdCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVycyddID0gODM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2NlZGlsbGEnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjYXJvbiddID0gMjk5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnS2NvbW1hYWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3RhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVoYWxmJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudGlsZGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VodW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2JyZXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVxdWFydGVyJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Njb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ3JhdmUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA0NTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Jjb21tYWFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Jjb21tYWFjY2VudCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBdGlsZGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsna2NvbW1hYWNjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtaW51cyddID0gNTg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA1ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VkaWVyZXNpcyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbm90ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2djb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRoJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6Y2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V1cm8nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1N5bWJvbCddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuaXZlcnNhbCddID0gNzEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnVtYmVyc2lnbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhpc3RlbnRpYWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDgzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VjaHRoYXQnXSA9IDQzOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXN0ZXJpc2ttYXRoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYSddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3plcm8nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHdvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZm91ciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZml2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2l4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZXZlbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25pbmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZW1pY29sb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xlc3MnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29uZ3J1ZW50J10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBbHBoYSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQmV0YSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2hpJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXBzaWxvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUGhpJ10gPSA3NjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHYW1tYSddID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRhJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJb3RhJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aGV0YTEnXSA9IDYzMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0thcHBhJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYW1iZGEnXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ011J10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOdSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT21pY3JvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUGknXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RoZXRhJ10gPSA3NDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSaG8nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NpZ21hJ10gPSA1OTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUYXUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Vwc2lsb24nXSA9IDY5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NpZ21hMSddID0gNDM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT21lZ2EnXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1hpJ10gPSA2NDU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydQc2knXSA9IDc5NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pldGEnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aGVyZWZvcmUnXSA9IDg2MztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVycGVuZGljdWxhciddID0gNjU4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbHBoYSddID0gNjMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYmV0YSddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2hpJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkZWx0YSddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXBzaWxvbiddID0gNDM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGhpJ10gPSA1MjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnYW1tYSddID0gNDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRhJ10gPSA2MDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydpb3RhJ10gPSAzMjk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwaGkxJ10gPSA2MDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrYXBwYSddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGFtYmRhJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdSddID0gNTc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnUnXSA9IDUyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29taWNyb24nXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BpJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aGV0YSddID0gNTIxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmhvJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaWdtYSddID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGF1J10gPSA0Mzk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cHNpbG9uJ10gPSA1NzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbWVnYTEnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29tZWdhJ10gPSA2ODY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4aSddID0gNDkzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncHNpJ10gPSA2ODY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZXRhJ10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDQ4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gNDgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2ltaWxhciddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXVybyddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVXBzaWxvbjEnXSA9IDYyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ21pbnV0ZSddID0gMjQ3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmcmFjdGlvbiddID0gMTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW5maW5pdHknXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2x1YiddID0gNzUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGlhbW9uZCddID0gNzUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaGVhcnQnXSA9IDc1MztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWRlJ10gPSA3NTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2JvdGgnXSA9IDEwNDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcnJvd2xlZnQnXSA9IDk4NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93dXAnXSA9IDYwMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93cmlnaHQnXSA9IDk4NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZG93biddID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzbWludXMnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlY29uZCddID0gNDExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcmVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdWx0aXBseSddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncHJvcG9ydGlvbmFsJ10gPSA3MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnVsbGV0J10gPSA0NjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaXZpZGUnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlcXVpdmFsZW5jZSddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXBwcm94ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3d2ZXJ0ZXgnXSA9IDYwMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93aG9yaXpleCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhcnJpYWdlcmV0dXJuJ10gPSA2NTg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbGVwaCddID0gODIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWZyYWt0dXInXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JmcmFrdHVyJ10gPSA3OTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3ZWllcnN0cmFzcyddID0gOTg3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2lyY2xlbXVsdGlwbHknXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NpcmNsZXBsdXMnXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtcHR5c2V0J10gPSA4MjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbnRlcnNlY3Rpb24nXSA9IDc2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuaW9uJ10gPSA3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydwcm9wZXJzdXBlcnNldCddID0gNzEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmVmbGV4c3VwZXJzZXQnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdHN1YnNldCddID0gNzEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncHJvcGVyc3Vic2V0J10gPSA3MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyZWZsZXhzdWJzZXQnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsZW1lbnQnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVsZW1lbnQnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FuZ2xlJ10gPSA3Njg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmFkaWVudCddID0gNzEzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmVnaXN0ZXJzZXJpZiddID0gNzkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0c2VyaWYnXSA9IDc5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFya3NlcmlmJ10gPSA4OTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydwcm9kdWN0J10gPSA4MjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RtYXRoJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA3MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2FsYW5kJ10gPSA2MDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsb3InXSA9IDYwMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGJsYm90aCddID0gMTA0MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Fycm93ZGJsbGVmdCddID0gOTg3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYmx1cCddID0gNjAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYmxyaWdodCddID0gOTg3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJyb3dkYmxkb3duJ10gPSA2MDM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb3plbmdlJ10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbmdsZWxlZnQnXSA9IDMyOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyc2FucyddID0gNzkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0c2FucyddID0gNzkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHJhZGVtYXJrc2FucyddID0gNzg2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA3MTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnR0cCddID0gMzg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0ZXgnXSA9IDM4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdGJ0J10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdHRwJ10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdGV4J10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdGJ0J10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnR0cCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0bWlkJ10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnRidCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VleCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW5nbGVyaWdodCddID0gMzI5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW50ZWdyYWwnXSA9IDI3NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ludGVncmFsdHAnXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ludGVncmFsZXgnXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ludGVncmFsYnQnXSA9IDY4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHR0cCddID0gMzg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodGV4J10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0YnQnXSA9IDM4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodHRwJ10gPSAzODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0cmlnaHRleCddID0gMzg0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0YnQnXSA9IDM4NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHR0cCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodG1pZCddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodGJ0J10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcHBsZSddID0gNzkwO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdFsnVGltZXMtUm9tYW4nXSA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzcGFjZSddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibCddID0gNDA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnVtYmVyc2lnbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG9sbGFyJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJjZW50J10gPSA4MzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbXBlcnNhbmQnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlcmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVubGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5yaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXN0ZXJpc2snXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BsdXMnXSA9IDU2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoeXBoZW4nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3plcm8nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHdvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZm91ciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZml2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2l4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZXZlbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWlnaHQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25pbmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbG9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZW1pY29sb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xlc3MnXSA9IDU2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VxdWFsJ10gPSA1NjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyJ10gPSA1NjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdWVzdGlvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXQnXSA9IDkyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0EnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0InXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0MnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0QnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0UnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0YnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0cnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0knXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0onXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0snXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0wnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ00nXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ04nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ08nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1AnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1EnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1InXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1MnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1QnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1UnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1YnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1cnXSA9IDk0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1knXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1onXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWljaXJjdW0nXSA9IDQ2OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlbGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYyddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaiddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnayddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnciddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncyddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0J10gPSA0ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYXInXSA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHQnXSA9IDQ4MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpdGlsZGUnXSA9IDU0MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbWRvd24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N0ZXJsaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmcmFjdGlvbiddID0gMTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWVuJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmbG9yaW4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlY3Rpb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2N1cnJlbmN5J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXNpbmdsZSddID0gMTgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxsZWZ0J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RsZWZ0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmknXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZsJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbmRhc2gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2dlciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyZGJsJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RjZW50ZXJlZCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyYWdyYXBoJ10gPSA0NTM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydidWxsZXQnXSA9IDM1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xiYXNlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGJhc2UnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJscmlnaHQnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdHJpZ2h0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbGxpcHNpcyddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcnRob3VzYW5kJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb25kb3duJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmF2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NpcmN1bWZsZXgnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpZXJlc2lzJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyaW5nJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjZWRpbGxhJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydodW5nYXJ1bWxhdXQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29nb25layddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Fyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtZGFzaCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMjc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRtYXNjdWxpbmUnXSA9IDMxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzaSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbHNsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydvc2xhc2gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29lJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnZXJtYW5kYmxzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VhY3V0ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWJyZXZlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1aHVuZ2FydW1sYXV0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlY2Fyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1lkaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGl2aWRlJ10gPSA1NjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FjaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhYWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VjaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5YWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Njb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXgnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VyaW5nJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXMnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FvZ29uZWsnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW9nb25layddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWRpZXJlc2lzJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY3JvYXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYWNjZW50J10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb3B5cmlnaHQnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VtYWNyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NjYXJvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJpbmcnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05jb21tYWFjY2VudCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGFjdXRlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZ3JhdmUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rjb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2FjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdGlsZGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0Vkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NlZGlsbGEnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG96ZW5nZSddID0gNDcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUmNhcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VjaXJjdW1mbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleCddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQW1hY3JvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmNhcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2VkaWxsYSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmRvdGFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGhvcm4nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09tYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2FjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkY2Fyb24nXSA9IDU4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VtYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VyaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FncmF2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWJyZXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdWx0aXBseSddID0gNTY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWFjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcnRpYWxkaWZmJ10gPSA0NzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05hY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZGllcmVzaXMnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VkaWVyZXNpcyddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2FjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VtYWNyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05jYXJvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWFjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzbWludXMnXSA9IDU2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Jyb2tlbmJhciddID0gMjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmVnaXN0ZXJlZCddID0gNzYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2JyZXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZG90YWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzdW1tYXRpb24nXSA9IDYwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VncmF2ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbWFjcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pjYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcmVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdGgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjZWRpbGxhJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsY29tbWFhY2NlbnQnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RjYXJvbiddID0gMzI2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW9nb25layddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVW9nb25layddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZGllcmVzaXMnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VncmF2ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemFjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydpb2dvbmVrJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29hY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW1hY3JvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2FjdXRlJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZGllcmVzaXMnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0RlbHRhJ10gPSA2MTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aG9ybiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHdvc3VwZXJpb3InXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09kaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2h1bmdhcnVtbGF1dCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRW9nb25layddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNyb2F0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXF1YXJ0ZXJzJ10gPSA3NTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2VkaWxsYSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNhcm9uJ10gPSAzNDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydLY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xhY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHJhZGVtYXJrJ10gPSA5ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lcXVhcnRlciddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09odW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RlZ3JlZSddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dyYXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VncmF2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbCddID0gNDUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ050aWxkZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3RpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjb21tYWFjY2VudCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBb2dvbmVrJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3RpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lvZ29uZWsnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDU2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjdW1mbGV4J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rjb21tYWFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gNTY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdXJvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lcy1Cb2xkJ10gPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3BhY2UnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmwnXSA9IDU1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ251bWJlcnNpZ24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyY2VudCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gOTMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1knXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1onXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYWNrc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNrZXRyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWljaXJjdW0nXSA9IDU4MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VuZGVyc2NvcmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlbGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYyddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnayddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnciddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncyddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VsZWZ0J10gPSAzOTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiYXInXSA9IDIyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlcmlnaHQnXSA9IDM5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpdGlsZGUnXSA9IDUyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbWRvd24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N0ZXJsaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmcmFjdGlvbiddID0gMTY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWVuJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmbG9yaW4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlY3Rpb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2N1cnJlbmN5J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXNpbmdsZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxsZWZ0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RsZWZ0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsc2luZ2xyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmknXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZsJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbmRhc2gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2dlciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyZGJsJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2RjZW50ZXJlZCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyYWdyYXBoJ10gPSA1NDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydidWxsZXQnXSA9IDM1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xiYXNlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGJhc2UnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJscmlnaHQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdHJpZ2h0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbGxpcHNpcyddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcnRob3VzYW5kJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb25kb3duJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmF2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWN1dGUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NpcmN1bWZsZXgnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RpbGRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyZXZlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RhY2NlbnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpZXJlc2lzJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyaW5nJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjZWRpbGxhJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydodW5nYXJ1bWxhdXQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29nb25layddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Fyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtZGFzaCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkZmVtaW5pbmUnXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xzbGFzaCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPRSddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29yZG1hc2N1bGluZSddID0gMzMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvdGxlc3NpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsc2xhc2gnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29zbGFzaCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2UnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dlcm1hbmRibHMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lkaWVyZXNpcyddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWFjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhYnJldmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VodW5nYXJ1bWxhdXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjYXJvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaXZpZGUnXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1lhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWNpcmN1bWZsZXgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWNpcmN1bWZsZXgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3lhY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NvbW1hYWNjZW50J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlY2lyY3VtZmxleCddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVXJpbmcnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VkaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW9nb25layddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1b2dvbmVrJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZGllcmVzaXMnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0Rjcm9hdCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWFhY2NlbnQnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvcHlyaWdodCddID0gNzQ3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRW1hY3JvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2Nhcm9uJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhcmluZyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmNvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FncmF2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNvbW1hYWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2F0aWxkZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWRvdGFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2Nhcm9uJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2VkaWxsYSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWFjdXRlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb3plbmdlJ10gPSA0OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0djb21tYWFjY2VudCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWNpcmN1bWZsZXgnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FjaXJjdW1mbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY2Fyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NjZWRpbGxhJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUaG9ybiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT21hY3JvbiddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUmFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RjYXJvbiddID0gNjcyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVW1hY3JvbiddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndXJpbmcnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlc3VwZXJpb3InXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09ncmF2ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBYnJldmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211bHRpcGx5J10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1YWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1RjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFydGlhbGRpZmYnXSA9IDQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3lkaWVyZXNpcyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmFjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpY2lyY3VtZmxleCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWNpcmN1bWZsZXgnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FkaWVyZXNpcyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWRpZXJlc2lzJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjYWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25hY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW1hY3JvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTmNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJYWN1dGUnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BsdXNtaW51cyddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJva2VuYmFyJ10gPSAyMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyZWdpc3RlcmVkJ10gPSA3NDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHYnJldmUnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lkb3RhY2NlbnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3N1bW1hdGlvbiddID0gNjAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWdyYXZlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29tYWNyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1phY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmNhcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydncmVhdGVyZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V0aCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2NlZGlsbGEnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjb21tYWFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNhcm9uJ10gPSA0MTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydlb2dvbmVrJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVb2dvbmVrJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FkaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWdyYXZlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6YWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lvZ29uZWsnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09hY3V0ZSddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2FjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhbWFjcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzYWN1dGUnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lkaWVyZXNpcyddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2NpcmN1bWZsZXgnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VncmF2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGVsdGEnXSA9IDYxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rob3JuJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d29zdXBlcmlvciddID0gMzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2RpZXJlc2lzJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWdyYXZlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvaHVuZ2FydW1sYXV0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFb2dvbmVrJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkY3JvYXQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlcXVhcnRlcnMnXSA9IDc1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NjZWRpbGxhJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsY2Fyb24nXSA9IDM5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0tjb21tYWFjY2VudCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGFjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0cmFkZW1hcmsnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmUnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lcXVhcnRlciddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09odW5nYXJ1bWxhdXQnXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RlZ3JlZSddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dyYXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VncmF2ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ050aWxkZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3RpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBb2dvbmVrJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3RpbGRlJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lvZ29uZWsnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjdW1mbGV4J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rjb21tYWFjY2VudCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY29tbWFhY2NlbnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdXJvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0WydUaW1lcy1Cb2xkSXRhbGljJ10gPSAoMCwgX3V0aWwuZ2V0TG9va3VwVGFibGVGYWN0b3J5KShmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3BhY2UnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V4Y2xhbSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmwnXSA9IDU1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ251bWJlcnNpZ24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RvbGxhciddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyY2VudCddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW1wZXJzYW5kJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbmxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmVucmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzdGVyaXNrJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYSddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaHlwaGVuJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJpb2QnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZXJvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3byddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZvdXInXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZpdmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NpeCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2V2ZW4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VpZ2h0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduaW5lJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VtaWNvbG9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlcXVhbCddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlciddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVlc3Rpb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2F0J10gPSA4MzI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydCJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydGJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydIJ10gPSA3Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydKJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydLJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydNJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydQJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydRJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydWJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydXJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydYJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0bGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYmFja3NsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFja2V0cmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FzY2lpY2lyY3VtJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bmRlcnNjb3JlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2InXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2MnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2QnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2UnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2YnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2cnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2gnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2onXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2snXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2wnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ20nXSA9IDc3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ28nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3AnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3EnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3InXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3MnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3QnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3UnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3YnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3cnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3knXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3onXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JyYWNlbGVmdCddID0gMzQ4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYmFyJ10gPSAyMjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZXJpZ2h0J10gPSAzNDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaXRpbGRlJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW1kb3duJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzdGVybGluZyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZnJhY3Rpb24nXSA9IDE2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3llbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmxvcmluJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzZWN0aW9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjdXJyZW5jeSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsbGVmdCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90bGVmdCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbHNpbmdsbGVmdCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbHNpbmdscmlnaHQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZpJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmbCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW5kYXNoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXInXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RhZ2dlcmRibCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kY2VudGVyZWQnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcmFncmFwaCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnVsbGV0J10gPSAzNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZXNpbmdsYmFzZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxiYXNlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibHJpZ2h0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydndWlsbGVtb3RyaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWxsaXBzaXMnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJ0aG91c2FuZCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uZG93biddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjaXJjdW1mbGV4J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aWxkZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWFjcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmV2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90YWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpcyddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmluZyddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VkaWxsYSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaHVuZ2FydW1sYXV0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ29uZWsnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Nhcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbWRhc2gnXSA9IDEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBRSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkZmVtaW5pbmUnXSA9IDI2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xzbGFzaCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3NsYXNoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPRSddID0gOTQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3JkbWFzY3VsaW5lJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90bGVzc2knXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3NsYXNoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2VybWFuZGJscyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRpZXJlc2lzJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlYWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FicmV2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWh1bmdhcnVtbGF1dCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNhcm9uJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZZGllcmVzaXMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RpdmlkZSddID0gNTcwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWWFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWFjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWFjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY29tbWFhY2NlbnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VjaXJjdW1mbGV4J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVcmluZyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWRpZXJlc2lzJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhb2dvbmVrJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VvZ29uZWsnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VkaWVyZXNpcyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNyb2F0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb21tYWFjY2VudCddID0gMjUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29weXJpZ2h0J10gPSA3NDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFbWFjcm9uJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2Fyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FyaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWdyYXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXRpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZG90YWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzY2Fyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjZWRpbGxhJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpYWN1dGUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xvemVuZ2UnXSA9IDQ5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2NvbW1hYWNjZW50J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1Y2lyY3VtZmxleCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWNpcmN1bWZsZXgnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FtYWNyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2NlZGlsbGEnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rob3JuJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSYWN1dGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1NhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNhcm9uJ10gPSA2MDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVbWFjcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1cmluZyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVzdXBlcmlvciddID0gMzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2dyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FicmV2ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXVsdGlwbHknXSA9IDU3MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJ0aWFsZGlmZiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsneWRpZXJlc2lzJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ljaXJjdW1mbGV4J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2lyY3VtZmxleCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWRpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZGllcmVzaXMnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NhY3V0ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmFjdXRlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1bWFjcm9uJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydOY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1c21pbnVzJ10gPSA1NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydicm9rZW5iYXInXSA9IDIyMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JlZ2lzdGVyZWQnXSA9IDc0NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0dicmV2ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWRvdGFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3VtbWF0aW9uJ10gPSA2MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFZ3JhdmUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3JhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb21hY3JvbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXJlcXVhbCddID0gNTQ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRXRoJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2VkaWxsYSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0Y2Fyb24nXSA9IDM2NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VvZ29uZWsnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VvZ29uZWsnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWRpZXJlc2lzJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZ3JhdmUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3phY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaW9nb25layddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2FjdXRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtYWNyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NhY3V0ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWRpZXJlc2lzJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPY2lyY3VtZmxleCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVWdyYXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEZWx0YSddID0gNjEyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhvcm4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3R3b3N1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZGllcmVzaXMnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ211J10gPSA1NzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZ3JhdmUnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29odW5nYXJ1bWxhdXQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Rjcm9hdCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGhyZWVxdWFydGVycyddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2NlZGlsbGEnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2xjYXJvbiddID0gMzgyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnS2NvbW1hYWNjZW50J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydMYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RyYWRlbWFyayddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Vkb3RhY2NlbnQnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lncmF2ZSddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW1hY3JvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVoYWxmJ10gPSA3NTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsZXNzZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29jaXJjdW1mbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudGlsZGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VodW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VhY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW1hY3JvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ2JyZXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbmVxdWFydGVyJ10gPSA3NTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Njb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT2h1bmdhcnVtbGF1dCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGVncmVlJ10gPSA0MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ3JhdmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWdyYXZlJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyYWRpY2FsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY2Fyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Jjb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTnRpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvdGlsZGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Jjb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTGNvbW1hYWNjZW50J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBdGlsZGUnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FvZ29uZWsnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FyaW5nJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPdGlsZGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3pkb3RhY2NlbnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSW9nb25layddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsna2NvbW1hYWNjZW50J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtaW51cyddID0gNjA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWNpcmN1bWZsZXgnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndGNvbW1hYWNjZW50J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydsb2dpY2Fsbm90J10gPSA2MDY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VkaWVyZXNpcyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbm90ZXF1YWwnXSA9IDU0OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2djb21tYWFjY2VudCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXRoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6Y2Fyb24nXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25jb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lc3VwZXJpb3InXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ltYWNyb24nXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0V1cm8nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRbJ1RpbWVzLUl0YWxpYyddID0gKDAsIF91dGlsLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NwYWNlJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydleGNsYW0nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsJ10gPSA0MjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydudW1iZXJzaWduJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb2xsYXInXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmNlbnQnXSA9IDgzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FtcGVyc2FuZCddID0gNzc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVyaWdodCddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGFyZW5sZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJlbnJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc3RlcmlzayddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGx1cyddID0gNjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29tbWEnXSA9IDI1MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2h5cGhlbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncGVyaW9kJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemVybyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0d28nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RocmVlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydmb3VyJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzaXgnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NldmVuJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlaWdodCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbmluZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY29sb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NlbWljb2xvbiddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzcyddID0gNjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXF1YWwnXSA9IDY3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dyZWF0ZXInXSA9IDY3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdCddID0gOTIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSCddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSyddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTSddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUyddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnViddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVyddID0gODMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWCddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldGxlZnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhY2tzbGFzaCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2tldHJpZ2h0J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydhc2NpaWNpcmN1bSddID0gNDIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW5kZXJzY29yZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVsZWZ0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydiJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydoJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydqJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydrJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0J10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd2J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd3J10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd4J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmFjZWxlZnQnXSA9IDQwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2JhciddID0gMjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYnJhY2VyaWdodCddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXNjaWl0aWxkZSddID0gNTQxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZXhjbGFtZG93biddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VudCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc3RlcmxpbmcnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ZyYWN0aW9uJ10gPSAxNjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZW4nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Zsb3JpbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2VjdGlvbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY3VycmVuY3knXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3Rlc2luZ2xlJ10gPSAyMTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydxdW90ZWRibGxlZnQnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxsZW1vdGxlZnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbGxlZnQnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2d1aWxzaW5nbHJpZ2h0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydmaSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZmwnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VuZGFzaCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGFnZ2VyJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkYWdnZXJkYmwnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BlcmlvZGNlbnRlcmVkJ10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwYXJhZ3JhcGgnXSA9IDUyMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2J1bGxldCddID0gMzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVzaW5nbGJhc2UnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1b3RlZGJsYmFzZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncXVvdGVkYmxyaWdodCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3VpbGxlbW90cmlnaHQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VsbGlwc2lzJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwZXJ0aG91c2FuZCddID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3F1ZXN0aW9uZG93biddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JhdmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjaXJjdW1mbGV4J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aWxkZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWFjcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydicmV2ZSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZG90YWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkaWVyZXNpcyddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmluZyddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2VkaWxsYSddID0gMzMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaHVuZ2FydW1sYXV0J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvZ29uZWsnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Nhcm9uJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlbWRhc2gnXSA9IDg4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FFJ10gPSA4ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRmZW1pbmluZSddID0gMjc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnTHNsYXNoJ10gPSA1NTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPc2xhc2gnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09FJ10gPSA5NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvcmRtYXNjdWxpbmUnXSA9IDMxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydkb3RsZXNzaSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbHNsYXNoJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydvc2xhc2gnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29lJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnZXJtYW5kYmxzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZGllcmVzaXMnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VhY3V0ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYWJyZXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1aHVuZ2FydW1sYXV0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlY2Fyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1lkaWVyZXNpcyddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGl2aWRlJ10gPSA2NzU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydZYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FjaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VjaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5YWN1dGUnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Njb21tYWFjY2VudCddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZWNpcmN1bWZsZXgnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VyaW5nJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVZGllcmVzaXMnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2FvZ29uZWsnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VhY3V0ZSddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndW9nb25layddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRWRpZXJlc2lzJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydEY3JvYXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NvbW1hYWNjZW50J10gPSAyNTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydjb3B5cmlnaHQnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VtYWNyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2NjYXJvbiddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYXJpbmcnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05jb21tYWFjY2VudCddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGFjdXRlJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZ3JhdmUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1Rjb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQ2FjdXRlJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhdGlsZGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0Vkb3RhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3NjYXJvbiddID0gMzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2NlZGlsbGEnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lhY3V0ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG96ZW5nZSddID0gNDcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnUmNhcm9uJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydHY29tbWFhY2NlbnQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VjaXJjdW1mbGV4J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhY2lyY3VtZmxleCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQW1hY3JvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmNhcm9uJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydjY2VkaWxsYSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnWmRvdGFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVGhvcm4nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09tYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1JhY3V0ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2FjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydkY2Fyb24nXSA9IDU0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1VtYWNyb24nXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VyaW5nJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0FncmF2ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWJyZXZlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydtdWx0aXBseSddID0gNjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndWFjdXRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydUY2Fyb24nXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3BhcnRpYWxkaWZmJ10gPSA0NzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd5ZGllcmVzaXMnXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05hY3V0ZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnaWNpcmN1bWZsZXgnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VjaXJjdW1mbGV4J10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VkaWVyZXNpcyddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnY2FjdXRlJ10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduYWN1dGUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VtYWNyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ05jYXJvbiddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnSWFjdXRlJ10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydwbHVzbWludXMnXSA9IDY3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2Jyb2tlbmJhciddID0gMjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmVnaXN0ZXJlZCddID0gNzYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnR2JyZXZlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZG90YWNjZW50J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzdW1tYXRpb24nXSA9IDYwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0VncmF2ZSddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFjdXRlJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvbWFjcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydaYWN1dGUnXSA9IDU1NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ1pjYXJvbiddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZ3JlYXRlcmVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdGgnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0NjZWRpbGxhJ10gPSA2Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydsY29tbWFhY2NlbnQnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3RjYXJvbiddID0gMzAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZW9nb25layddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnVW9nb25layddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQWFjdXRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBZGllcmVzaXMnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VncmF2ZSddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemFjdXRlJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wydpb2dvbmVrJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydPYWN1dGUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29hY3V0ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYW1hY3JvbiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnc2FjdXRlJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpZGllcmVzaXMnXSA9IDI3ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09jaXJjdW1mbGV4J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVZ3JhdmUnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0RlbHRhJ10gPSA2MTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aG9ybiddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHdvc3VwZXJpb3InXSA9IDMwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09kaWVyZXNpcyddID0gNzIyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbXUnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2lncmF2ZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2h1bmdhcnVtbGF1dCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRW9nb25layddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnZGNyb2F0J10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd0aHJlZXF1YXJ0ZXJzJ10gPSA3NTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY2VkaWxsYSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGNhcm9uJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydLY29tbWFhY2NlbnQnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xhY3V0ZSddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsndHJhZGVtYXJrJ10gPSA5ODA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydlZG90YWNjZW50J10gPSA0NDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydJZ3JhdmUnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ltYWNyb24nXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjYXJvbiddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25laGFsZiddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbGVzc2VxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydvY2lyY3VtZmxleCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbnRpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydVaHVuZ2FydW1sYXV0J10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFYWN1dGUnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2VtYWNyb24nXSA9IDQ0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2dicmV2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb25lcXVhcnRlciddID0gNzUwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnU2Nhcm9uJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydTY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ09odW5nYXJ1bWxhdXQnXSA9IDcyMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2RlZ3JlZSddID0gNDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2dyYXZlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydDY2Fyb24nXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3VncmF2ZSddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsncmFkaWNhbCddID0gNDUzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnRGNhcm9uJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydyY29tbWFhY2NlbnQnXSA9IDM4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ050aWxkZSddID0gNjY3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb3RpbGRlJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydSY29tbWFhY2NlbnQnXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0xjb21tYWFjY2VudCddID0gNTU2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnQXRpbGRlJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBb2dvbmVrJ10gPSA2MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydBcmluZyddID0gNjExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnT3RpbGRlJ10gPSA3MjI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd6ZG90YWNjZW50J10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFY2Fyb24nXSA9IDYxMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0lvZ29uZWsnXSA9IDMzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2tjb21tYWFjY2VudCddID0gNDQ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbWludXMnXSA9IDY3NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ0ljaXJjdW1mbGV4J10gPSAzMzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY2Fyb24nXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ3Rjb21tYWFjY2VudCddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnbG9naWNhbG5vdCddID0gNjc1O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnb2RpZXJlc2lzJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0Wyd1ZGllcmVzaXMnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ25vdGVxdWFsJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydnY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2V0aCddID0gNTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnemNhcm9uJ10gPSAzODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WyduY29tbWFhY2NlbnQnXSA9IDUwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ29uZXN1cGVyaW9yJ10gPSAzMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydpbWFjcm9uJ10gPSAyNzg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydFdXJvJ10gPSA1MDA7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0WydaYXBmRGluZ2JhdHMnXSA9ICgwLCBfdXRpbC5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydzcGFjZSddID0gMjc4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTEnXSA9IDk3NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyJ10gPSA5NjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjAyJ10gPSA5NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMyddID0gOTgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQnXSA9IDcxOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E1J10gPSA3ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTE5J10gPSA3OTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTE4J10gPSA3OTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTE3J10gPSA2OTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTEnXSA9IDk2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMiddID0gOTM5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTEzJ10gPSA1NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTQnXSA9IDg1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNSddID0gOTExO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTE2J10gPSA5MzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTA1J10gPSA5MTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTcnXSA9IDk0NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExOCddID0gOTc0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTE5J10gPSA3NTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjAnXSA9IDg0NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyMSddID0gNzYyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTIyJ10gPSA3NjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjMnXSA9IDU3MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyNCddID0gNjc3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTI1J10gPSA3NjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjYnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyNyddID0gNzU5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTI4J10gPSA3NTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNiddID0gNDk0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTcnXSA9IDU1MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4J10gPSA1Mzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOSddID0gNTc3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTEwJ10gPSA2OTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjknXSA9IDc4NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EzMCddID0gNzg4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTMxJ10gPSA3ODg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMzInXSA9IDc5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EzMyddID0gNzkzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTM0J10gPSA3OTQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMzUnXSA9IDgxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EzNiddID0gODIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTM3J10gPSA3ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMzgnXSA9IDg0MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EzOSddID0gODIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQwJ10gPSA4MzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNDEnXSA9IDgxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E0MiddID0gODMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQzJ10gPSA5MjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNDQnXSA9IDc0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E0NSddID0gNzIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQ2J10gPSA3NDk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNDcnXSA9IDc5MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E0OCddID0gNzkyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTQ5J10gPSA2OTU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNTAnXSA9IDc3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E1MSddID0gNzY4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTUyJ10gPSA3OTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNTMnXSA9IDc1OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E1NCddID0gNzA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTU1J10gPSA3MDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNTYnXSA9IDY4MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E1NyddID0gNzAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTU4J10gPSA4MjY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNTknXSA9IDgxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E2MCddID0gNzg5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTYxJ10gPSA3ODk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNjInXSA9IDcwNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E2MyddID0gNjg3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTY0J10gPSA2OTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNjUnXSA9IDY4OTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E2NiddID0gNzg2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTY3J10gPSA3ODc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNjgnXSA9IDcxMztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E2OSddID0gNzkxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTcwJ10gPSA3ODU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNzEnXSA9IDc5MTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E3MiddID0gODczO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTczJ10gPSA3NjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNzQnXSA9IDc2MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyMDMnXSA9IDc2MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E3NSddID0gNzU5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTIwNCddID0gNzU5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTc2J10gPSA4OTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhNzcnXSA9IDg5MjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E3OCddID0gNzg4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTc5J10gPSA3ODQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhODEnXSA9IDQzODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4MiddID0gMTM4O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTgzJ10gPSAyNzc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhODQnXSA9IDQxNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E5NyddID0gMzkyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTk4J10gPSAzOTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOTknXSA9IDY2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDAnXSA9IDY2ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4OSddID0gMzkwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTkwJ10gPSAzOTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOTMnXSA9IDMxNztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E5NCddID0gMzE3O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTkxJ10gPSAyNzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOTInXSA9IDI3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2EyMDUnXSA9IDUwOTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4NSddID0gNTA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTIwNiddID0gNDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTg2J10gPSA0MTA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhODcnXSA9IDIzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2E4OCddID0gMjM0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdFsnYTk1J10gPSAzMzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhOTYnXSA9IDMzNDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDEnXSA9IDczMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDInXSA9IDU0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDMnXSA9IDU0NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDQnXSA9IDkxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDYnXSA9IDY2NztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDcnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDgnXSA9IDc2MDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMTInXSA9IDc3NjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMTEnXSA9IDU5NTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMTAnXSA9IDY5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMDknXSA9IDYyNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjAnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjEnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjInXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjMnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjQnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjUnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjYnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjcnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjgnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMjknXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzAnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzEnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzInXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzMnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzQnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzUnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzYnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzcnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzgnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExMzknXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDAnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDEnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDInXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDMnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDQnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDUnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDYnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDcnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDgnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNDknXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTAnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTEnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTInXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTMnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTQnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTUnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTYnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTcnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTgnXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNTknXSA9IDc4ODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNjAnXSA9IDg5NDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNjEnXSA9IDgzODtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRbJ2ExNjMnXSA9IDEwMTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY0J10gPSA0NTg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk2J10gPSA3NDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY1J10gPSA5MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTkyJ10gPSA3NDg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY2J10gPSA5MTg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY3J10gPSA5Mjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY4J10gPSA5Mjg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTY5J10gPSA5Mjg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTcwJ10gPSA4MzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTcxJ10gPSA4NzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTcyJ10gPSA4Mjg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTczJ10gPSA5MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTYyJ10gPSA5MjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc0J10gPSA5MTc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc1J10gPSA5MzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc2J10gPSA5MzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc3J10gPSA0NjM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc4J10gPSA4ODM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTc5J10gPSA4MzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTkzJ10gPSA4MzY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTgwJ10gPSA4Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk5J10gPSA4Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTgxJ10gPSA2OTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjAwJ10gPSA2OTY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTgyJ10gPSA4NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMjAxJ10gPSA4NzQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTgzJ10gPSA3NjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg0J10gPSA5NDY7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk3J10gPSA3NzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg1J10gPSA4NjU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk0J10gPSA3NzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk4J10gPSA4ODg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg2J10gPSA5Njc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTk1J10gPSA4ODg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg3J10gPSA4MzE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg4J10gPSA4NzM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTg5J10gPSA5Mjc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTkwJ10gPSA5NzA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0WydhMTkxJ10gPSA5MTg7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0TWV0cmljcyA9IGdldE1ldHJpY3M7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNQREZGdW5jdGlvbiA9IGlzUERGRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Qb3N0U2NyaXB0Q29tcGlsZXIgPSBleHBvcnRzLlBvc3RTY3JpcHRFdmFsdWF0b3IgPSBleHBvcnRzLlBERkZ1bmN0aW9uRmFjdG9yeSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3BzX3BhcnNlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTg2KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBJc0V2YWxTdXBwb3J0ZWRDYWNoZWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAndmFsdWUnLCAoMCwgX3V0aWwuaXNFdmFsU3VwcG9ydGVkKSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBQREZGdW5jdGlvbkZhY3RvcnkgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkZ1bmN0aW9uRmFjdG9yeShfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkaXNFdmFsU3VwcG9ydGVkID0gX3JlZi5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCA9IF9yZWYkaXNFdmFsU3VwcG9ydGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRpc0V2YWxTdXBwb3J0ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGRnVuY3Rpb25GYWN0b3J5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueHJlZiA9IHhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQgIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUERGRnVuY3Rpb25GYWN0b3J5LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjcmVhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZGdW5jdGlvbi5wYXJzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHRoaXMuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IGZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlRnJvbUFycmF5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUZyb21BcnJheShmbk9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGRnVuY3Rpb24ucGFyc2VBcnJheSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB0aGlzLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHRoaXMuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5PYmo6IGZuT2JqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZGdW5jdGlvbkZhY3RvcnkgPSBQREZGdW5jdGlvbkZhY3Rvcnk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b051bWJlckFycmF5KGFycikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gYXJyLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFycltpXSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtfaV0gPSArYXJyW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRnVuY3Rpb24gPSBmdW5jdGlvbiBQREZGdW5jdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDT05TVFJVQ1RfU0FNUExFRCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDT05TVFJVQ1RfSU5URVJQT0xBVEVEID0gMjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENPTlNUUlVDVF9TVElDSEVEID0gMztcbiAgICAgICAgICAgICAgICAgICAgdmFyIENPTlNUUlVDVF9QT1NUU0NSSVBUID0gNDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNhbXBsZUFycmF5OiBmdW5jdGlvbiBnZXRTYW1wbGVBcnJheShzaXplLCBvdXRwdXRTaXplLCBicHMsIHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAqPSBzaXplW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCAqPSBvdXRwdXRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShsZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlU2l6ZSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGVCdWYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzYW1wbGVNdWwgPSAxLjAgLyAoTWF0aC5wb3coMi4wLCBicHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ5dGVzID0gc3RyZWFtLmdldEJ5dGVzKChsZW5ndGggKiBicHMgKyA3KSAvIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJJZHggPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb2RlU2l6ZSA8IGJwcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZUJ1ZiA8PD0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCdWYgfD0gc3RyQnl0ZXNbc3RySWR4KytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZVNpemUgKz0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVTaXplIC09IGJwcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSAoY29kZUJ1ZiA+PiBjb2RlU2l6ZSkgKiBzYW1wbGVNdWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVCdWYgJj0gKDEgPDwgY29kZVNpemUpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SVI6IGZ1bmN0aW9uIGdldElSKF9yZWYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmMi54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMi5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3JlZjIuZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBmbi5kaWN0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkaWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QgPSBmbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZXMgPSBbdGhpcy5jb25zdHJ1Y3RTYW1wbGVkLCBudWxsLCB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZCwgdGhpcy5jb25zdHJ1Y3RTdGljaGVkLCB0aGlzLmNvbnN0cnVjdFBvc3RTY3JpcHRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlTnVtID0gZGljdC5nZXQoJ0Z1bmN0aW9uVHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlRm4gPSB0eXBlc1t0eXBlTnVtXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVGbi5jYWxsKHRoaXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuOiBmbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdDogZGljdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21JUjogZnVuY3Rpb24gZnJvbUlSKF9yZWYzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmMy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMy5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSID0gX3JlZjMuSVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBJUlswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENPTlNUUlVDVF9TQU1QTEVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZEZyb21JUih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUjogSVJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09OU1RSVUNUX0lOVEVSUE9MQVRFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZEZyb21JUih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUjogSVJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ09OU1RSVUNUX1NUSUNIRUQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdGljaGVkRnJvbUlSKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB4cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSOiBJUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdFBvc3RTY3JpcHRGcm9tSVIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWY6IHhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVI6IElSXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2U6IGZ1bmN0aW9uIHBhcnNlKF9yZWY0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmNC54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmNC5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuID0gX3JlZjQuZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIElSID0gdGhpcy5nZXRJUih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWY6IHhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogZm5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mcm9tSVIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB4cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IGlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVI6IElSXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VBcnJheTogZnVuY3Rpb24gcGFyc2VBcnJheShfcmVmNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4cmVmID0gX3JlZjUueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkID0gX3JlZjUuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbk9iaiA9IF9yZWY1LmZuT2JqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGZuT2JqKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB4cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFdmFsU3VwcG9ydGVkOiBpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogZm5PYmpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGZuT2JqLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheS5wdXNoKHRoaXMucGFyc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IHhyZWYuZmV0Y2hJZlJlZihmbk9ialtqXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZm5BcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbkFycmF5W2ldKHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0ICsgaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdFNhbXBsZWQ6IGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWQoX3JlZjYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWY2LnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCA9IF9yZWY2LmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBfcmVmNi5mbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF9yZWY2LmRpY3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0b011bHRpQXJyYXkoYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dExlbmd0aCA9IGFyci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0TGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dFtpbmRleF0gPSBbYXJyW2ldLCBhcnJbaSArIDFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsraW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ0RvbWFpbicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ1JhbmdlJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb21haW4gfHwgIXJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTm8gZG9tYWluIG9yIHJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXRTaXplID0gcmFuZ2UubGVuZ3RoIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4gPSB0b011bHRpQXJyYXkoZG9tYWluKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZSA9IHRvTXVsdGlBcnJheShyYW5nZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ1NpemUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJwcyA9IGRpY3QuZ2V0KCdCaXRzUGVyU2FtcGxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyID0gZGljdC5nZXQoJ09yZGVyJykgfHwgMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcmRlciAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ05vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiAnICsgb3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGUgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ0VuY29kZScpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZW5jb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXRTaXplOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZS5wdXNoKFswLCBzaXplW2ldIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlID0gdG9NdWx0aUFycmF5KGVuY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheSgnRGVjb2RlJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkZWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlID0gcmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlID0gdG9NdWx0aUFycmF5KGRlY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNhbXBsZXMgPSB0aGlzLmdldFNhbXBsZUFycmF5KHNpemUsIG91dHB1dFNpemUsIGJwcywgZm4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbQ09OU1RSVUNUX1NBTVBMRUQsIGlucHV0U2l6ZSwgZG9tYWluLCBlbmNvZGUsIGRlY29kZSwgc2FtcGxlcywgc2l6ZSwgb3V0cHV0U2l6ZSwgTWF0aC5wb3coMiwgYnBzKSAtIDEsIHJhbmdlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RTYW1wbGVkRnJvbUlSOiBmdW5jdGlvbiBjb25zdHJ1Y3RTYW1wbGVkRnJvbUlSKF9yZWY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmNy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmNy5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSID0gX3JlZjcuSVI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnRlcnBvbGF0ZSh4LCB4bWluLCB4bWF4LCB5bWluLCB5bWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB5bWluICsgKHggLSB4bWluKSAqICgoeW1heCAtIHltaW4pIC8gKHhtYXggLSB4bWluKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSBJUlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvbWFpbiA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5jb2RlID0gSVJbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWNvZGUgPSBJUls0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNhbXBsZXMgPSBJUls1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSBJUls2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBJUls3XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gSVJbOV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdWJlVmVydGljZXMgPSAxIDw8IG07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdWJlTiA9IG5ldyBGbG9hdDY0QXJyYXkoY3ViZVZlcnRpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1YmVWZXJ0ZXggPSBuZXcgVWludDMyQXJyYXkoY3ViZVZlcnRpY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1YmVWZXJ0aWNlczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJlTltqXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IG4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW5fMmkgPSBkb21haW5baV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tYWluXzJpXzEgPSBkb21haW5baV1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGkgPSBNYXRoLm1pbihNYXRoLm1heChzcmNbc3JjT2Zmc2V0ICsgaV0sIGRvbWFpbl8yaSksIGRvbWFpbl8yaV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gaW50ZXJwb2xhdGUoeGksIGRvbWFpbl8yaSwgZG9tYWluXzJpXzEsIGVuY29kZVtpXVswXSwgZW5jb2RlW2ldWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaXplX2kgPSBzaXplW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IE1hdGgubWluKE1hdGgubWF4KGUsIDApLCBzaXplX2kgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlMCA9IGUgPCBzaXplX2kgLSAxID8gTWF0aC5mbG9vcihlKSA6IGUgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4wID0gZTAgKyAxIC0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuMSA9IGUgLSBlMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQwID0gZTAgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldDEgPSBvZmZzZXQwICsgaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGN1YmVWZXJ0aWNlczsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogJiBwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ViZU5bal0gKj0gbjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1YmVWZXJ0ZXhbal0gKz0gb2Zmc2V0MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWJlTltqXSAqPSBuMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ViZVZlcnRleFtqXSArPSBvZmZzZXQwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayAqPSBzaXplX2k7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPDw9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmogPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3ViZVZlcnRpY2VzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaiArPSBzYW1wbGVzW2N1YmVWZXJ0ZXhbaV0gKyBqXSAqIGN1YmVOW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaiA9IGludGVycG9sYXRlKHJqLCAwLCAxLCBkZWNvZGVbal1bMF0sIGRlY29kZVtqXVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RPZmZzZXQgKyBqXSA9IE1hdGgubWluKE1hdGgubWF4KHJqLCByYW5nZVtqXVswXSksIHJhbmdlW2pdWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0SW50ZXJwb2xhdGVkOiBmdW5jdGlvbiBjb25zdHJ1Y3RJbnRlcnBvbGF0ZWQoX3JlZjgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWY4LnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZCA9IF9yZWY4LmlzRXZhbFN1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm4gPSBfcmVmOC5mbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF9yZWY4LmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMwID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCdDMCcpKSB8fCBbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMxID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCdDMScpKSB8fCBbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSBkaWN0LmdldCgnTicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBjMC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZi5wdXNoKGMxW2ldIC0gYzBbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbQ09OU1RSVUNUX0lOVEVSUE9MQVRFRCwgYzAsIGRpZmYsIG5dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdEludGVycG9sYXRlZEZyb21JUjogZnVuY3Rpb24gY29uc3RydWN0SW50ZXJwb2xhdGVkRnJvbUlSKF9yZWY5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmOS54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmOS5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSID0gX3JlZjkuSVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMwID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpZmYgPSBJUlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9IElSWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBkaWZmLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0SW50ZXJwb2xhdGVkRnJvbUlSUmVzdWx0KHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gbiA9PT0gMSA/IHNyY1tzcmNPZmZzZXRdIDogTWF0aC5wb3coc3JjW3NyY09mZnNldF0sIG4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdE9mZnNldCArIGpdID0gYzBbal0gKyB4ICogZGlmZltqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0U3RpY2hlZDogZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZChfcmVmMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWYxMC54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMTAuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF9yZWYxMC5mbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF9yZWYxMC5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ0RvbWFpbicpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9tYWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignTm8gZG9tYWluJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggLyAyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0U2l6ZSAhPT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ0JhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5SZWZzID0gZGljdC5nZXQoJ0Z1bmN0aW9ucycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbnMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGZuUmVmcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZucy5wdXNoKHRoaXMucGFyc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRXZhbFN1cHBvcnRlZDogaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm46IHhyZWYuZmV0Y2hJZlJlZihmblJlZnNbaV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm91bmRzID0gdG9OdW1iZXJBcnJheShkaWN0LmdldEFycmF5KCdCb3VuZHMnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kZSA9IHRvTnVtYmVyQXJyYXkoZGljdC5nZXRBcnJheSgnRW5jb2RlJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbQ09OU1RSVUNUX1NUSUNIRUQsIGRvbWFpbiwgYm91bmRzLCBlbmNvZGUsIGZuc107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0U3RpY2hlZEZyb21JUjogZnVuY3Rpb24gY29uc3RydWN0U3RpY2hlZEZyb21JUihfcmVmMTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWYxMS54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMTEuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUiA9IF9yZWYxMS5JUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tYWluID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvdW5kcyA9IElSWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGUgPSBJUlszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5zID0gSVJbNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcEJ1ZiA9IG5ldyBGbG9hdDMyQXJyYXkoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFN0aWNoZWRGcm9tSVJSZXN1bHQoc3JjLCBzcmNPZmZzZXQsIGRlc3QsIGRlc3RPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXAgPSBmdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRnJvbUlSQ2xpcCh2LCBtaW4sIG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPiBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ID0gbWF4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2IDwgbWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiA9IG1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBjbGlwKHNyY1tzcmNPZmZzZXRdLCBkb21haW5bMF0sIGRvbWFpblsxXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYm91bmRzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2IDwgYm91bmRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG1pbiA9IGRvbWFpblswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRtaW4gPSBib3VuZHNbaSAtIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRtYXggPSBkb21haW5bMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCBib3VuZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkbWF4ID0gYm91bmRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJtaW4gPSBlbmNvZGVbMiAqIGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm1heCA9IGVuY29kZVsyICogaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBCdWZbMF0gPSBkbWluID09PSBkbWF4ID8gcm1pbiA6IHJtaW4gKyAodiAtIGRtaW4pICogKHJtYXggLSBybWluKSAvIChkbWF4IC0gZG1pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuc1tpXSh0bXBCdWYsIDAsIGRlc3QsIGRlc3RPZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0UG9zdFNjcmlwdDogZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdChfcmVmMTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWYxMi54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMTIuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IF9yZWYxMi5mbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCA9IF9yZWYxMi5kaWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ0RvbWFpbicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSB0b051bWJlckFycmF5KGRpY3QuZ2V0QXJyYXkoJ1JhbmdlJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb21haW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKCdObyBkb21haW4uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ05vIHJhbmdlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXhlciA9IG5ldyBfcHNfcGFyc2VyLlBvc3RTY3JpcHRMZXhlcihmbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlciA9IG5ldyBfcHNfcGFyc2VyLlBvc3RTY3JpcHRQYXJzZXIobGV4ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0gcGFyc2VyLnBhcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtDT05TVFJVQ1RfUE9TVFNDUklQVCwgZG9tYWluLCByYW5nZSwgY29kZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUjogZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUihfcmVmMTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHJlZiA9IF9yZWYxMy54cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMTMuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUiA9IF9yZWYxMy5JUjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tYWluID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlID0gSVJbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvZGUgPSBJUlszXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0V2YWxTdXBwb3J0ZWQgJiYgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21waWxlZCA9IG5ldyBQb3N0U2NyaXB0Q29tcGlsZXIoKS5jb21waWxlKGNvZGUsIGRvbWFpbiwgcmFuZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21waWxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbignc3JjJywgJ3NyY09mZnNldCcsICdkZXN0JywgJ2Rlc3RPZmZzZXQnLCBjb21waWxlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1VuYWJsZSB0byBjb21waWxlIFBTIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bU91dHB1dHMgPSByYW5nZS5sZW5ndGggPj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtSW5wdXRzID0gZG9tYWluLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldmFsdWF0b3IgPSBuZXcgUG9zdFNjcmlwdEV2YWx1YXRvcihjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBNQVhfQ0FDSEVfU0laRSA9IDIwNDggKiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZV9hdmFpbGFibGUgPSBNQVhfQ0FDSEVfU0laRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wQnVmID0gbmV3IEZsb2F0MzJBcnJheShudW1JbnB1dHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RQb3N0U2NyaXB0RnJvbUlSUmVzdWx0KHNyYywgc3JjT2Zmc2V0LCBkZXN0LCBkZXN0T2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5wdXQgPSB0bXBCdWY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bUlucHV0czsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNyY1tzcmNPZmZzZXQgKyBpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0W2ldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgKz0gdmFsdWUgKyAnXyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGVkVmFsdWUgPSBjYWNoZVtrZXldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0LnNldChjYWNoZWRWYWx1ZSwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0cHV0ID0gbmV3IEZsb2F0MzJBcnJheShudW1PdXRwdXRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gZXZhbHVhdG9yLmV4ZWN1dGUoaW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhY2tJbmRleCA9IHN0YWNrLmxlbmd0aCAtIG51bU91dHB1dHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bU91dHB1dHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdGFja1tzdGFja0luZGV4ICsgaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm91bmQgPSByYW5nZVtpICogMl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IGJvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmQgPSByYW5nZVtpICogMiArIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID4gYm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBib3VuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlX2F2YWlsYWJsZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX2F2YWlsYWJsZS0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVba2V5XSA9IG91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KG91dHB1dCwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1BERkZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuRGljdDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoX3R5cGVvZih2KSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNEaWN0KSh2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm5EaWN0ID0gdjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNTdHJlYW0pKHYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbkRpY3QgPSB2LmRpY3Q7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5EaWN0LmhhcygnRnVuY3Rpb25UeXBlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFBvc3RTY3JpcHRTdGFjayA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNQVhfU1RBQ0tfU0laRSA9IDEwMDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2soaW5pdGlhbFN0YWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrID0gIWluaXRpYWxTdGFjayA/IFtdIDogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaW5pdGlhbFN0YWNrLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFBvc3RTY3JpcHRTdGFjay5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdXNoOiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfcHVzaCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YWNrLmxlbmd0aCA+PSBNQVhfU1RBQ0tfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3A6IGZ1bmN0aW9uIFBvc3RTY3JpcHRTdGFja19wb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoIDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIHVuZGVyZmxvdy4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5OiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfY29weShuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoICsgbiA+PSBNQVhfU1RBQ0tfU0laRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Bvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFjay5sZW5ndGggLSBuLCBqID0gbiAtIDE7IGogPj0gMDsgai0tLCBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChzdGFja1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfaW5kZXgobikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gbiAtIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xsOiBmdW5jdGlvbiBQb3N0U2NyaXB0U3RhY2tfcm9sbChuLCBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5zdGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IHN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBzdGFjay5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbCArIChwIC0gTWF0aC5mbG9vcihwIC8gbikgKiBuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGwsIGogPSByOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHN0YWNrW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tpXSA9IHN0YWNrW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tqXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gbCwgaiA9IGMgLSAxOyBpIDwgajsgaSsrLCBqLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IHN0YWNrW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tpXSA9IHN0YWNrW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tqXSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gYywgaiA9IHI7IGkgPCBqOyBpKyssIGotLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gc3RhY2tbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW2ldID0gc3RhY2tbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW2pdID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3N0U2NyaXB0U3RhY2s7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvc3RTY3JpcHRFdmFsdWF0b3IgPSBmdW5jdGlvbiBQb3N0U2NyaXB0RXZhbHVhdG9yQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9zdFNjcmlwdEV2YWx1YXRvcihvcGVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzID0gb3BlcmF0b3JzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUG9zdFNjcmlwdEV2YWx1YXRvci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlOiBmdW5jdGlvbiBQb3N0U2NyaXB0RXZhbHVhdG9yX2V4ZWN1dGUoaW5pdGlhbFN0YWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YWNrID0gbmV3IFBvc3RTY3JpcHRTdGFjayhpbml0aWFsU3RhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudGVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3JzID0gdGhpcy5vcGVyYXRvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IG9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yLCBhLCBiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IgPSBvcGVyYXRvcnNbY291bnRlcisrXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9wZXJhdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChvcGVyYXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3BlcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2p6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXIgPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRlciA9IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Ficyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5hYnMoYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhICsgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNCb29sKShhKSAmJiAoMCwgX3V0aWwuaXNCb29sKShiKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgJiYgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhICYgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F0YW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguYXRhbihhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2JpdHNoaWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSA8PCBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgPj4gYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NlaWxpbmcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY2VpbChhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvcHknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jb3B5KGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjb3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguY29zKGEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnY3ZpJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCkgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2N2cic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgLyBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZHVwJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5jb3B5KDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlcSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgPT09IGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdleGNoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yb2xsKDIsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdleHAnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnBvdyhhLCBiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZhbHNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZmxvb3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGguZmxvb3IoYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgPj0gYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSA+IGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpZGl2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAvIGIgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaW5kZXgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5pbmRleChhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhIDw9IGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5sb2coYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKE1hdGgubG9nKGEpIC8gTWF0aC5MTjEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhIDwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgJSBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbXVsJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSAqIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgIT09IGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICduZWcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKC1hKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbm90JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkoYSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCghYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh+YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ29yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc0Jvb2wpKGEpICYmICgwLCBfdXRpbC5pc0Jvb2wpKGIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYSB8fCBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgfCBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncG9wJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncm9sbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5yb2xsKGEsIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyb3VuZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5yb3VuZChhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Npbic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goTWF0aC5zaW4oYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzcXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChNYXRoLnNxcnQoYSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzdWInOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhIC0gYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RydWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RydW5jYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IGEgPCAwID8gTWF0aC5jZWlsKGEpIDogTWF0aC5mbG9vcihhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd4b3InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzQm9vbCkoYSkgJiYgKDAsIF91dGlsLmlzQm9vbCkoYikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhICE9PSBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGEgXiBiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbmtub3duIG9wZXJhdG9yIFwiLmNvbmNhdChvcGVyYXRvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YWNrLnN0YWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdEV2YWx1YXRvcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBvc3RTY3JpcHRFdmFsdWF0b3IgPSBQb3N0U2NyaXB0RXZhbHVhdG9yO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvc3RTY3JpcHRDb21waWxlciA9IGZ1bmN0aW9uIFBvc3RTY3JpcHRDb21waWxlckNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdE5vZGUodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEFzdE5vZGUucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ2Fic3RyYWN0IG1ldGhvZCcpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdEFyZ3VtZW50KGluZGV4LCBtaW4sIG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXN0Tm9kZS5jYWxsKHRoaXMsICdhcmdzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gbWF4O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0QXJndW1lbnQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0QXJndW1lbnQucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRBcmd1bWVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc3RMaXRlcmFsKG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXN0Tm9kZS5jYWxsKHRoaXMsICdsaXRlcmFsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm51bWJlciA9IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBc3RMaXRlcmFsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQXN0Tm9kZS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIEFzdExpdGVyYWwucHJvdG90eXBlLnZpc2l0ID0gZnVuY3Rpb24gKHZpc2l0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IudmlzaXRMaXRlcmFsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdEJpbmFyeU9wZXJhdGlvbihvcCwgYXJnMSwgYXJnMiwgbWluLCBtYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFzdE5vZGUuY2FsbCh0aGlzLCAnYmluYXJ5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wID0gb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZzEgPSBhcmcxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmcyID0gYXJnMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBc3RCaW5hcnlPcGVyYXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0QmluYXJ5T3BlcmF0aW9uLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0QmluYXJ5T3BlcmF0aW9uKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdE1pbihhcmcsIG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXN0Tm9kZS5jYWxsKHRoaXMsICdtYXgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnID0gYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5taW4gPSBhcmcubWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBc3RNaW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBc3ROb2RlLnByb3RvdHlwZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0TWluLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uICh2aXNpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLnZpc2l0TWluKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdFZhcmlhYmxlKGluZGV4LCBtaW4sIG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQXN0Tm9kZS5jYWxsKHRoaXMsICd2YXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gbWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXggPSBtYXg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBBc3RWYXJpYWJsZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFzdE5vZGUucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICBBc3RWYXJpYWJsZS5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAodmlzaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFzdFZhcmlhYmxlRGVmaW5pdGlvbih2YXJpYWJsZSwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBc3ROb2RlLmNhbGwodGhpcywgJ2RlZmluaXRpb24nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFyaWFibGUgPSB2YXJpYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXJnID0gYXJnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQXN0VmFyaWFibGVEZWZpbml0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQXN0Tm9kZS5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgIEFzdFZhcmlhYmxlRGVmaW5pdGlvbi5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbiAodmlzaXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci52aXNpdFZhcmlhYmxlRGVmaW5pdGlvbih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRBcmd1bWVudDogZnVuY3Rpb24gdmlzaXRBcmd1bWVudChhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJ01hdGgubWF4KCcsIGFyZy5taW4sICcsIE1hdGgubWluKCcsIGFyZy5tYXgsICcsIHNyY1tzcmNPZmZzZXQgKyAnLCBhcmcuaW5kZXgsICddKSknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpdFZhcmlhYmxlOiBmdW5jdGlvbiB2aXNpdFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5wdXNoKCd2JywgdmFyaWFibGUuaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0TGl0ZXJhbDogZnVuY3Rpb24gdmlzaXRMaXRlcmFsKGxpdGVyYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2gobGl0ZXJhbC5udW1iZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0QmluYXJ5T3BlcmF0aW9uOiBmdW5jdGlvbiB2aXNpdEJpbmFyeU9wZXJhdGlvbihvcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJygnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uYXJnMS52aXNpdCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJyAnLCBvcGVyYXRpb24ub3AsICcgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmFyZzIudmlzaXQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5wdXNoKCcpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRWYXJpYWJsZURlZmluaXRpb246IGZ1bmN0aW9uIHZpc2l0VmFyaWFibGVEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJ3ZhciAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9uLnZhcmlhYmxlLnZpc2l0KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFydHMucHVzaCgnID0gJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi5hcmcudmlzaXQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJ0cy5wdXNoKCc7Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRNaW46IGZ1bmN0aW9uIHZpc2l0TWluKG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFydHMucHVzaCgnTWF0aC5taW4oJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4LmFyZy52aXNpdCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnRzLnB1c2goJywgJywgbWF4Lm1heCwgJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFydHMuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRBZGRPcGVyYXRpb24obnVtMSwgbnVtMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bTIudHlwZSA9PT0gJ2xpdGVyYWwnICYmIG51bTIubnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0xLnR5cGUgPT09ICdsaXRlcmFsJyAmJiBudW0xLm51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW0yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMi50eXBlID09PSAnbGl0ZXJhbCcgJiYgbnVtMS50eXBlID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKyBudW0yLm51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXN0QmluYXJ5T3BlcmF0aW9uKCcrJywgbnVtMSwgbnVtMiwgbnVtMS5taW4gKyBudW0yLm1pbiwgbnVtMS5tYXggKyBudW0yLm1heCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBidWlsZE11bE9wZXJhdGlvbihudW0xLCBudW0yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMi50eXBlID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMi5udW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtMi5udW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChudW0xLnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdExpdGVyYWwobnVtMS5udW1iZXIgKiBudW0yLm51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMS50eXBlID09PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMS5udW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtMS5udW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bTI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW4obnVtMS5taW4gKiBudW0yLm1pbiwgbnVtMS5taW4gKiBudW0yLm1heCwgbnVtMS5tYXggKiBudW0yLm1pbiwgbnVtMS5tYXggKiBudW0yLm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXgobnVtMS5taW4gKiBudW0yLm1pbiwgbnVtMS5taW4gKiBudW0yLm1heCwgbnVtMS5tYXggKiBudW0yLm1pbiwgbnVtMS5tYXggKiBudW0yLm1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbignKicsIG51bTEsIG51bTIsIG1pbiwgbWF4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ1aWxkU3ViT3BlcmF0aW9uKG51bTEsIG51bTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0yLnR5cGUgPT09ICdsaXRlcmFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0yLm51bWJlciA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bTEudHlwZSA9PT0gJ2xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQXN0TGl0ZXJhbChudW0xLm51bWJlciAtIG51bTIubnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudW0yLnR5cGUgPT09ICdiaW5hcnknICYmIG51bTIub3AgPT09ICctJyAmJiBudW0xLnR5cGUgPT09ICdsaXRlcmFsJyAmJiBudW0xLm51bWJlciA9PT0gMSAmJiBudW0yLmFyZzEudHlwZSA9PT0gJ2xpdGVyYWwnICYmIG51bTIuYXJnMS5udW1iZXIgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVtMi5hcmcyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbignLScsIG51bTEsIG51bTIsIG51bTEubWluIC0gbnVtMi5tYXgsIG51bTEubWF4IC0gbnVtMi5taW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYnVpbGRNaW5PcGVyYXRpb24obnVtMSwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMS5taW4gPj0gbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBc3RMaXRlcmFsKG1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG51bTEubWF4IDw9IG1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFzdE1pbihudW0xLCBtYXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9zdFNjcmlwdENvbXBpbGVyKCkge31cblxuICAgICAgICAgICAgICAgICAgICBQb3N0U2NyaXB0Q29tcGlsZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZTogZnVuY3Rpb24gUG9zdFNjcmlwdENvbXBpbGVyX2NvbXBpbGUoY29kZSwgZG9tYWluLCByYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdHJ1Y3Rpb25zID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0U2l6ZSA9IGRvbWFpbi5sZW5ndGggPj4gMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0U2l6ZSA9IHJhbmdlLmxlbmd0aCA+PiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYXN0UmVnaXN0ZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuLCBqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0xLCBudW0yLCBhc3QxLCBhc3QyLCB0bXBWYXIsIGl0ZW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgaW5wdXRTaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChuZXcgQXN0QXJndW1lbnQoaSwgZG9tYWluW2kgKiAyXSwgZG9tYWluW2kgKiAyICsgMV0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGNvZGUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gY29kZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKG5ldyBBc3RMaXRlcmFsKGl0ZW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhZGQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggPCAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTIgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChidWlsZEFkZE9wZXJhdGlvbihudW0xLCBudW0yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2N2cic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ211bCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtMiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTEgPSBzdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkTXVsT3BlcmF0aW9uKG51bTEsIG51bTIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc3ViJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYnVpbGRTdWJPcGVyYXRpb24obnVtMSwgbnVtMikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdleGNoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3QxID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0MiA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYXN0MSwgYXN0Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BvcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2luZGV4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0xID0gc3RhY2sucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtMS50eXBlICE9PSAnbGl0ZXJhbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IG51bTEubnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPCAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0MSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIG4gLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhc3QxLnR5cGUgPT09ICdsaXRlcmFsJyB8fCBhc3QxLnR5cGUgPT09ICd2YXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2goYXN0MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFZhciA9IG5ldyBBc3RWYXJpYWJsZShsYXN0UmVnaXN0ZXIrKywgYXN0MS5taW4sIGFzdDEubWF4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja1tzdGFjay5sZW5ndGggLSBuIC0gMV0gPSB0bXBWYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaCh0bXBWYXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucy5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24odG1wVmFyLCBhc3QxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2R1cCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb2RlW2kgKyAxXSA9PT0gJ251bWJlcicgJiYgY29kZVtpICsgMl0gPT09ICdndCcgJiYgY29kZVtpICsgM10gPT09IGkgKyA3ICYmIGNvZGVbaSArIDRdID09PSAnanonICYmIGNvZGVbaSArIDVdID09PSAncG9wJyAmJiBjb2RlW2kgKyA2XSA9PT0gY29kZVtpICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjay5wdXNoKGJ1aWxkTWluT3BlcmF0aW9uKG51bTEsIGNvZGVbaSArIDFdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKz0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXN0MSA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFzdDEudHlwZSA9PT0gJ2xpdGVyYWwnIHx8IGFzdDEudHlwZSA9PT0gJ3ZhcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sucHVzaChhc3QxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wVmFyID0gbmV3IEFzdFZhcmlhYmxlKGxhc3RSZWdpc3RlcisrLCBhc3QxLm1pbiwgYXN0MS5tYXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdID0gdG1wVmFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrLnB1c2godG1wVmFyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMucHVzaChuZXcgQXN0VmFyaWFibGVEZWZpbml0aW9uKHRtcFZhciwgYXN0MSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyb2xsJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2subGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0yID0gc3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtMSA9IHN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG51bTIudHlwZSAhPT0gJ2xpdGVyYWwnIHx8IG51bTEudHlwZSAhPT0gJ2xpdGVyYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBudW0yLm51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gbnVtMS5udW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA8PSAwIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKGopIHx8IHN0YWNrLmxlbmd0aCA8IG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IChqICUgbiArIG4pICUgbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHN0YWNrLCBzdGFjay5zcGxpY2Uoc3RhY2subGVuZ3RoIC0gbiwgbiAtIGopKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5sZW5ndGggIT09IG91dHB1dFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnN0cnVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24udmlzaXQoc3RhdGVtZW50QnVpbGRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHN0YXRlbWVudEJ1aWxkZXIudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2suZm9yRWFjaChmdW5jdGlvbiAoZXhwciwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGVtZW50QnVpbGRlciA9IG5ldyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwci52aXNpdChzdGF0ZW1lbnRCdWlsZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1pbiA9IHJhbmdlW2kgKiAyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCA9IHJhbmdlW2kgKiAyICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSBbc3RhdGVtZW50QnVpbGRlci50b1N0cmluZygpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWluID4gZXhwci5taW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC51bnNoaWZ0KCdNYXRoLm1heCgnLCBtaW4sICcsICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2goJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXggPCBleHByLm1heCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnVuc2hpZnQoJ01hdGgubWluKCcsIG1heCwgJywgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQucHVzaCgnKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnVuc2hpZnQoJ2Rlc3RbZGVzdE9mZnNldCArICcsIGksICddID0gJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKCc7Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKG91dC5qb2luKCcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRDb21waWxlcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBvc3RTY3JpcHRDb21waWxlciA9IFBvc3RTY3JpcHRDb21waWxlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTg2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Qb3N0U2NyaXB0UGFyc2VyID0gZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9wcmltaXRpdmVzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTUpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUG9zdFNjcmlwdFBhcnNlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9zdFNjcmlwdFBhcnNlcihsZXhlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb3N0U2NyaXB0UGFyc2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGV4ZXIgPSBsZXhlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQb3N0U2NyaXB0UGFyc2VyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJuZXh0VG9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dFRva2VuKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByZXYgPSB0aGlzLnRva2VuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRva2VuID0gdGhpcy5sZXhlci5nZXRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYWNjZXB0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFjY2VwdCh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRva2VuLnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFRva2VuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImV4cGVjdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBleHBlY3QodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY2NlcHQodHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kIFwiLmNvbmNhdCh0aGlzLnRva2VuLnR5cGUsIFwiIGV4cGVjdGVkIFwiKS5jb25jYXQodHlwZSwgXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInBhcnNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHBhcnNlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3BlcmF0b3JzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFyc2VCbG9ja1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUJsb2NrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLk5VTUJFUikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWNjZXB0KFBvc3RTY3JpcHRUb2tlblR5cGVzLk9QRVJBVE9SKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzLnB1c2godGhpcy5wcmV2LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VDb25kaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwYXJzZUNvbmRpdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUNvbmRpdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbmRpdGlvbkxvY2F0aW9uID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leHBlY3QoUG9zdFNjcmlwdFRva2VuVHlwZXMuUkJSQUNFKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hY2NlcHQoUG9zdFNjcmlwdFRva2VuVHlwZXMuSUYpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbl0gPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yc1tjb25kaXRpb25Mb2NhdGlvbiArIDFdID0gJ2p6JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjY2VwdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5MQlJBQ0UpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIganVtcExvY2F0aW9uID0gdGhpcy5vcGVyYXRvcnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnMucHVzaChudWxsLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRPZlRydWUgPSB0aGlzLm9wZXJhdG9ycy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcnNlQmxvY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwZWN0KFBvc3RTY3JpcHRUb2tlblR5cGVzLlJCUkFDRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGVjdChQb3N0U2NyaXB0VG9rZW5UeXBlcy5JRkVMU0UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnNbanVtcExvY2F0aW9uXSA9IHRoaXMub3BlcmF0b3JzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JzW2p1bXBMb2NhdGlvbiArIDFdID0gJ2onO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb25dID0gZW5kT2ZUcnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcnNbY29uZGl0aW9uTG9jYXRpb24gKyAxXSA9ICdqeic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoJ1BTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFBhcnNlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Qb3N0U2NyaXB0UGFyc2VyID0gUG9zdFNjcmlwdFBhcnNlcjtcbiAgICAgICAgICAgICAgICB2YXIgUG9zdFNjcmlwdFRva2VuVHlwZXMgPSB7XG4gICAgICAgICAgICAgICAgICAgIExCUkFDRTogMCxcbiAgICAgICAgICAgICAgICAgICAgUkJSQUNFOiAxLFxuICAgICAgICAgICAgICAgICAgICBOVU1CRVI6IDIsXG4gICAgICAgICAgICAgICAgICAgIE9QRVJBVE9SOiAzLFxuICAgICAgICAgICAgICAgICAgICBJRjogNCxcbiAgICAgICAgICAgICAgICAgICAgSUZFTFNFOiA1XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBQb3N0U2NyaXB0VG9rZW4gPSBmdW5jdGlvbiBQb3N0U2NyaXB0VG9rZW5DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgb3BDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFBvc3RTY3JpcHRUb2tlbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9zdFNjcmlwdFRva2VuKHR5cGUsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQb3N0U2NyaXB0VG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUG9zdFNjcmlwdFRva2VuLCBudWxsLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0T3BlcmF0b3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE9wZXJhdG9yKG9wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BWYWx1ZSA9IG9wQ2FjaGVbb3BdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3BDYWNoZVtvcF0gPSBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLk9QRVJBVE9SLCBvcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJMQlJBQ0VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ0xCUkFDRScsIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTEJSQUNFLCAneycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIlJCUkFDRVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnUkJSQUNFJywgbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5SQlJBQ0UsICd9JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiSUZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ0lGJywgbmV3IFBvc3RTY3JpcHRUb2tlbihQb3N0U2NyaXB0VG9rZW5UeXBlcy5JRiwgJ0lGJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiSUZFTFNFXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdJRkVMU0UnLCBuZXcgUG9zdFNjcmlwdFRva2VuKFBvc3RTY3JpcHRUb2tlblR5cGVzLklGRUxTRSwgJ0lGRUxTRScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRUb2tlbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUG9zdFNjcmlwdExleGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQb3N0U2NyaXB0TGV4ZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvc3RTY3JpcHRMZXhlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5leHRDaGFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJCdWYgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBvc3RTY3JpcHRMZXhlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibmV4dENoYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gbmV4dENoYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRDaGFyID0gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0VG9rZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0VG9rZW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaCA9IHRoaXMuY3VycmVudENoYXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3ByaW1pdGl2ZXMuRU9GO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA9PT0gMHgwQSB8fCBjaCA9PT0gMHgwRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMHgyNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghKDAsIF91dGlsLmlzU3BhY2UpKGNoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9IHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2ggfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MzY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4Mzk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MkI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDB4MkU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQb3N0U2NyaXB0VG9rZW4oUG9zdFNjcmlwdFRva2VuVHlwZXMuTlVNQkVSLCB0aGlzLmdldE51bWJlcigpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDdCOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLkxCUkFDRTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweDdEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dENoYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLlJCUkFDRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJCdWYgPSB0aGlzLnN0ckJ1ZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1ZlswXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSB0aGlzLm5leHRDaGFyKCkpID49IDAgJiYgKGNoID49IDB4NDEgJiYgY2ggPD0gMHg1QSB8fCBjaCA+PSAweDYxICYmIGNoIDw9IDB4N0EpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyID0gc3RyQnVmLmpvaW4oJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2lmJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUG9zdFNjcmlwdFRva2VuLklGO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdpZmVsc2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uSUZFTFNFO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb3N0U2NyaXB0VG9rZW4uZ2V0T3BlcmF0b3Ioc3RyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0TnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE51bWJlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gdGhpcy5jdXJyZW50Q2hhcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ1ZiA9IHRoaXMuc3RyQnVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmWzBdID0gU3RyaW5nLmZyb21DaGFyQ29kZShjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9IHRoaXMubmV4dENoYXIoKSkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID49IDB4MzAgJiYgY2ggPD0gMHgzOSB8fCBjaCA9PT0gMHgyRCB8fCBjaCA9PT0gMHgyRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwYXJzZUZsb2F0KHN0ckJ1Zi5qb2luKCcnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6IFwiLmNvbmNhdCh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvc3RTY3JpcHRMZXhlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Qb3N0U2NyaXB0TGV4ZXIgPSBQb3N0U2NyaXB0TGV4ZXI7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuTXVybXVySGFzaDNfNjQgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIE11cm11ckhhc2gzXzY0ID0gZnVuY3Rpb24gTXVybXVySGFzaDNfNjRDbG9zdXJlKHNlZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BU0tfSElHSCA9IDB4ZmZmZjAwMDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBNQVNLX0xPVyA9IDB4ZmZmZjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNdXJtdXJIYXNoM182NChzZWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgU0VFRCA9IDB4YzNkMmUxZjA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmgxID0gc2VlZCA/IHNlZWQgJiAweGZmZmZmZmZmIDogU0VFRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaDIgPSBzZWVkID8gc2VlZCAmIDB4ZmZmZmZmZmYgOiBTRUVEO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTXVybXVySGFzaDNfNjQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlOiBmdW5jdGlvbiBNdXJtdXJIYXNoM182NF91cGRhdGUoaW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSwgbGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfdXRpbC5pc1N0cmluZykoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShpbnB1dC5sZW5ndGggKiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbnB1dC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGlucHV0LmNoYXJDb2RlQXQoaSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlIDw9IDB4ZmYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2xlbmd0aCsrXSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbbGVuZ3RoKytdID0gY29kZSA+Pj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2xlbmd0aCsrXSA9IGNvZGUgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBpbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV3JvbmcgZGF0YSBmb3JtYXQgaW4gTXVybXVySGFzaDNfNjRfdXBkYXRlLiAnICsgJ0lucHV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrQ291bnRzID0gbGVuZ3RoID4+IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhaWxMZW5ndGggPSBsZW5ndGggLSBibG9ja0NvdW50cyAqIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGFVaW50MzIgPSBuZXcgVWludDMyQXJyYXkoZGF0YS5idWZmZXIsIDAsIGJsb2NrQ291bnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgazEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrMiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGgxID0gdGhpcy5oMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaDIgPSB0aGlzLmgyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDMSA9IDB4Y2M5ZTJkNTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMyID0gMHgxYjg3MzU5MztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQzFfTE9XID0gQzEgJiBNQVNLX0xPVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQzJfTE9XID0gQzIgJiBNQVNLX0xPVztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBibG9ja0NvdW50czsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2kgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSA9IGRhdGFVaW50MzJbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazEgPSBrMSAqIEMxICYgTUFTS19ISUdIIHwgazEgKiBDMV9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxID0gazEgPDwgMTUgfCBrMSA+Pj4gMTc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSA9IGsxICogQzIgJiBNQVNLX0hJR0ggfCBrMSAqIEMyX0xPVyAmIE1BU0tfTE9XO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEgXj0gazE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IGgxIDw8IDEzIHwgaDEgPj4+IDE5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEgPSBoMSAqIDUgKyAweGU2NTQ2YjY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazIgPSBkYXRhVWludDMyW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsyID0gazIgKiBDMSAmIE1BU0tfSElHSCB8IGsyICogQzFfTE9XICYgTUFTS19MT1c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMiA9IGsyIDw8IDE1IHwgazIgPj4+IDE3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazIgPSBrMiAqIEMyICYgTUFTS19ISUdIIHwgazIgKiBDMl9MT1cgJiBNQVNLX0xPVztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyIF49IGsyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSBoMiA8PCAxMyB8IGgyID4+PiAxOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyID0gaDIgKiA1ICsgMHhlNjU0NmI2NDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFpbExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNCArIDJdIDw8IDE2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxIF49IGRhdGFbYmxvY2tDb3VudHMgKiA0ICsgMV0gPDwgODtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSBePSBkYXRhW2Jsb2NrQ291bnRzICogNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrMSA9IGsxICogQzEgJiBNQVNLX0hJR0ggfCBrMSAqIEMxX0xPVyAmIE1BU0tfTE9XO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgazEgPSBrMSA8PCAxNSB8IGsxID4+PiAxNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsxID0gazEgKiBDMiAmIE1BU0tfSElHSCB8IGsxICogQzJfTE9XICYgTUFTS19MT1c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChibG9ja0NvdW50cyAmIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSBePSBrMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgXj0gazE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmgxID0gaDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oMiA9IGgyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhleGRpZ2VzdDogZnVuY3Rpb24gTXVybXVySGFzaDNfNjRfaGV4ZGlnZXN0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoMSA9IHRoaXMuaDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGgyID0gdGhpcy5oMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSBePSBoMiA+Pj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IGgxICogMHhlZDU1OGNjZCAmIE1BU0tfSElHSCB8IGgxICogMHg4Y2NkICYgTUFTS19MT1c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSBoMiAqIDB4ZmY1MWFmZDcgJiBNQVNLX0hJR0ggfCAoKGgyIDw8IDE2IHwgaDEgPj4+IDE2KSAqIDB4YWZkN2VkNTUgJiBNQVNLX0hJR0gpID4+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSBePSBoMiA+Pj4gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSA9IGgxICogMHgxYTg1ZWM1MyAmIE1BU0tfSElHSCB8IGgxICogMHhlYzUzICYgTUFTS19MT1c7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaDIgPSBoMiAqIDB4YzRjZWI5ZmUgJiBNQVNLX0hJR0ggfCAoKGgyIDw8IDE2IHwgaDEgPj4+IDE2KSAqIDB4YjlmZTFhODUgJiBNQVNLX0hJR0gpID4+PiAxNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMSBePSBoMiA+Pj4gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBhcnIgPSBbaDEsIGgyXSwgc3RyID0gJyc7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhleCA9IChhcnJbaV0gPj4+IDApLnRvU3RyaW5nKDE2KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaGV4Lmxlbmd0aCA8IDgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9ICcwJyArIGhleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBoZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE11cm11ckhhc2gzXzY0O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTXVybXVySGFzaDNfNjQgPSBNdXJtdXJIYXNoM182NDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTg4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZJbWFnZSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3ByaW1pdGl2ZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NvbG9yc3BhY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3N0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfanBlZ19zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2pweCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY2KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZVwiKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9lID0gdW5kZWZpbmVkOyB0cnkgeyBmb3IgKHZhciBfaSA9IGFycltTeW1ib2wuaXRlcmF0b3JdKCksIF9zOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFBERkltYWdlID0gZnVuY3Rpb24gUERGSW1hZ2VDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBoYW5kbGVJbWFnZURhdGEoaW1hZ2UsIG5hdGl2ZURlY29kZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXRpdmVEZWNvZGVyICYmIG5hdGl2ZURlY29kZXIuY2FuRGVjb2RlKGltYWdlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuYXRpdmVEZWNvZGVyLmRlY29kZShpbWFnZSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ05hdGl2ZSBpbWFnZSBkZWNvZGluZyBmYWlsZWQgLS0gdHJ5aW5nIHRvIHJlY292ZXI6ICcgKyAocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpbWFnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWNvZGVBbmRDbGFtcCh2YWx1ZSwgYWRkZW5kLCBjb2VmZmljaWVudCwgbWF4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFkZGVuZCArIHZhbHVlICogY29lZmZpY2llbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPCAwID8gMCA6IHZhbHVlID4gbWF4ID8gbWF4IDogdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNpemVJbWFnZU1hc2soc3JjLCBicGMsIHcxLCBoMSwgdzIsIGgyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gdzIgKiBoMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXN0ID0gYnBjIDw9IDggPyBuZXcgVWludDhBcnJheShsZW5ndGgpIDogYnBjIDw9IDE2ID8gbmV3IFVpbnQxNkFycmF5KGxlbmd0aCkgOiBuZXcgVWludDMyQXJyYXkobGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4UmF0aW8gPSB3MSAvIHcyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHlSYXRpbyA9IGgxIC8gaDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0luZGV4ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4U2NhbGVkID0gbmV3IFVpbnQxNkFycmF5KHcyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3MVNjYW5saW5lID0gdzE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB3MjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNjYWxlZFtpXSA9IE1hdGguZmxvb3IoaSAqIHhSYXRpbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBoMjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHkgPSBNYXRoLmZsb29yKGkgKiB5UmF0aW8pICogdzFTY2FubGluZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB3MjsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZEluZGV4ID0gcHkgKyB4U2NhbGVkW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W25ld0luZGV4KytdID0gc3JjW29sZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXN0O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGSW1hZ2UoX3JlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhyZWYgPSBfcmVmLnhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gX3JlZi5yZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBfcmVmLmltYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkaXNJbmxpbmUgPSBfcmVmLmlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lID0gX3JlZiRpc0lubGluZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkc21hc2sgPSBfcmVmLnNtYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYXNrID0gX3JlZiRzbWFzayA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkc21hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRtYXNrID0gX3JlZi5tYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSBfcmVmJG1hc2sgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJG1hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRpc01hc2sgPSBfcmVmLmlzTWFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01hc2sgPSBfcmVmJGlzTWFzayA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGlzTWFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3RvcnkgPSBfcmVmLnBkZkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UgPSBpbWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaWN0ID0gaW1hZ2UuZGljdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWx0ZXIgPSBkaWN0LmdldCgnRmlsdGVyJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3ByaW1pdGl2ZXMuaXNOYW1lKShmaWx0ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdKUFhEZWNvZGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGpweEltYWdlID0gbmV3IF9qcHguSnB4SW1hZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpweEltYWdlLnBhcnNlSW1hZ2VQcm9wZXJ0aWVzKGltYWdlLnN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5zdHJlYW0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLndpZHRoID0ganB4SW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5oZWlnaHQgPSBqcHhJbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5iaXRzUGVyQ29tcG9uZW50ID0ganB4SW1hZ2UuYml0c1BlckNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLm51bUNvbXBzID0ganB4SW1hZ2UuY29tcG9uZW50c0NvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSkJJRzJEZWNvZGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UuYml0c1BlckNvbXBvbmVudCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5udW1Db21wcyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGRpY3QuZ2V0KCdXaWR0aCcsICdXJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZGljdC5nZXQoJ0hlaWdodCcsICdIJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKGltYWdlLndpZHRoKSAmJiBpbWFnZS53aWR0aCA+IDAgJiYgTnVtYmVyLmlzSW50ZWdlcihpbWFnZS5oZWlnaHQpICYmIGltYWdlLmhlaWdodCA+IDAgJiYgKGltYWdlLndpZHRoICE9PSB3aWR0aCB8fCBpbWFnZS5oZWlnaHQgIT09IGhlaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1BERkltYWdlIC0gdXNpbmcgdGhlIFdpZHRoL0hlaWdodCBvZiB0aGUgaW1hZ2UgZGF0YSwgJyArICdyYXRoZXIgdGhhbiB0aGUgaW1hZ2UgZGljdGlvbmFyeS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGltYWdlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGltYWdlLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgMSB8fCBoZWlnaHQgPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiSW52YWxpZCBpbWFnZSB3aWR0aDogXCIuY29uY2F0KHdpZHRoLCBcIiBvciBcIikgKyBcImhlaWdodDogXCIuY29uY2F0KGhlaWdodCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJwb2xhdGUgPSBkaWN0LmdldCgnSW50ZXJwb2xhdGUnLCAnSScpIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZU1hc2sgPSBkaWN0LmdldCgnSW1hZ2VNYXNrJywgJ0lNJykgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHRlID0gZGljdC5nZXQoJ01hdHRlJykgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0c1BlckNvbXBvbmVudCA9IGltYWdlLmJpdHNQZXJDb21wb25lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYml0c1BlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSBkaWN0LmdldCgnQml0c1BlckNvbXBvbmVudCcsICdCUEMnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYml0c1BlckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbWFnZU1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHNQZXJDb21wb25lbnQgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiQml0cyBwZXIgY29tcG9uZW50IG1pc3NpbmcgaW4gaW1hZ2U6IFwiLmNvbmNhdCh0aGlzLmltYWdlTWFzaykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJwYyA9IGJpdHNQZXJDb21wb25lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbWFnZU1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JTcGFjZSA9IGRpY3QuZ2V0KCdDb2xvclNwYWNlJywgJ0NTJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbG9yU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdKUFggaW1hZ2VzICh3aGljaCBkbyBub3QgcmVxdWlyZSBjb2xvciBzcGFjZXMpJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChpbWFnZS5udW1Db21wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfcHJpbWl0aXZlcy5OYW1lLmdldCgnRGV2aWNlR3JheScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZSA9IF9wcmltaXRpdmVzLk5hbWUuZ2V0KCdEZXZpY2VSR0InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UgPSBfcHJpbWl0aXZlcy5OYW1lLmdldCgnRGV2aWNlQ01ZSycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkpQWCBpbWFnZXMgd2l0aCBcIi5jb25jYXQoaW1hZ2UubnVtQ29tcHMsIFwiIFwiKSArICdjb2xvciBjb21wb25lbnRzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzb3VyY2VzID0gaXNJbmxpbmUgPyByZXMgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3JTcGFjZSA9IF9jb2xvcnNwYWNlLkNvbG9yU3BhY2UucGFyc2UoY29sb3JTcGFjZSwgeHJlZiwgcmVzb3VyY2VzLCBwZGZGdW5jdGlvbkZhY3RvcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtQ29tcHMgPSB0aGlzLmNvbG9yU3BhY2UubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlID0gZGljdC5nZXRBcnJheSgnRGVjb2RlJywgJ0QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmVlZHNEZWNvZGUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVjb2RlICYmICh0aGlzLmNvbG9yU3BhY2UgJiYgIXRoaXMuY29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsIGJpdHNQZXJDb21wb25lbnQpIHx8IGlzTWFzayAmJiAhX2NvbG9yc3BhY2UuQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsIDEpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmVlZHNEZWNvZGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXggPSAoMSA8PCBiaXRzUGVyQ29tcG9uZW50KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVDb2VmZmljaWVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY29kZUFkZGVuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNJbmRleGVkID0gdGhpcy5jb2xvclNwYWNlICYmIHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSAnSW5kZXhlZCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaiA9IDA7IGkgPCB0aGlzLmRlY29kZS5sZW5ndGg7IGkgKz0gMiwgKytqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkbWluID0gdGhpcy5kZWNvZGVbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkbWF4ID0gdGhpcy5kZWNvZGVbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY29kZUNvZWZmaWNpZW50c1tqXSA9IGlzSW5kZXhlZCA/IChkbWF4IC0gZG1pbikgLyBtYXggOiBkbWF4IC0gZG1pbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVBZGRlbmRzW2pdID0gaXNJbmRleGVkID8gZG1pbiA6IG1heCAqIGRtaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYXNrID0gbmV3IFBERkltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeHJlZjogeHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzOiByZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlOiBzbWFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmxpbmU6IGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHBkZkZ1bmN0aW9uRmFjdG9yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfcHJpbWl0aXZlcy5pc1N0cmVhbSkobWFzaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tEaWN0ID0gbWFzay5kaWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VNYXNrID0gbWFza0RpY3QuZ2V0KCdJbWFnZU1hc2snLCAnSU0nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltYWdlTWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdJZ25vcmluZyAvTWFzayBpbiBpbWFnZSB3aXRob3V0IC9JbWFnZU1hc2suJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2sgPSBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhyZWY6IHhyZWYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzOiByZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IG1hc2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmxpbmU6IGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWFzazogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZGdW5jdGlvbkZhY3Rvcnk6IHBkZkZ1bmN0aW9uRmFjdG9yeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hc2sgPSBtYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFBERkltYWdlLmJ1aWxkSW1hZ2UgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gX3JlZjIuaGFuZGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmID0gX3JlZjIueHJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBfcmVmMi5yZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2UgPSBfcmVmMi5pbWFnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMiRpc0lubGluZSA9IF9yZWYyLmlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSW5saW5lID0gX3JlZjIkaXNJbmxpbmUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkaXNJbmxpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIkbmF0aXZlRGVjb2RlciA9IF9yZWYyLm5hdGl2ZURlY29kZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlRGVjb2RlciA9IF9yZWYyJG5hdGl2ZURlY29kZXIgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRuYXRpdmVEZWNvZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkZ1bmN0aW9uRmFjdG9yeSA9IF9yZWYyLnBkZkZ1bmN0aW9uRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZVByb21pc2UgPSBoYW5kbGVJbWFnZURhdGEoaW1hZ2UsIG5hdGl2ZURlY29kZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNtYXNrUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzbWFzayA9IGltYWdlLmRpY3QuZ2V0KCdTTWFzaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSBpbWFnZS5kaWN0LmdldCgnTWFzaycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza1Byb21pc2UgPSBoYW5kbGVJbWFnZURhdGEoc21hc2ssIG5hdGl2ZURlY29kZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF9wcmltaXRpdmVzLmlzU3RyZWFtKShtYXNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza1Byb21pc2UgPSBoYW5kbGVJbWFnZURhdGEobWFzaywgbmF0aXZlRGVjb2Rlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtYXNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUobWFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1Vuc3VwcG9ydGVkIG1hc2sgZm9ybWF0LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbaW1hZ2VQcm9taXNlLCBzbWFza1Byb21pc2UsIG1hc2tQcm9taXNlXSkudGhlbihmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjQgPSBfc2xpY2VkVG9BcnJheShfcmVmMywgMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlRGF0YSA9IF9yZWY0WzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza0RhdGEgPSBfcmVmNFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0RhdGEgPSBfcmVmNFsyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUERGSW1hZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4cmVmOiB4cmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXM6IHJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGltYWdlRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJbmxpbmU6IGlzSW5saW5lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFzazogc21hc2tEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBtYXNrRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmRnVuY3Rpb25GYWN0b3J5OiBwZGZGdW5jdGlvbkZhY3RvcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFBERkltYWdlLmNyZWF0ZU1hc2sgPSBmdW5jdGlvbiAoX3JlZjUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdBcnJheSA9IF9yZWY1LmltZ0FycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gX3JlZjUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gX3JlZjUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtID0gX3JlZjUuaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzZURlY29kZSA9IF9yZWY1LmludmVyc2VEZWNvZGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcHV0ZWRMZW5ndGggPSAod2lkdGggKyA3ID4+IDMpICogaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdHVhbExlbmd0aCA9IGltZ0FycmF5LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGF2ZUZ1bGxEYXRhID0gY29tcHV0ZWRMZW5ndGggPT09IGFjdHVhbExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhLCBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW0gJiYgKCFpbnZlcnNlRGVjb2RlIHx8IGhhdmVGdWxsRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gaW1nQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpbnZlcnNlRGVjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShhY3R1YWxMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc2V0KGltZ0FycmF5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShjb21wdXRlZExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5zZXQoaW1nQXJyYXkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gYWN0dWFsTGVuZ3RoOyBpIDwgY29tcHV0ZWRMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2ldID0gMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnZlcnNlRGVjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFjdHVhbExlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gXj0gMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgUERGSW1hZ2UucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGRyYXdXaWR0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy53aWR0aCwgdGhpcy5zbWFzayAmJiB0aGlzLnNtYXNrLndpZHRoIHx8IDAsIHRoaXMubWFzayAmJiB0aGlzLm1hc2sud2lkdGggfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgZHJhd0hlaWdodCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsIHRoaXMuc21hc2sgJiYgdGhpcy5zbWFzay5oZWlnaHQgfHwgMCwgdGhpcy5tYXNrICYmIHRoaXMubWFzay5oZWlnaHQgfHwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVCdWZmZXI6IGZ1bmN0aW9uIGRlY29kZUJ1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnBjID0gdGhpcy5icGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlQWRkZW5kcyA9IHRoaXMuZGVjb2RlQWRkZW5kcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVjb2RlQ29lZmZpY2llbnRzID0gdGhpcy5kZWNvZGVDb2VmZmljaWVudHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heCA9ICgxIDw8IGJwYykgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChicGMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gKyFidWZmZXJbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gdGhpcy53aWR0aCAqIHRoaXMuaGVpZ2h0OyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bUNvbXBzOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBkZWNvZGVBbmRDbGFtcChidWZmZXJbaW5kZXhdLCBkZWNvZGVBZGRlbmRzW2pdLCBkZWNvZGVDb2VmZmljaWVudHNbal0sIG1heCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbXBvbmVudHM6IGZ1bmN0aW9uIGdldENvbXBvbmVudHMoYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJwYyA9IHRoaXMuYnBjO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJwYyA9PT0gOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IHRoaXMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogbnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlclBvcyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dHB1dCA9IGJwYyA8PSA4ID8gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKSA6IGJwYyA8PSAxNiA/IG5ldyBVaW50MTZBcnJheShsZW5ndGgpIDogbmV3IFVpbnQzMkFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd0NvbXBzID0gd2lkdGggKiBudW1Db21wcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4ID0gKDEgPDwgYnBjKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJwYyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFzaywgbG9vcDFFbmQsIGxvb3AyRW5kO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaGVpZ2h0OyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AxRW5kID0gaSArIChyb3dDb21wcyAmIH43KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AyRW5kID0gaSArIHJvd0NvbXBzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IGxvb3AxRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaV0gPSBidWYgPj4gNyAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2kgKyAxXSA9IGJ1ZiA+PiA2ICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaSArIDJdID0gYnVmID4+IDUgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpICsgM10gPSBidWYgPj4gNCAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2kgKyA0XSA9IGJ1ZiA+PiAzICYgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaSArIDVdID0gYnVmID4+IDIgJiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpICsgNl0gPSBidWYgPj4gMSAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0W2kgKyA3XSA9IGJ1ZiAmIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IGxvb3AyRW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmZmVyW2J1ZmZlclBvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gMTI4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBsb29wMkVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRbaSsrXSA9ICshIShidWYgJiBtYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0cyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBsZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIHJvd0NvbXBzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXRzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJpdHMgPCBicGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgPDwgOCB8IGJ1ZmZlcltidWZmZXJQb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyArPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVtYWluaW5nQml0cyA9IGJpdHMgLSBicGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBidWYgPj4gcmVtYWluaW5nQml0cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFtpXSA9IHZhbHVlIDwgMCA/IDAgOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmICYgKDEgPDwgcmVtYWluaW5nQml0cykgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cyA9IHJlbWFpbmluZ0JpdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxPcGFjaXR5OiBmdW5jdGlvbiBmaWxsT3BhY2l0eShyZ2JhQnVmLCB3aWR0aCwgaGVpZ2h0LCBhY3R1YWxIZWlnaHQsIGltYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNtYXNrID0gdGhpcy5zbWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFzayA9IHRoaXMubWFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFCdWYsIHN3LCBzaCwgaSwgaWksIGo7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3cgPSBzbWFzay53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ggPSBzbWFzay5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhQnVmID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHN3ICogc2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN3ICE9PSB3aWR0aCB8fCBzaCAhPT0gaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1Ziwgc21hc2suYnBjLCBzdywgc2gsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrIGluc3RhbmNlb2YgUERGSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ID0gbWFzay53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoID0gbWFzay5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShzdyAqIHNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2subnVtQ29tcHMgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzay5maWxsR3JheUJ1ZmZlcihhbHBoYUJ1Zik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gc3cgKiBzaDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUJ1ZltpXSA9IDI1NSAtIGFscGhhQnVmW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3cgIT09IHdpZHRoIHx8IHNoICE9PSBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHBoYUJ1ZiA9IHJlc2l6ZUltYWdlTWFzayhhbHBoYUJ1ZiwgbWFzay5icGMsIHN3LCBzaCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShtYXNrKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFCdWYgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkod2lkdGggKiBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bUNvbXBzID0gdGhpcy5udW1Db21wcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSB3aWR0aCAqIGhlaWdodDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BhY2l0eSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlT2Zmc2V0ID0gaSAqIG51bUNvbXBzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IG51bUNvbXBzOyArK2opIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gaW1hZ2VbaW1hZ2VPZmZzZXQgKyBqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tPZmZzZXQgPSBqICogMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb3IgPCBtYXNrW21hc2tPZmZzZXRdIHx8IGNvbG9yID4gbWFza1ttYXNrT2Zmc2V0ICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYWNpdHkgPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhQnVmW2ldID0gb3BhY2l0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBfdXRpbC5Gb3JtYXRFcnJvcignVW5rbm93biBtYXNrIGZvcm1hdC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYUJ1Zikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBqID0gMywgaWkgPSB3aWR0aCAqIGFjdHVhbEhlaWdodDsgaSA8IGlpOyArK2ksIGogKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmdiYUJ1ZltqXSA9IGFscGhhQnVmW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaiA9IDMsIGlpID0gd2lkdGggKiBhY3R1YWxIZWlnaHQ7IGkgPCBpaTsgKytpLCBqICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJnYmFCdWZbal0gPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kb1ByZWJsZW5kOiBmdW5jdGlvbiB1bmRvUHJlYmxlbmQoYnVmZmVyLCB3aWR0aCwgaGVpZ2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHRlID0gdGhpcy5zbWFzayAmJiB0aGlzLnNtYXNrLm1hdHRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXR0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHRlUmdiID0gdGhpcy5jb2xvclNwYWNlLmdldFJnYihtYXR0ZSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHRlUiA9IG1hdHRlUmdiWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXR0ZUcgPSBtYXR0ZVJnYlsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0dGVCID0gbWF0dGVSZ2JbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0ICogNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhID0gYnVmZmVyW2kgKyAzXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgayA9IDI1NSAvIGFscGhhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAoYnVmZmVyW2ldIC0gbWF0dGVSKSAqIGsgKyBtYXR0ZVI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSAoYnVmZmVyW2kgKyAxXSAtIG1hdHRlRykgKiBrICsgbWF0dGVHO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gKGJ1ZmZlcltpICsgMl0gLSBtYXR0ZUIpICogayArIG1hdHRlQjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlSW1hZ2VEYXRhOiBmdW5jdGlvbiBjcmVhdGVJbWFnZURhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmNlUkdCQSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyYXdXaWR0aCA9IHRoaXMuZHJhd1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3SGVpZ2h0ID0gdGhpcy5kcmF3SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogZHJhd1dpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGRyYXdIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsV2lkdGggPSB0aGlzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcmlnaW5hbEhlaWdodCA9IHRoaXMuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicGMgPSB0aGlzLmJwYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93Qnl0ZXMgPSBvcmlnaW5hbFdpZHRoICogbnVtQ29tcHMgKiBicGMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0FycmF5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JjZVJHQkEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtpbmQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSAnRGV2aWNlR3JheScgJiYgYnBjID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kID0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sb3JTcGFjZS5uYW1lID09PSAnRGV2aWNlUkdCJyAmJiBicGMgPT09IDggJiYgIXRoaXMubmVlZHNEZWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgIXRoaXMuc21hc2sgJiYgIXRoaXMubWFzayAmJiBkcmF3V2lkdGggPT09IG9yaWdpbmFsV2lkdGggJiYgZHJhd0hlaWdodCA9PT0gb3JpZ2luYWxIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEua2luZCA9IGtpbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdBcnJheSA9IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBfc3RyZWFtLkRlY29kZVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IGltZ0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmV3QXJyYXkgPSBuZXcgVWludDhDbGFtcGVkQXJyYXkoaW1nQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBcnJheS5zZXQoaW1nQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IG5ld0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5uZWVkc0RlY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKGtpbmQgPT09IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCwgJ1BERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBpbWdEYXRhLmRhdGE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBidWZmZXIubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gXj0gMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWdEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBfanBlZ19zdHJlYW0uSnBlZ1N0cmVhbSAmJiAhdGhpcy5zbWFzayAmJiAhdGhpcy5tYXNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2VMZW5ndGggPSBvcmlnaW5hbEhlaWdodCAqIHJvd0J5dGVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHRoaXMuY29sb3JTcGFjZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRGV2aWNlR3JheSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTGVuZ3RoICo9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEZXZpY2VSR0InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RldmljZUNNWUsnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhLmtpbmQgPSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhLmRhdGEgPSB0aGlzLmdldEltYWdlQnl0ZXMoaW1hZ2VMZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbWdEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nQXJyYXkgPSB0aGlzLmdldEltYWdlQnl0ZXMob3JpZ2luYWxIZWlnaHQgKiByb3dCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdHVhbEhlaWdodCA9IDAgfCBpbWdBcnJheS5sZW5ndGggLyByb3dCeXRlcyAqIGRyYXdIZWlnaHQgLyBvcmlnaW5hbEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoaW1nQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYTAxLCBtYXliZVVuZG9QcmVibGVuZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm9yY2VSR0JBICYmICF0aGlzLnNtYXNrICYmICF0aGlzLm1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQl8yNEJQUDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YS5kYXRhID0gbmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGRyYXdXaWR0aCAqIGRyYXdIZWlnaHQgKiAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGEwMSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heWJlVW5kb1ByZWJsZW5kID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRGF0YS5raW5kID0gX3V0aWwuSW1hZ2VLaW5kLlJHQkFfMzJCUFA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGEuZGF0YSA9IG5ldyBVaW50OENsYW1wZWRBcnJheShkcmF3V2lkdGggKiBkcmF3SGVpZ2h0ICogNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhMDEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXliZVVuZG9QcmVibGVuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbE9wYWNpdHkoaW1nRGF0YS5kYXRhLCBkcmF3V2lkdGgsIGRyYXdIZWlnaHQsIGFjdHVhbEhlaWdodCwgY29tcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlQnVmZmVyKGNvbXBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU3BhY2UuZmlsbFJnYihpbWdEYXRhLmRhdGEsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0LCBkcmF3V2lkdGgsIGRyYXdIZWlnaHQsIGFjdHVhbEhlaWdodCwgYnBjLCBjb21wcywgYWxwaGEwMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVVbmRvUHJlYmxlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmRvUHJlYmxlbmQoaW1nRGF0YS5kYXRhLCBkcmF3V2lkdGgsIGFjdHVhbEhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGltZ0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbEdyYXlCdWZmZXI6IGZ1bmN0aW9uIGZpbGxHcmF5QnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW1Db21wcyA9IHRoaXMubnVtQ29tcHM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtQ29tcHMgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IF91dGlsLkZvcm1hdEVycm9yKFwiUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogXCIuY29uY2F0KG51bUNvbXBzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJwYyA9IHRoaXMuYnBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByb3dCeXRlcyA9IHdpZHRoICogbnVtQ29tcHMgKiBicGMgKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0FycmF5ID0gdGhpcy5nZXRJbWFnZUJ5dGVzKGhlaWdodCAqIHJvd0J5dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcHMgPSB0aGlzLmdldENvbXBvbmVudHMoaW1nQXJyYXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBsZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnBjID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm5lZWRzRGVjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSBjb21wc1tpXSAtIDEgJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJbaV0gPSAtY29tcHNbaV0gJiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubmVlZHNEZWNvZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNvZGVCdWZmZXIoY29tcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IHdpZHRoICogaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IDI1NSAvICgoMSA8PCBicGMpIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldID0gc2NhbGUgKiBjb21wc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SW1hZ2VCeXRlczogZnVuY3Rpb24gZ2V0SW1hZ2VCeXRlcyhsZW5ndGgsIGRyYXdXaWR0aCwgZHJhd0hlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZVJHQiA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW1hZ2UuZHJhd1dpZHRoID0gZHJhd1dpZHRoIHx8IHRoaXMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZS5kcmF3SGVpZ2h0ID0gZHJhd0hlaWdodCB8fCB0aGlzLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltYWdlLmZvcmNlUkdCID0gISFmb3JjZVJHQjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZS5nZXRCeXRlcyhsZW5ndGgsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGSW1hZ2U7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZJbWFnZSA9IFBERkltYWdlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxODkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk1lc3NhZ2VIYW5kbGVyID0gTWVzc2FnZUhhbmRsZXI7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNik7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNhbGwoX3gsIF94Mikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Jlc29sdmVDYWxsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Jlc29sdmVDYWxsKCkge1xuICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZUNhbGwgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShmbiwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0FyZyA9IF9hcmdzLmxlbmd0aCA+IDIgJiYgX2FyZ3NbMl0gIT09IHVuZGVmaW5lZCA/IF9hcmdzWzJdIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXNvbHZlQ2FsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZW9mKHJlYXNvbikgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWFzb24ubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQWJvcnRFeGNlcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNaXNzaW5nUERGRXhjZXB0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmRldGFpbHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFrZVJlYXNvblNlcmlhbGl6YWJsZShyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhc29uIGluc3RhbmNlb2YgRXJyb3IpIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24gfHwgcmVhc29uIGluc3RhbmNlb2YgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU9yUmVqZWN0KGNhcGFiaWxpdHksIHN1Y2Nlc3MsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluYWxpemUocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb21pc2UpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBNZXNzYWdlSGFuZGxlcihzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBjb21PYmopIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5hbWUgPSB0YXJnZXROYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iaiA9IGNvbU9iajtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1JZCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVNpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFja3NDYXBhYmlsaXRpZXMgPSB0aGlzLmNhbGxiYWNrc0NhcGFiaWxpdGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZXZlbnQuZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gX3RoaXMuc291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmlzUmVwbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhbGxiYWNrSWQgaW4gY2FsbGJhY2tzQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhbGxiYWNrc0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ2Vycm9yJyBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5yZWplY3Qod3JhcFJlYXNvbihkYXRhLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5yZXNvbHZlKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayBcIi5jb25jYXQoY2FsbGJhY2tJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb24gaW4gYWgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gYWhbZGF0YS5hY3Rpb25dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2tJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3NvdXJjZU5hbWUgPSBfdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvblswXS5jYWxsKGFjdGlvblsxXSwgZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IF9zb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IF90YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwbHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogX3NvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogX3RhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBseTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0lkOiBkYXRhLmNhbGxiYWNrSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG1ha2VSZWFzb25TZXJpYWxpemFibGUocmVhc29uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdHJlYW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY3JlYXRlU3RyZWFtU2luayhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25bMF0uY2FsbChhY3Rpb25bMV0sIGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogXCIuY29uY2F0KGRhdGEuYWN0aW9uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29tT2JqLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgTWVzc2FnZUhhbmRsZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBvbjogZnVuY3Rpb24gb24oYWN0aW9uTmFtZSwgaGFuZGxlciwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFoW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCBcXFwiXCIuY29uY2F0KGFjdGlvbk5hbWUsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFoW2FjdGlvbk5hbWVdID0gW2hhbmRsZXIsIHNjb3BlXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24gc2VuZChhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVycyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNlbmRXaXRoUHJvbWlzZTogZnVuY3Rpb24gc2VuZFdpdGhQcm9taXNlKGFjdGlvbk5hbWUsIGRhdGEsIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLmNhbGxiYWNrSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJZDogY2FsbGJhY2tJZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF0gPSBjYXBhYmlsaXR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2VuZFdpdGhTdHJlYW06IGZ1bmN0aW9uIHNlbmRXaXRoU3RyZWFtKGFjdGlvbk5hbWUsIGRhdGEsIHF1ZXVlaW5nU3RyYXRlZ3ksIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VOYW1lID0gdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldE5hbWUgPSB0aGlzLnRhcmdldE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLlJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtSWQ6IHN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bGw6IGZ1bmN0aW9uIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwgPSBwdWxsQ2FwYWJpbGl0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdwdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdWxsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5jZWxDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JZDogc3RyZWFtSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmNlbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBxdWV1ZWluZ1N0cmF0ZWd5KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZVN0cmVhbVNpbms6IGZ1bmN0aW9uIF9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VuZFN0cmVhbVJlcXVlc3QgPSBmdW5jdGlvbiBzZW5kU3RyZWFtUmVxdWVzdChfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IF9yZWYuc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IF9yZWYuY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVycyA9IF9yZWYudHJhbnNmZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gX3JlZi5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gPSBfcmVmLnJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JZDogc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzczogc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cmFuc2ZlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbVNpbmsgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNpcmVkU2l6ZSAtPSBzaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RGVzaXJlZFNpemUgPiAwICYmIHRoaXMuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaW5rQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kU3RyZWFtUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyczogdHJhbnNmZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogJ2Nsb3NlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhcGFiaWxpdHk6IGNhcGFiaWxpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QdWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogZGVzaXJlZFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVNpbmsucmVhZHkgPSBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FsbChhY3Rpb25bMF0sIFtkYXRhLmRhdGEsIHN0cmVhbVNpbmtdLCBhY3Rpb25bMV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAnc3RhcnRfY29tcGxldGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN0cmVhbVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdzdGFydF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlYXNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9wcm9jZXNzU3RyZWFtTWVzc2FnZTogZnVuY3Rpb24gX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbUlkID0gZGF0YS5zdHJlYW1JZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbmRTdHJlYW1SZXNwb25zZSA9IGZ1bmN0aW9uIHNlbmRTdHJlYW1SZXNwb25zZShfcmVmMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBfcmVmMi5zdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBfcmVmMi5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gPSBfcmVmMi5yZWFzb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxldGVTdHJlYW1Db250cm9sbGVyID0gZnVuY3Rpb24gZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLnN0YXJ0Q2FsbCwgX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLnB1bGxDYWxsLCBfdGhpczQuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY2FuY2VsQ2FsbF0ubWFwKGZ1bmN0aW9uIChjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5ICYmIGZpbmFsaXplKGNhcGFiaWxpdHkucHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLnN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0X2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU9yUmVqZWN0KHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uc3RhcnRDYWxsLCBkYXRhLnN1Y2Nlc3MsIHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwdWxsX2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU9yUmVqZWN0KHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0ucHVsbENhbGwsIGRhdGEuc3VjY2Vzcywgd3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3B1bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXS5kZXNpcmVkU2l6ZSA9IGRhdGEuZGVzaXJlZFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVDYWxsKHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0ub25QdWxsKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbnF1ZXVlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXSwgJ2VucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uaXNDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGRhdGEuY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0sICdjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLmNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXSwgJ2Vycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjYW5jZWxfY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlT3JSZWplY3QodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXS5jYW5jZWxDYWxsLCBkYXRhLnN1Y2Nlc3MsIHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhbmNlbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FsbCh0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdLm9uQ2FuY2VsLCBbd3JhcFJlYXNvbihkYXRhLnJlYXNvbildKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAnY2FuY2VsX2NvbXBsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN0cmVhbVJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdjYW5jZWxfY29tcGxldGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXS5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzdHJlYW0gY2FzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24gcG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmZXJzICYmIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2ZlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSlcbiAgICAgICAgICAgIC8qKioqKiovIF0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZGYud29ya2VyLmpzLm1hcFxuIiwiLyoqXG4gKiBAbGljc3RhcnQgVGhlIGZvbGxvd2luZyBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqXG4gKiBDb3B5cmlnaHQgMjAxOCBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogVGhpcyB3b3VsZCBwcm92ZSBJJ3ZlIGdvdCBhdCBsZWFzdCBzb21lIGNvbnRyb2wuLi5cbiAqXG4gKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGVcbiAqIEphdmFzY3JpcHQgY29kZSBpbiB0aGlzIHBhZ2VcbiAqL1xuXG4oZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuICAgIGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcbiAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG4gICAgZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG4gICAgICAgIGRlZmluZShcImV4dHJhY3RoaWdobGlnaHRzLWRpc3QvYnVpbGQvZXh0cmFjdGhpZ2hsaWdodHNcIiwgW10sIGZhY3RvcnkpO1xuICAgIGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuICAgICAgICBleHBvcnRzW1wiZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0c1wiXSA9IGZhY3RvcnkoKTtcbiAgICBlbHNlXG4gICAgICAgIHJvb3RbXCJleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzXCJdID0gcm9vdC5leHRyYWN0aGlnaGxpZ2h0c0xpYiA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAvKioqKioqLyAoZnVuY3Rpb24obW9kdWxlcykgeyAvLyB3ZWJwYWNrQm9vdHN0cmFwXG4gICAgICAgIC8qKioqKiovIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuICAgICAgICAvKioqKioqLyBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiAgICAgICAgLyoqKioqKi8gXHRmdW5jdGlvbiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4gICAgICAgICAgICAvKioqKioqL1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdH1cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuICAgICAgICAgICAgLyoqKioqKi8gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRpOiBtb2R1bGVJZCxcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRleHBvcnRzOiB7fVxuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHR9O1xuICAgICAgICAgICAgLyoqKioqKi9cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKTtcbiAgICAgICAgICAgIC8qKioqKiovXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuICAgICAgICAgICAgLyoqKioqKi8gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcbiAgICAgICAgICAgIC8qKioqKiovXG4gICAgICAgICAgICAvKioqKioqLyBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICAvKioqKioqLyBcdH1cbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuICAgICAgICAvKioqKioqLyBcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuICAgICAgICAvKioqKioqLyBcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKCFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0fVxuICAgICAgICAgICAgLyoqKioqKi8gXHR9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gICAgICAgICAgICAgICAgLyoqKioqKi8gXHRcdH1cbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICAgICAgICAgICAgLyoqKioqKi8gXHR9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuICAgICAgICAvKioqKioqLyBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuICAgICAgICAvKioqKioqLyBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuICAgICAgICAvKioqKioqLyBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuICAgICAgICAvKioqKioqLyBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18odmFsdWUpO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ucihucyk7XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHRyZXR1cm4gbnM7XG4gICAgICAgICAgICAvKioqKioqLyBcdH07XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiAgICAgICAgLyoqKioqKi8gXHRfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiAgICAgICAgICAgIC8qKioqKiovIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiAgICAgICAgICAgICAgICAvKioqKioqLyBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuICAgICAgICAgICAgICAgIC8qKioqKiovIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gICAgICAgICAgICAvKioqKioqLyBcdFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuICAgICAgICAgICAgLyoqKioqKi8gXHRcdHJldHVybiBnZXR0ZXI7XG4gICAgICAgICAgICAvKioqKioqLyBcdH07XG4gICAgICAgIC8qKioqKiovXG4gICAgICAgIC8qKioqKiovIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuICAgICAgICAvKioqKioqL1xuICAgICAgICAvKioqKioqLyBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gICAgICAgIC8qKioqKiovIFx0X193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5wID0gXCJcIjtcbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi9cbiAgICAgICAgLyoqKioqKi8gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiAgICAgICAgLyoqKioqKi8gXHRyZXR1cm4gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyhfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLnMgPSAwKTtcbiAgICAgICAgLyoqKioqKi8gfSlcbiAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbiAgICAgICAgLyoqKioqKi8gKFtcbiAgICAgICAgICAgIC8qIDAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFjdGhpZ2hsaWdodHNWZXJzaW9uID0gJzIuMS4yNjYnO1xuICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c0J1aWxkID0gJzgxZjU4MzVjJztcblxuICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ2KTtcblxuICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlUZXh0TGF5ZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5QW5ub3RhdGlvbkxheWVyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheURPTVV0aWxzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheVNWRyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY0KTtcblxuICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlXb3JrZXJPcHRpb25zID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSUNvbXBhdGliaWxpdHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Myk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc05vZGVKUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBQREZOb2RlU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjUpLlBERk5vZGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSS5zZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeShmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQREZOb2RlU3RyZWFtKHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgUmVzcG9uc2UgIT09ICd1bmRlZmluZWQnICYmICdib2R5JyBpbiBSZXNwb25zZS5wcm90b3R5cGUgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFBERkZldGNoU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjgpLlBERkZldGNoU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlBUEkuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUERGRmV0Y2hTdHJlYW0ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFBERk5ldHdvcmtTdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2OSkuUERGTmV0d29ya1N0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5QVBJLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBERk5ldHdvcmtTdHJlYW0ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGV4cG9ydHMuYnVpbGQgPSBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlBUEkuYnVpbGQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52ZXJzaW9uID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5QVBJLnZlcnNpb247XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXREb2N1bWVudCA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSS5nZXREb2N1bWVudDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkxvb3BiYWNrUG9ydCA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSS5Mb29wYmFja1BvcnQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZEYXRhUmFuZ2VUcmFuc3BvcnQgPSBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlBUEkuUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGV29ya2VyID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5QVBJLlBERldvcmtlcjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbmRlclRleHRMYXllciA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheVRleHRMYXllci5yZW5kZXJUZXh0TGF5ZXI7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSBleHRyYWN0aGlnaGxpZ2h0c0Rpc3BsYXlBbm5vdGF0aW9uTGF5ZXIuQW5ub3RhdGlvbkxheWVyO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QYXNzd29yZFJlc3BvbnNlcyA9IGV4dHJhY3RoaWdobGlnaHRzU2hhcmVkVXRpbC5QYXNzd29yZFJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICBleHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuSW52YWxpZFBERkV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk1pc3NpbmdQREZFeGNlcHRpb24gPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlNWR0dyYXBoaWNzID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5U1ZHLlNWR0dyYXBoaWNzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuTmF0aXZlSW1hZ2VEZWNvZGluZyA9IGV4dHJhY3RoaWdobGlnaHRzU2hhcmVkVXRpbC5OYXRpdmVJbWFnZURlY29kaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IGV4dHJhY3RoaWdobGlnaHRzU2hhcmVkVXRpbC5DTWFwQ29tcHJlc3Npb25UeXBlO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuUGVybWlzc2lvbkZsYWc7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuT1BTID0gZXh0cmFjdGhpZ2hsaWdodHNTaGFyZWRVdGlsLk9QUztcbiAgICAgICAgICAgICAgICBleHBvcnRzLlZlcmJvc2l0eUxldmVsID0gZXh0cmFjdGhpZ2hsaWdodHNTaGFyZWRVdGlsLlZlcmJvc2l0eUxldmVsO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVU5TVVBQT1JURURfRkVBVFVSRVMgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuVU5TVVBQT1JURURfRkVBVFVSRVM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVWYWxpZEFic29sdXRlVXJsID0gZXh0cmFjdGhpZ2hsaWdodHNTaGFyZWRVdGlsLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVPYmplY3RVUkwgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuY3JlYXRlT2JqZWN0VVJMO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVtb3ZlTnVsbENoYXJhY3RlcnMgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwucmVtb3ZlTnVsbENoYXJhY3RlcnM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zaGFkb3cgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuc2hhZG93O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVXRpbCA9IGV4dHJhY3RoaWdobGlnaHRzU2hhcmVkVXRpbC5VdGlsO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVhZGFibGVTdHJlYW0gPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VUkwgPSBleHRyYWN0aGlnaGxpZ2h0c1NoYXJlZFV0aWwuVVJMO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5RE9NVXRpbHMuUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0RmlsZW5hbWVGcm9tVXJsID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5RE9NVXRpbHMuZ2V0RmlsZW5hbWVGcm9tVXJsO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuTGlua1RhcmdldCA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheURPTVV0aWxzLkxpbmtUYXJnZXQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5hZGRMaW5rQXR0cmlidXRlcyA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheURPTVV0aWxzLmFkZExpbmtBdHRyaWJ1dGVzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMubG9hZFNjcmlwdCA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheURPTVV0aWxzLmxvYWRTY3JpcHQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5HbG9iYWxXb3JrZXJPcHRpb25zID0gZXh0cmFjdGhpZ2hsaWdodHNEaXNwbGF5V29ya2VyT3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcyA9IGV4dHJhY3RoaWdobGlnaHRzRGlzcGxheUFQSUNvbXBhdGliaWxpdHkuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudG9Sb21hbk51bWVyYWxzID0gdG9Sb21hbk51bWVyYWxzO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYXJyYXlCeXRlTGVuZ3RoID0gYXJyYXlCeXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuYXJyYXlzVG9CeXRlcyA9IGFycmF5c1RvQnl0ZXM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5hc3NlcnQgPSBhc3NlcnQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5ieXRlc1RvU3RyaW5nID0gYnl0ZXNUb1N0cmluZztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5ID0gY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5kZXByZWNhdGVkID0gZGVwcmVjYXRlZDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmdldEluaGVyaXRhYmxlUHJvcGVydHkgPSBnZXRJbmhlcml0YWJsZVByb3BlcnR5O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0TG9va3VwVGFibGVGYWN0b3J5ID0gZ2V0TG9va3VwVGFibGVGYWN0b3J5O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZ2V0VmVyYm9zaXR5TGV2ZWwgPSBnZXRWZXJib3NpdHlMZXZlbDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmluZm8gPSBpbmZvO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNBcnJheUJ1ZmZlciA9IGlzQXJyYXlCdWZmZXI7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0Jvb2wgPSBpc0Jvb2w7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0VtcHR5T2JqID0gaXNFbXB0eU9iajtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzTnVtID0gaXNOdW07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuaXNTcGFjZSA9IGlzU3BhY2U7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc1NhbWVPcmlnaW4gPSBpc1NhbWVPcmlnaW47XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVWYWxpZEFic29sdXRlVXJsID0gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmlzTGl0dGxlRW5kaWFuID0gaXNMaXR0bGVFbmRpYW47XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5sb2cyID0gbG9nMjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlYWRJbnQ4ID0gcmVhZEludDg7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5yZWFkVWludDE2ID0gcmVhZFVpbnQxNjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlYWRVaW50MzIgPSByZWFkVWludDMyO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVtb3ZlTnVsbENoYXJhY3RlcnMgPSByZW1vdmVOdWxsQ2hhcmFjdGVycztcbiAgICAgICAgICAgICAgICBleHBvcnRzLnNldFZlcmJvc2l0eUxldmVsID0gc2V0VmVyYm9zaXR5TGV2ZWw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zaGFkb3cgPSBzaGFkb3c7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zdHJpbmczMiA9IHN0cmluZzMyO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RyaW5nVG9CeXRlcyA9IHN0cmluZ1RvQnl0ZXM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5zdHJpbmdUb1BERlN0cmluZyA9IHN0cmluZ1RvUERGU3RyaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc3RyaW5nVG9VVEY4U3RyaW5nID0gc3RyaW5nVG9VVEY4U3RyaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudXRmOFN0cmluZ1RvU3RyaW5nID0gdXRmOFN0cmluZ1RvU3RyaW5nO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMud2FybiA9IHdhcm47XG4gICAgICAgICAgICAgICAgZXhwb3J0cy51bnJlYWNoYWJsZSA9IHVucmVhY2hhYmxlO1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlYWRhYmxlU3RyZWFtXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3N0cmVhbXNfcG9seWZpbGwuUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJVUkxcIiwge1xuICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXJsX3BvbHlmaWxsLlVSTDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlT2JqZWN0VVJMID0gZXhwb3J0cy5Gb3JtYXRFcnJvciA9IGV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gZXhwb3J0cy5YUmVmRW50cnlFeGNlcHRpb24gPSBleHBvcnRzLlV0aWwgPSBleHBvcnRzLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IGV4cG9ydHMuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uID0gZXhwb3J0cy5UZXh0UmVuZGVyaW5nTW9kZSA9IGV4cG9ydHMuU3RyZWFtVHlwZSA9IGV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBleHBvcnRzLlBhc3N3b3JkUmVzcG9uc2VzID0gZXhwb3J0cy5QYXNzd29yZEV4Y2VwdGlvbiA9IGV4cG9ydHMuTmF0aXZlSW1hZ2VEZWNvZGluZyA9IGV4cG9ydHMuTWlzc2luZ1BERkV4Y2VwdGlvbiA9IGV4cG9ydHMuTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBleHBvcnRzLkludmFsaWRQREZFeGNlcHRpb24gPSBleHBvcnRzLkFib3J0RXhjZXB0aW9uID0gZXhwb3J0cy5DTWFwQ29tcHJlc3Npb25UeXBlID0gZXhwb3J0cy5JbWFnZUtpbmQgPSBleHBvcnRzLkZvbnRUeXBlID0gZXhwb3J0cy5Bbm5vdGF0aW9uVHlwZSA9IGV4cG9ydHMuQW5ub3RhdGlvbkZsYWcgPSBleHBvcnRzLkFubm90YXRpb25GaWVsZEZsYWcgPSBleHBvcnRzLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUgPSBleHBvcnRzLlVOU1VQUE9SVEVEX0ZFQVRVUkVTID0gZXhwb3J0cy5WZXJib3NpdHlMZXZlbCA9IGV4cG9ydHMuT1BTID0gZXhwb3J0cy5JREVOVElUWV9NQVRSSVggPSBleHBvcnRzLkZPTlRfSURFTlRJVFlfTUFUUklYID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyZWFtc19wb2x5ZmlsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXJsX3BvbHlmaWxsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDQpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIHZhciBJREVOVElUWV9NQVRSSVggPSBbMSwgMCwgMCwgMSwgMCwgMF07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5JREVOVElUWV9NQVRSSVggPSBJREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgdmFyIEZPTlRfSURFTlRJVFlfTUFUUklYID0gWzAuMDAxLCAwLCAwLCAwLjAwMSwgMCwgMF07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5GT05UX0lERU5USVRZX01BVFJJWCA9IEZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgIHZhciBOYXRpdmVJbWFnZURlY29kaW5nID0ge1xuICAgICAgICAgICAgICAgICAgICBOT05FOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgIERFQ09ERTogJ2RlY29kZScsXG4gICAgICAgICAgICAgICAgICAgIERJU1BMQVk6ICdkaXNwbGF5J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5OYXRpdmVJbWFnZURlY29kaW5nID0gTmF0aXZlSW1hZ2VEZWNvZGluZztcbiAgICAgICAgICAgICAgICB2YXIgUGVybWlzc2lvbkZsYWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIFBSSU5UOiAweDA0LFxuICAgICAgICAgICAgICAgICAgICBNT0RJRllfQ09OVEVOVFM6IDB4MDgsXG4gICAgICAgICAgICAgICAgICAgIENPUFk6IDB4MTAsXG4gICAgICAgICAgICAgICAgICAgIE1PRElGWV9BTk5PVEFUSU9OUzogMHgyMCxcbiAgICAgICAgICAgICAgICAgICAgRklMTF9JTlRFUkFDVElWRV9GT1JNUzogMHgxMDAsXG4gICAgICAgICAgICAgICAgICAgIENPUFlfRk9SX0FDQ0VTU0lCSUxJVFk6IDB4MjAwLFxuICAgICAgICAgICAgICAgICAgICBBU1NFTUJMRTogMHg0MDAsXG4gICAgICAgICAgICAgICAgICAgIFBSSU5UX0hJR0hfUVVBTElUWTogMHg4MDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGVybWlzc2lvbkZsYWcgPSBQZXJtaXNzaW9uRmxhZztcbiAgICAgICAgICAgICAgICB2YXIgVGV4dFJlbmRlcmluZ01vZGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIEZJTEw6IDAsXG4gICAgICAgICAgICAgICAgICAgIFNUUk9LRTogMSxcbiAgICAgICAgICAgICAgICAgICAgRklMTF9TVFJPS0U6IDIsXG4gICAgICAgICAgICAgICAgICAgIElOVklTSUJMRTogMyxcbiAgICAgICAgICAgICAgICAgICAgRklMTF9BRERfVE9fUEFUSDogNCxcbiAgICAgICAgICAgICAgICAgICAgU1RST0tFX0FERF9UT19QQVRIOiA1LFxuICAgICAgICAgICAgICAgICAgICBGSUxMX1NUUk9LRV9BRERfVE9fUEFUSDogNixcbiAgICAgICAgICAgICAgICAgICAgQUREX1RPX1BBVEg6IDcsXG4gICAgICAgICAgICAgICAgICAgIEZJTExfU1RST0tFX01BU0s6IDMsXG4gICAgICAgICAgICAgICAgICAgIEFERF9UT19QQVRIX0ZMQUc6IDRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVGV4dFJlbmRlcmluZ01vZGUgPSBUZXh0UmVuZGVyaW5nTW9kZTtcbiAgICAgICAgICAgICAgICB2YXIgSW1hZ2VLaW5kID0ge1xuICAgICAgICAgICAgICAgICAgICBHUkFZU0NBTEVfMUJQUDogMSxcbiAgICAgICAgICAgICAgICAgICAgUkdCXzI0QlBQOiAyLFxuICAgICAgICAgICAgICAgICAgICBSR0JBXzMyQlBQOiAzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkltYWdlS2luZCA9IEltYWdlS2luZDtcbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvblR5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIFRFWFQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIExJTks6IDIsXG4gICAgICAgICAgICAgICAgICAgIEZSRUVURVhUOiAzLFxuICAgICAgICAgICAgICAgICAgICBMSU5FOiA0LFxuICAgICAgICAgICAgICAgICAgICBTUVVBUkU6IDUsXG4gICAgICAgICAgICAgICAgICAgIENJUkNMRTogNixcbiAgICAgICAgICAgICAgICAgICAgUE9MWUdPTjogNyxcbiAgICAgICAgICAgICAgICAgICAgUE9MWUxJTkU6IDgsXG4gICAgICAgICAgICAgICAgICAgIEhJR0hMSUdIVDogOSxcbiAgICAgICAgICAgICAgICAgICAgVU5ERVJMSU5FOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgU1FVSUdHTFk6IDExLFxuICAgICAgICAgICAgICAgICAgICBTVFJJS0VPVVQ6IDEyLFxuICAgICAgICAgICAgICAgICAgICBTVEFNUDogMTMsXG4gICAgICAgICAgICAgICAgICAgIENBUkVUOiAxNCxcbiAgICAgICAgICAgICAgICAgICAgSU5LOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgUE9QVVA6IDE2LFxuICAgICAgICAgICAgICAgICAgICBGSUxFQVRUQUNITUVOVDogMTcsXG4gICAgICAgICAgICAgICAgICAgIFNPVU5EOiAxOCxcbiAgICAgICAgICAgICAgICAgICAgTU9WSUU6IDE5LFxuICAgICAgICAgICAgICAgICAgICBXSURHRVQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICBTQ1JFRU46IDIxLFxuICAgICAgICAgICAgICAgICAgICBQUklOVEVSTUFSSzogMjIsXG4gICAgICAgICAgICAgICAgICAgIFRSQVBORVQ6IDIzLFxuICAgICAgICAgICAgICAgICAgICBXQVRFUk1BUks6IDI0LFxuICAgICAgICAgICAgICAgICAgICBUSFJFRUQ6IDI1LFxuICAgICAgICAgICAgICAgICAgICBSRURBQ1Q6IDI2XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkFubm90YXRpb25UeXBlID0gQW5ub3RhdGlvblR5cGU7XG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb25GbGFnID0ge1xuICAgICAgICAgICAgICAgICAgICBJTlZJU0lCTEU6IDB4MDEsXG4gICAgICAgICAgICAgICAgICAgIEhJRERFTjogMHgwMixcbiAgICAgICAgICAgICAgICAgICAgUFJJTlQ6IDB4MDQsXG4gICAgICAgICAgICAgICAgICAgIE5PWk9PTTogMHgwOCxcbiAgICAgICAgICAgICAgICAgICAgTk9ST1RBVEU6IDB4MTAsXG4gICAgICAgICAgICAgICAgICAgIE5PVklFVzogMHgyMCxcbiAgICAgICAgICAgICAgICAgICAgUkVBRE9OTFk6IDB4NDAsXG4gICAgICAgICAgICAgICAgICAgIExPQ0tFRDogMHg4MCxcbiAgICAgICAgICAgICAgICAgICAgVE9HR0xFTk9WSUVXOiAweDEwMCxcbiAgICAgICAgICAgICAgICAgICAgTE9DS0VEQ09OVEVOVFM6IDB4MjAwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkFubm90YXRpb25GbGFnID0gQW5ub3RhdGlvbkZsYWc7XG4gICAgICAgICAgICAgICAgdmFyIEFubm90YXRpb25GaWVsZEZsYWcgPSB7XG4gICAgICAgICAgICAgICAgICAgIFJFQURPTkxZOiAweDAwMDAwMDEsXG4gICAgICAgICAgICAgICAgICAgIFJFUVVJUkVEOiAweDAwMDAwMDIsXG4gICAgICAgICAgICAgICAgICAgIE5PRVhQT1JUOiAweDAwMDAwMDQsXG4gICAgICAgICAgICAgICAgICAgIE1VTFRJTElORTogMHgwMDAxMDAwLFxuICAgICAgICAgICAgICAgICAgICBQQVNTV09SRDogMHgwMDAyMDAwLFxuICAgICAgICAgICAgICAgICAgICBOT1RPR0dMRVRPT0ZGOiAweDAwMDQwMDAsXG4gICAgICAgICAgICAgICAgICAgIFJBRElPOiAweDAwMDgwMDAsXG4gICAgICAgICAgICAgICAgICAgIFBVU0hCVVRUT046IDB4MDAxMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgQ09NQk86IDB4MDAyMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgRURJVDogMHgwMDQwMDAwLFxuICAgICAgICAgICAgICAgICAgICBTT1JUOiAweDAwODAwMDAsXG4gICAgICAgICAgICAgICAgICAgIEZJTEVTRUxFQ1Q6IDB4MDEwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgTVVMVElTRUxFQ1Q6IDB4MDIwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgRE9OT1RTUEVMTENIRUNLOiAweDA0MDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIERPTk9UU0NST0xMOiAweDA4MDAwMDAsXG4gICAgICAgICAgICAgICAgICAgIENPTUI6IDB4MTAwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgUklDSFRFWFQ6IDB4MjAwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgUkFESU9TSU5VTklTT046IDB4MjAwMDAwMCxcbiAgICAgICAgICAgICAgICAgICAgQ09NTUlUT05TRUxDSEFOR0U6IDB4NDAwMDAwMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uRmllbGRGbGFnID0gQW5ub3RhdGlvbkZpZWxkRmxhZztcbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgU09MSUQ6IDEsXG4gICAgICAgICAgICAgICAgICAgIERBU0hFRDogMixcbiAgICAgICAgICAgICAgICAgICAgQkVWRUxFRDogMyxcbiAgICAgICAgICAgICAgICAgICAgSU5TRVQ6IDQsXG4gICAgICAgICAgICAgICAgICAgIFVOREVSTElORTogNVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlID0gQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZTtcbiAgICAgICAgICAgICAgICB2YXIgU3RyZWFtVHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgVU5LTk9XTjogMCxcbiAgICAgICAgICAgICAgICAgICAgRkxBVEU6IDEsXG4gICAgICAgICAgICAgICAgICAgIExaVzogMixcbiAgICAgICAgICAgICAgICAgICAgRENUOiAzLFxuICAgICAgICAgICAgICAgICAgICBKUFg6IDQsXG4gICAgICAgICAgICAgICAgICAgIEpCSUc6IDUsXG4gICAgICAgICAgICAgICAgICAgIEE4NTogNixcbiAgICAgICAgICAgICAgICAgICAgQUhYOiA3LFxuICAgICAgICAgICAgICAgICAgICBDQ0Y6IDgsXG4gICAgICAgICAgICAgICAgICAgIFJMOiA5XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlN0cmVhbVR5cGUgPSBTdHJlYW1UeXBlO1xuICAgICAgICAgICAgICAgIHZhciBGb250VHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgVU5LTk9XTjogMCxcbiAgICAgICAgICAgICAgICAgICAgVFlQRTE6IDEsXG4gICAgICAgICAgICAgICAgICAgIFRZUEUxQzogMixcbiAgICAgICAgICAgICAgICAgICAgQ0lERk9OVFRZUEUwOiAzLFxuICAgICAgICAgICAgICAgICAgICBDSURGT05UVFlQRTBDOiA0LFxuICAgICAgICAgICAgICAgICAgICBUUlVFVFlQRTogNSxcbiAgICAgICAgICAgICAgICAgICAgQ0lERk9OVFRZUEUyOiA2LFxuICAgICAgICAgICAgICAgICAgICBUWVBFMzogNyxcbiAgICAgICAgICAgICAgICAgICAgT1BFTlRZUEU6IDgsXG4gICAgICAgICAgICAgICAgICAgIFRZUEUwOiA5LFxuICAgICAgICAgICAgICAgICAgICBNTVRZUEUxOiAxMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250VHlwZSA9IEZvbnRUeXBlO1xuICAgICAgICAgICAgICAgIHZhciBWZXJib3NpdHlMZXZlbCA9IHtcbiAgICAgICAgICAgICAgICAgICAgRVJST1JTOiAwLFxuICAgICAgICAgICAgICAgICAgICBXQVJOSU5HUzogMSxcbiAgICAgICAgICAgICAgICAgICAgSU5GT1M6IDVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVmVyYm9zaXR5TGV2ZWwgPSBWZXJib3NpdHlMZXZlbDtcbiAgICAgICAgICAgICAgICB2YXIgQ01hcENvbXByZXNzaW9uVHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgTk9ORTogMCxcbiAgICAgICAgICAgICAgICAgICAgQklOQVJZOiAxLFxuICAgICAgICAgICAgICAgICAgICBTVFJFQU06IDJcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ01hcENvbXByZXNzaW9uVHlwZSA9IENNYXBDb21wcmVzc2lvblR5cGU7XG4gICAgICAgICAgICAgICAgdmFyIE9QUyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGVwZW5kZW5jeTogMSxcbiAgICAgICAgICAgICAgICAgICAgc2V0TGluZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICBzZXRMaW5lQ2FwOiAzLFxuICAgICAgICAgICAgICAgICAgICBzZXRMaW5lSm9pbjogNCxcbiAgICAgICAgICAgICAgICAgICAgc2V0TWl0ZXJMaW1pdDogNSxcbiAgICAgICAgICAgICAgICAgICAgc2V0RGFzaDogNixcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVuZGVyaW5nSW50ZW50OiA3LFxuICAgICAgICAgICAgICAgICAgICBzZXRGbGF0bmVzczogOCxcbiAgICAgICAgICAgICAgICAgICAgc2V0R1N0YXRlOiA5LFxuICAgICAgICAgICAgICAgICAgICBzYXZlOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZTogMTEsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogMTIsXG4gICAgICAgICAgICAgICAgICAgIG1vdmVUbzogMTMsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVUbzogMTQsXG4gICAgICAgICAgICAgICAgICAgIGN1cnZlVG86IDE1LFxuICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvMjogMTYsXG4gICAgICAgICAgICAgICAgICAgIGN1cnZlVG8zOiAxNyxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VQYXRoOiAxOCxcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlOiAxOSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAyMCxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VTdHJva2U6IDIxLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAyMixcbiAgICAgICAgICAgICAgICAgICAgZW9GaWxsOiAyMyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbFN0cm9rZTogMjQsXG4gICAgICAgICAgICAgICAgICAgIGVvRmlsbFN0cm9rZTogMjUsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlRmlsbFN0cm9rZTogMjYsXG4gICAgICAgICAgICAgICAgICAgIGNsb3NlRU9GaWxsU3Ryb2tlOiAyNyxcbiAgICAgICAgICAgICAgICAgICAgZW5kUGF0aDogMjgsXG4gICAgICAgICAgICAgICAgICAgIGNsaXA6IDI5LFxuICAgICAgICAgICAgICAgICAgICBlb0NsaXA6IDMwLFxuICAgICAgICAgICAgICAgICAgICBiZWdpblRleHQ6IDMxLFxuICAgICAgICAgICAgICAgICAgICBlbmRUZXh0OiAzMixcbiAgICAgICAgICAgICAgICAgICAgc2V0Q2hhclNwYWNpbmc6IDMzLFxuICAgICAgICAgICAgICAgICAgICBzZXRXb3JkU3BhY2luZzogMzQsXG4gICAgICAgICAgICAgICAgICAgIHNldEhTY2FsZTogMzUsXG4gICAgICAgICAgICAgICAgICAgIHNldExlYWRpbmc6IDM2LFxuICAgICAgICAgICAgICAgICAgICBzZXRGb250OiAzNyxcbiAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IDM4LFxuICAgICAgICAgICAgICAgICAgICBzZXRUZXh0UmlzZTogMzksXG4gICAgICAgICAgICAgICAgICAgIG1vdmVUZXh0OiA0MCxcbiAgICAgICAgICAgICAgICAgICAgc2V0TGVhZGluZ01vdmVUZXh0OiA0MSxcbiAgICAgICAgICAgICAgICAgICAgc2V0VGV4dE1hdHJpeDogNDIsXG4gICAgICAgICAgICAgICAgICAgIG5leHRMaW5lOiA0MyxcbiAgICAgICAgICAgICAgICAgICAgc2hvd1RleHQ6IDQ0LFxuICAgICAgICAgICAgICAgICAgICBzaG93U3BhY2VkVGV4dDogNDUsXG4gICAgICAgICAgICAgICAgICAgIG5leHRMaW5lU2hvd1RleHQ6IDQ2LFxuICAgICAgICAgICAgICAgICAgICBuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDogNDcsXG4gICAgICAgICAgICAgICAgICAgIHNldENoYXJXaWR0aDogNDgsXG4gICAgICAgICAgICAgICAgICAgIHNldENoYXJXaWR0aEFuZEJvdW5kczogNDksXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUNvbG9yU3BhY2U6IDUwLFxuICAgICAgICAgICAgICAgICAgICBzZXRGaWxsQ29sb3JTcGFjZTogNTEsXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUNvbG9yOiA1MixcbiAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlQ29sb3JOOiA1MyxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbENvbG9yOiA1NCxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbENvbG9yTjogNTUsXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZUdyYXk6IDU2LFxuICAgICAgICAgICAgICAgICAgICBzZXRGaWxsR3JheTogNTcsXG4gICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZVJHQkNvbG9yOiA1OCxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbFJHQkNvbG9yOiA1OSxcbiAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlQ01ZS0NvbG9yOiA2MCxcbiAgICAgICAgICAgICAgICAgICAgc2V0RmlsbENNWUtDb2xvcjogNjEsXG4gICAgICAgICAgICAgICAgICAgIHNoYWRpbmdGaWxsOiA2MixcbiAgICAgICAgICAgICAgICAgICAgYmVnaW5JbmxpbmVJbWFnZTogNjMsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luSW1hZ2VEYXRhOiA2NCxcbiAgICAgICAgICAgICAgICAgICAgZW5kSW5saW5lSW1hZ2U6IDY1LFxuICAgICAgICAgICAgICAgICAgICBwYWludFhPYmplY3Q6IDY2LFxuICAgICAgICAgICAgICAgICAgICBtYXJrUG9pbnQ6IDY3LFxuICAgICAgICAgICAgICAgICAgICBtYXJrUG9pbnRQcm9wczogNjgsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luTWFya2VkQ29udGVudDogNjksXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiA3MCxcbiAgICAgICAgICAgICAgICAgICAgZW5kTWFya2VkQ29udGVudDogNzEsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQ29tcGF0OiA3MixcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29tcGF0OiA3MyxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRGb3JtWE9iamVjdEJlZ2luOiA3NCxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRGb3JtWE9iamVjdEVuZDogNzUsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luR3JvdXA6IDc2LFxuICAgICAgICAgICAgICAgICAgICBlbmRHcm91cDogNzcsXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQW5ub3RhdGlvbnM6IDc4LFxuICAgICAgICAgICAgICAgICAgICBlbmRBbm5vdGF0aW9uczogNzksXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luQW5ub3RhdGlvbjogODAsXG4gICAgICAgICAgICAgICAgICAgIGVuZEFubm90YXRpb246IDgxLFxuICAgICAgICAgICAgICAgICAgICBwYWludEpwZWdYT2JqZWN0OiA4MixcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiA4MyxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6IDg0LFxuICAgICAgICAgICAgICAgICAgICBwYWludEltYWdlWE9iamVjdDogODUsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OiA4NixcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDogODcsXG4gICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OiA4OCxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0OiA4OSxcbiAgICAgICAgICAgICAgICAgICAgcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOiA5MCxcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0UGF0aDogOTFcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuT1BTID0gT1BTO1xuICAgICAgICAgICAgICAgIHZhciBVTlNVUFBPUlRFRF9GRUFUVVJFUyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdW5rbm93bjogJ3Vua25vd24nLFxuICAgICAgICAgICAgICAgICAgICBmb3JtczogJ2Zvcm1zJyxcbiAgICAgICAgICAgICAgICAgICAgamF2YVNjcmlwdDogJ2phdmFTY3JpcHQnLFxuICAgICAgICAgICAgICAgICAgICBzbWFzazogJ3NtYXNrJyxcbiAgICAgICAgICAgICAgICAgICAgc2hhZGluZ1BhdHRlcm46ICdzaGFkaW5nUGF0dGVybicsXG4gICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdmb250J1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VTlNVUFBPUlRFRF9GRUFUVVJFUyA9IFVOU1VQUE9SVEVEX0ZFQVRVUkVTO1xuICAgICAgICAgICAgICAgIHZhciBQYXNzd29yZFJlc3BvbnNlcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgTkVFRF9QQVNTV09SRDogMSxcbiAgICAgICAgICAgICAgICAgICAgSU5DT1JSRUNUX1BBU1NXT1JEOiAyXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlBhc3N3b3JkUmVzcG9uc2VzID0gUGFzc3dvcmRSZXNwb25zZXM7XG4gICAgICAgICAgICAgICAgdmFyIHZlcmJvc2l0eSA9IFZlcmJvc2l0eUxldmVsLldBUk5JTkdTO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0VmVyYm9zaXR5TGV2ZWwobGV2ZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIobGV2ZWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHkgPSBsZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFZlcmJvc2l0eUxldmVsKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVyYm9zaXR5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluZm8obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NpdHkgPj0gVmVyYm9zaXR5TGV2ZWwuSU5GT1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbmZvOiAnICsgbXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NpdHkgPj0gVmVyYm9zaXR5TGV2ZWwuV0FSTklOR1MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdXYXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZWQoZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRGVwcmVjYXRlZCBBUEkgdXNhZ2U6ICcgKyBkZXRhaWxzKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bnJlYWNoYWJsZShtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXNzZXJ0KGNvbmQsIG1zZykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVucmVhY2hhYmxlKG1zZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1NhbWVPcmlnaW4oYmFzZVVybCwgb3RoZXJVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlID0gbmV3IF91cmxfcG9seWZpbGwuVVJMKGJhc2VVcmwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2Uub3JpZ2luIHx8IGJhc2Uub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IG5ldyBfdXJsX3BvbHlmaWxsLlVSTChvdGhlclVybCwgYmFzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLm9yaWdpbiA9PT0gb3RoZXIub3JpZ2luO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pc1ZhbGlkUHJvdG9jb2wodXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHVybC5wcm90b2NvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHR0cDonOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaHR0cHM6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z0cDonOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWFpbHRvOic6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZWw6JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVWYWxpZEFic29sdXRlVXJsKHVybCwgYmFzZVVybCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFic29sdXRlVXJsID0gYmFzZVVybCA/IG5ldyBfdXJsX3BvbHlmaWxsLlVSTCh1cmwsIGJhc2VVcmwpIDogbmV3IF91cmxfcG9seWZpbGwuVVJMKHVybCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXNWYWxpZFByb3RvY29sKGFic29sdXRlVXJsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhYnNvbHV0ZVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc2hhZG93KG9iaiwgcHJvcCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgcHJvcCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldExvb2t1cFRhYmxlRmFjdG9yeShpbml0aWFsaXplcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbG9va3VwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWxpemVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplcihsb29rdXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvb2t1cDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUGFzc3dvcmRFeGNlcHRpb24gPSBmdW5jdGlvbiBQYXNzd29yZEV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBhc3N3b3JkRXhjZXB0aW9uKG1zZywgY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ1Bhc3N3b3JkRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBQYXNzd29yZEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgUGFzc3dvcmRFeGNlcHRpb24uY29uc3RydWN0b3IgPSBQYXNzd29yZEV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhc3N3b3JkRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUGFzc3dvcmRFeGNlcHRpb24gPSBQYXNzd29yZEV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBVbmtub3duRXJyb3JFeGNlcHRpb24gPSBmdW5jdGlvbiBVbmtub3duRXJyb3JFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBVbmtub3duRXJyb3JFeGNlcHRpb24obXNnLCBkZXRhaWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnVW5rbm93bkVycm9yRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBVbmtub3duRXJyb3JFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFVua25vd25FcnJvckV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IFVua25vd25FcnJvckV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVua25vd25FcnJvckV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlVua25vd25FcnJvckV4Y2VwdGlvbiA9IFVua25vd25FcnJvckV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBJbnZhbGlkUERGRXhjZXB0aW9uID0gZnVuY3Rpb24gSW52YWxpZFBERkV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEludmFsaWRQREZFeGNlcHRpb24obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnSW52YWxpZFBERkV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBJbnZhbGlkUERGRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBJbnZhbGlkUERGRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gSW52YWxpZFBERkV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludmFsaWRQREZFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5JbnZhbGlkUERGRXhjZXB0aW9uID0gSW52YWxpZFBERkV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBNaXNzaW5nUERGRXhjZXB0aW9uID0gZnVuY3Rpb24gTWlzc2luZ1BERkV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIE1pc3NpbmdQREZFeGNlcHRpb24obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1BERkV4Y2VwdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBNaXNzaW5nUERGRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBNaXNzaW5nUERGRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1pc3NpbmdQREZFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5NaXNzaW5nUERGRXhjZXB0aW9uID0gTWlzc2luZ1BERkV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gPSBmdW5jdGlvbiBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24obXNnLCBzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9ICdVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiA9IFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBNaXNzaW5nRGF0YUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIE1pc3NpbmdEYXRhRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTWlzc2luZ0RhdGFFeGNlcHRpb24oYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbiA9IGJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmQgPSBlbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnTWlzc2luZyBkYXRhIFsnICsgYmVnaW4gKyAnLCAnICsgZW5kICsgJyknO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgTWlzc2luZ0RhdGFFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIE1pc3NpbmdEYXRhRXhjZXB0aW9uLnByb3RvdHlwZS5uYW1lID0gJ01pc3NpbmdEYXRhRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgTWlzc2luZ0RhdGFFeGNlcHRpb24uY29uc3RydWN0b3IgPSBNaXNzaW5nRGF0YUV4Y2VwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1pc3NpbmdEYXRhRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuTWlzc2luZ0RhdGFFeGNlcHRpb24gPSBNaXNzaW5nRGF0YUV4Y2VwdGlvbjtcblxuICAgICAgICAgICAgICAgIHZhciBYUmVmRW50cnlFeGNlcHRpb24gPSBmdW5jdGlvbiBYUmVmRW50cnlFeGNlcHRpb25DbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBYUmVmRW50cnlFeGNlcHRpb24obXNnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtc2c7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBYUmVmRW50cnlFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFhSZWZFbnRyeUV4Y2VwdGlvbi5wcm90b3R5cGUubmFtZSA9ICdYUmVmRW50cnlFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICBYUmVmRW50cnlFeGNlcHRpb24uY29uc3RydWN0b3IgPSBYUmVmRW50cnlFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBYUmVmRW50cnlFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5YUmVmRW50cnlFeGNlcHRpb24gPSBYUmVmRW50cnlFeGNlcHRpb247XG5cbiAgICAgICAgICAgICAgICB2YXIgWFJlZlBhcnNlRXhjZXB0aW9uID0gZnVuY3Rpb24gWFJlZlBhcnNlRXhjZXB0aW9uQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gWFJlZlBhcnNlRXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgWFJlZlBhcnNlRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBYUmVmUGFyc2VFeGNlcHRpb24ucHJvdG90eXBlLm5hbWUgPSAnWFJlZlBhcnNlRXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgWFJlZlBhcnNlRXhjZXB0aW9uLmNvbnN0cnVjdG9yID0gWFJlZlBhcnNlRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWFJlZlBhcnNlRXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuWFJlZlBhcnNlRXhjZXB0aW9uID0gWFJlZlBhcnNlRXhjZXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgdmFyIEZvcm1hdEVycm9yID0gZnVuY3Rpb24gRm9ybWF0RXJyb3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBGb3JtYXRFcnJvcihtc2cpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEZvcm1hdEVycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBGb3JtYXRFcnJvci5wcm90b3R5cGUubmFtZSA9ICdGb3JtYXRFcnJvcic7XG4gICAgICAgICAgICAgICAgICAgIEZvcm1hdEVycm9yLmNvbnN0cnVjdG9yID0gRm9ybWF0RXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBGb3JtYXRFcnJvcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkZvcm1hdEVycm9yID0gRm9ybWF0RXJyb3I7XG5cbiAgICAgICAgICAgICAgICB2YXIgQWJvcnRFeGNlcHRpb24gPSBmdW5jdGlvbiBBYm9ydEV4Y2VwdGlvbkNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFib3J0RXhjZXB0aW9uKG1zZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gJ0Fib3J0RXhjZXB0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEFib3J0RXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICBBYm9ydEV4Y2VwdGlvbi5jb25zdHJ1Y3RvciA9IEFib3J0RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWJvcnRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5BYm9ydEV4Y2VwdGlvbiA9IEFib3J0RXhjZXB0aW9uO1xuICAgICAgICAgICAgICAgIHZhciBOdWxsQ2hhcmFjdGVyc1JlZ0V4cCA9IC9cXHgwMC9nO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlTnVsbENoYXJhY3RlcnMoc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2FybignVGhlIGFyZ3VtZW50IGZvciByZW1vdmVOdWxsQ2hhcmFjdGVycyBtdXN0IGJlIGEgc3RyaW5nLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHIucmVwbGFjZShOdWxsQ2hhcmFjdGVyc1JlZ0V4cCwgJycpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5dGVzVG9TdHJpbmcoYnl0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ5dGVzICE9PSBudWxsICYmIF90eXBlb2YoYnl0ZXMpID09PSAnb2JqZWN0JyAmJiBieXRlcy5sZW5ndGggIT09IHVuZGVmaW5lZCwgJ0ludmFsaWQgYXJndW1lbnQgZm9yIGJ5dGVzVG9TdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9BUkdVTUVOVF9DT1VOVCA9IDgxOTI7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IE1BWF9BUkdVTUVOVF9DT1VOVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgYnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ckJ1ZiA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IE1BWF9BUkdVTUVOVF9DT1VOVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rRW5kID0gTWF0aC5taW4oaSArIE1BWF9BUkdVTUVOVF9DT1VOVCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuayA9IGJ5dGVzLnN1YmFycmF5KGksIGNodW5rRW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ckJ1Zi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnLCAnSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlcycpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gc3RyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tpXSA9IHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBieXRlcztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhcnJheUJ5dGVMZW5ndGgoYXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnIubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGFyci5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXJyYXlzVG9CeXRlcyhhcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyci5sZW5ndGggPT09IDEgJiYgYXJyWzBdIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyclswXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHRMZW5ndGggPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gYXJyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0sIGl0ZW1MZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBhcnJbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtTGVuZ3RoID0gYXJyYXlCeXRlTGVuZ3RoKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0TGVuZ3RoICs9IGl0ZW1MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgVWludDhBcnJheShyZXN1bHRMZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtID0gYXJyW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpdGVtIGluc3RhbmNlb2YgVWludDhBcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBzdHJpbmdUb0J5dGVzKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBuZXcgVWludDhBcnJheShpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1MZW5ndGggPSBpdGVtLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNldChpdGVtLCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IGl0ZW1MZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJpbmczMih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZSA+PiAyNCAmIDB4ZmYsIHZhbHVlID4+IDE2ICYgMHhmZiwgdmFsdWUgPj4gOCAmIDB4ZmYsIHZhbHVlICYgMHhmZik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9nMih4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChNYXRoLmxvZzIoeCkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRJbnQ4KGRhdGEsIHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhW3N0YXJ0XSA8PCAyNCA+PiAyNDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkVWludDE2KGRhdGEsIG9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtvZmZzZXRdIDw8IDggfCBkYXRhW29mZnNldCArIDFdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRVaW50MzIoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoZGF0YVtvZmZzZXRdIDw8IDI0IHwgZGF0YVtvZmZzZXQgKyAxXSA8PCAxNiB8IGRhdGFbb2Zmc2V0ICsgMl0gPDwgOCB8IGRhdGFbb2Zmc2V0ICsgM10pID4+PiAwO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyOCA9IG5ldyBVaW50OEFycmF5KDQpO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXI4WzBdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXczMiA9IG5ldyBVaW50MzJBcnJheShidWZmZXI4LmJ1ZmZlciwgMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2aWV3MzJbMF0gPT09IDE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZ1bmN0aW9uKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZXRJbmhlcml0YWJsZVByb3BlcnR5KF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRpY3QgPSBfcmVmLmRpY3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBfcmVmLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkZ2V0QXJyYXkgPSBfcmVmLmdldEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXJyYXkgPSBfcmVmJGdldEFycmF5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkZ2V0QXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICBfcmVmJHN0b3BXaGVuRm91bmQgPSBfcmVmLnN0b3BXaGVuRm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9wV2hlbkZvdW5kID0gX3JlZiRzdG9wV2hlbkZvdW5kID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZiRzdG9wV2hlbkZvdW5kO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTE9PUF9MSU1JVCA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvb3BDb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRpY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGdldEFycmF5ID8gZGljdC5nZXRBcnJheShrZXkpIDogZGljdC5nZXQoa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcFdoZW5Gb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKytsb29wQ291bnQgPiBMT09QX0xJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybihcImdldEluaGVyaXRhYmxlUHJvcGVydHk6IG1heGltdW0gbG9vcCBjb3VudCBleGNlZWRlZCBmb3IgXFxcIlwiLmNvbmNhdChrZXksIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QgPSBkaWN0LmdldCgnUGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBVdGlsID0gZnVuY3Rpb24gVXRpbENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFV0aWwoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZ2JCdWYgPSBbJ3JnYignLCAwLCAnLCcsIDAsICcsJywgMCwgJyknXTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLm1ha2VDc3NSZ2IgPSBmdW5jdGlvbiBVdGlsX21ha2VDc3NSZ2IociwgZywgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmdiQnVmWzFdID0gcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJnYkJ1ZlszXSA9IGc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZ2JCdWZbNV0gPSBiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJnYkJ1Zi5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfdHJhbnNmb3JtKG0xLCBtMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFttMVswXSAqIG0yWzBdICsgbTFbMl0gKiBtMlsxXSwgbTFbMV0gKiBtMlswXSArIG0xWzNdICogbTJbMV0sIG0xWzBdICogbTJbMl0gKyBtMVsyXSAqIG0yWzNdLCBtMVsxXSAqIG0yWzJdICsgbTFbM10gKiBtMlszXSwgbTFbMF0gKiBtMls0XSArIG0xWzJdICogbTJbNV0gKyBtMVs0XSwgbTFbMV0gKiBtMls0XSArIG0xWzNdICogbTJbNV0gKyBtMVs1XV07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC5hcHBseVRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfYXBwbHlUcmFuc2Zvcm0ocCwgbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbeHQsIHl0XTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBVdGlsLmFwcGx5SW52ZXJzZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfYXBwbHlJbnZlcnNlVHJhbnNmb3JtKHAsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gbVswXSAqIG1bM10gLSBtWzFdICogbVsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IChwWzBdICogbVszXSAtIHBbMV0gKiBtWzJdICsgbVsyXSAqIG1bNV0gLSBtWzRdICogbVszXSkgLyBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHl0ID0gKC1wWzBdICogbVsxXSArIHBbMV0gKiBtWzBdICsgbVs0XSAqIG1bMV0gLSBtWzVdICogbVswXSkgLyBkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4dCwgeXRdO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuZ2V0QXhpYWxBbGlnbmVkQm91bmRpbmdCb3ggPSBmdW5jdGlvbiBVdGlsX2dldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHIsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMSA9IFV0aWwuYXBwbHlUcmFuc2Zvcm0ociwgbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcDIgPSBVdGlsLmFwcGx5VHJhbnNmb3JtKHIuc2xpY2UoMiwgNCksIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAzID0gVXRpbC5hcHBseVRyYW5zZm9ybShbclswXSwgclszXV0sIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHA0ID0gVXRpbC5hcHBseVRyYW5zZm9ybShbclsyXSwgclsxXV0sIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtNYXRoLm1pbihwMVswXSwgcDJbMF0sIHAzWzBdLCBwNFswXSksIE1hdGgubWluKHAxWzFdLCBwMlsxXSwgcDNbMV0sIHA0WzFdKSwgTWF0aC5tYXgocDFbMF0sIHAyWzBdLCBwM1swXSwgcDRbMF0pLCBNYXRoLm1heChwMVsxXSwgcDJbMV0sIHAzWzFdLCBwNFsxXSldO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuaW52ZXJzZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfaW52ZXJzZVRyYW5zZm9ybShtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IG1bMF0gKiBtWzNdIC0gbVsxXSAqIG1bMl07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW21bM10gLyBkLCAtbVsxXSAvIGQsIC1tWzJdIC8gZCwgbVswXSAvIGQsIChtWzJdICogbVs1XSAtIG1bNF0gKiBtWzNdKSAvIGQsIChtWzRdICogbVsxXSAtIG1bNV0gKiBtWzBdKSAvIGRdO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuYXBwbHkzZFRyYW5zZm9ybSA9IGZ1bmN0aW9uIFV0aWxfYXBwbHkzZFRyYW5zZm9ybShtLCB2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW21bMF0gKiB2WzBdICsgbVsxXSAqIHZbMV0gKyBtWzJdICogdlsyXSwgbVszXSAqIHZbMF0gKyBtWzRdICogdlsxXSArIG1bNV0gKiB2WzJdLCBtWzZdICogdlswXSArIG1bN10gKiB2WzFdICsgbVs4XSAqIHZbMl1dO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUgPSBmdW5jdGlvbiBVdGlsX3Npbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc3Bvc2UgPSBbbVswXSwgbVsyXSwgbVsxXSwgbVszXV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IG1bMF0gKiB0cmFuc3Bvc2VbMF0gKyBtWzFdICogdHJhbnNwb3NlWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBtWzBdICogdHJhbnNwb3NlWzFdICsgbVsxXSAqIHRyYW5zcG9zZVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gbVsyXSAqIHRyYW5zcG9zZVswXSArIG1bM10gKiB0cmFuc3Bvc2VbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IG1bMl0gKiB0cmFuc3Bvc2VbMV0gKyBtWzNdICogdHJhbnNwb3NlWzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0ID0gKGEgKyBkKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2Vjb25kID0gTWF0aC5zcXJ0KChhICsgZCkgKiAoYSArIGQpIC0gNCAqIChhICogZCAtIGMgKiBiKSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN4ID0gZmlyc3QgKyBzZWNvbmQgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzeSA9IGZpcnN0IC0gc2Vjb25kIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW01hdGguc3FydChzeCksIE1hdGguc3FydChzeSldO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIFV0aWwubm9ybWFsaXplUmVjdCA9IGZ1bmN0aW9uIFV0aWxfbm9ybWFsaXplUmVjdChyZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgciA9IHJlY3Quc2xpY2UoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWN0WzBdID4gcmVjdFsyXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbMF0gPSByZWN0WzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJbMl0gPSByZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjdFsxXSA+IHJlY3RbM10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gcmVjdFszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByWzNdID0gcmVjdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgVXRpbC5pbnRlcnNlY3QgPSBmdW5jdGlvbiBVdGlsX2ludGVyc2VjdChyZWN0MSwgcmVjdDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIC0gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyZWRYID0gW3JlY3QxWzBdLCByZWN0MVsyXSwgcmVjdDJbMF0sIHJlY3QyWzJdXS5zb3J0KGNvbXBhcmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyZWRZID0gW3JlY3QxWzFdLCByZWN0MVszXSwgcmVjdDJbMV0sIHJlY3QyWzNdXS5zb3J0KGNvbXBhcmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdDEgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjdDIgPSBVdGlsLm5vcm1hbGl6ZVJlY3QocmVjdDIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3JkZXJlZFhbMF0gPT09IHJlY3QxWzBdICYmIG9yZGVyZWRYWzFdID09PSByZWN0MlswXSB8fCBvcmRlcmVkWFswXSA9PT0gcmVjdDJbMF0gJiYgb3JkZXJlZFhbMV0gPT09IHJlY3QxWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzBdID0gb3JkZXJlZFhbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0WzJdID0gb3JkZXJlZFhbMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9yZGVyZWRZWzBdID09PSByZWN0MVsxXSAmJiBvcmRlcmVkWVsxXSA9PT0gcmVjdDJbMV0gfHwgb3JkZXJlZFlbMF0gPT09IHJlY3QyWzFdICYmIG9yZGVyZWRZWzFdID09PSByZWN0MVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFsxXSA9IG9yZGVyZWRZWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdFszXSA9IG9yZGVyZWRZWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFV0aWw7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5VdGlsID0gVXRpbDtcbiAgICAgICAgICAgICAgICB2YXIgUk9NQU5fTlVNQkVSX01BUCA9IFsnJywgJ0MnLCAnQ0MnLCAnQ0NDJywgJ0NEJywgJ0QnLCAnREMnLCAnRENDJywgJ0RDQ0MnLCAnQ00nLCAnJywgJ1gnLCAnWFgnLCAnWFhYJywgJ1hMJywgJ0wnLCAnTFgnLCAnTFhYJywgJ0xYWFgnLCAnWEMnLCAnJywgJ0knLCAnSUknLCAnSUlJJywgJ0lWJywgJ1YnLCAnVkknLCAnVklJJywgJ1ZJSUknLCAnSVgnXTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvUm9tYW5OdW1lcmFscyhudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcikgJiYgbnVtYmVyID4gMCwgJ1RoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbWFuQnVmID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG51bWJlciA+PSAxMDAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgLT0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbWFuQnVmLnB1c2goJ00nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IG51bWJlciAvIDEwMCB8IDA7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlciAlPSAxMDA7XG4gICAgICAgICAgICAgICAgICAgIHJvbWFuQnVmLnB1c2goUk9NQU5fTlVNQkVSX01BUFtwb3NdKTtcbiAgICAgICAgICAgICAgICAgICAgcG9zID0gbnVtYmVyIC8gMTAgfCAwO1xuICAgICAgICAgICAgICAgICAgICBudW1iZXIgJT0gMTA7XG4gICAgICAgICAgICAgICAgICAgIHJvbWFuQnVmLnB1c2goUk9NQU5fTlVNQkVSX01BUFsxMCArIHBvc10pO1xuICAgICAgICAgICAgICAgICAgICByb21hbkJ1Zi5wdXNoKFJPTUFOX05VTUJFUl9NQVBbMjAgKyBudW1iZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJvbWFuU3RyID0gcm9tYW5CdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb3dlckNhc2UgPyByb21hblN0ci50b0xvd2VyQ2FzZSgpIDogcm9tYW5TdHI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4MkQ4LCAweDJDNywgMHgyQzYsIDB4MkQ5LCAweDJERCwgMHgyREIsIDB4MkRBLCAweDJEQywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgyMDIyLCAweDIwMjAsIDB4MjAyMSwgMHgyMDI2LCAweDIwMTQsIDB4MjAxMywgMHgxOTIsIDB4MjA0NCwgMHgyMDM5LCAweDIwM0EsIDB4MjIxMiwgMHgyMDMwLCAweDIwMUUsIDB4MjAxQywgMHgyMDFELCAweDIwMTgsIDB4MjAxOSwgMHgyMDFBLCAweDIxMjIsIDB4RkIwMSwgMHhGQjAyLCAweDE0MSwgMHgxNTIsIDB4MTYwLCAweDE3OCwgMHgxN0QsIDB4MTMxLCAweDE0MiwgMHgxNTMsIDB4MTYxLCAweDE3RSwgMCwgMHgyMEFDXTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmluZ1RvUERGU3RyaW5nKHN0cikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBzdHIubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyQnVmID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0clswXSA9PT0gJ1xceEZFJyAmJiBzdHJbMV0gPT09ICdcXHhGRicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDI7IGkgPCBuOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHN0ci5jaGFyQ29kZUF0KGkpIDw8IDggfCBzdHIuY2hhckNvZGVBdChpICsgMSkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IFBERlN0cmluZ1RyYW5zbGF0ZVRhYmxlW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJCdWYucHVzaChjb2RlID8gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKSA6IHN0ci5jaGFyQXQoaSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ckJ1Zi5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJpbmdUb1VURjhTdHJpbmcoc3RyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHN0cikpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHV0ZjhTdHJpbmdUb1N0cmluZyhzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdHIpKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0VtcHR5T2JqKG9iaikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0Jvb2wodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdib29sZWFuJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc051bSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdiA9PT0gJ251bWJlcic7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNTdHJpbmcodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdzdHJpbmcnO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzQXJyYXlCdWZmZXIodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3R5cGVvZih2KSA9PT0gJ29iamVjdCcgJiYgdiAhPT0gbnVsbCAmJiB2LmJ5dGVMZW5ndGggIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc1NwYWNlKGNoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaCA9PT0gMHgyMCB8fCBjaCA9PT0gMHgwOSB8fCBjaCA9PT0gMHgwRCB8fCBjaCA9PT0gMHgwQTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNTZXR0bGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjYXBhYmlsaXR5LCAnc2V0dGxlZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1NldHRsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVqZWN0ID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGNyZWF0ZU9iamVjdFVSTCA9IGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFVSTENsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkaWdpdHMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0nO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlT2JqZWN0VVJMKGRhdGEsIGNvbnRlbnRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9yY2VEYXRhU2NoZW1hID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3JjZURhdGFTY2hlbWEgJiYgX3VybF9wb2x5ZmlsbC5VUkwuY3JlYXRlT2JqZWN0VVJMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbZGF0YV0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogY29udGVudFR5cGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3VybF9wb2x5ZmlsbC5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gJ2RhdGE6JyArIGNvbnRlbnRUeXBlICsgJztiYXNlNjQsJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSArPSAzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIxID0gZGF0YVtpXSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIyID0gZGF0YVtpICsgMV0gJiAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMyA9IGRhdGFbaSArIDJdICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZDEgPSBiMSA+PiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkMiA9IChiMSAmIDMpIDw8IDQgfCBiMiA+PiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkMyA9IGkgKyAxIDwgaWkgPyAoYjIgJiAweEYpIDw8IDIgfCBiMyA+PiA2IDogNjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQ0ID0gaSArIDIgPCBpaSA/IGIzICYgMHgzRiA6IDY0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSBkaWdpdHNbZDFdICsgZGlnaXRzW2QyXSArIGRpZ2l0c1tkM10gKyBkaWdpdHNbZDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlT2JqZWN0VVJMID0gY3JlYXRlT2JqZWN0VVJMO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWxTY29wZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWdsb2JhbFNjb3BlLl9leHRyYWN0aGlnaGxpZ2h0c0NvbXBhdGliaWxpdHlDaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLl9leHRyYWN0aGlnaGxpZ2h0c0NvbXBhdGliaWxpdHlDaGVja2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNOb2RlSlMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBoYXNET00gPSAodHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKHdpbmRvdykpID09PSAnb2JqZWN0JyAmJiAodHlwZW9mIGRvY3VtZW50ID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2YoZG9jdW1lbnQpKSA9PT0gJ29iamVjdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrTm9kZUJ0b2EoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuYnRvYSB8fCAhaXNOb2RlSlMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuYnRvYSA9IGZ1bmN0aW9uIChjaGFycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShjaGFycywgJ2JpbmFyeScpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrTm9kZUF0b2IoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuYXRvYiB8fCAhaXNOb2RlSlMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuYXRvYiA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShpbnB1dCwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCdiaW5hcnknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrQ2hpbGROb2RlUmVtb3ZlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNET00pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrRE9NVG9rZW5MaXN0QWRkUmVtb3ZlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNET00gfHwgaXNOb2RlSlMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmNsYXNzTGlzdC5hZGQoJ3Rlc3RPbmUnLCAndGVzdFR3bycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGl2LmNsYXNzTGlzdC5jb250YWlucygndGVzdE9uZScpID09PSB0cnVlICYmIGRpdi5jbGFzc0xpc3QuY29udGFpbnMoJ3Rlc3RUd28nKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE9yaWdpbmFsRE9NVG9rZW5MaXN0QWRkID0gRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3JpZ2luYWxET01Ub2tlbkxpc3RSZW1vdmUgPSBET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHRva2VucyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB0b2tlbnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsRE9NVG9rZW5MaXN0QWRkLmNhbGwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIERPTVRva2VuTGlzdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgdG9rZW5zID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2Vuc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHRva2Vucy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2tlbiA9IHRva2Vuc1tfaTJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbERPTVRva2VuTGlzdFJlbW92ZS5jYWxsKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja0RPTVRva2VuTGlzdFRvZ2dsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGFzRE9NIHx8IGlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdi5jbGFzc0xpc3QudG9nZ2xlKCd0ZXN0JywgMCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBET01Ub2tlbkxpc3QucHJvdG90eXBlLnRvZ2dsZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gISFhcmd1bWVudHNbMV0gOiAhdGhpcy5jb250YWlucyh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbZm9yY2UgPyAnYWRkJyA6ICdyZW1vdmUnXSh0b2tlbiksIGZvcmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdTdGFydHNXaXRoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5wcm90b3R5cGUuc3RhcnRzV2l0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdFbmRzV2l0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM1KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdJbmNsdWRlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDM3KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tBcnJheUluY2x1ZGVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzOSk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrQXJyYXlGcm9tKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmZyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDYpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja09iamVjdEFzc2lnbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QuYXNzaWduKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY5KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tNYXRoTG9nMigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChNYXRoLmxvZzIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubG9nMiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzQpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja051bWJlcklzTmFOKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLmlzTmFOID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Nik7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrTnVtYmVySXNJbnRlZ2VyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc0ludGVnZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5pc0ludGVnZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc4KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tQcm9taXNlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLlByb21pc2UgJiYgZ2xvYmFsU2NvcGUuUHJvbWlzZS5wcm90b3R5cGUgJiYgZ2xvYmFsU2NvcGUuUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuUHJvbWlzZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODEpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1dlYWtNYXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsU2NvcGUuV2Vha01hcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsU2NvcGUuV2Vha01hcCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAxKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tXZWFrU2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLldlYWtTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFNjb3BlLldlYWtTZXQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExOCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3RyaW5nQ29kZVBvaW50QXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nLmNvZGVQb2ludEF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcuY29kZVBvaW50QXQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMik7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3RyaW5nRnJvbUNvZGVQb2ludCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZyb21Db2RlUG9pbnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyNCk7XG4gICAgICAgICAgICAgICAgICAgIH0pKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrU3ltYm9sKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdsb2JhbFNjb3BlLlN5bWJvbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjYpO1xuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbiBjaGVja1N0cmluZ1BhZFN0YXJ0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tTdHJpbmdQYWRFbmQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3RyaW5nLnByb3RvdHlwZS5wYWRFbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTM3KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tPYmplY3RWYWx1ZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTM5KTtcbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09PSBNYXRoID8gd2luZG93IDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2xvYmFsLk1hdGggPT09IE1hdGggPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09PSBNYXRoID8gc2VsZiA6IHt9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNOb2RlSlMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHByb2Nlc3MgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihwcm9jZXNzKSkgPT09ICdvYmplY3QnICYmIHByb2Nlc3MgKyAnJyA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nICYmICFwcm9jZXNzLnZlcnNpb25zWydudyddO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5zdGFydHNXaXRoO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xuICAgICAgICAgICAgICAgIHZhciAkc3RhcnRzV2l0aCA9ICcnW1NUQVJUU19XSVRIXTtcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzQpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRvTGVuZ3RoKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0aGF0Lmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRzdGFydHNXaXRoID8gJHN0YXJ0c1dpdGguY2FsbCh0aGF0LCBzZWFyY2gsIGluZGV4KSA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY29yZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGlkZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICRleHBvcnQodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgICAgICAgICAgICAgICAgICAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ID0gKG93biA/IHRhcmdldCA6IHNvdXJjZSlba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cCA9IElTX0JJTkQgJiYgb3duID8gY3R4KG91dCwgZ2xvYmFsKSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwb3J0c1trZXldICE9IG91dCkgaGlkZShleHBvcnRzLCBrZXksIGV4cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZ2xvYmFsLmNvcmUgPSBjb3JlO1xuICAgICAgICAgICAgICAgICRleHBvcnQuRiA9IDE7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5HID0gMjtcbiAgICAgICAgICAgICAgICAkZXhwb3J0LlMgPSA0O1xuICAgICAgICAgICAgICAgICRleHBvcnQuUCA9IDg7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5CID0gMTY7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5XID0gMzI7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5VID0gNjQ7XG4gICAgICAgICAgICAgICAgJGV4cG9ydC5SID0gMTI4O1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lk1hdGggPT0gTWF0aCA/IHdpbmRvdyA6IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYuTWF0aCA9PSBNYXRoID8gc2VsZiA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpIF9fZyA9IGdsb2JhbDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246ICcyLjYuMidcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNyZWF0ZURlc2MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSkgPyBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkUC5mKG9iamVjdCwga2V5LCBjcmVhdGVEZXNjKDEsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElFOF9ET01fREVGSU5FID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmYgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdnZXQnIGluIEF0dHJpYnV0ZXMgfHwgJ3NldCcgaW4gQXR0cmlidXRlcykgdGhyb3cgVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCEnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCd2YWx1ZScgaW4gQXR0cmlidXRlcykgT1tQXSA9IEF0dHJpYnV0ZXMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YoaXQpID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAhX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSkgJiYgIV9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYpKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE3KSgnZGl2JyksICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmEgIT0gNztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9ICFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmEgIT0gNztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFleGVjKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBkb2N1bWVudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCkuZG9jdW1lbnQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgZm4sIHZhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDIwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGlkZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNSQyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjIpKCdzcmMnKTtcblxuICAgICAgICAgICAgICAgIHZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xuICAgICAgICAgICAgICAgIHZhciAkdG9TdHJpbmcgPSBGdW5jdGlvbltUT19TVFJJTkddO1xuICAgICAgICAgICAgICAgIHZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIGtleSwgdmFsLCBzYWZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0Z1bmN0aW9uID0gdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgJ25hbWUnKSB8fCBoaWRlKHZhbCwgJ25hbWUnLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoT1trZXldID09PSB2YWwpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsIFNSQykgfHwgaGlkZSh2YWwsIFNSQywgT1trZXldID8gJycgKyBPW2tleV0gOiBUUEwuam9pbihTdHJpbmcoa2V5KSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9ba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIE9ba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgT1trZXldID0gdmFsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZShPLCBrZXksIHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhRnVuY3Rpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI0KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYUZ1bmN0aW9uKGZuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDI0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdCAhPSAnZnVuY3Rpb24nKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIGZ1bmN0aW9uIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JbnRlZ2VyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNik7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW47XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjZWlsID0gTWF0aC5jZWlsO1xuICAgICAgICAgICAgICAgIHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAyNyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc1JlZ0V4cCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIHZhciBNQVRDSCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApKCdtYXRjaCcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVnRXhwO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMjkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMxKSgnd2tzJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdWlkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX1N5bWJvbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCkuU3ltYm9sO1xuXG4gICAgICAgICAgICAgICAgdmFyIFVTRV9TWU1CT0wgPSB0eXBlb2YgX1N5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID0gVVNFX1NZTUJPTCAmJiBfU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gX1N5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb3JlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KTtcblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xuICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IGdsb2JhbFtTSEFSRURdIHx8IChnbG9iYWxbU0hBUkVEXSA9IHt9KTtcbiAgICAgICAgICAgICAgICAobW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbiAgICAgICAgICAgICAgICB9KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IGNvcmUudmVyc2lvbixcbiAgICAgICAgICAgICAgICAgICAgbW9kZTogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMikgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgICAgICAgICAgICAgICAgICAgY29weXJpZ2h0OiAnwqkgMjAxOSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMzIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIE1BVENIID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ21hdGNoJyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlID0gLy4vO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnLy4vJ1tLRVldKHJlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZikge31cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuU3RyaW5nLmVuZHNXaXRoO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI3KTtcblxuICAgICAgICAgICAgICAgIHZhciBFTkRTX1dJVEggPSAnZW5kc1dpdGgnO1xuICAgICAgICAgICAgICAgIHZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNCkoRU5EU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kc1dpdGg6IGZ1bmN0aW9uIGVuZHNXaXRoKHNlYXJjaFN0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoYXQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRlbmRzV2l0aCA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKSA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzOCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuU3RyaW5nLmluY2x1ZGVzO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAzOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSU5DTFVERVMgPSAnaW5jbHVkZXMnO1xuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzNCkoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICAgICAgICAgICAgICAgICAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKS5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDM5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0MCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuQXJyYXkuaW5jbHVkZXM7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDQwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRpbmNsdWRlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDEpKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGluY2x1ZGVzKHRoaXMsIGVsLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDUpKCdpbmNsdWRlcycpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0b0lPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChmcm9tSW5kZXgsIGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGZvciAoOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPW2luZGV4XSA9PT0gZWwpIHJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDQ0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4O1xuICAgICAgICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbjtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGluZGV4LCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSB0b0ludGVnZXIoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggPCAwID8gbWF4KGluZGV4ICsgbGVuZ3RoLCAwKSA6IG1pbihpbmRleCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBVTlNDT1BBQkxFUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApKCd1bnNjb3BhYmxlcycpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMCkoQXJyYXlQcm90bywgVU5TQ09QQUJMRVMsIHt9KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBBcnJheVByb3RvW1VOU0NPUEFCTEVTXVtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDcpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Mik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuQXJyYXkuZnJvbTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNDcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGF0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0OCkodHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ5KShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2kgPSAwO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0aGlzLl90O1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSBPLmxlbmd0aCkgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciB0b0ludGVnZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI2KTtcblxuICAgICAgICAgICAgICAgIHZhciBkZWZpbmVkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gU3RyaW5nKGRlZmluZWQodGhhdCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSwgYjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYSA8IDB4ZDgwMCB8fCBhID4gMHhkYmZmIHx8IGkgKyAxID09PSBsIHx8IChiID0gcy5jaGFyQ29kZUF0KGkgKyAxKSkgPCAweGRjMDAgfHwgYiA+IDB4ZGZmZiA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYSA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA0OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBMSUJSQVJZID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIwKTtcblxuICAgICAgICAgICAgICAgIHZhciBoaWRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGl0ZXJDcmVhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDUxKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRUb1N0cmluZ1RhZyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldFByb3RvdHlwZU9mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSVRFUkFUT1IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgnaXRlcmF0b3InKTtcblxuICAgICAgICAgICAgICAgIHZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTtcbiAgICAgICAgICAgICAgICB2YXIgRkZfSVRFUkFUT1IgPSAnQEBpdGVyYXRvcic7XG4gICAgICAgICAgICAgICAgdmFyIEtFWVMgPSAna2V5cyc7XG4gICAgICAgICAgICAgICAgdmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiByZXR1cm5UaGlzKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICAgICAgICAgICAgICAgICAgICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gZ2V0TWV0aG9kKGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWVM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBrZXlzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVkFMVUVTOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgICAgICAgICAgICAgICAgICAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoJGFueU5hdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZigkYW55TmF0aXZlLmNhbGwobmV3IEJhc2UoKSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChERUZfVkFMVUVTICYmICRuYXRpdmUgJiYgJG5hdGl2ZS5uYW1lICE9PSBWQUxVRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAkZGVmYXVsdCA9IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZShwcm90bywgSVRFUkFUT1IsICRkZWZhdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yc1tOQU1FXSA9ICRkZWZhdWx0O1xuICAgICAgICAgICAgICAgICAgICBJdGVyYXRvcnNbVEFHXSA9IHJldHVyblRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKERFRkFVTFQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzOiBJU19TRVQgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChLRVlTKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gcHJvdG8pKSByZWRlZmluZShwcm90bywga2V5LCBtZXRob2RzW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtZXRob2RzO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDUwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNldFRvU3RyaW5nVGFnID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApKEl0ZXJhdG9yUHJvdG90eXBlLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgnaXRlcmF0b3InKSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciBkUHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDUzKTtcblxuICAgICAgICAgICAgICAgIHZhciBlbnVtQnVnS2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElFX1BST1RPID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1NikoJ0lFX1BST1RPJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9jcmVhdGVEaWN0ID0gZnVuY3Rpb24gY3JlYXRlRGljdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlmcmFtZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpKCdpZnJhbWUnKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGx0ID0gJzwnO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ3QgPSAnPic7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OCkuYXBwZW5kQ2hpbGQoaWZyYW1lKTtcblxuICAgICAgICAgICAgICAgICAgICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JztcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICAgICAgICAgICAgICAgICAgICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gICAgICAgICAgICAgICAgICAgIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIF9jcmVhdGVEaWN0ID0gaWZyYW1lRG9jdW1lbnQuRjtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX2NyZWF0ZURpY3RbUFJPVE9UWVBFXVtlbnVtQnVnS2V5c1tpXV07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NyZWF0ZURpY3QoKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKE8gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgRW1wdHlbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJlc3VsdCA9IF9jcmVhdGVEaWN0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDUzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRQID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1NCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQO1xuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE87XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU1KTtcblxuICAgICAgICAgICAgICAgIHZhciBlbnVtQnVnS2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0lPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQyKTtcblxuICAgICAgICAgICAgICAgIHZhciBhcnJheUluZGV4T2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQxKShmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSUVfUFJPVE8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU2KSgnSUVfUFJPVE8nKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b0lPYmplY3Qob2JqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gTykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgc2hhcmVkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMSkoJ2tleXMnKTtcblxuICAgICAgICAgICAgICAgIHZhciB1aWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIyKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDU3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJy5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA1OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBkb2N1bWVudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCkuZG9jdW1lbnQ7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNTkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMSkuZjtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKTtcblxuICAgICAgICAgICAgICAgIHZhciBUQUcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgndG9TdHJpbmdUYWcnKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGFnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGhhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSUVfUFJPVE8gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU2KSgnSUVfUFJPVE8nKTtcblxuICAgICAgICAgICAgICAgIHZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBmdW5jdGlvbiAoTykge1xuICAgICAgICAgICAgICAgICAgICBPID0gdG9PYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywgSUVfUFJPVE8pKSByZXR1cm4gT1tJRV9QUk9UT107XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPIGluc3RhbmNlb2YgT2JqZWN0ID8gT2JqZWN0UHJvdG8gOiBudWxsO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QoZGVmaW5lZChpdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDYyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzQXJyYXlJdGVyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9MZW5ndGggPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI1KTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVQcm9wZXJ0eSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEl0ZXJGbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjYpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2OCkoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgQXJyYXkuZnJvbShpdGVyKTtcbiAgICAgICAgICAgICAgICB9KSwgJ0FycmF5Jywge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZykgbWFwZm4gPSBjdHgobWFwZm4sIGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkLCAyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChyZXN1bHQgPSBuZXcgQyhsZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gbWFwZm4oT1tpbmRleF0sIGluZGV4KSA6IE9baW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyaWVzID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSVRFUkFUT1IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgnaXRlcmF0b3InKTtcblxuICAgICAgICAgICAgICAgIHZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA2NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZGVmaW5lUHJvcGVydHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExKTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVEZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7ZWxzZSBvYmplY3RbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY2xhc3NvZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElURVJBVE9SID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ2l0ZXJhdG9yJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuZ2V0SXRlcmF0b3JNZXRob2QgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGl0W0lURVJBVE9SXSB8fCBpdFsnQEBpdGVyYXRvciddIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY29mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgVEFHID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ3RvU3RyaW5nVGFnJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICB9KCkpID09ICdBcmd1bWVudHMnO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRyeUdldCA9IGZ1bmN0aW9uIHRyeUdldChpdCwga2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE8sIFQsIEI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gJ1VuZGVmaW5lZCcgOiBpdCA9PT0gbnVsbCA/ICdOdWxsJyA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUIDogQVJHID8gY29mKE8pIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDY4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIElURVJBVE9SID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ2l0ZXJhdG9yJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcml0ZXJbJ3JldHVybiddID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgU0FGRV9DTE9TSU5HID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBBcnJheS5mcm9tKHJpdGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyAyO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzYWZlID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSBbN107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlci5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHNhZmUgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFycltJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBleGVjKGFycik7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhZmU7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNjkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KS5PYmplY3QuYXNzaWduO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0Jywge1xuICAgICAgICAgICAgICAgICAgICBhc3NpZ246IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzEpXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDcxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdldEtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU0KTtcblxuICAgICAgICAgICAgICAgIHZhciBnT1BTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgcElFID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYxKTtcblxuICAgICAgICAgICAgICAgIHZhciBJT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBBID0ge307XG4gICAgICAgICAgICAgICAgICAgIHZhciBCID0ge307XG4gICAgICAgICAgICAgICAgICAgIHZhciBTID0gU3ltYm9sKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgICAgICAgICAgICAgICAgICAgQVtTXSA9IDc7XG4gICAgICAgICAgICAgICAgICAgIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEJba10gPSBrO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG4gICAgICAgICAgICAgICAgfSkgPyBmdW5jdGlvbiBhc3NpZ24odGFyZ2V0LCBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNFbnVtID0gcElFLmY7XG5cbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFMZW4gPiBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0VudW0uY2FsbChTLCBrZXkgPSBrZXlzW2orK10pKSBUW2tleV0gPSBTW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gVDtcbiAgICAgICAgICAgICAgICB9IDogJGFzc2lnbjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzIgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IHt9LnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA3NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLk1hdGgubG9nMjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gICAgICAgICAgICAgICAgICAgIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDc3KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KS5OdW1iZXIuaXNOYU47XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDc3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gICAgICAgICAgICAgICAgICAgIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXIgIT0gbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDc4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3OSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuTnVtYmVyLmlzSW50ZWdlcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogNzkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgaXNJbnRlZ2VyOiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgwKVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4MCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDgxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Mik7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ3KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODMpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nik7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk5KTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KS5Qcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA4MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjbGFzc29mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdGVzdCA9IHt9O1xuICAgICAgICAgICAgICAgIHRlc3RbX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCkoT2JqZWN0LnByb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gICAgICAgICAgICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODMgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEtleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU0KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGlkZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9ycyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdrcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApO1xuXG4gICAgICAgICAgICAgICAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICAgICAgICAgICAgICAgIHZhciBUT19TVFJJTkdfVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICAgICAgICAgICAgICAgIHZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcbiAgICAgICAgICAgICAgICB2YXIgRE9NSXRlcmFibGVzID0ge1xuICAgICAgICAgICAgICAgICAgICBDU1NSdWxlTGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIEZpbGVMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgTWVkaWFMaXN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgTm9kZUxpc3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBQbHVnaW46IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBQbHVnaW5BcnJheTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgVGV4dFRyYWNrQ3VlTGlzdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIFRleHRUcmFja0xpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBUb3VjaExpc3Q6IGZhbHNlXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvW0lURVJBVE9SXSkgaGlkZShwcm90bywgSVRFUkFUT1IsIEFycmF5VmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXhwbGljaXQpIGZvciAoa2V5IGluICRpdGVyYXRvcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDg0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGFkZFRvVW5zY29wYWJsZXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQ1KTtcblxuICAgICAgICAgICAgICAgIHZhciBzdGVwID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSXRlcmF0b3JzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Mik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDkpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2kgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9rID0ga2luZDtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPID0gdGhpcy5fdDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXAoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xuICAgICAgICAgICAgICAgIH0sICd2YWx1ZXMnKTtcbiAgICAgICAgICAgICAgICBJdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuICAgICAgICAgICAgICAgIGFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbiAgICAgICAgICAgICAgICBhZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbiAgICAgICAgICAgICAgICBhZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDg1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6ICEhZG9uZVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDg2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIExJQlJBUlkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMyKTtcblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNsYXNzb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDY3KTtcblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFGdW5jdGlvbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuSW5zdGFuY2UgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg3KTtcblxuICAgICAgICAgICAgICAgIHZhciBmb3JPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRhc2sgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkwKS5zZXQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWljcm90YXNrID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5MikoKTtcblxuICAgICAgICAgICAgICAgIHZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBlcmZvcm0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk0KTtcblxuICAgICAgICAgICAgICAgIHZhciB1c2VyQWdlbnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk1KTtcblxuICAgICAgICAgICAgICAgIHZhciBwcm9taXNlUmVzb2x2ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG4gICAgICAgICAgICAgICAgdmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG4gICAgICAgICAgICAgICAgdmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbiAgICAgICAgICAgICAgICB2YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG4gICAgICAgICAgICAgICAgdmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG4gICAgICAgICAgICAgICAgdmFyICRQcm9taXNlID0gZ2xvYmFsW1BST01JU0VdO1xuICAgICAgICAgICAgICAgIHZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxuICAgICAgICAgICAgICAgIHZhciBlbXB0eSA9IGZ1bmN0aW9uIGVtcHR5KCkge307XG5cbiAgICAgICAgICAgICAgICB2YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbiAgICAgICAgICAgICAgICB2YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMwKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlYyhlbXB0eSwgZW1wdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKSAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2UgJiYgdjguaW5kZXhPZignNi42JykgIT09IDAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNUaGVuYWJsZSA9IGZ1bmN0aW9uIGlzVGhlbmFibGUoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRoZW47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeShwcm9taXNlLCBpc1JlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgICAgICAgICAgICAgICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2sgPSBwcm9taXNlLl9zID09IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydW4gPSBmdW5jdGlvbiBydW4ocmVhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ID0gcmVhY3Rpb24ucmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9oID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIgPT09IHRydWUpIHJlc3VsdCA9IHZhbHVlO2Vsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVuLmNhbGwocmVzdWx0LCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9tYWluICYmICFleGl0ZWQpIGRvbWFpbi5leGl0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bihjaGFpbltpKytdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fYyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIG9uVW5oYW5kbGVkKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvbWlzZS5fdjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZTogcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoY29uc29sZSA9IGdsb2JhbC5jb25zb2xlKSAmJiBjb25zb2xlLmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9oID0gaXNOb2RlIHx8IGlzVW5oYW5kbGVkKHByb21pc2UpID8gMiA6IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIGlzVW5oYW5kbGVkKHByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2U6IHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcHJvbWlzZS5fdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRyZWplY3QgPSBmdW5jdGlvbiAkcmVqZWN0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fcyA9IDI7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAkcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0aGVuO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTtcblxuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3c6IHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZDogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVqZWN0LmNhbGwod3JhcHBlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeShwcm9taXNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRyZWplY3QuY2FsbCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3c6IHByb21pc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Q6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoIVVTRV9OQVRJVkUpIHtcbiAgICAgICAgICAgICAgICAgICAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFGdW5jdGlvbihleGVjdXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2QgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbC5wcm90b3R5cGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk3KSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFjdGlvbi5vayA9IHR5cGVvZiBvbkZ1bGZpbGxlZCA9PSAnZnVuY3Rpb24nID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3MpIG5vdGlmeSh0aGlzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gT3duUHJvbWlzZUNhcGFiaWxpdHkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBJbnRlcm5hbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlamVjdCA9IGN0eCgkcmVqZWN0LCBwcm9taXNlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQyA9PT0gJFByb21pc2UgfHwgQyA9PT0gV3JhcHBlciA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKSA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7XG4gICAgICAgICAgICAgICAgICAgIFByb21pc2U6ICRQcm9taXNlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KSgkUHJvbWlzZSwgUFJPTUlTRSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk4KShQUk9NSVNFKTtcblxuICAgICAgICAgICAgICAgIFdyYXBwZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpW1BST01JU0VdO1xuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgJCRyZWplY3Qocik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoTElCUkFSWSAmJiB0aGlzID09PSBXcmFwcGVyID8gJFByb21pc2UgOiB0aGlzLCB4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjgpKGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICRQcm9taXNlLmFsbChpdGVyKVsnY2F0Y2gnXShlbXB0eSk7XG4gICAgICAgICAgICAgICAgfSkpLCBQUk9NSVNFLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsbDogZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSBjYXBhYmlsaXR5LnJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlDYWxsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgQ29uc3RydWN0b3IsIG5hbWUsIGZvcmJpZGRlbkZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGl0IGluc3RhbmNlb2YgQ29uc3RydWN0b3IpIHx8IGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IFR5cGVFcnJvcihuYW1lICsgJzogaW5jb3JyZWN0IGludm9jYXRpb24hJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogODggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2FsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzQXJyYXlJdGVyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYW5PYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0xlbmd0aCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdldEl0ZXJGbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIEJSRUFLID0ge307XG4gICAgICAgICAgICAgICAgdmFyIFJFVFVSTiA9IHt9O1xuXG4gICAgICAgICAgICAgICAgdmFyIF9leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmFibGUsIGVudHJpZXMsIGZuLCB0aGF0LCBJVEVSQVRPUikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlckZuID0gSVRFUkFUT1IgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICAgICAgICAgICAgICAgIH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5SXRlcihpdGVyRm4pKSBmb3IgKGxlbmd0aCA9IHRvTGVuZ3RoKGl0ZXJhYmxlLmxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNhbGwoaXRlcmF0b3IsIGYsIHN0ZXAudmFsdWUsIGVudHJpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgX2V4cG9ydHMuQlJFQUsgPSBCUkVBSztcbiAgICAgICAgICAgICAgICBfZXhwb3J0cy5SRVRVUk4gPSBSRVRVUk47XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDg5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgYUZ1bmN0aW9uID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU1BFQ0lFUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApKCdzcGVjaWVzJyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBTO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgY3R4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaW52b2tlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5MSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaHRtbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNlbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xuICAgICAgICAgICAgICAgIHZhciBzZXRUYXNrID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbiAgICAgICAgICAgICAgICB2YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xuICAgICAgICAgICAgICAgIHZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbiAgICAgICAgICAgICAgICB2YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAwO1xuICAgICAgICAgICAgICAgIHZhciBxdWV1ZSA9IHt9O1xuICAgICAgICAgICAgICAgIHZhciBPTlJFQURZU1RBVEVDSEFOR0UgPSAnb25yZWFkeXN0YXRlY2hhbmdlJztcbiAgICAgICAgICAgICAgICB2YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaWQgPSArdGhpcztcblxuICAgICAgICAgICAgICAgICAgICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm4gPSBxdWV1ZVtpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiBsaXN0ZW5lcihldmVudCkge1xuICAgICAgICAgICAgICAgICAgICBydW4uY2FsbChldmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVbKytjb3VudGVyXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlcihjb3VudGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3VudGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGFzayA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KShwcm9jZXNzKSA9PSAncHJvY2VzcycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKERpc3BhdGNoICYmIERpc3BhdGNoLm5vdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBmdW5jdGlvbiBkZWZlcihpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgdHlwZW9mIHBvc3RNZXNzYWdlID09ICdmdW5jdGlvbicgJiYgIWdsb2JhbC5pbXBvcnRTY3JpcHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlciA9IGZ1bmN0aW9uIGRlZmVyKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNlbCgnc2NyaXB0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyID0gZnVuY3Rpb24gZGVmZXIoaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogc2V0VGFzayxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXI6IGNsZWFyVGFza1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDkxICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZm4sIGFyZ3MsIHRoYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVuID0gdGhhdCA9PT0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW4gPyBmbigpIDogZm4uY2FsbCh0aGF0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1hY3JvdGFzayA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTApLnNldDtcblxuICAgICAgICAgICAgICAgIHZhciBPYnNlcnZlciA9IGdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGdsb2JhbC5XZWJLaXRNdXRhdGlvbk9ic2VydmVyO1xuICAgICAgICAgICAgICAgIHZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG4gICAgICAgICAgICAgICAgdmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbiAgICAgICAgICAgICAgICB2YXIgaXNOb2RlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyOSkocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGZsdXNoID0gZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50LCBmbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbiA9IGhlYWQuZm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQubmV4dDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7ZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnQpIHBhcmVudC5lbnRlcigpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoT2JzZXJ2ZXIgJiYgIShnbG9iYWwubmF2aWdhdG9yICYmIGdsb2JhbC5uYXZpZ2F0b3Iuc3RhbmRhbG9uZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2ZXIoZmx1c2gpLm9ic2VydmUobm9kZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oZmx1c2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeSA9IGZ1bmN0aW9uIG5vdGlmeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNyb3Rhc2suY2FsbChnbG9iYWwsIGZsdXNoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFzayA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogZm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaGVhZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0ID0gdGFzaztcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhRnVuY3Rpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI0KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUgPSAkJHJlc29sdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogZXhlYygpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdjogZVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDk1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBhbk9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEMsIHgpIHtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoQyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdCh4KSAmJiB4LmNvbnN0cnVjdG9yID09PSBDKSByZXR1cm4geDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkuZihDKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc29sdmUgPSBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiA5NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHNyYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogOTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2xvYmFsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4KTtcblxuICAgICAgICAgICAgICAgIHZhciBkUCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIERFU0NSSVBUT1JTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU1BFQ0lFUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzApKCdzcGVjaWVzJyk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDk5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZVJlc29sdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDk2KTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnUHJvbWlzZScsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbmFsbHknOiBmdW5jdGlvbiBfZmluYWxseShvbkZpbmFsbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsIGNvcmUuUHJvbWlzZSB8fCBnbG9iYWwuUHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRoZW4oaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogb25GaW5hbGx5LCBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IG9uRmluYWxseSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTAwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcGVyZm9ybSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTQpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlMsICdQcm9taXNlJywge1xuICAgICAgICAgICAgICAgICAgICAndHJ5JzogZnVuY3Rpb24gX3RyeShjYWxsYmFja2ZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oY2FsbGJhY2tmbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgyKTtcblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODMpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDIpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTQpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMTYpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLldlYWtNYXA7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEwMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBlYWNoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDMpKDApO1xuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgbWV0YSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA3KTtcblxuICAgICAgICAgICAgICAgIHZhciBhc3NpZ24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcxKTtcblxuICAgICAgICAgICAgICAgIHZhciB3ZWFrID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZmFpbHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KTtcblxuICAgICAgICAgICAgICAgIHZhciB2YWxpZGF0ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA5KTtcblxuICAgICAgICAgICAgICAgIHZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbiAgICAgICAgICAgICAgICB2YXIgaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbiAgICAgICAgICAgICAgICB2YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbiAgICAgICAgICAgICAgICB2YXIgdG1wID0ge307XG4gICAgICAgICAgICAgICAgdmFyIEludGVybmFsTWFwO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbiB3cmFwcGVyKGdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgbWV0aG9kcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRXZWFrTWFwID0gbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMCkoV0VBS19NQVAsIHdyYXBwZXIsIG1ldGhvZHMsIHdlYWssIHRydWUsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAkV2Vha01hcCgpLnNldCgoT2JqZWN0LmZyZWV6ZSB8fCBPYmplY3QpKHRtcCksIDcpLmdldCh0bXApICE9IDc7XG4gICAgICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWxNYXAgPSB3ZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIFdFQUtfTUFQKTtcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduKEludGVybmFsTWFwLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgICAgICAgICAgICAgICAgIG1ldGEuTkVFRCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGVhY2goWydkZWxldGUnLCAnaGFzJywgJ2dldCcsICdzZXQnXSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZShwcm90bywga2V5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleSA9PSAnc2V0JyA/IHRoaXMgOiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ldGhvZC5jYWxsKHRoaXMsIGEsIGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTAzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIElPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQzKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNjEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgICAgICAgICAgICAgICAgICAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IElPYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsLCByZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHNlbGZbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzO2Vsc2UgaWYgKHJlcykgc3dpdGNoIChUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJU19FVkVSWSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEwNCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwNSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNBcnJheSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA2KTtcblxuICAgICAgICAgICAgICAgIHZhciBTUEVDSUVTID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCkoJ3NwZWNpZXMnKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBDO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQyA9IG9yaWdpbmFsLmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBDID09ICdmdW5jdGlvbicgJiYgKEMgPT09IEFycmF5IHx8IGlzQXJyYXkoQy5wcm90b3R5cGUpKSkgQyA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEwNiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDI5KTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5JztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIE1FVEEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIyKSgnbWV0YScpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0RGVzYyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEpLmY7XG5cbiAgICAgICAgICAgICAgICB2YXIgaWQgPSAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIEZSRUVaRSA9ICFfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2KShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0V4dGVuc2libGUoT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIHNldE1ldGEoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0RGVzYyhpdCwgTUVUQSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOiAnTycgKyArK2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgZmFzdEtleSA9IGZ1bmN0aW9uIGZhc3RLZXkoaXQsIGNyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIF90eXBlb2YoaXQpID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNZXRhKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdFtNRVRBXS5pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIGdldFdlYWsoaXQsIGNyZWF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWV0YShpdCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRbTUVUQV0udztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG9uRnJlZXplID0gZnVuY3Rpb24gb25GcmVlemUoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEZSRUVaRSAmJiBtZXRhLk5FRUQgJiYgaXNFeHRlbnNpYmxlKGl0KSAmJiAhaGFzKGl0LCBNRVRBKSkgc2V0TWV0YShpdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgS0VZOiBNRVRBLFxuICAgICAgICAgICAgICAgICAgICBORUVEOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgZmFzdEtleTogZmFzdEtleSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0V2VhazogZ2V0V2VhayxcbiAgICAgICAgICAgICAgICAgICAgb25GcmVlemU6IG9uRnJlZXplXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTA4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHJlZGVmaW5lQWxsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2VhayA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTA3KS5nZXRXZWFrO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBhbkluc3RhbmNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVBcnJheU1ldGhvZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTAzKTtcblxuICAgICAgICAgICAgICAgIHZhciAkaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gICAgICAgICAgICAgICAgdmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG4gICAgICAgICAgICAgICAgdmFyIGlkID0gMDtcblxuICAgICAgICAgICAgICAgIHZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gdW5jYXVnaHRGcm96ZW5TdG9yZSh0aGF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0Ll9sIHx8ICh0aGF0Ll9sID0gbmV3IFVuY2F1Z2h0RnJvemVuU3RvcmUoKSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gVW5jYXVnaHRGcm96ZW5TdG9yZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hID0gW107XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiBmaW5kVW5jYXVnaHRGcm96ZW4oc3RvcmUsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXlGaW5kKHN0b3JlLmEsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBVbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICdkZWxldGUnOiBmdW5jdGlvbiBfZGVsZXRlKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKH5pbmRleCkgdGhpcy5hLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF+aW5kZXg7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0ge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fdCA9IE5BTUU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5faSA9IGlkKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5fbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIF9kZWxldGUoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHJldHVybiB1bmNhdWdodEZyb3plblN0b3JlKHZhbGlkYXRlKHRoaXMsIE5BTUUpKVsnZGVsZXRlJ10oa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEgJiYgJGhhcyhkYXRhLCB0aGlzLl9pKSAmJiBkZWxldGUgZGF0YVt0aGlzLl9pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVmOiBmdW5jdGlvbiBkZWYodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO2Vsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVmc3RvcmU6IHVuY2F1Z2h0RnJvemVuU3RvcmVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMDkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QoaXQpIHx8IGl0Ll90ICE9PSBUWVBFKSB0aHJvdyBUeXBlRXJyb3IoJ0luY29tcGF0aWJsZSByZWNlaXZlciwgJyArIFRZUEUgKyAnIHJlcXVpcmVkIScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTEwICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVkZWZpbmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIwKTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZUFsbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIG1ldGEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZm9yT2YgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDg4KTtcblxuICAgICAgICAgICAgICAgIHZhciBhbkluc3RhbmNlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Nyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBmYWlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRpdGVyRGV0ZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg2OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgc2V0VG9TdHJpbmdUYWcgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU5KTtcblxuICAgICAgICAgICAgICAgIHZhciBpbmhlcml0SWZSZXF1aXJlZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTExKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgQyA9IEJhc2U7XG4gICAgICAgICAgICAgICAgICAgIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBPID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIGZpeE1ldGhvZChLRVkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IHByb3RvW0tFWV07XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZShwcm90bywgS0VZLCBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChhKSA/IGZhbHNlIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSA6IEtFWSA9PSAnaGFzJyA/IGZ1bmN0aW9uIGhhcyhhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gc2V0KGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEMoKS5lbnRyaWVzKCkubmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICB9KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEMgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gbmV3IEMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgVEhST1dTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuaGFzKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEMoaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IDU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXgtLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEkaW5zdGFuY2UuaGFzKC0wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDLnByb3RvdHlwZSA9IHByb3RvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpeE1ldGhvZCgnaGFzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuICAgICAgICAgICAgICAgICAgICBPW05BTUVdID0gQztcbiAgICAgICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDLCBOQU1FLCBJU19NQVApO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQztcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciBzZXRQcm90b3R5cGVPZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEyKS5zZXQ7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCB0YXJnZXQsIEMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFMgPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGF0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgY2hlY2sgPSBmdW5jdGlvbiBjaGVjayhPLCBwcm90bykge1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChPKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHNldDogT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICgnX19wcm90b19fJyBpbiB7fSA/IGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpKEZ1bmN0aW9uLmNhbGwsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEzKS5mKE9iamVjdC5wcm90b3R5cGUsICdfX3Byb3RvX18nKS5zZXQsIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVnZ3kgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO2Vsc2Ugc2V0KE8sIHByb3RvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oe30sIGZhbHNlKSA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrOiBjaGVja1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExMyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBwSUUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDczKTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVEZXNjID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9QcmltaXRpdmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE4KTtcblxuICAgICAgICAgICAgICAgIHZhciBoYXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDIxKTtcblxuICAgICAgICAgICAgICAgIHZhciBJRThfRE9NX0RFRklORSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUpID8gZ09QRCA6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gICAgICAgICAgICAgICAgICAgIE8gPSB0b0lPYmplY3QoTyk7XG4gICAgICAgICAgICAgICAgICAgIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNSkoJ1dlYWtNYXAnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTE1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAgICAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVtsZW5ndGhdID0gYXJndW1lbnRzW2xlbmd0aF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMTYgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNykoJ1dlYWtNYXAnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTE3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFGdW5jdGlvbiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGN0eCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGZvck9mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4OCk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICAgICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBmdW5jdGlvbiBmcm9tKHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvck9mKHNvdXJjZSwgZmFsc2UsIGZ1bmN0aW9uIChuZXh0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDExOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oODIpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Myk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExOSk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMCk7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyMSk7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuV2Vha1NldDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTE5ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHdlYWsgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdmFsaWRhdGUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwOSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgV0VBS19TRVQgPSAnV2Vha1NldCc7XG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExMCkoV0VBS19TRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIFdlYWtTZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB3ZWFrLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyMCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTE1KSgnV2Vha1NldCcpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExNykoJ1dlYWtTZXQnKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjMpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5jb2RlUG9pbnRBdDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTIzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRhdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDgpKGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAgICAgICAgICAgICAgICAgICBjb2RlUG9pbnRBdDogZnVuY3Rpb24gY29kZVBvaW50QXQocG9zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjUpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9BYnNvbHV0ZUluZGV4ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbiAgICAgICAgICAgICAgICB2YXIgJGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludDtcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGFMZW4gPiBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goY29kZSA8IDB4MTAwMDAgPyBmcm9tQ2hhckNvZGUoY29kZSkgOiBmcm9tQ2hhckNvZGUoKChjb2RlIC09IDB4MTAwMDApID4+IDEwKSArIDB4ZDgwMCwgY29kZSAlIDB4NDAwICsgMHhkYzAwKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXMuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjcpO1xuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg4Mik7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOSkuU3ltYm9sO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxMjcgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGdsb2JhbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgREVTQ1JJUFRPUlMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1KTtcblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciByZWRlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjApO1xuXG4gICAgICAgICAgICAgICAgdmFyIE1FVEEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEwNykuS0VZO1xuXG4gICAgICAgICAgICAgICAgdmFyICRmYWlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNoYXJlZCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMzEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNldFRvU3RyaW5nVGFnID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1OSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdWlkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgd2tzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgd2tzRXh0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMjgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHdrc0RlZmluZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTI5KTtcblxuICAgICAgICAgICAgICAgIHZhciBlbnVtS2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMwKTtcblxuICAgICAgICAgICAgICAgIHZhciBpc0FycmF5ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMDYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGFuT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMik7XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b0lPYmplY3QgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQyKTtcblxuICAgICAgICAgICAgICAgIHZhciB0b1ByaW1pdGl2ZSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNyZWF0ZURlc2MgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE5KTtcblxuICAgICAgICAgICAgICAgIHZhciBfY3JlYXRlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QTkV4dCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMxKTtcblxuICAgICAgICAgICAgICAgIHZhciAkR09QRCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTEzKTtcblxuICAgICAgICAgICAgICAgIHZhciAkRFAgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExKTtcblxuICAgICAgICAgICAgICAgIHZhciAka2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICAgICAgICAgICAgICAgIHZhciBkUCA9ICREUC5mO1xuICAgICAgICAgICAgICAgIHZhciBnT1BOID0gZ09QTkV4dC5mO1xuICAgICAgICAgICAgICAgIHZhciAkU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbiAgICAgICAgICAgICAgICB2YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcblxuICAgICAgICAgICAgICAgIHZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICAgICAgICAgICAgICAgIHZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB2YXIgVE9fUFJJTUlUSVZFID0gd2tzKCd0b1ByaW1pdGl2ZScpO1xuICAgICAgICAgICAgICAgIHZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgICAgICAgICAgICAgICB2YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xuICAgICAgICAgICAgICAgIHZhciBBbGxTeW1ib2xzID0gc2hhcmVkKCdzeW1ib2xzJyk7XG4gICAgICAgICAgICAgICAgdmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xuICAgICAgICAgICAgICAgIHZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xuICAgICAgICAgICAgICAgIHZhciBVU0VfTkFUSVZFID0gdHlwZW9mICRTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICB2YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xuICAgICAgICAgICAgICAgIHZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuICAgICAgICAgICAgICAgIHZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRQKHRoaXMsICdhJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogN1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pKS5hICE9IDc7XG4gICAgICAgICAgICAgICAgfSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGRQKGl0LCBrZXksIEQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbiAgICAgICAgICAgICAgICB9IDogZFA7XG5cbiAgICAgICAgICAgICAgICB2YXIgd3JhcCA9IGZ1bmN0aW9uIHdyYXAodGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3ltLl9rID0gdGFnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ltO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIF90eXBlb2YoJFN5bWJvbC5pdGVyYXRvcikgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90eXBlb2YoaXQpID09ICdzeW1ib2wnO1xuICAgICAgICAgICAgICAgIH0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGl0LCBrZXksIEQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ID09PSBPYmplY3RQcm90bykgJGRlZmluZVByb3BlcnR5KE9QU3ltYm9scywga2V5LCBEKTtcbiAgICAgICAgICAgICAgICAgICAgYW5PYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChEKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdFtISURERU5dW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkgaXRbSElEREVOXVtrZXldID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRCA9IF9jcmVhdGUoRCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkUChpdCwga2V5LCBEKTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICAgICAgICAgICAgICAgICAgICBhbk9iamVjdChpdCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB2YXIgJGNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpdCwgUCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUCA9PT0gdW5kZWZpbmVkID8gX2NyZWF0ZShpdCkgOiAkZGVmaW5lUHJvcGVydGllcyhfY3JlYXRlKGl0KSwgUCk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICAgICAgICAgICAgICAgICAgICBpdCA9IHRvSU9iamVjdChpdCk7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRDtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyICRnZXRPd25Qcm9wZXJ0eU5hbWVzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBnT1BOKHRvSU9iamVjdChpdCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGlmICghVVNFX05BVElWRSkge1xuICAgICAgICAgICAgICAgICAgICAkU3ltYm9sID0gZnVuY3Rpb24gX1N5bWJvbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFnID0gdWlkKGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRzZXQgPSBmdW5jdGlvbiAkc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvKSAkc2V0LmNhbGwoT1BTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQ6ICRzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAodGFnKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2s7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgICAgICAgICAgICAgICAgICAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMyKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzMpLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzIpLmYgPSAkZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChERVNDUklQVE9SUyAmJiAhX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyYXAod2tzKG5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7XG4gICAgICAgICAgICAgICAgICAgIFN5bWJvbDogJFN5bWJvbFxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgZXM2U3ltYm9scyA9ICdoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcycuc3BsaXQoJywnKSwgaiA9IDA7IGVzNlN5bWJvbHMubGVuZ3RoID4gajspIHtcbiAgICAgICAgICAgICAgICAgICAgd2tzKGVzNlN5bWJvbHNbaisrXSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB7XG4gICAgICAgICAgICAgICAgICAgIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdTeW1ib2wnLCB7XG4gICAgICAgICAgICAgICAgICAgICdmb3InOiBmdW5jdGlvbiBfZm9yKGtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKSA/IFN5bWJvbFJlZ2lzdHJ5W2tleV0gOiBTeW1ib2xSZWdpc3RyeVtrZXldID0gJFN5bWJvbChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3ltYm9sUmVnaXN0cnlba2V5XSA9PT0gc3ltKSByZXR1cm4ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB1c2VTZXR0ZXI6IGZ1bmN0aW9uIHVzZVNldHRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVzZVNpbXBsZTogZnVuY3Rpb24gdXNlU2ltcGxlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0dGVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGU6ICRjcmVhdGUsXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG4gICAgICAgICAgICAgICAgICAgIGdldE93blByb3BlcnR5TmFtZXM6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzLFxuICAgICAgICAgICAgICAgICAgICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAkSlNPTiAmJiAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghVVNFX05BVElWRSB8fCAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgUyA9ICRTeW1ib2woKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGE6IFNcbiAgICAgICAgICAgICAgICAgICAgfSkgIT0gJ3t9JyB8fCBfc3RyaW5naWZ5KE9iamVjdChTKSkgIT0gJ3t9JztcbiAgICAgICAgICAgICAgICB9KSksICdKU09OJywge1xuICAgICAgICAgICAgICAgICAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbaXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaSsrXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQXJyYXkocmVwbGFjZXIpKSByZXBsYWNlciA9IGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mICRyZXBsYWNlciA9PSAnZnVuY3Rpb24nKSB2YWx1ZSA9ICRyZXBsYWNlci5jYWxsKHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMCkoJFN5bWJvbFtQUk9UT1RZUEVdLCBUT19QUklNSVRJVkUsICRTeW1ib2xbUFJPVE9UWVBFXS52YWx1ZU9mKTtcbiAgICAgICAgICAgICAgICBzZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4gICAgICAgICAgICAgICAgc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBzZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTI4ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5mID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzMCk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEyOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnbG9iYWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGNvcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpO1xuXG4gICAgICAgICAgICAgICAgdmFyIExJQlJBUlkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMyKTtcblxuICAgICAgICAgICAgICAgIHZhciB3a3NFeHQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEyOCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDExKS5mO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJFN5bWJvbCA9IGNvcmUuU3ltYm9sIHx8IChjb3JlLlN5bWJvbCA9IExJQlJBUlkgPyB7fSA6IGdsb2JhbC5TeW1ib2wgfHwge30pO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZS5jaGFyQXQoMCkgIT0gJ18nICYmICEobmFtZSBpbiAkU3ltYm9sKSkgZGVmaW5lUHJvcGVydHkoJFN5bWJvbCwgbmFtZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHdrc0V4dC5mKG5hbWUpXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBnZXRLZXlzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg1NCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHBJRSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzMpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0U3ltYm9scykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN5bWJvbHMgPSBnZXRTeW1ib2xzKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdG9JT2JqZWN0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg0Mik7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ09QTiA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTMyKS5mO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG4gICAgICAgICAgICAgICAgdmFyIHdpbmRvd05hbWVzID0gKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZih3aW5kb3cpKSA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiBnZXRXaW5kb3dOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdPUE4oaXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzMiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAka2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGhpZGRlbktleXMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDU3KS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTMzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzQpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5wYWRTdGFydDtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM0ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyICRleHBvcnQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDcpO1xuXG4gICAgICAgICAgICAgICAgdmFyICRwYWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEzNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdXNlckFnZW50ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5NSk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KSwgJ1N0cmluZycsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvTGVuZ3RoID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyNSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVwZWF0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgdmFyIHRvSW50ZWdlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMjYpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRlZmluZWQgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMzKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVwZWF0KGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdHIgPSBTdHJpbmcoZGVmaW5lZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXMgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSB0b0ludGVnZXIoY291bnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobiA8IDAgfHwgbiA9PSBJbmZpbml0eSkgdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyBuID4gMDsgKG4gPj4+PSAxKSAmJiAoc3RyICs9IHN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuICYgMSkgcmVzICs9IHN0cjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTM3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzgpO1xuXG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDkpLlN0cmluZy5wYWRFbmQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzOCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciAkZXhwb3J0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg3KTtcblxuICAgICAgICAgICAgICAgIHZhciAkcGFkID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxMzUpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHVzZXJBZ2VudCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oOTUpO1xuXG4gICAgICAgICAgICAgICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCksICdTdHJpbmcnLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDEzOSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQwKTtcblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyg5KS5PYmplY3QudmFsdWVzO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgJGV4cG9ydCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgJHZhbHVlcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQxKShmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAkZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWVzKGl0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICB2YXIgZ2V0S2V5cyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNTQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHRvSU9iamVjdCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNDIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGlzRW51bSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNzMpLmY7XG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE8gPSB0b0lPYmplY3QoaXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbnVtLmNhbGwoTywga2V5ID0ga2V5c1tpKytdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgUmVhZGFibGVTdHJlYW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBmdW5jdGlvbiBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbSA9IFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQzKS5SZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZjIob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mMiA9IGZ1bmN0aW9uIF90eXBlb2YyKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZjIgPSBmdW5jdGlvbiBfdHlwZW9mMihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2YyKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIChmdW5jdGlvbiAoZSwgYSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVbaV0gPSBhW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoZXhwb3J0cywgZnVuY3Rpb24gKG1vZHVsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk6IG1vZHVsZUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGw6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydHM6IHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUubCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uIChleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBnZXR0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbiAobW9kdWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID8gZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107XG4gICAgICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0dGVyO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ucCA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18ucyA9IDcpO1xuICAgICAgICAgICAgICAgIH0oW2Z1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgX3R5cGVvZjIoU3ltYm9sLml0ZXJhdG9yKSA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdHlwZW9mMihvYmopO1xuICAgICAgICAgICAgICAgICAgICB9IDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IF90eXBlb2YyKG9iaik7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCA9IF9yZXF1aXJlLmFzc2VydDtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1Byb3BlcnR5S2V5KGFyZ3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGFyZ3VtZW50ID09PSAnc3RyaW5nJyB8fCAodHlwZW9mIGFyZ3VtZW50ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZihhcmd1bWVudCkpID09PSAnc3ltYm9sJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMudHlwZUlzT2JqZWN0ID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHlwZW9mIHggPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKHgpKSA9PT0gJ29iamVjdCcgJiYgeCAhPT0gbnVsbCB8fCB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLmNyZWF0ZURhdGFQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvLCBwLCB2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZXhwb3J0cy50eXBlSXNPYmplY3QobykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIHAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5jcmVhdGVBcnJheUZyb21MaXN0ID0gZnVuY3Rpb24gKGVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudHMuc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkFycmF5QnVmZmVyQ29weSA9IGZ1bmN0aW9uIChkZXN0LCBkZXN0T2Zmc2V0LCBzcmMsIHNyY09mZnNldCwgbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZGVzdCkuc2V0KG5ldyBVaW50OEFycmF5KHNyYywgc3JjT2Zmc2V0LCBuKSwgZGVzdE9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5DcmVhdGVJdGVyUmVzdWx0T2JqZWN0ID0gZnVuY3Rpb24gKHZhbHVlLCBkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGRvbmUgPT09ICdib29sZWFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAndmFsdWUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICdkb25lJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBkb25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Jc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyID0gZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ID09PSBJbmZpbml0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDYWxsKEYsIFYsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgRiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChGLCBWLCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuSW52b2tlT3JOb29wID0gZnVuY3Rpb24gKE8sIFAsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChPICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUHJvcGVydHlLZXkoUCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYXJncykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGhvZCA9IE9bUF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWxsKG1ldGhvZCwgTywgYXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Qcm9taXNlSW52b2tlT3JOb29wID0gZnVuY3Rpb24gKE8sIFAsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChPICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUHJvcGVydHlLZXkoUCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYXJncykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZXhwb3J0cy5JbnZva2VPck5vb3AoTywgUCwgYXJncykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAocmV0dXJuVmFsdWVFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJldHVyblZhbHVlRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Qcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2sgPSBmdW5jdGlvbiAoTywgUCwgYXJncywgRiwgYXJnc0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChPICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUHJvcGVydHlLZXkoUCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYXJncykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KEFycmF5LmlzQXJyYXkoYXJnc0YpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gT1tQXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKG1ldGhvZEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobWV0aG9kRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGLmFwcGx5KG51bGwsIGFyZ3NGKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKENhbGwobWV0aG9kLCBPLCBhcmdzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVHJhbnNmZXJBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChPKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTy5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuVmFsaWRhdGVBbmROb3JtYWxpemVIaWdoV2F0ZXJNYXJrID0gZnVuY3Rpb24gKGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSBOdW1iZXIoaGlnaFdhdGVyTWFyayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4oaGlnaFdhdGVyTWFyaykgfHwgaGlnaFdhdGVyTWFyayA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaGlnaFdhdGVyTWFyayBwcm9wZXJ0eSBvZiBhIHF1ZXVpbmcgc3RyYXRlZ3kgbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vbi1OYU4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhpZ2hXYXRlck1hcms7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5WYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneSA9IGZ1bmN0aW9uIChzaXplLCBoaWdoV2F0ZXJNYXJrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBzaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2l6ZSBwcm9wZXJ0eSBvZiBhIHF1ZXVpbmcgc3RyYXRlZ3kgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSBleHBvcnRzLlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayhoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWdoV2F0ZXJNYXJrOiBoaWdoV2F0ZXJNYXJrXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlICYmIGUuY29uc3RydWN0b3IgPT09IEFzc2VydGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc3NlcnRpb25FcnJvcihtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5hbWUgPSAnQXNzZXJ0aW9uRXJyb3InO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXNzZXJ0aW9uRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXNzZXJ0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb246IHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydGlvbkVycm9yOiBBc3NlcnRpb25FcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydDogYXNzZXJ0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlT3JOb29wID0gX3JlcXVpcmUuSW52b2tlT3JOb29wLFxuICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZUludm9rZU9yTm9vcCA9IF9yZXF1aXJlLlByb21pc2VJbnZva2VPck5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneSA9IF9yZXF1aXJlLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZUlzT2JqZWN0ID0gX3JlcXVpcmUudHlwZUlzT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUyLmFzc2VydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbiA9IF9yZXF1aXJlMi5yZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlMyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMyksXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXF1ZXVlVmFsdWUgPSBfcmVxdWlyZTMuRGVxdWV1ZVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUgPSBfcmVxdWlyZTMuRW5xdWV1ZVZhbHVlV2l0aFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBQZWVrUXVldWVWYWx1ZSA9IF9yZXF1aXJlMy5QZWVrUXVldWVWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUgPSBfcmVxdWlyZTMuUmVzZXRRdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgV3JpdGFibGVTdHJlYW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5kZXJseWluZ1NpbmsgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmJGhpZ2hXYXRlck1hcmsgPSBfcmVmLmhpZ2hXYXRlck1hcmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSBfcmVmJGhpZ2hXYXRlck1hcmsgPT09IHVuZGVmaW5lZCA/IDEgOiBfcmVmJGhpZ2hXYXRlck1hcms7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV3JpdGFibGVTdHJlYW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGUgPSAnd3JpdGFibGUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGVSZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JhY2twcmVzc3VyZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0eXBlID0gdW5kZXJseWluZ1NpbmsudHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIgPSBuZXcgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzLCB1bmRlcmx5aW5nU2luaywgc2l6ZSwgaGlnaFdhdGVyTWFyayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIuX19zdGFydFN0ZXBzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhXcml0YWJsZVN0cmVhbSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdhYm9ydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdhYm9ydCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHRoaXMpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcignQ2Fubm90IGFib3J0IGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSB3cml0ZXInKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1BYm9ydCh0aGlzLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdnZXRXcml0ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRXcml0ZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbignZ2V0V3JpdGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnbG9ja2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdsb2NrZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyOiBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNXcml0YWJsZVN0cmVhbTogSXNXcml0YWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIElzV3JpdGFibGVTdHJlYW1Mb2NrZWQ6IElzV3JpdGFibGVTdHJlYW1Mb2NrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbTogV3JpdGFibGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUFib3J0OiBXcml0YWJsZVN0cmVhbUFib3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yOiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uOiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZTogV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlOiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0OiBXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNXcml0YWJsZVN0cmVhbSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ193cml0YWJsZVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzV3JpdGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gdHJ1ZSwgJ0lzV3JpdGFibGVTdHJlYW1Mb2NrZWQgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBrbm93biB3cml0YWJsZSBzdHJlYW1zJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3dyaXRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtQWJvcnQoc3RyZWFtLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0ZWQgdG8gYWJvcnQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0YXRlID09PSAnZXJyb3JpbmcnLCAnc3RhdGUgbXVzdCBiZSB3cml0YWJsZSBvciBlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdhc0FscmVhZHlFcnJvcmluZyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXNBbHJlYWR5RXJyb3JpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlamVjdDogcmVqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVhc29uOiByZWFzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF93YXNBbHJlYWR5RXJyb3Jpbmc6IHdhc0FscmVhZHlFcnJvcmluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdhc0FscmVhZHlFcnJvcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVN0YXJ0RXJyb3Jpbmcoc3RyZWFtLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1BZGRXcml0ZVJlcXVlc3Qoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNXcml0YWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVqZWN0OiByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl93cml0ZVJlcXVlc3RzLnB1c2god3JpdGVSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlYWxXaXRoUmVqZWN0aW9uKHN0cmVhbSwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtU3RhcnRFcnJvcmluZyhzdHJlYW0sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEVycm9yaW5nKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbVN0YXJ0RXJyb3Jpbmcoc3RyZWFtLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0b3JlZEVycm9yID09PSB1bmRlZmluZWQsICdzdHJlYW0uX3N0b3JlZEVycm9yID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnLCAnc3RhdGUgbXVzdCBiZSB3cml0YWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyICE9PSB1bmRlZmluZWQsICdjb250cm9sbGVyIG11c3Qgbm90IGJlIHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdGF0ZSA9ICdlcnJvcmluZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0b3JlZEVycm9yID0gcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVSZWFkeVByb21pc2VSZWplY3RlZCh3cml0ZXIsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlICYmIGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEVycm9yaW5nKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUZpbmlzaEVycm9yaW5nKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmluZycsICdzdHJlYW0uX3N0YXRlID09PSBlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFdyaXRhYmxlU3RyZWFtSGFzT3BlcmF0aW9uTWFya2VkSW5GbGlnaHQoc3RyZWFtKSA9PT0gZmFsc2UsICdXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0YXRlID0gJ2Vycm9yZWQnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2Vycm9yU3RlcHMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlZEVycm9yID0gc3RyZWFtLl9zdG9yZWRFcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJlYW0uX3dyaXRlUmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd3JpdGVSZXF1ZXN0ID0gc3RyZWFtLl93cml0ZVJlcXVlc3RzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVSZXF1ZXN0Ll9yZWplY3Qoc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRlUmVxdWVzdHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1SZWplY3RDbG9zZUFuZENsb3NlZFByb21pc2VJZk5lZWRlZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFib3J0UmVxdWVzdCA9IHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFib3J0UmVxdWVzdC5fd2FzQWxyZWFkeUVycm9yaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvcnRSZXF1ZXN0Ll9yZWplY3Qoc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1SZWplY3RDbG9zZUFuZENsb3NlZFByb21pc2VJZk5lZWRlZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2Fib3J0U3RlcHMoYWJvcnRSZXF1ZXN0Ll9yZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0UmVxdWVzdC5fcmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1SZWplY3RDbG9zZUFuZENsb3NlZFByb21pc2VJZk5lZWRlZChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFib3J0UmVxdWVzdC5fcmVqZWN0KHJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRXcml0ZShzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0Ll9yZXNvbHZlKHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0V3JpdGVXaXRoRXJyb3Ioc3RyZWFtLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QuX3JlamVjdChlcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0Q2xvc2Uoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdGF0ZSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRlciA9IHN0cmVhbS5fd3JpdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc29sdmUod3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkLCAnc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0b3JlZEVycm9yID09PSB1bmRlZmluZWQsICdzdHJlYW0uX3N0b3JlZEVycm9yID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRmluaXNoSW5GbGlnaHRDbG9zZVdpdGhFcnJvcihzdHJlYW0sIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnIHx8IHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmluZycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9wZW5kaW5nQWJvcnRSZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QuX3JlamVjdChlcnJvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3BlbmRpbmdBYm9ydFJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVhbFdpdGhSZWplY3Rpb24oc3RyZWFtLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX2Nsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkICYmIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5faW5GbGlnaHRXcml0ZVJlcXVlc3QgPT09IHVuZGVmaW5lZCAmJiBzdHJlYW0uX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1NYXJrQ2xvc2VSZXF1ZXN0SW5GbGlnaHQoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9pbkZsaWdodENsb3NlUmVxdWVzdCA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2Nsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPSBzdHJlYW0uX2Nsb3NlUmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fY2xvc2VSZXF1ZXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1NYXJrRmlyc3RXcml0ZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ID09PSB1bmRlZmluZWQsICd0aGVyZSBtdXN0IGJlIG5vIHBlbmRpbmcgd3JpdGUgcmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fd3JpdGVSZXF1ZXN0cy5sZW5ndGggIT09IDAsICd3cml0ZVJlcXVlc3RzIG11c3Qgbm90IGJlIGVtcHR5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2luRmxpZ2h0V3JpdGVSZXF1ZXN0ID0gc3RyZWFtLl93cml0ZVJlcXVlc3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbVJlamVjdENsb3NlQW5kQ2xvc2VkUHJvbWlzZUlmTmVlZGVkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJywgJ19zdHJlYW1fLltbc3RhdGVdXSBpcyBgXCJlcnJvcmVkXCJgJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX2Nsb3NlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5faW5GbGlnaHRDbG9zZVJlcXVlc3QgPT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2Nsb3NlUmVxdWVzdC5fcmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9jbG9zZVJlcXVlc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZXIgPSBzdHJlYW0uX3dyaXRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZWplY3Qod3JpdGVyLCBzdHJlYW0uX3N0b3JlZEVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZXIgPSBzdHJlYW0uX3dyaXRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdyaXRlciAhPT0gdW5kZWZpbmVkICYmIGJhY2twcmVzc3VyZSAhPT0gc3RyZWFtLl9iYWNrcHJlc3N1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja3ByZXNzdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldCh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChiYWNrcHJlc3N1cmUgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlc29sdmUod3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fYmFja3ByZXNzdXJlID0gYmFja3ByZXNzdXJlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgV3JpdGFibGVTdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgd3JpdGluZyBieSBhbm90aGVyIHdyaXRlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl93cml0ZXIgPSB0aGlzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICd3cml0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlICYmIHN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZWplY3RlZCh0aGlzLCBzdHJlYW0uX3N0b3JlZEVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeVByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0YXRlID09PSAnZXJyb3JlZCcsICdzdGF0ZSBtdXN0IGJlIGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlZEVycm9yID0gc3RyZWFtLl9zdG9yZWRFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemVBc1JlamVjdGVkKHRoaXMsIHN0b3JlZEVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeVByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQodGhpcywgc3RvcmVkRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdhYm9ydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFib3J0KHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Fib3J0JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCdhYm9ydCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJBYm9ydCh0aGlzLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Nsb3NlJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckxvY2tFeGNlcHRpb24oJ2Nsb3NlJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdjYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVsZWFzZUxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWxlYXNlTG9jaygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlbGVhc2VMb2NrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3dyaXRlciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnd3JpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB3cml0ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3dyaXRlJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCd3cml0ZSB0bycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSh0aGlzLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChkZWZhdWx0V3JpdGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2VkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlZFByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Rlc2lyZWRTaXplJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Rlc2lyZWRTaXplJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0V3JpdGVyTG9ja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJHZXREZXNpcmVkU2l6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVhZHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlYWR5JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWR5UHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcih4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19vd25lcldyaXRhYmxlU3RyZWFtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQWJvcnQod3JpdGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtQWJvcnQoc3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2Uod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIChpbiAnICsgc3RhdGUgKyAnIHN0YXRlKSBpcyBub3QgaW4gdGhlIHdyaXRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgY2xvc2VkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RhdGUgPT09ICdlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbG9zZVJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZXNvbHZlOiByZXNvbHZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVqZWN0OiByZWplY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fY2xvc2VSZXF1ZXN0ID0gY2xvc2VSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gdHJ1ZSAmJiBzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNvbHZlKHdyaXRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24od3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pID09PSB0cnVlIHx8IHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdGF0ZSA9PT0gJ3dyaXRhYmxlJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2Uod3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZUNsb3NlZFByb21pc2VSZWplY3RlZCh3cml0ZXIsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlUmVqZWN0KHdyaXRlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZCh3cml0ZXIsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckVuc3VyZVJlYWR5UHJvbWlzZVJlamVjdGVkKHdyaXRlciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVqZWN0KHdyaXRlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJHZXREZXNpcmVkU2l6ZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJyB8fCBzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoc3RyZWFtLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fd3JpdGVyID09PSB3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGVhc2VkRXJyb3IgPSBuZXcgVHlwZUVycm9yKCdXcml0ZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtXFwncyBjbG9zZWRuZXNzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJFbnN1cmVSZWFkeVByb21pc2VSZWplY3RlZCh3cml0ZXIsIHJlbGVhc2VkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyRW5zdXJlQ2xvc2VkUHJvbWlzZVJlamVjdGVkKHdyaXRlciwgcmVsZWFzZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3dyaXRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fb3duZXJXcml0YWJsZVN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlKHdyaXRlciwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB3cml0ZXIuX293bmVyV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2xsZXIgPSBzdHJlYW0uX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua1NpemUgPSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0Q2h1bmtTaXplKGNvbnRyb2xsZXIsIGNodW5rKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSAhPT0gd3JpdGVyLl9vd25lcldyaXRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKCd3cml0ZSB0bycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pID09PSB0cnVlIHx8IHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGlzIGNsb3Npbmcgb3IgY2xvc2VkIGFuZCBjYW5ub3QgYmUgd3JpdHRlbiB0bycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICd3cml0YWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBXcml0YWJsZVN0cmVhbUFkZFdyaXRlUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcldyaXRlKGNvbnRyb2xsZXIsIGNodW5rLCBjaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoc3RyZWFtLCB1bmRlcmx5aW5nU2luaywgc2l6ZSwgaGlnaFdhdGVyTWFyaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1dyaXRhYmxlU3RyZWFtKHN0cmVhbSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFdyaXRhYmxlU3RyZWFtIGluc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgV3JpdGFibGVTdHJlYW0gY29uc3RydWN0b3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5kZXJseWluZ1NpbmsgPSB1bmRlcmx5aW5nU2luaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZVRvdGFsU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZFN0cmF0ZWd5ID0gVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3koc2l6ZSwgaGlnaFdhdGVyTWFyayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lTaXplID0gbm9ybWFsaXplZFN0cmF0ZWd5LnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lIV00gPSBub3JtYWxpemVkU3RyYXRlZ3kuaGlnaFdhdGVyTWFyaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFja3ByZXNzdXJlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVVwZGF0ZUJhY2twcmVzc3VyZShzdHJlYW0sIGJhY2twcmVzc3VyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5wcm90b3R5cGUuZXJyb3IgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fYWJvcnRTdGVwcycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9fYWJvcnRTdGVwcyhyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2VJbnZva2VPck5vb3AodGhpcy5fdW5kZXJseWluZ1NpbmssICdhYm9ydCcsIFtyZWFzb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19lcnJvclN0ZXBzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX19lcnJvclN0ZXBzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX3N0YXJ0U3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX3N0YXJ0U3RlcHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gSW52b2tlT3JOb29wKHRoaXMuX3VuZGVybHlpbmdTaW5rLCAnc3RhcnQnLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gdGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoc3RhcnRSZXN1bHQpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQWR2YW5jZVF1ZXVlSWZOZWVkZWQoX3RoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlYWxXaXRoUmVqZWN0aW9uKHN0cmVhbSwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBFbnF1ZXVlVmFsdWVXaXRoU2l6ZShjb250cm9sbGVyLCAnY2xvc2UnLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRDaHVua1NpemUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJhdGVneVNpemUgPSBjb250cm9sbGVyLl9zdHJhdGVneVNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJhdGVneVNpemUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJhdGVneVNpemUoY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoY2h1bmtTaXplRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGNodW5rU2l6ZUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLl9zdHJhdGVneUhXTSAtIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcldyaXRlKGNvbnRyb2xsZXIsIGNodW5rLCBjaHVua1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZVJlY29yZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogY2h1bmtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUoY29udHJvbGxlciwgd3JpdGVSZWNvcmQsIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlbnF1ZXVlRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGVucXVldWVFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pID09PSBmYWxzZSAmJiBzdHJlYW0uX3N0YXRlID09PSAnd3JpdGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhY2twcmVzc3VyZSA9IFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRCYWNrcHJlc3N1cmUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1VcGRhdGVCYWNrcHJlc3N1cmUoc3RyZWFtLCBiYWNrcHJlc3N1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQWR2YW5jZVF1ZXVlSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1dyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfdW5kZXJseWluZ1NpbmsnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQWR2YW5jZVF1ZXVlSWZOZWVkZWQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9pbkZsaWdodFdyaXRlUmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnIHx8IHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSA9PT0gJ2Vycm9yaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRmluaXNoRXJyb3Jpbmcoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9xdWV1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZVJlY29yZCA9IFBlZWtRdWV1ZVZhbHVlKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdGVSZWNvcmQgPT09ICdjbG9zZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc0Nsb3NlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc1dyaXRlKGNvbnRyb2xsZXIsIHdyaXRlUmVjb3JkLmNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc0Nsb3NlKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbU1hcmtDbG9zZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgRGVxdWV1ZVZhbHVlKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3F1ZXVlLmxlbmd0aCA9PT0gMCwgJ3F1ZXVlIG11c3QgYmUgZW1wdHkgb25jZSB0aGUgZmluYWwgd3JpdGUgcmVjb3JkIGlzIGRlcXVldWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lua0Nsb3NlUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AoY29udHJvbGxlci5fdW5kZXJseWluZ1NpbmssICdjbG9zZScsIFtdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtDbG9zZVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodENsb3NlV2l0aEVycm9yKHN0cmVhbSwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyUHJvY2Vzc1dyaXRlKGNvbnRyb2xsZXIsIGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1NYXJrRmlyc3RXcml0ZVJlcXVlc3RJbkZsaWdodChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpbmtXcml0ZVByb21pc2UgPSBQcm9taXNlSW52b2tlT3JOb29wKGNvbnRyb2xsZXIuX3VuZGVybHlpbmdTaW5rLCAnd3JpdGUnLCBbY2h1bmssIGNvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpbmtXcml0ZVByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1GaW5pc2hJbkZsaWdodFdyaXRlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RhdGUgPT09ICd3cml0YWJsZScgfHwgc3RhdGUgPT09ICdlcnJvcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcXVldWVWYWx1ZShjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChzdHJlYW0pID09PSBmYWxzZSAmJiBzdGF0ZSA9PT0gJ3dyaXRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmFja3ByZXNzdXJlID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldEJhY2twcmVzc3VyZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1VcGRhdGVCYWNrcHJlc3N1cmUoc3RyZWFtLCBiYWNrcHJlc3N1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJBZHZhbmNlUXVldWVJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUZpbmlzaEluRmxpZ2h0V3JpdGVXaXRoRXJyb3Ioc3RyZWFtLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXRCYWNrcHJlc3N1cmUoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2lyZWRTaXplID0gV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2lyZWRTaXplIDw9IDA7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbVN0YXJ0RXJyb3Jpbmcoc3RyZWFtLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJMb2NrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdDYW5ub3QgJyArIG5hbWUgKyAnIGEgc3RyZWFtIHVzaW5nIGEgcmVsZWFzZWQgd3JpdGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQod3JpdGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZXNvbHZlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlamVjdCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJywgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIHBlbmRpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdChyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyQ2xvc2VkUHJvbWlzZVJlc2V0VG9SZWplY3RlZCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgIT09ICdwZW5kaW5nJywgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIG5vdCBwZW5kaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2UgPSBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPSAncmVqZWN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlckNsb3NlZFByb21pc2VSZXNvbHZlKHdyaXRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPT09ICdwZW5kaW5nJywgJ3dyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIHBlbmRpbmcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUodW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgPSAncmVzb2x2ZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZUluaXRpYWxpemUod3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQod3JpdGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VJbml0aWFsaXplQXNSZXNvbHZlZCh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdmdWxmaWxsZWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFdyaXRlclJlYWR5UHJvbWlzZVJlamVjdCh3cml0ZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0KHJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZVN0YXRlID0gJ3JlamVjdGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRXcml0ZXJSZWFkeVByb21pc2VSZXNldCh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAncGVuZGluZyc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzZXRUb1JlamVjdGVkKHdyaXRlciwgcmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkLCAnd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQod3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgPT09IHVuZGVmaW5lZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2UgPSBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VTdGF0ZSA9ICdyZWplY3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0V3JpdGVyUmVhZHlQcm9taXNlUmVzb2x2ZSh3cml0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQsICd3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZWplY3QgIT09IHVuZGVmaW5lZCwgJ3dyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUodW5kZWZpbmVkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLl9yZWFkeVByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci5fcmVhZHlQcm9taXNlU3RhdGUgPSAnZnVsZmlsbGVkJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIElzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIgPSBfcmVxdWlyZS5Jc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUyLmFzc2VydDtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkRlcXVldWVWYWx1ZSA9IGZ1bmN0aW9uIChjb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgnX3F1ZXVlJyBpbiBjb250YWluZXIgJiYgJ19xdWV1ZVRvdGFsU2l6ZScgaW4gY29udGFpbmVyLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBEZXF1ZXVlVmFsdWUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb250YWluZXJzIHdpdGggW1txdWV1ZV1dIGFuZCBbW3F1ZXVlVG90YWxTaXplXV0uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udGFpbmVyLl9xdWV1ZS5sZW5ndGggPiAwLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBzaG91bGQgbmV2ZXIgZGVxdWV1ZSBmcm9tIGFuIGVtcHR5IHF1ZXVlLicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciA9IGNvbnRhaW5lci5fcXVldWUuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZVRvdGFsU2l6ZSAtPSBwYWlyLnNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250YWluZXIuX3F1ZXVlVG90YWxTaXplIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkVucXVldWVWYWx1ZVdpdGhTaXplID0gZnVuY3Rpb24gKGNvbnRhaW5lciwgdmFsdWUsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgnX3F1ZXVlJyBpbiBjb250YWluZXIgJiYgJ19xdWV1ZVRvdGFsU2l6ZScgaW4gY29udGFpbmVyLCAnU3BlYy1sZXZlbCBmYWlsdXJlOiBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kICcgKyAnW1txdWV1ZVRvdGFsU2l6ZV1dLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IE51bWJlcihzaXplKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyKHNpemUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1NpemUgbXVzdCBiZSBhIGZpbml0ZSwgbm9uLU5hTiwgbm9uLW5lZ2F0aXZlIG51bWJlci4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLl9xdWV1ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgKz0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlBlZWtRdWV1ZVZhbHVlID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCdfcXVldWUnIGluIGNvbnRhaW5lciAmJiAnX3F1ZXVlVG90YWxTaXplJyBpbiBjb250YWluZXIsICdTcGVjLWxldmVsIGZhaWx1cmU6IFBlZWtRdWV1ZVZhbHVlIHNob3VsZCBvbmx5IGJlIHVzZWQgb24gY29udGFpbmVycyB3aXRoIFtbcXVldWVdXSBhbmQgW1txdWV1ZVRvdGFsU2l6ZV1dLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRhaW5lci5fcXVldWUubGVuZ3RoID4gMCwgJ1NwZWMtbGV2ZWwgZmFpbHVyZTogc2hvdWxkIG5ldmVyIHBlZWsgYXQgYW4gZW1wdHkgcXVldWUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpciA9IGNvbnRhaW5lci5fcXVldWVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlJlc2V0UXVldWUgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoJ19xdWV1ZScgaW4gY29udGFpbmVyICYmICdfcXVldWVUb3RhbFNpemUnIGluIGNvbnRhaW5lciwgJ1NwZWMtbGV2ZWwgZmFpbHVyZTogUmVzZXRRdWV1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5fcXVldWUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5fcXVldWVUb3RhbFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyQ29weSA9IF9yZXF1aXJlLkFycmF5QnVmZmVyQ29weSxcbiAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QgPSBfcmVxdWlyZS5DcmVhdGVJdGVyUmVzdWx0T2JqZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgSXNGaW5pdGVOb25OZWdhdGl2ZU51bWJlciA9IF9yZXF1aXJlLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VPck5vb3AgPSBfcmVxdWlyZS5JbnZva2VPck5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlSW52b2tlT3JOb29wID0gX3JlcXVpcmUuUHJvbWlzZUludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZmVyQXJyYXlCdWZmZXIgPSBfcmVxdWlyZS5UcmFuc2ZlckFycmF5QnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3kgPSBfcmVxdWlyZS5WYWxpZGF0ZUFuZE5vcm1hbGl6ZVF1ZXVpbmdTdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayA9IF9yZXF1aXJlLlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyaztcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUyID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUFycmF5RnJvbUxpc3QgPSBfcmVxdWlyZTIuY3JlYXRlQXJyYXlGcm9tTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZURhdGFQcm9wZXJ0eSA9IF9yZXF1aXJlMi5jcmVhdGVEYXRhUHJvcGVydHksXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlSXNPYmplY3QgPSBfcmVxdWlyZTIudHlwZUlzT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUzLmFzc2VydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbiA9IF9yZXF1aXJlMy5yZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlNCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMyksXG4gICAgICAgICAgICAgICAgICAgICAgICBEZXF1ZXVlVmFsdWUgPSBfcmVxdWlyZTQuRGVxdWV1ZVZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUgPSBfcmVxdWlyZTQuRW5xdWV1ZVZhbHVlV2l0aFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlID0gX3JlcXVpcmU0LlJlc2V0UXVldWU7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXF1aXJlNSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMiksXG4gICAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyID0gX3JlcXVpcmU1LkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBJc1dyaXRhYmxlU3RyZWFtID0gX3JlcXVpcmU1LklzV3JpdGFibGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBJc1dyaXRhYmxlU3RyZWFtTG9ja2VkID0gX3JlcXVpcmU1LklzV3JpdGFibGVTdHJlYW1Mb2NrZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbUFib3J0ID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtQWJvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSA9IF9yZXF1aXJlNS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0ID0gX3JlcXVpcmU1LldyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBSZWFkYWJsZVN0cmVhbSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmRlcmx5aW5nU291cmNlID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IF9yZWYuaGlnaFdhdGVyTWFyaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFkYWJsZVN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZSA9ICdyZWFkYWJsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3R1cmJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IHVuZGVybHlpbmdTb3VyY2UudHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHlwZVN0cmluZyA9IFN0cmluZyh0eXBlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlU3RyaW5nID09PSAnYnl0ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoaWdoV2F0ZXJNYXJrID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hXYXRlck1hcmsgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyID0gbmV3IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcywgdW5kZXJseWluZ1NvdXJjZSwgaGlnaFdhdGVyTWFyayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhpZ2hXYXRlck1hcmsgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyayA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIgPSBuZXcgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzLCB1bmRlcmx5aW5nU291cmNlLCBzaXplLCBoaWdoV2F0ZXJNYXJrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlIGlzIHNwZWNpZmllZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlYWRhYmxlU3RyZWFtLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qoc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbignY2FuY2VsJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FuY2VsIGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSByZWFkZXInKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1DYW5jZWwodGhpcywgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZ2V0UmVhZGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmVhZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IF9yZWYyLm1vZGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdnZXRSZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBY3F1aXJlUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IFN0cmluZyhtb2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ2J5b2InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQWNxdWlyZVJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIG1vZGUgaXMgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3BpcGVUaHJvdWdoJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGlwZVRocm91Z2goX3JlZjMsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRhYmxlID0gX3JlZjMud3JpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYWJsZSA9IF9yZWYzLnJlYWRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IHRoaXMucGlwZVRvKHdyaXRhYmxlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZJc09iamVjdEFuZEhhc0FQcm9taXNlSXNIYW5kbGVkSW50ZXJuYWxTbG90U2V0UHJvbWlzZUlzSGFuZGxlZFRvVHJ1ZShwcm9taXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdwaXBlVG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwaXBlVG8oZGVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmNCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50Q2xvc2UgPSBfcmVmNC5wcmV2ZW50Q2xvc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50QWJvcnQgPSBfcmVmNC5wcmV2ZW50QWJvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50Q2FuY2VsID0gX3JlZjQucHJldmVudENhbmNlbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdwaXBlVG8nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNXcml0YWJsZVN0cmVhbShkZXN0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvXFwncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV3JpdGFibGVTdHJlYW0nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50Q2xvc2UgPSBCb29sZWFuKHByZXZlbnRDbG9zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRBYm9ydCA9IEJvb2xlYW4ocHJldmVudEFib3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmVudENhbmNlbCA9IEJvb2xlYW4ocHJldmVudENhbmNlbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcykgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFJlYWRhYmxlU3RyZWFtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzV3JpdGFibGVTdHJlYW1Mb2NrZWQoZGVzdCkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFdyaXRhYmxlU3RyZWFtJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cml0ZXIgPSBBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyKGRlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2h1dHRpbmdEb3duID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50V3JpdGUgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBpcGVMb29wKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRXcml0ZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNodXR0aW5nRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlci5fcmVhZHlQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZChyZWFkZXIpLnRoZW4oZnVuY3Rpb24gKF9yZWY1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfcmVmNS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lID0gX3JlZjUuZG9uZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRXcml0ZSA9IFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlKHdyaXRlciwgdmFsdWUpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihwaXBlTG9vcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT3JCZWNvbWVzRXJyb3JlZChfdGhpcywgcmVhZGVyLl9jbG9zZWRQcm9taXNlLCBmdW5jdGlvbiAoc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudEFib3J0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bldpdGhBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtQWJvcnQoZGVzdCwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cnVlLCBzdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24odHJ1ZSwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNPckJlY29tZXNFcnJvcmVkKGRlc3QsIHdyaXRlci5fY2xvc2VkUHJvbWlzZSwgZnVuY3Rpb24gKHN0b3JlZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZlbnRDYW5jZWwgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duV2l0aEFjdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1DYW5jZWwoX3RoaXMsIHN0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdHJ1ZSwgc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duKHRydWUsIHN0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT3JCZWNvbWVzQ2xvc2VkKF90aGlzLCByZWFkZXIuX2Nsb3NlZFByb21pc2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudENsb3NlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaHV0ZG93bldpdGhBY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24od3JpdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFdyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0KGRlc3QpID09PSB0cnVlIHx8IGRlc3QuX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXN0Q2xvc2VkID0gbmV3IFR5cGVFcnJvcigndGhlIGRlc3RpbmF0aW9uIHdyaXRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGFsbCBkYXRhIGNvdWxkIGJlIHBpcGVkIHRvIGl0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmVudENhbmNlbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGRvd25XaXRoQWN0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUNhbmNlbChfdGhpcywgZGVzdENsb3NlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRydWUsIGRlc3RDbG9zZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXRkb3duKHRydWUsIGRlc3RDbG9zZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZUxvb3AoKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFdyaXRlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gd2FpdEZvcldyaXRlc1RvRmluaXNoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGRDdXJyZW50V3JpdGUgPSBjdXJyZW50V3JpdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXcml0ZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9sZEN1cnJlbnRXcml0ZSAhPT0gY3VycmVudFdyaXRlID8gd2FpdEZvcldyaXRlc1RvRmluaXNoKCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzT3JCZWNvbWVzRXJyb3JlZChzdHJlYW0sIHByb21pc2UsIGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UuY2F0Y2goYWN0aW9uKS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNPckJlY29tZXNDbG9zZWQoc3RyZWFtLCBwcm9taXNlLCBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKGFjdGlvbikuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNodXRkb3duV2l0aEFjdGlvbihhY3Rpb24sIG9yaWdpbmFsSXNFcnJvciwgb3JpZ2luYWxFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaHV0dGluZ0Rvd24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNodXR0aW5nRG93biA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdC5fc3RhdGUgPT09ICd3cml0YWJsZScgJiYgV3JpdGFibGVTdHJlYW1DbG9zZVF1ZXVlZE9ySW5GbGlnaHQoZGVzdCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRGb3JXcml0ZXNUb0ZpbmlzaCgpLnRoZW4oZG9UaGVSZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb1RoZVJlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkb1RoZVJlc3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbigpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplKG9yaWdpbmFsSXNFcnJvciwgb3JpZ2luYWxFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChuZXdFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsaXplKHRydWUsIG5ld0Vycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNodXRkb3duKGlzRXJyb3IsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNodXR0aW5nRG93biA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dHRpbmdEb3duID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXN0Ll9zdGF0ZSA9PT0gJ3dyaXRhYmxlJyAmJiBXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodChkZXN0KSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdEZvcldyaXRlc1RvRmluaXNoKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmluYWxpemUoaXNFcnJvciwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKGlzRXJyb3IsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpbmFsaXplKGlzRXJyb3IsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSh3cml0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Vycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3RlZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRlZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCd0ZWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBicmFuY2hlcyA9IFJlYWRhYmxlU3RyZWFtVGVlKHRoaXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFycmF5RnJvbUxpc3QoYnJhbmNoZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdsb2NrZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ2xvY2tlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElzUmVhZGFibGVTdHJlYW1Mb2NrZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtOiBSZWFkYWJsZVN0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIElzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQ6IElzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2U6IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcjogUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplOiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemVcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBY3F1aXJlUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbSh4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVJc09iamVjdCh4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeCwgJ19yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gdHJ1ZSwgJ0lzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBrbm93biByZWFkYWJsZSBzdHJlYW1zJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtLl9kaXN0dXJiZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtTG9ja2VkKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gdHJ1ZSwgJ0lzUmVhZGFibGVTdHJlYW1Mb2NrZWQgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBrbm93biByZWFkYWJsZSBzdHJlYW1zJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3JlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtVGVlKHN0cmVhbSwgY2xvbmVGb3JCcmFuY2gyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgY2xvbmVGb3JCcmFuY2gyID09PSAnYm9vbGVhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IEFjcXVpcmVSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZWVTdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZWRPckVycm9yZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbGVkMTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsZWQyOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24xOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uMjogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbCA9IGNyZWF0ZV9SZWFkYWJsZVN0cmVhbVRlZVB1bGxGdW5jdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC5fcmVhZGVyID0gcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC5fdGVlU3RhdGUgPSB0ZWVTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGwuX2Nsb25lRm9yQnJhbmNoMiA9IGNsb25lRm9yQnJhbmNoMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5jZWwxID0gY3JlYXRlX1JlYWRhYmxlU3RyZWFtVGVlQnJhbmNoMUNhbmNlbEZ1bmN0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWwxLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWwxLl90ZWVTdGF0ZSA9IHRlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmNlbDIgPSBjcmVhdGVfUmVhZGFibGVTdHJlYW1UZWVCcmFuY2gyQ2FuY2VsRnVuY3Rpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDIuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDIuX3RlZVN0YXRlID0gdGVlU3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5kZXJseWluZ1NvdXJjZTEgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5KHVuZGVybHlpbmdTb3VyY2UxLCAncHVsbCcsIHB1bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5KHVuZGVybHlpbmdTb3VyY2UxLCAnY2FuY2VsJywgY2FuY2VsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnJhbmNoMVN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh1bmRlcmx5aW5nU291cmNlMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5kZXJseWluZ1NvdXJjZTIgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5KHVuZGVybHlpbmdTb3VyY2UyLCAncHVsbCcsIHB1bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRGF0YVByb3BlcnR5KHVuZGVybHlpbmdTb3VyY2UyLCAnY2FuY2VsJywgY2FuY2VsMik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnJhbmNoMlN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh1bmRlcmx5aW5nU291cmNlMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsLl9icmFuY2gxID0gYnJhbmNoMVN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbC5fYnJhbmNoMiA9IGJyYW5jaDJTdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlLmNhdGNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlZVN0YXRlLmNsb3NlZE9yRXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKHB1bGwuX2JyYW5jaDEsIHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcihwdWxsLl9icmFuY2gyLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5jbG9zZWRPckVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbYnJhbmNoMVN0cmVhbSwgYnJhbmNoMlN0cmVhbV07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVfUmVhZGFibGVTdHJlYW1UZWVQdWxsRnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBmLl9yZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaDEgPSBmLl9icmFuY2gxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gyID0gZi5fYnJhbmNoMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUgPSBmLl90ZWVTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyUmVhZChyZWFkZXIpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHlwZUlzT2JqZWN0KHJlc3VsdCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb25lID0gcmVzdWx0LmRvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZG9uZSA9PT0gJ2Jvb2xlYW4nKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSA9PT0gdHJ1ZSAmJiB0ZWVTdGF0ZS5jbG9zZWRPckVycm9yZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQxID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZShicmFuY2gxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlZVN0YXRlLmNhbmNlbGVkMiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UoYnJhbmNoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNsb3NlZE9yRXJyb3JlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2xvc2VkT3JFcnJvcmVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUxID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZTIgPSB2YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQxID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUoYnJhbmNoMSwgdmFsdWUxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZShicmFuY2gyLCB2YWx1ZTIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlX1JlYWRhYmxlU3RyZWFtVGVlQnJhbmNoMUNhbmNlbEZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZihyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gZi5fc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZSA9IGYuX3RlZVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLmNhbmNlbGVkMSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUucmVhc29uMSA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZWVTdGF0ZS5jYW5jZWxlZDIgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvc2l0ZVJlYXNvbiA9IGNyZWF0ZUFycmF5RnJvbUxpc3QoW3RlZVN0YXRlLnJlYXNvbjEsIHRlZVN0YXRlLnJlYXNvbjJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbmNlbFJlc3VsdCA9IFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgY29tcG9zaXRlUmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5fcmVzb2x2ZShjYW5jZWxSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZWVTdGF0ZS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZV9SZWFkYWJsZVN0cmVhbVRlZUJyYW5jaDJDYW5jZWxGdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGYocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGYuX3N0cmVhbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUgPSBmLl90ZWVTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWVTdGF0ZS5jYW5jZWxlZDIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlZVN0YXRlLnJlYXNvbjIgPSByZWFzb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVlU3RhdGUuY2FuY2VsZWQxID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb3NpdGVSZWFzb24gPSBjcmVhdGVBcnJheUZyb21MaXN0KFt0ZWVTdGF0ZS5yZWFzb24xLCB0ZWVTdGF0ZS5yZWFzb24yXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5jZWxSZXN1bHQgPSBSZWFkYWJsZVN0cmVhbUNhbmNlbChzdHJlYW0sIGNvbXBvc2l0ZVJlYXNvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVlU3RhdGUuX3Jlc29sdmUoY2FuY2VsUmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVlU3RhdGUucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUFkZFJlYWRJbnRvUmVxdWVzdChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcihzdHJlYW0uX3JlYWRlcikgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScgfHwgc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRJbnRvUmVxdWVzdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmU6IHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWplY3Q6IHJlamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3JlYWRlci5fcmVhZEludG9SZXF1ZXN0cy5wdXNoKHJlYWRJbnRvUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1BZGRSZWFkUmVxdWVzdChzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcihzdHJlYW0uX3JlYWRlcikgPT09IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRSZXF1ZXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlamVjdDogcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcmVhZGVyLl9yZWFkUmVxdWVzdHMucHVzaChyZWFkUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1DYW5jZWwoc3RyZWFtLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fZGlzdHVyYmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Vycm9yZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHN0cmVhbS5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VDYW5jZWxQcm9taXNlID0gc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIuX19jYW5jZWxTdGVwcyhyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc291cmNlQ2FuY2VsUHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLl9zdGF0ZSA9ICdjbG9zZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIocmVhZGVyKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVhZGVyLl9yZWFkUmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZXNvbHZlID0gcmVhZGVyLl9yZWFkUmVxdWVzdHNbaV0uX3Jlc29sdmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Jlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX3JlYWRSZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlc29sdmUocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUVycm9yKHN0cmVhbSwgZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gdHJ1ZSwgJ3N0cmVhbSBtdXN0IGJlIFJlYWRhYmxlU3RyZWFtJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJywgJ3N0YXRlIG11c3QgYmUgcmVhZGFibGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fc3RhdGUgPSAnZXJyb3JlZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX3N0b3JlZEVycm9yID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHJlYWRlcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlYWRlci5fcmVhZFJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkUmVxdWVzdCA9IHJlYWRlci5fcmVhZFJlcXVlc3RzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRSZXF1ZXN0Ll9yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9yZWFkUmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHJlYWRlciksICdyZWFkZXIgbXVzdCBiZSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCByZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkSW50b1JlcXVlc3QgPSByZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHNbX2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRJbnRvUmVxdWVzdC5fcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fcmVhZEludG9SZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlamVjdChyZWFkZXIsIGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZEludG9SZXF1ZXN0KHN0cmVhbSwgY2h1bmssIGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoID4gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkSW50b1JlcXVlc3QgPSByZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEludG9SZXF1ZXN0Ll9yZXNvbHZlKENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2h1bmssIGRvbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRSZXF1ZXN0KHN0cmVhbSwgY2h1bmssIGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBzdHJlYW0uX3JlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGggPiAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRSZXF1ZXN0ID0gcmVhZGVyLl9yZWFkUmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZFJlcXVlc3QuX3Jlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdChjaHVuaywgZG9uZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkSW50b1JlcXVlc3RzKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5fcmVhZGVyLl9yZWFkUmVxdWVzdHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1IYXNCWU9CUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IHN0cmVhbS5fcmVhZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcihyZWFkZXIpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUhhc0RlZmF1bHRSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gc3RyZWFtLl9yZWFkZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHJlYWRlcikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBmb3IgZXhjbHVzaXZlIHJlYWRpbmcgYnkgYW5vdGhlciByZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNJbml0aWFsaXplKHRoaXMsIHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZFJlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2FuY2VsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2NhbmNlbCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFkZXJMb2NrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljQ2FuY2VsKHRoaXMsIHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3JlYWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZGVmYXVsdFJlYWRlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ3JlYWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhZGVyTG9ja0V4Y2VwdGlvbigncmVhZCBmcm9tJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlclJlYWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3JlbGVhc2VMb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZUxvY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdFJlYWRlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWxlYXNlTG9jaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmllZCB0byByZWxlYXNlIGEgcmVhZGVyIGxvY2sgd2hlbiB0aGF0IHJlYWRlciBoYXMgcGVuZGluZyByZWFkKCkgY2FsbHMgdW4tc2V0dGxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1SZWFkZXJHZW5lcmljUmVsZWFzZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2VkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGRlZmF1bHRSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvc2VkUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtKHN0cmVhbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZSBnaXZlbiBhICcgKyAnYnl0ZSBzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnN0cnVjdCBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBmb3IgYSBzdHJlYW0gbm90IGNvbnN0cnVjdGVkIHdpdGggYSBieXRlICcgKyAnc291cmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGlzIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxvY2tlZCBmb3IgZXhjbHVzaXZlIHJlYWRpbmcgYnkgYW5vdGhlciByZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNJbml0aWFsaXplKHRoaXMsIHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZEludG9SZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFJc1JlYWRhYmxlU3RyZWFtQllPQlJlYWRlcih0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjYW5jZWwnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhZGVyTG9ja0V4Y2VwdGlvbignY2FuY2VsJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0NhbmNlbCh0aGlzLCByZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZWFkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVhZCh2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChieW9iUmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbigncmVhZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFkZXJMb2NrRXhjZXB0aW9uKCdyZWFkIGZyb20nKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5QnVmZmVyLmlzVmlldyh2aWV3KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ3ZpZXcgbXVzdCBiZSBhbiBhcnJheSBidWZmZXIgdmlldycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmJ5dGVMZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCd2aWV3IG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlclJlYWQodGhpcywgdmlldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3JlbGVhc2VMb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVsZWFzZUxvY2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGJ5b2JSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdyZWxlYXNlTG9jaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJpZWQgdG8gcmVsZWFzZSBhIHJlYWRlciBsb2NrIHdoZW4gdGhhdCByZWFkZXIgaGFzIHBlbmRpbmcgcmVhZCgpIGNhbGxzIHVuLXNldHRsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Nsb3NlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChieW9iUmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2VkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Nsb3NlZFByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfcmVhZEludG9SZXF1ZXN0cycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3JlYWRSZXF1ZXN0cycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY0luaXRpYWxpemUocmVhZGVyLCBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fcmVhZGVyID0gcmVhZGVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZShyZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVzb2x2ZWQocmVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJywgJ3N0YXRlIG11c3QgYmUgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQocmVhZGVyLCBzdHJlYW0uX3N0b3JlZEVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoKSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbVJlYWRlckdlbmVyaWNDYW5jZWwocmVhZGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSByZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtQ2FuY2VsKHN0cmVhbSwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtUmVhZGVyR2VuZXJpY1JlbGVhc2UocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyID09PSByZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVqZWN0KHJlYWRlciwgbmV3IFR5cGVFcnJvcignUmVhZGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbVxcJ3MgY2xvc2VkbmVzcycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZXNldFRvUmVqZWN0ZWQocmVhZGVyLCBuZXcgVHlwZUVycm9yKCdSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtXFwncyBjbG9zZWRuZXNzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX293bmVyUmVhZGFibGVTdHJlYW0uX3JlYWRlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlclJlYWQocmVhZGVyLCB2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gcmVhZGVyLl9vd25lclJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5fZGlzdHVyYmVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQdWxsSW50byhzdHJlYW0uX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlciwgdmlldyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJSZWFkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHJlYWRlci5fb3duZXJSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0gIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2Rpc3R1cmJlZCA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdCh1bmRlZmluZWQsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChzdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLl9fcHVsbFN0ZXBzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoc3RyZWFtLCB1bmRlcmx5aW5nU291cmNlLCBzaXplLCBoaWdoV2F0ZXJNYXJrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW0oc3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgUmVhZGFibGVTdHJlYW0gaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91bmRlcmx5aW5nU291cmNlID0gdW5kZXJseWluZ1NvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZVRvdGFsU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZVJlcXVlc3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1bGxBZ2FpbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3B1bGxpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9ybWFsaXplZFN0cmF0ZWd5ID0gVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3koc2l6ZSwgaGlnaFdhdGVyTWFyayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lTaXplID0gbm9ybWFsaXplZFN0cmF0ZWd5LnNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lIV00gPSBub3JtYWxpemVkU3RyYXRlZ3kuaGlnaFdhdGVyTWFyaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gSW52b2tlT3JOb29wKHVuZGVybHlpbmdTb3VyY2UsICdzdGFydCcsIFt0aGlzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKHN0YXJ0UmVzdWx0KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsaW5nID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2gocmV0aHJvd0Fzc2VydGlvbkVycm9yUmVqZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluIScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gdGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gKGluICcgKyBzdGF0ZSArICcgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZW5xdWV1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVucXVldWUoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZW5xdWV1ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJlYW0gaXMgY2xvc2VkIG9yIGRyYWluaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSAoaW4gJyArIHN0YXRlICsgJyBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGVucXVldWVkIHRvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUodGhpcywgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVycm9yKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaXMgJyArIHN0cmVhbS5fc3RhdGUgKyAnIGFuZCBzbyBjYW5ub3QgYmUgZXJyb3JlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKHRoaXMsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdfX2NhbmNlbFN0ZXBzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX19jYW5jZWxTdGVwcyhyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2VJbnZva2VPck5vb3AodGhpcy5fdW5kZXJseWluZ1NvdXJjZSwgJ2NhbmNlbCcsIFtyZWFzb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19wdWxsU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX3B1bGxTdGVwcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gRGVxdWV1ZVZhbHVlKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUgJiYgdGhpcy5fcXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1DbG9zZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNodW5rLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlbmRpbmdQcm9taXNlID0gUmVhZGFibGVTdHJlYW1BZGRSZWFkUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBlbmRpbmdQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdkZXNpcmVkU2l6ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBkZWZhdWx0Q29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2Rlc2lyZWRTaXplJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJc1JlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfdW5kZXJseWluZ1NvdXJjZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzaG91bGRQdWxsID0gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclNob3VsZENhbGxQdWxsKGNvbnRyb2xsZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUHVsbCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcHVsbGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX3B1bGxBZ2FpbiA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbGluZyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbFByb21pc2UgPSBQcm9taXNlSW52b2tlT3JOb29wKGNvbnRyb2xsZXIuX3VuZGVybHlpbmdTb3VyY2UsICdwdWxsJywgW2NvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2FsbFB1bGxJZk5lZWRlZChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3JJZk5lZWRlZChjb250cm9sbGVyLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlclNob3VsZENhbGxQdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJyB8fCBzdHJlYW0uX3N0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUxvY2tlZChzdHJlYW0pID09PSB0cnVlICYmIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNpcmVkU2l6ZSA9IFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShjb250cm9sbGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2lyZWRTaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1DbG9zZShzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUoY29udHJvbGxlciwgY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSA9PT0gdHJ1ZSAmJiBSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRSZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRSZXF1ZXN0KHN0cmVhbSwgY2h1bmssIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fc3RyYXRlZ3lTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmF0ZWd5U2l6ZSA9IGNvbnRyb2xsZXIuX3N0cmF0ZWd5U2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtTaXplID0gc3RyYXRlZ3lTaXplKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoY2h1bmtTaXplRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgY2h1bmtTaXplRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBjaHVua1NpemVFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW5xdWV1ZVZhbHVlV2l0aFNpemUoY29udHJvbGxlciwgY2h1bmssIGNodW5rU2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZW5xdWV1ZUUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9ySWZOZWVkZWQoY29udHJvbGxlciwgZW5xdWV1ZUUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlbnF1ZXVlRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcihjb250cm9sbGVyLCBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRXJyb3Ioc3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcklmTmVlZGVkKGNvbnRyb2xsZXIsIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdlcnJvcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250cm9sbGVyLl9zdHJhdGVneUhXTSAtIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIsIHZpZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciA9IGNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlldyA9IHZpZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3Jlc3BvbmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNwb25kKGJ5dGVzV3JpdHRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnlvYlJlcXVlc3RCcmFuZENoZWNrRXhjZXB0aW9uKCdyZXNwb25kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhpcyBCWU9CIHJlcXVlc3QgaGFzIGJlZW4gaW52YWxpZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kKHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLCBieXRlc1dyaXR0ZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdyZXNwb25kV2l0aE5ld1ZpZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNwb25kV2l0aE5ld1ZpZXcodmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnlvYlJlcXVlc3RCcmFuZENoZWNrRXhjZXB0aW9uKCdyZXNwb25kJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhpcyBCWU9CIHJlcXVlc3QgaGFzIGJlZW4gaW52YWxpZGF0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KHZpZXcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgY2FuIG9ubHkgcmVzcG9uZCB3aXRoIGFycmF5IGJ1ZmZlciB2aWV3cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRXaXRoTmV3Vmlldyh0aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciwgdmlldyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ3ZpZXcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdmlldztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHN0cmVhbSwgdW5kZXJseWluZ0J5dGVTb3VyY2UsIGhpZ2hXYXRlck1hcmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZVN0cmVhbShzdHJlYW0pID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZSBnaXZlbiAnICsgJ2EgYnl0ZSBzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciBnaXZlbiBhIGJ5dGUgJyArICdzb3VyY2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdW5kZXJseWluZ0J5dGVTb3VyY2UgPSB1bmRlcmx5aW5nQnl0ZVNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWxsQWdhaW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wdWxsaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsZWFyUGVuZGluZ1B1bGxJbnRvcyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZSA9IHRoaXMuX3F1ZXVlVG90YWxTaXplID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc2V0UXVldWUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyYXRlZ3lIV00gPSBWYWxpZGF0ZUFuZE5vcm1hbGl6ZUhpZ2hXYXRlck1hcmsoaGlnaFdhdGVyTWFyayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSA9IHVuZGVybHlpbmdCeXRlU291cmNlLmF1dG9BbGxvY2F0ZUNodW5rU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvQWxsb2NhdGVDaHVua1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihhdXRvQWxsb2NhdGVDaHVua1NpemUpID09PSBmYWxzZSB8fCBhdXRvQWxsb2NhdGVDaHVua1NpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2F1dG9BbGxvY2F0ZUNodW5rU2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYXV0b0FsbG9jYXRlQ2h1bmtTaXplID0gYXV0b0FsbG9jYXRlQ2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdQdWxsSW50b3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udHJvbGxlciA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gSW52b2tlT3JOb29wKHVuZGVybHlpbmdCeXRlU291cmNlLCAnc3RhcnQnLCBbdGhpc10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZShzdGFydFJlc3VsdCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcHVsbGluZyA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcHVsbEFnYWluID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChyZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdjbG9zZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Nsb3NlUmVxdWVzdGVkID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkOyBkbyBub3QgY2xvc2UgaXQgYWdhaW4hJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSB0aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSAoaW4gJyArIHN0YXRlICsgJyBzdGF0ZSkgaXMgbm90IGluIHRoZSByZWFkYWJsZSBzdGF0ZSBhbmQgY2Fubm90IGJlIGNsb3NlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsb3NlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlbnF1ZXVlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlICE9PSAncmVhZGFibGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgc3RyZWFtIChpbiAnICsgc3RhdGUgKyAnIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgZW5xdWV1ZWQgdG8nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXlCdWZmZXIuaXNWaWV3KGNodW5rKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignWW91IGNhbiBvbmx5IGVucXVldWUgYXJyYXkgYnVmZmVyIHZpZXdzIHdoZW4gdXNpbmcgYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZSh0aGlzLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSAhPT0gJ3JlYWRhYmxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyAnICsgc3RyZWFtLl9zdGF0ZSArICcgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IodGhpcywgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ19fY2FuY2VsU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX2NhbmNlbFN0ZXBzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3REZXNjcmlwdG9yID0gdGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNldFF1ZXVlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZUludm9rZU9yTm9vcCh0aGlzLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSwgJ2NhbmNlbCcsIFtyZWFzb25dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnX19wdWxsU3RlcHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfX3B1bGxTdGVwcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IHRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFJlYWRhYmxlU3RyZWFtSGFzRGVmYXVsdFJlYWRlcihzdHJlYW0pID09PSB0cnVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcXVldWVUb3RhbFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA9PT0gMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX3F1ZXVlLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlVG90YWxTaXplIC09IGVudHJ5LmJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySGFuZGxlUXVldWVEcmFpbih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2aWV3ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcgPSBuZXcgVWludDhBcnJheShlbnRyeS5idWZmZXIsIGVudHJ5LmJ5dGVPZmZzZXQsIGVudHJ5LmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAodmlld0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3Qodmlld0UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodmlldywgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhdXRvQWxsb2NhdGVDaHVua1NpemUgPSB0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihhdXRvQWxsb2NhdGVDaHVua1NpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoYnVmZmVyRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChidWZmZXJFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxJbnRvRGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlT2Zmc2V0OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVMZW5ndGg6IGF1dG9BbGxvY2F0ZUNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc0ZpbGxlZDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50U2l6ZTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdG9yOiBVaW50OEFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlclR5cGU6ICdkZWZhdWx0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvbWlzZSA9IFJlYWRhYmxlU3RyZWFtQWRkUmVhZFJlcXVlc3Qoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdieW9iUmVxdWVzdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIodGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24oJ2J5b2JSZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYnlvYlJlcXVlc3QgPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdERlc2NyaXB0b3IgPSB0aGlzLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShmaXJzdERlc2NyaXB0b3IuYnVmZmVyLCBmaXJzdERlc2NyaXB0b3IuYnl0ZU9mZnNldCArIGZpcnN0RGVzY3JpcHRvci5ieXRlc0ZpbGxlZCwgZmlyc3REZXNjcmlwdG9yLmJ5dGVMZW5ndGggLSBmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYnlvYlJlcXVlc3QgPSBuZXcgUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdCh0aGlzLCB2aWV3KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ieW9iUmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZGVzaXJlZFNpemUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYnl0ZVN0cmVhbUNvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdkZXNpcmVkU2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3VuZGVybHlpbmdCeXRlU291cmNlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSXNSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0KHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNhbGxQdWxsSWZOZWVkZWQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNob3VsZFB1bGwgPSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRQdWxsID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsaW5nID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcHVsbEFnYWluID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wdWxsaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWxsUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AoY29udHJvbGxlci5fdW5kZXJseWluZ0J5dGVTb3VyY2UsICdwdWxsJywgW2NvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3B1bGxpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9wdWxsQWdhaW4gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcHVsbEFnYWluID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNsZWFyUGVuZGluZ1B1bGxJbnRvcyhjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvcihzdHJlYW0sIHB1bGxJbnRvRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgIT09ICdlcnJvcmVkJywgJ3N0YXRlIG11c3Qgbm90IGJlIGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb25lID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbGVkVmlldyA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb252ZXJ0UHVsbEludG9EZXNjcmlwdG9yKHB1bGxJbnRvRGVzY3JpcHRvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWxsSW50b0Rlc2NyaXB0b3IucmVhZGVyVHlwZSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1GdWxmaWxsUmVhZFJlcXVlc3Qoc3RyZWFtLCBmaWxsZWRWaWV3LCBkb25lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHB1bGxJbnRvRGVzY3JpcHRvci5yZWFkZXJUeXBlID09PSAnYnlvYicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRnVsZmlsbFJlYWRJbnRvUmVxdWVzdChzdHJlYW0sIGZpbGxlZFZpZXcsIGRvbmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbnZlcnRQdWxsSW50b0Rlc2NyaXB0b3IocHVsbEludG9EZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXNGaWxsZWQgPSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudFNpemUgPSBwdWxsSW50b0Rlc2NyaXB0b3IuZWxlbWVudFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoYnl0ZXNGaWxsZWQgPD0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGJ5dGVzRmlsbGVkICUgZWxlbWVudFNpemUgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBwdWxsSW50b0Rlc2NyaXB0b3IuY3RvcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZU9mZnNldCwgYnl0ZXNGaWxsZWQgLyBlbGVtZW50U2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3F1ZXVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVPZmZzZXQ6IGJ5dGVPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplICs9IGJ5dGVMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbFB1bGxJbnRvRGVzY3JpcHRvckZyb21RdWV1ZShjb250cm9sbGVyLCBwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50U2l6ZSA9IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50QWxpZ25lZEJ5dGVzID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkIC0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICUgZWxlbWVudFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4Qnl0ZXNUb0NvcHkgPSBNYXRoLm1pbihjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSwgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVMZW5ndGggLSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEJ5dGVzRmlsbGVkID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICsgbWF4Qnl0ZXNUb0NvcHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF4QWxpZ25lZEJ5dGVzID0gbWF4Qnl0ZXNGaWxsZWQgLSBtYXhCeXRlc0ZpbGxlZCAlIGVsZW1lbnRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRvdGFsQnl0ZXNUb0NvcHlSZW1haW5pbmcgPSBtYXhCeXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkeSA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF4QWxpZ25lZEJ5dGVzID4gY3VycmVudEFsaWduZWRCeXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsQnl0ZXNUb0NvcHlSZW1haW5pbmcgPSBtYXhBbGlnbmVkQnl0ZXMgLSBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVldWUgPSBjb250cm9sbGVyLl9xdWV1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRvdGFsQnl0ZXNUb0NvcHlSZW1haW5pbmcgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlYWRPZlF1ZXVlID0gcXVldWVbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzVG9Db3B5ID0gTWF0aC5taW4odG90YWxCeXRlc1RvQ29weVJlbWFpbmluZywgaGVhZE9mUXVldWUuYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc3RTdGFydCA9IHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlT2Zmc2V0ICsgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyQ29weShwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyLCBkZXN0U3RhcnQsIGhlYWRPZlF1ZXVlLmJ1ZmZlciwgaGVhZE9mUXVldWUuYnl0ZU9mZnNldCwgYnl0ZXNUb0NvcHkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlYWRPZlF1ZXVlLmJ5dGVMZW5ndGggPT09IGJ5dGVzVG9Db3B5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXVlLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZE9mUXVldWUuYnl0ZU9mZnNldCArPSBieXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZE9mUXVldWUuYnl0ZUxlbmd0aCAtPSBieXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSAtPSBieXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbEhlYWRQdWxsSW50b0Rlc2NyaXB0b3IoY29udHJvbGxlciwgYnl0ZXNUb0NvcHksIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxCeXRlc1RvQ29weVJlbWFpbmluZyAtPSBieXRlc1RvQ29weTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWR5ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZSA9PT0gMCwgJ3F1ZXVlIG11c3QgYmUgZW1wdHknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQocHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkID4gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCA8IHB1bGxJbnRvRGVzY3JpcHRvci5lbGVtZW50U2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkeTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsSGVhZFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLCBzaXplLCBwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA9PT0gMCB8fCBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zWzBdID09PSBwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckludmFsaWRhdGVCWU9CUmVxdWVzdChjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1bGxJbnRvRGVzY3JpcHRvci5ieXRlc0ZpbGxlZCArPSBzaXplO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckhhbmRsZVF1ZXVlRHJhaW4oY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPT09IDAgJiYgY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckludmFsaWRhdGVCWU9CUmVxdWVzdChjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fYnlvYlJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fYnlvYlJlcXVlc3QuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fYnlvYlJlcXVlc3QuX3ZpZXcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9ieW9iUmVxdWVzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJQcm9jZXNzUHVsbEludG9EZXNjcmlwdG9yc1VzaW5nUXVldWUoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIuX2Nsb3NlUmVxdWVzdGVkID09PSBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdWxsSW50b0Rlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsUHVsbEludG9EZXNjcmlwdG9yRnJvbVF1ZXVlKGNvbnRyb2xsZXIsIHB1bGxJbnRvRGVzY3JpcHRvcikgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ29tbWl0UHVsbEludG9EZXNjcmlwdG9yKGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSwgcHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUHVsbEludG8oY29udHJvbGxlciwgdmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50U2l6ZSA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aWV3LmNvbnN0cnVjdG9yICE9PSBEYXRhVmlldykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRTaXplID0gdmlldy5jb25zdHJ1Y3Rvci5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0b3IgPSB2aWV3LmNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxJbnRvRGVzY3JpcHRvciA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IHZpZXcuYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVPZmZzZXQ6IHZpZXcuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlTGVuZ3RoOiB2aWV3LmJ5dGVMZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNGaWxsZWQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudFNpemU6IGVsZW1lbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0b3I6IGN0b3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyVHlwZTogJ2J5b2InXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlciA9IFRyYW5zZmVyQXJyYXlCdWZmZXIocHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLnB1c2gocHVsbEludG9EZXNjcmlwdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbUFkZFJlYWRJbnRvUmVxdWVzdChzdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLl9zdGF0ZSA9PT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW1wdHlWaWV3ID0gbmV3IHZpZXcuY29uc3RydWN0b3IocHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlciwgcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVPZmZzZXQsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdChlbXB0eVZpZXcsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3F1ZXVlVG90YWxTaXplID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRmlsbFB1bGxJbnRvRGVzY3JpcHRvckZyb21RdWV1ZShjb250cm9sbGVyLCBwdWxsSW50b0Rlc2NyaXB0b3IpID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsZWRWaWV3ID0gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbnZlcnRQdWxsSW50b0Rlc2NyaXB0b3IocHVsbEludG9EZXNjcmlwdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckhhbmRsZVF1ZXVlRHJhaW4oY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoQ3JlYXRlSXRlclJlc3VsdE9iamVjdChmaWxsZWRWaWV3LCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IG5ldyBUeXBlRXJyb3IoJ0luc3VmZmljaWVudCBieXRlcyB0byBmaWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBidWZmZXInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihwdWxsSW50b0Rlc2NyaXB0b3IuYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKHB1bGxJbnRvRGVzY3JpcHRvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUmVhZGFibGVTdHJlYW1BZGRSZWFkSW50b1JlcXVlc3Qoc3RyZWFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDYWxsUHVsbElmTmVlZGVkKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyUmVzcG9uZEluQ2xvc2VkU3RhdGUoY29udHJvbGxlciwgZmlyc3REZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdERlc2NyaXB0b3IuYnVmZmVyID0gVHJhbnNmZXJBcnJheUJ1ZmZlcihmaXJzdERlc2NyaXB0b3IuYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgPT09IDAsICdieXRlc0ZpbGxlZCBtdXN0IGJlIDAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChSZWFkYWJsZVN0cmVhbUhhc0JZT0JSZWFkZXIoc3RyZWFtKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChSZWFkYWJsZVN0cmVhbUdldE51bVJlYWRJbnRvUmVxdWVzdHMoc3RyZWFtKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHB1bGxJbnRvRGVzY3JpcHRvciA9IFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaGlmdFBlbmRpbmdQdWxsSW50byhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckNvbW1pdFB1bGxJbnRvRGVzY3JpcHRvcihzdHJlYW0sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJblJlYWRhYmxlU3RhdGUoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuLCBwdWxsSW50b0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgKyBieXRlc1dyaXR0ZW4gPiBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdieXRlc1dyaXR0ZW4gb3V0IG9mIHJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJGaWxsSGVhZFB1bGxJbnRvRGVzY3JpcHRvcihjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4sIHB1bGxJbnRvRGVzY3JpcHRvcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgPCBwdWxsSW50b0Rlc2NyaXB0b3IuZWxlbWVudFNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJTaGlmdFBlbmRpbmdQdWxsSW50byhjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZW1haW5kZXJTaXplID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVzRmlsbGVkICUgcHVsbEludG9EZXNjcmlwdG9yLmVsZW1lbnRTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kID0gcHVsbEludG9EZXNjcmlwdG9yLmJ5dGVPZmZzZXQgKyBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbWFpbmRlciA9IHB1bGxJbnRvRGVzY3JpcHRvci5idWZmZXIuc2xpY2UoZW5kIC0gcmVtYWluZGVyU2l6ZSwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCByZW1haW5kZXIsIDAsIHJlbWFpbmRlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlciA9IFRyYW5zZmVyQXJyYXlCdWZmZXIocHVsbEludG9EZXNjcmlwdG9yLmJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBwdWxsSW50b0Rlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgLT0gcmVtYWluZGVyU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJDb21taXRQdWxsSW50b0Rlc2NyaXB0b3IoY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLCBwdWxsSW50b0Rlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclByb2Nlc3NQdWxsSW50b0Rlc2NyaXB0b3JzVXNpbmdRdWV1ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW50ZXJuYWwoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3REZXNjcmlwdG9yID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uX3N0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYnl0ZXNXcml0dGVuIG11c3QgYmUgMCB3aGVuIGNhbGxpbmcgcmVzcG9uZCgpIG9uIGEgY2xvc2VkIHN0cmVhbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kSW5DbG9zZWRTdGF0ZShjb250cm9sbGVyLCBmaXJzdERlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJblJlYWRhYmxlU3RhdGUoY29udHJvbGxlciwgYnl0ZXNXcml0dGVuLCBmaXJzdERlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclNoaWZ0UGVuZGluZ1B1bGxJbnRvKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXNjcmlwdG9yID0gY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVySW52YWxpZGF0ZUJZT0JSZXF1ZXN0KGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3I7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyU2hvdWxkQ2FsbFB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5fc3RhdGUgIT09ICdyZWFkYWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3N0YXJ0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVTdHJlYW1IYXNEZWZhdWx0UmVhZGVyKHN0cmVhbSkgPT09IHRydWUgJiYgUmVhZGFibGVTdHJlYW1HZXROdW1SZWFkUmVxdWVzdHMoc3RyZWFtKSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlU3RyZWFtSGFzQllPQlJlYWRlcihzdHJlYW0pID09PSB0cnVlICYmIFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZEludG9SZXF1ZXN0cyhzdHJlYW0pID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckdldERlc2lyZWRTaXplKGNvbnRyb2xsZXIpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xvc2UoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbGxlci5fcXVldWVUb3RhbFNpemUgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlci5fY2xvc2VSZXF1ZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdFBlbmRpbmdQdWxsSW50byA9IGNvbnRyb2xsZXIuX3BlbmRpbmdQdWxsSW50b3NbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RQZW5kaW5nUHVsbEludG8uYnl0ZXNGaWxsZWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gbmV3IFR5cGVFcnJvcignSW5zdWZmaWNpZW50IGJ5dGVzIHRvIGZpbGwgZWxlbWVudHMgaW4gdGhlIGdpdmVuIGJ1ZmZlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRXJyb3IoY29udHJvbGxlciwgZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUNsb3NlKHN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZShjb250cm9sbGVyLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IGNvbnRyb2xsZXIuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9jbG9zZVJlcXVlc3RlZCA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHN0cmVhbS5fc3RhdGUgPT09ICdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGNodW5rLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlT2Zmc2V0ID0gY2h1bmsuYnl0ZU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlTGVuZ3RoID0gY2h1bmsuYnl0ZUxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2ZlcnJlZEJ1ZmZlciA9IFRyYW5zZmVyQXJyYXlCdWZmZXIoYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlU3RyZWFtSGFzRGVmYXVsdFJlYWRlcihzdHJlYW0pID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWRhYmxlU3RyZWFtR2V0TnVtUmVhZFJlcXVlc3RzKHN0cmVhbSkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVucXVldWVDaHVua1RvUXVldWUoY29udHJvbGxlciwgdHJhbnNmZXJyZWRCdWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9xdWV1ZS5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmZXJyZWRWaWV3ID0gbmV3IFVpbnQ4QXJyYXkodHJhbnNmZXJyZWRCdWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbUZ1bGZpbGxSZWFkUmVxdWVzdChzdHJlYW0sIHRyYW5zZmVycmVkVmlldywgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUmVhZGFibGVTdHJlYW1IYXNCWU9CUmVhZGVyKHN0cmVhbSkgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyRW5xdWV1ZUNodW5rVG9RdWV1ZShjb250cm9sbGVyLCB0cmFuc2ZlcnJlZEJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclByb2Nlc3NQdWxsSW50b0Rlc2NyaXB0b3JzVXNpbmdRdWV1ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KElzUmVhZGFibGVTdHJlYW1Mb2NrZWQoc3RyZWFtKSA9PT0gZmFsc2UsICdzdHJlYW0gbXVzdCBub3QgYmUgbG9ja2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVucXVldWVDaHVua1RvUXVldWUoY29udHJvbGxlciwgdHJhbnNmZXJyZWRCdWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlckVycm9yKGNvbnRyb2xsZXIsIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBjb250cm9sbGVyLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc3RyZWFtLl9zdGF0ZSA9PT0gJ3JlYWRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyQ2xlYXJQZW5kaW5nUHVsbEludG9zKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXRRdWV1ZShjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWRhYmxlU3RyZWFtRXJyb3Ioc3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZShjb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RyZWFtID0gY29udHJvbGxlci5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RyZWFtLl9zdGF0ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnZXJyb3JlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnY2xvc2VkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29udHJvbGxlci5fc3RyYXRlZ3lIV00gLSBjb250cm9sbGVyLl9xdWV1ZVRvdGFsU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXJSZXNwb25kKGNvbnRyb2xsZXIsIGJ5dGVzV3JpdHRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNXcml0dGVuID0gTnVtYmVyKGJ5dGVzV3JpdHRlbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyKGJ5dGVzV3JpdHRlbikgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ2J5dGVzV3JpdHRlbiBtdXN0IGJlIGEgZmluaXRlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aCA+IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbnRlcm5hbChjb250cm9sbGVyLCBieXRlc1dyaXR0ZW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRXaXRoTmV3Vmlldyhjb250cm9sbGVyLCB2aWV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoY29udHJvbGxlci5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGggPiAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaXJzdERlc2NyaXB0b3IgPSBjb250cm9sbGVyLl9wZW5kaW5nUHVsbEludG9zWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3REZXNjcmlwdG9yLmJ5dGVPZmZzZXQgKyBmaXJzdERlc2NyaXB0b3IuYnl0ZXNGaWxsZWQgIT09IHZpZXcuYnl0ZU9mZnNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgcmVnaW9uIHNwZWNpZmllZCBieSB2aWV3IGRvZXMgbm90IG1hdGNoIGJ5b2JSZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdERlc2NyaXB0b3IuYnl0ZUxlbmd0aCAhPT0gdmlldy5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSBidWZmZXIgb2YgdmlldyBoYXMgZGlmZmVyZW50IGNhcGFjaXR5IHRoYW4gYnlvYlJlcXVlc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3REZXNjcmlwdG9yLmJ1ZmZlciA9IHZpZXcuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlclJlc3BvbmRJbnRlcm5hbChjb250cm9sbGVyLCB2aWV3LmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3RyZWFtQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWRlckxvY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCAnICsgbmFtZSArICcgYSBzdHJlYW0gdXNpbmcgYSByZWxlYXNlZCByZWFkZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemUocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlSW5pdGlhbGl6ZUFzUmVqZWN0ZWQocmVhZGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZSA9IFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZUluaXRpYWxpemVBc1Jlc29sdmVkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZhdWx0UmVhZGVyQ2xvc2VkUHJvbWlzZVJlamVjdChyZWFkZXIsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgIT09IHVuZGVmaW5lZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QocmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdFJlYWRlckNsb3NlZFByb21pc2VSZXNldFRvUmVqZWN0ZWQocmVhZGVyLCByZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLl9jbG9zZWRQcm9taXNlID0gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRSZWFkZXJDbG9zZWRQcm9taXNlUmVzb2x2ZShyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh1bmRlZmluZWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5fY2xvc2VkUHJvbWlzZV9yZWplY3QgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBieW9iUmVhZGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4nICsgbmFtZSArICcgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGJ5b2JSZXF1ZXN0QnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignUmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdC5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBieXRlU3RyZWFtQ29udHJvbGxlckJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaWZJc09iamVjdEFuZEhhc0FQcm9taXNlSXNIYW5kbGVkSW50ZXJuYWxTbG90U2V0UHJvbWlzZUlzSGFuZGxlZFRvVHJ1ZShwcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucHJvdG90eXBlLnRoZW4uY2FsbChwcm9taXNlLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAobW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG4gICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDYpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZVN0cmVhbSA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHdyaXRhYmxlU3RyZWFtID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKTtcblxuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlRyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbS5UcmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVhZGFibGVTdHJlYW0gPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Jc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkID0gcmVhZGFibGVTdHJlYW0uSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZDtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UgPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2U7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUgPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZTtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IgPSByZWFkYWJsZVN0cmVhbS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplID0gcmVhZGFibGVTdHJlYW0uUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgPSB3cml0YWJsZVN0cmVhbS5BY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLklzV3JpdGFibGVTdHJlYW0gPSB3cml0YWJsZVN0cmVhbS5Jc1dyaXRhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLklzV3JpdGFibGVTdHJlYW1Mb2NrZWQgPSB3cml0YWJsZVN0cmVhbS5Jc1dyaXRhYmxlU3RyZWFtTG9ja2VkO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLldyaXRhYmxlU3RyZWFtID0gd3JpdGFibGVTdHJlYW0uV3JpdGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1BYm9ydCA9IHdyaXRhYmxlU3RyZWFtLldyaXRhYmxlU3RyZWFtQWJvcnQ7XG4gICAgICAgICAgICAgICAgICAgIGV4cG9ydHMuV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yID0gd3JpdGFibGVTdHJlYW0uV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb24gPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UgPSB3cml0YWJsZVN0cmVhbS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlO1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlID0gd3JpdGFibGVTdHJlYW0uV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGU7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuICAgICAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmUgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0ID0gX3JlcXVpcmUuYXNzZXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlT3JOb29wID0gX3JlcXVpcmUyLkludm9rZU9yTm9vcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2VJbnZva2VPclBlcmZvcm1GYWxsYmFjayA9IF9yZXF1aXJlMi5Qcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlSW52b2tlT3JOb29wID0gX3JlcXVpcmUyLlByb21pc2VJbnZva2VPck5vb3AsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlSXNPYmplY3QgPSBfcmVxdWlyZTIudHlwZUlzT2JqZWN0O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBfcmVxdWlyZTMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW0gPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UgPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUgPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IgPSBfcmVxdWlyZTMuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplID0gX3JlcXVpcmUzLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgX3JlcXVpcmU0ID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRhYmxlU3RyZWFtID0gX3JlcXVpcmU0LldyaXRhYmxlU3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVycm9yID0gX3JlcXVpcmU0LldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcjtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1DbG9zZVJlYWRhYmxlKHRyYW5zZm9ybVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUNsb3NlUmVhZGFibGVJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRW5xdWV1ZVRvUmVhZGFibGUodHJhbnNmb3JtU3RyZWFtLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWUoY29udHJvbGxlciwgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySWZOZWVkZWQodHJhbnNmb3JtU3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyB0cmFuc2Zvcm1TdHJlYW0uX3N0b3JlZEVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUoY29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF5YmVCYWNrcHJlc3N1cmUgPSBkZXNpcmVkU2l6ZSA8PSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWF5YmVCYWNrcHJlc3N1cmUgPT09IHRydWUgJiYgdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKHRyYW5zZm9ybVN0cmVhbSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1FcnJvcih0cmFuc2Zvcm1TdHJlYW0sIGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUNsb3NlUmVhZGFibGVJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ2xvc2VkID09PSBmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlKHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX3JlYWRhYmxlQ2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUVycm9ySWZOZWVkZWQodHJhbnNmb3JtU3RyZWFtLCBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbUVycm9ySW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtLCBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2Vycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9zdG9yZWRFcnJvciA9IGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX3dyaXRhYmxlRG9uZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IodHJhbnNmb3JtU3RyZWFtLl93cml0YWJsZUNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IodHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXIsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtUmVhZGFibGVSZWFkeVByb21pc2UodHJhbnNmb3JtU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlICE9PSB1bmRlZmluZWQsICdfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gdHJ1ZSwgJ19iYWNrcHJlc3N1cmUgc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVNldEJhY2twcmVzc3VyZSh0cmFuc2Zvcm1TdHJlYW0sIGJhY2twcmVzc3VyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlICE9PSBiYWNrcHJlc3N1cmUsICdUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUoKSBzaG91bGQgYmUgY2FsbGVkIG9ubHkgd2hlbiBiYWNrcHJlc3N1cmUgaXMgY2hhbmdlZCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZShiYWNrcHJlc3N1cmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UudGhlbihmdW5jdGlvbiAocmVzb2x1dGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChyZXNvbHV0aW9uICE9PSBiYWNrcHJlc3N1cmUsICdfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgYmUgZnVsZmlsbGVkIG9ubHkgd2hlbiBiYWNrcHJlc3N1cmUgaXMgY2hhbmdlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID0gYmFja3ByZXNzdXJlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVHJhbnNmb3JtU3RyZWFtRGVmYXVsdFRyYW5zZm9ybShjaHVuaywgdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXIuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1FbnF1ZXVlVG9SZWFkYWJsZSh0cmFuc2Zvcm1TdHJlYW0sIGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVRyYW5zZm9ybSh0cmFuc2Zvcm1TdHJlYW0sIGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1pbmcgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybWVyID0gdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sbGVyID0gdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVByb21pc2UgPSBQcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2sodHJhbnNmb3JtZXIsICd0cmFuc2Zvcm0nLCBbY2h1bmssIGNvbnRyb2xsZXJdLCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0VHJhbnNmb3JtLCBbY2h1bmssIGNvbnRyb2xsZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fdHJhbnNmb3JtaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbVJlYWRhYmxlUmVhZHlQcm9taXNlKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySWZOZWVkZWQodHJhbnNmb3JtU3RyZWFtLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0eXBlSXNPYmplY3QoeCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsICdfY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIElzVHJhbnNmb3JtU3RyZWFtKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZUlzT2JqZWN0KHgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4LCAnX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgVHJhbnNmb3JtU3RyZWFtU2luayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbVNpbmsodHJhbnNmb3JtU3RyZWFtLCBzdGFydFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNmb3JtU3RyZWFtU2luayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1TdHJlYW0gPSB0cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRQcm9taXNlID0gc3RhcnRQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoVHJhbnNmb3JtU3RyZWFtU2luaywgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdzdGFydCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0KGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl93cml0YWJsZUNvbnRyb2xsZXIgPSBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhcnRQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbVJlYWRhYmxlUmVhZHlQcm9taXNlKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd3cml0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHdyaXRlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl90cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW1UcmFuc2Zvcm0odHJhbnNmb3JtU3RyZWFtLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Fib3J0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWJvcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl90cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fd3JpdGFibGVEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3JJbnRlcm5hbCh0cmFuc2Zvcm1TdHJlYW0sIG5ldyBUeXBlRXJyb3IoJ1dyaXRhYmxlIHNpZGUgYWJvcnRlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnY2xvc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9zZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fdHJhbnNmb3JtaW5nID09PSBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fd3JpdGFibGVEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZsdXNoUHJvbWlzZSA9IFByb21pc2VJbnZva2VPck5vb3AodHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1lciwgJ2ZsdXNoJywgW3RyYW5zZm9ybVN0cmVhbS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmx1c2hQcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fZXJyb3JlZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0cmFuc2Zvcm1TdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDbG9zZWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtQ2xvc2VSZWFkYWJsZUludGVybmFsKHRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySWZOZWVkZWQodHJhbnNmb3JtU3RyZWFtLCByKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh0cmFuc2Zvcm1TdHJlYW0uX3N0b3JlZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtU2luaztcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUcmFuc2Zvcm1TdHJlYW1Tb3VyY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW1Tb3VyY2UodHJhbnNmb3JtU3RyZWFtLCBzdGFydFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVHJhbnNmb3JtU3RyZWFtU291cmNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVN0cmVhbSA9IHRyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFByb21pc2UgPSBzdGFydFByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUcmFuc2Zvcm1TdHJlYW1Tb3VyY2UsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdGFydChjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl90cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDb250cm9sbGVyID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXJ0UHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UgIT09IHVuZGVmaW5lZCwgJ19iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQodHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmUgPT09IGZhbHNlLCAnX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtU3RyZWFtLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncHVsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHB1bGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl90cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZSA9PT0gdHJ1ZSwgJ3B1bGwoKSBzaG91bGQgYmUgbmV2ZXIgY2FsbGVkIHdoaWxlIF9iYWNrcHJlc3N1cmUgaXMgZmFsc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRyYW5zZm9ybVN0cmVhbS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSAhPT0gdW5kZWZpbmVkLCAnX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2Ugc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUodHJhbnNmb3JtU3RyZWFtLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1TdHJlYW0uX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXMuX3RyYW5zZm9ybVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUVycm9ySW50ZXJuYWwodHJhbnNmb3JtU3RyZWFtLCBuZXcgVHlwZUVycm9yKCdSZWFkYWJsZSBzaWRlIGNhbmNlbGVkJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFRyYW5zZm9ybVN0cmVhbVNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRyYW5zZm9ybVN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW0odHJhbnNmb3JtU3RyZWFtKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIgY2FuIG9ubHkgYmUgJyArICdjb25zdHJ1Y3RlZCB3aXRoIGEgVHJhbnNmb3JtU3RyZWFtIGluc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybVN0cmVhbS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gJyArICdvbmx5IGJlIGNyZWF0ZWQgYnkgdGhlIFRyYW5zZm9ybVN0cmVhbSBjb25zdHJ1Y3RvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW0gPSB0cmFuc2Zvcm1TdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZW5xdWV1ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRW5xdWV1ZVRvUmVhZGFibGUodGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSwgY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICdjbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignY2xvc2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybVN0cmVhbUNsb3NlUmVhZGFibGUodGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZXJyb3IocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyKHRoaXMpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZGVmYXVsdENvbnRyb2xsZXJCcmFuZENoZWNrRXhjZXB0aW9uKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtU3RyZWFtRXJyb3IodGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSwgcmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAnZGVzaXJlZFNpemUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbignZGVzaXJlZFNpemUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1TdHJlYW0gPSB0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGFibGVDb250cm9sbGVyID0gdHJhbnNmb3JtU3RyZWFtLl9yZWFkYWJsZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUocmVhZGFibGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBUcmFuc2Zvcm1TdHJlYW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUcmFuc2Zvcm1TdHJlYW0oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybWVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2Zvcm1TdHJlYW0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtZXIgPSB0cmFuc2Zvcm1lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGFibGVTdHJhdGVneSA9IHRyYW5zZm9ybWVyLnJlYWRhYmxlU3RyYXRlZ3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRhYmxlU3RyYXRlZ3kgPSB0cmFuc2Zvcm1lci53cml0YWJsZVN0cmF0ZWd5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybWluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93cml0YWJsZUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVDb250cm9sbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd3JpdGFibGVEb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVDbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYWNrcHJlc3N1cmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQcm9taXNlX3Jlc29sdmUgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UHJvbWlzZV9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gbmV3IFRyYW5zZm9ybVN0cmVhbVNvdXJjZSh0aGlzLCBzdGFydFByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlID0gbmV3IFJlYWRhYmxlU3RyZWFtKHNvdXJjZSwgcmVhZGFibGVTdHJhdGVneSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpbmsgPSBuZXcgVHJhbnNmb3JtU3RyZWFtU2luayh0aGlzLCBzdGFydFByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dyaXRhYmxlID0gbmV3IFdyaXRhYmxlU3RyZWFtKHNpbmssIHdyaXRhYmxlU3RyYXRlZ3kpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCh0aGlzLl93cml0YWJsZUNvbnRyb2xsZXIgIT09IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHRoaXMuX3JlYWRhYmxlQ29udHJvbGxlciAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyR2V0RGVzaXJlZFNpemUodGhpcy5fcmVhZGFibGVDb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW1TZXRCYWNrcHJlc3N1cmUodGhpcywgZGVzaXJlZFNpemUgPD0gMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVN0cmVhbSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UmVzdWx0ID0gSW52b2tlT3JOb29wKHRyYW5zZm9ybWVyLCAnc3RhcnQnLCBbdHJhbnNmb3JtU3RyZWFtLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQcm9taXNlX3Jlc29sdmUoc3RhcnRSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UHJvbWlzZS5jYXRjaChmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLl9lcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVN0cmVhbS5fc3RvcmVkRXJyb3IgPSBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUcmFuc2Zvcm1TdHJlYW0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiAncmVhZGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSXNUcmFuc2Zvcm1TdHJlYW0odGhpcykgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdHJlYW1CcmFuZENoZWNrRXhjZXB0aW9uKCdyZWFkYWJsZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6ICd3cml0YWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChJc1RyYW5zZm9ybVN0cmVhbSh0aGlzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24oJ3dyaXRhYmxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd3JpdGFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJhbnNmb3JtU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1TdHJlYW06IFRyYW5zZm9ybVN0cmVhbVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmF1bHRDb250cm9sbGVyQnJhbmRDaGVja0V4Y2VwdGlvbihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLicgKyBuYW1lICsgJyBjYW4gb25seSBiZSB1c2VkIG9uIGEgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXInKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN0cmVhbUJyYW5kQ2hlY2tFeGNlcHRpb24obmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ1RyYW5zZm9ybVN0cmVhbS5wcm90b3R5cGUuJyArIG5hbWUgKyAnIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW0nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDUpO1xuICAgICAgICAgICAgICAgIH1dKSk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0NCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1VSTFN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFVSTCA9PT0gJ2Z1bmN0aW9uJyAmJiBfdHlwZW9mKFVSTC5wcm90b3R5cGUpID09PSAnb2JqZWN0JyAmJiAnb3JpZ2luJyBpbiBVUkwucHJvdG90eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHUgPSBuZXcgVVJMKCdiJywgJ2h0dHA6Ly9hJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdS5wYXRobmFtZSA9ICdjJTIwZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVUkxTdXBwb3J0ZWQgPSB1LmhyZWYgPT09ICdodHRwOi8vYS9jJTIwZCc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VSTFN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5VUkwgPSBVUkw7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgUG9seWZpbGxVUkwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0NSkuVVJMO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3JpZ2luYWxVUkwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMpLlVSTDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9yaWdpbmFsVVJMKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9seWZpbGxVUkwuY3JlYXRlT2JqZWN0VVJMID0gZnVuY3Rpb24gKGJsb2IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9yaWdpbmFsVVJMLmNyZWF0ZU9iamVjdFVSTC5hcHBseShPcmlnaW5hbFVSTCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9seWZpbGxVUkwucmV2b2tlT2JqZWN0VVJMID0gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5hbFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlVSTCA9IFBvbHlmaWxsVVJMO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDUgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICAoZnVuY3Rpb24gVVJMQ29uc3RydWN0b3JDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0aXZlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ2Z0cCddID0gMjE7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlWydmaWxlJ10gPSAwO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnZ29waGVyJ10gPSA3MDtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ2h0dHAnXSA9IDgwO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVsnaHR0cHMnXSA9IDQ0MztcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ3dzJ10gPSA4MDtcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVbJ3dzcyddID0gNDQzO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVsYXRpdmVQYXRoRG90TWFwcGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbJyUyZSddID0gJy4nO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGhEb3RNYXBwaW5nWycuJTJlJ10gPSAnLi4nO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGhEb3RNYXBwaW5nWyclMmUuJ10gPSAnLi4nO1xuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVBhdGhEb3RNYXBwaW5nWyclMmUlMmUnXSA9ICcuLic7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNSZWxhdGl2ZVNjaGVtZShzY2hlbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWxhdGl2ZVtzY2hlbWVdICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpbnZhbGlkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJRE5BVG9BU0NJSShoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaCA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBoLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwZXJjZW50RXNjYXBlKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1bmljb2RlID0gYy5jaGFyQ29kZUF0KDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZSA+IDB4MjAgJiYgdW5pY29kZSA8IDB4N0YgJiYgWzB4MjIsIDB4MjMsIDB4M0MsIDB4M0UsIDB4M0YsIDB4NjBdLmluZGV4T2YodW5pY29kZSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwZXJjZW50RXNjYXBlUXVlcnkoYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuaWNvZGUgPSBjLmNoYXJDb2RlQXQoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlID4gMHgyMCAmJiB1bmljb2RlIDwgMHg3RiAmJiBbMHgyMiwgMHgyMywgMHgzQywgMHgzRSwgMHg2MF0uaW5kZXhPZih1bmljb2RlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBFT0YsXG4gICAgICAgICAgICAgICAgICAgICAgICBBTFBIQSA9IC9bYS16QS1aXS8sXG4gICAgICAgICAgICAgICAgICAgICAgICBBTFBIQU5VTUVSSUMgPSAvW2EtekEtWjAtOVxcK1xcLVxcLl0vO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHBhcnNlKGlucHV0LCBzdGF0ZU92ZXJyaWRlLCBiYXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlcnIobWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZU92ZXJyaWRlIHx8ICdzY2hlbWUgc3RhcnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvciA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkF0ID0gZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkJyYWNrZXQgPSBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9vcDogd2hpbGUgKChpbnB1dFtjdXJzb3IgLSAxXSAhPT0gRU9GIHx8IGN1cnNvciA9PT0gMCkgJiYgIXRoaXMuX2lzSW52YWxpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjID0gaW5wdXRbY3Vyc29yXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2NoZW1lIHN0YXJ0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICYmIEFMUEhBLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3NjaGVtZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnbm8gc2NoZW1lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIHNjaGVtZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzY2hlbWUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiYgQUxQSEFOVU1FUklDLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnOicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2hlbWUgPSBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVPdmVycmlkZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1JlbGF0aXZlU2NoZW1lKHRoaXMuX3NjaGVtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNSZWxhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NjaGVtZSA9PT0gJ2ZpbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUmVsYXRpdmUgJiYgYmFzZSAmJiBiYXNlLl9zY2hlbWUgPT09IHRoaXMuX3NjaGVtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBvciBhdXRob3JpdHknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdhdXRob3JpdHkgZmlyc3Qgc2xhc2gnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3NjaGVtZSBkYXRhJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdubyBzY2hlbWUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBFT0YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayBsb29wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0NvZGUgcG9pbnQgbm90IGFsbG93ZWQgaW4gc2NoZW1lOiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnc2NoZW1lIGRhdGEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ID0gJz8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3F1ZXJ5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnZnJhZ21lbnQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gRU9GICYmIGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZURhdGEgKz0gcGVyY2VudEVzY2FwZShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ25vIHNjaGVtZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWJhc2UgfHwgIWlzUmVsYXRpdmVTY2hlbWUoYmFzZS5fc2NoZW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignTWlzc2luZyBzY2hlbWUuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZC5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlIG9yIGF1dGhvcml0eSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJy8nICYmIGlucHV0W2N1cnNvciArIDFdID09PSAnLycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0V4cGVjdGVkIC8sIGdvdDogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNSZWxhdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgIT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZSA9IGJhc2UuX3NjaGVtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09IEVPRikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSBiYXNlLl9ob3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBiYXNlLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBiYXNlLl9wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSBiYXNlLl9xdWVyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VybmFtZSA9IGJhc2UuX3VzZXJuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkID0gYmFzZS5fcGFzc3dvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdcXFxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBzbGFzaCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hvc3QgPSBiYXNlLl9ob3N0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBiYXNlLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGggPSBiYXNlLl9wYXRoLnNsaWNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSAnPyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlcm5hbWUgPSBiYXNlLl91c2VybmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IGJhc2UuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3F1ZXJ5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IGJhc2UuX3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aCA9IGJhc2UuX3BhdGguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9IGJhc2UuX3F1ZXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50ID0gJyMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gYmFzZS5fdXNlcm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFzc3dvcmQgPSBiYXNlLl9wYXNzd29yZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdmcmFnbWVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0QyA9IGlucHV0W2N1cnNvciArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXh0TmV4dEMgPSBpbnB1dFtjdXJzb3IgKyAyXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgIT09ICdmaWxlJyB8fCAhQUxQSEEudGVzdChjKSB8fCBuZXh0QyAhPT0gJzonICYmIG5leHRDICE9PSAnfCcgfHwgbmV4dE5leHRDICE9PSBFT0YgJiYgbmV4dE5leHRDICE9PSAnLycgJiYgbmV4dE5leHRDICE9PSAnXFxcXCcgJiYgbmV4dE5leHRDICE9PSAnPycgJiYgbmV4dE5leHRDICE9PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBiYXNlLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VybmFtZSA9IGJhc2UuX3VzZXJuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IGJhc2UuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gYmFzZS5fcGF0aC5zbGljZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGgucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlIHNsYXNoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnLycgfHwgYyA9PT0gJ1xcXFwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ1xcXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgPT09ICdmaWxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdmaWxlIGhvc3QnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc2NoZW1lICE9PSAnZmlsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IGJhc2UuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBiYXNlLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91c2VybmFtZSA9IGJhc2UuX3VzZXJuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IGJhc2UuX3Bhc3N3b3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdhdXRob3JpdHkgZmlyc3Qgc2xhc2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBzZWNvbmQgc2xhc2gnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ0V4cGVjdGVkIFxcJy9cXCcsIGdvdDogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhvcml0eSBzZWNvbmQgc2xhc2gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAnYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignRXhwZWN0ZWQgXFwnL1xcJywgZ290OiAnICsgYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2F1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0gJy8nICYmIGMgIT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2F1dGhvcml0eSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignRXhwZWN0ZWQgYXV0aG9yaXR5LCBnb3Q6ICcgKyBjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXV0aG9yaXR5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnQCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VlbkF0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignQCBhbHJlYWR5IHNlZW4uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciArPSAnJTQwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQXQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNwID0gYnVmZmVyW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjcCA9PT0gJ1xcdCcgfHwgY3AgPT09ICdcXG4nIHx8IGNwID09PSAnXFxyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIHdoaXRlc3BhY2UgaW4gYXV0aG9yaXR5LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3AgPT09ICc6JyAmJiB0aGlzLl9wYXNzd29yZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFzc3dvcmQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBDID0gcGVyY2VudEVzY2FwZShjcCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Bhc3N3b3JkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCArPSB0ZW1wQztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lICs9IHRlbXBDO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09IEVPRiB8fCBjID09PSAnLycgfHwgYyA9PT0gJ1xcXFwnIHx8IGMgPT09ICc/JyB8fCBjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IgLT0gYnVmZmVyLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdob3N0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2ZpbGUgaG9zdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gRU9GIHx8IGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcgfHwgYyA9PT0gJz8nIHx8IGMgPT09ICcjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09PSAyICYmIEFMUEhBLnRlc3QoYnVmZmVyWzBdKSAmJiAoYnVmZmVyWzFdID09PSAnOicgfHwgYnVmZmVyWzFdID09PSAnfCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ3JlbGF0aXZlIHBhdGgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoIHN0YXJ0JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gSUROQVRvQVNDSUkuY2FsbCh0aGlzLCBidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCBzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICdcXHQnIHx8IGMgPT09ICdcXG4nIHx8IGMgPT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIHdoaXRlc3BhY2UgaW4gZmlsZSBob3N0LicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnaG9zdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvc3RuYW1lJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09PSAnOicgJiYgIXNlZW5CcmFja2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IElETkFUb0FTQ0lJLmNhbGwodGhpcywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdwb3J0JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlID09PSAnaG9zdG5hbWUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSBFT0YgfHwgYyA9PT0gJy8nIHx8IGMgPT09ICdcXFxcJyB8fCBjID09PSAnPycgfHwgYyA9PT0gJyMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faG9zdCA9IElETkFUb0FTQ0lJLmNhbGwodGhpcywgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoIHN0YXJ0JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdbJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuQnJhY2tldCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VlbkJyYWNrZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIGNvZGUgcG9pbnQgaW4gaG9zdC9ob3N0bmFtZTogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwb3J0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvWzAtOV0vLnRlc3QoYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgKz0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gRU9GIHx8IGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcgfHwgYyA9PT0gJz8nIHx8IGMgPT09ICcjJyB8fCBzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSBwYXJzZUludChidWZmZXIsIDEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcCAhPT0gcmVsYXRpdmVbdGhpcy5fc2NoZW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IHRlbXAgKyAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZU92ZXJyaWRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAncmVsYXRpdmUgcGF0aCBzdGFydCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICdcXHQnIHx8IGMgPT09ICdcXG4nIHx8IGMgPT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyKCdJbnZhbGlkIGNvZGUgcG9pbnQgaW4gcG9ydDogJyArIGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbGF0aXZlIHBhdGggc3RhcnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycignXFwnXFxcXFxcJyBub3QgYWxsb3dlZCBpbiBwYXRoLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdyZWxhdGl2ZSBwYXRoJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09ICcvJyAmJiBjICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVsYXRpdmUgcGF0aCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gRU9GIHx8IGMgPT09ICcvJyB8fCBjID09PSAnXFxcXCcgfHwgIXN0YXRlT3ZlcnJpZGUgJiYgKGMgPT09ICc/JyB8fCBjID09PSAnIycpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIoJ1xcXFwgbm90IGFsbG93ZWQgaW4gcmVsYXRpdmUgcGF0aC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCA9IHJlbGF0aXZlUGF0aERvdE1hcHBpbmdbYnVmZmVyLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IHRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyID09PSAnLi4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGgucG9wKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09ICcvJyAmJiBjICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhdGgucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciA9PT0gJy4nICYmIGMgIT09ICcvJyAmJiBjICE9PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZmZlciAhPT0gJy4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zY2hlbWUgPT09ICdmaWxlJyAmJiB0aGlzLl9wYXRoLmxlbmd0aCA9PT0gMCAmJiBidWZmZXIubGVuZ3RoID09PSAyICYmIEFMUEhBLnRlc3QoYnVmZmVyWzBdKSAmJiBidWZmZXJbMV0gPT09ICd8Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gYnVmZmVyWzBdICsgJzonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGF0aC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJz8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ID0gJz8nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdxdWVyeSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnIyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gJ2ZyYWdtZW50JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgIT09ICdcXHQnICYmIGMgIT09ICdcXG4nICYmIGMgIT09ICdcXHInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyICs9IHBlcmNlbnRFc2NhcGUoYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3F1ZXJ5JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3RhdGVPdmVycmlkZSAmJiBjID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mcmFnbWVudCA9ICcjJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9ICdmcmFnbWVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgIT09IEVPRiAmJiBjICE9PSAnXFx0JyAmJiBjICE9PSAnXFxuJyAmJiBjICE9PSAnXFxyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXJ5ICs9IHBlcmNlbnRFc2NhcGVRdWVyeShjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnZnJhZ21lbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT09IEVPRiAmJiBjICE9PSAnXFx0JyAmJiBjICE9PSAnXFxuJyAmJiBjICE9PSAnXFxyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50ICs9IGM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2hlbWUgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NjaGVtZURhdGEgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJuYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ob3N0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWVyeSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzSW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNSZWxhdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSlVSTCh1cmwsIGJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlICE9PSB1bmRlZmluZWQgJiYgIShiYXNlIGluc3RhbmNlb2YgSlVSTCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlID0gbmV3IEpVUkwoU3RyaW5nKGJhc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXJsID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dCA9IHVybC5yZXBsYWNlKC9eWyBcXHRcXHJcXG5cXGZdK3xbIFxcdFxcclxcblxcZl0rJC9nLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIGlucHV0LCBudWxsLCBiYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEpVUkwucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaHJlZigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl91cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF1dGhvcml0eSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3VzZXJuYW1lICE9PSAnJyB8fCB0aGlzLl9wYXNzd29yZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRob3JpdHkgPSB0aGlzLl91c2VybmFtZSArICh0aGlzLl9wYXNzd29yZCAhPT0gbnVsbCA/ICc6JyArIHRoaXMuX3Bhc3N3b3JkIDogJycpICsgJ0AnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3RvY29sICsgKHRoaXMuX2lzUmVsYXRpdmUgPyAnLy8nICsgYXV0aG9yaXR5ICsgdGhpcy5ob3N0IDogJycpICsgdGhpcy5wYXRobmFtZSArIHRoaXMuX3F1ZXJ5ICsgdGhpcy5fZnJhZ21lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgaHJlZih2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgcHJvdG9jb2woKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtZSArICc6JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHNldCBwcm90b2NvbCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUgKyAnOicsICdzY2hlbWUgc3RhcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBob3N0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0ludmFsaWQgPyAnJyA6IHRoaXMuX3BvcnQgPyB0aGlzLl9ob3N0ICsgJzonICsgdGhpcy5fcG9ydCA6IHRoaXMuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgaG9zdCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQgfHwgIXRoaXMuX2lzUmVsYXRpdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdob3N0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaG9zdG5hbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hvc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgaG9zdG5hbWUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlLCAnaG9zdG5hbWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBwb3J0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0IHBvcnQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlLCAncG9ydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHBhdGhuYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0ludmFsaWQgPyAnJyA6IHRoaXMuX2lzUmVsYXRpdmUgPyAnLycgKyB0aGlzLl9wYXRoLmpvaW4oJy8nKSA6IHRoaXMuX3NjaGVtZURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgcGF0aG5hbWUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9pc1JlbGF0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXRoID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2UuY2FsbCh0aGlzLCB2YWx1ZSwgJ3JlbGF0aXZlIHBhdGggc3RhcnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBzZWFyY2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCB8fCAhdGhpcy5fcXVlcnkgfHwgdGhpcy5fcXVlcnkgPT09ICc/JyA/ICcnIDogdGhpcy5fcXVlcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgc2VhcmNoKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzSW52YWxpZCB8fCAhdGhpcy5faXNSZWxhdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVlcnkgPSAnPyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVbMF0gPT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlLmNhbGwodGhpcywgdmFsdWUsICdxdWVyeScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGhhc2goKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzSW52YWxpZCB8fCAhdGhpcy5fZnJhZ21lbnQgfHwgdGhpcy5fZnJhZ21lbnQgPT09ICcjJyA/ICcnIDogdGhpcy5fZnJhZ21lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQgaGFzaCh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ludmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50ID0gJyMnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlWzBdID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZS5jYWxsKHRoaXMsIHZhbHVlLCAnZnJhZ21lbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBvcmlnaW4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhvc3Q7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faXNJbnZhbGlkIHx8ICF0aGlzLl9zY2hlbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGhpcy5fc2NoZW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2RhdGEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdmaWxlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnamF2YXNjcmlwdCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21haWx0byc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Jsb2InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEpVUkwodGhpcy5fc2NoZW1lRGF0YSkub3JpZ2luIHx8ICdudWxsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKF8pIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHRoaXMuaG9zdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaG9zdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3NjaGVtZSArICc6Ly8nICsgaG9zdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBleHBvcnRzLlVSTCA9IEpVUkw7XG4gICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTQ2ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXREb2N1bWVudCA9IGdldERvY3VtZW50O1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkgPSBzZXRQREZOZXR3b3JrU3RyZWFtRmFjdG9yeTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmJ1aWxkID0gZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy5QREZQYWdlUHJveHkgPSBleHBvcnRzLlBERkRvY3VtZW50UHJveHkgPSBleHBvcnRzLlBERldvcmtlciA9IGV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0ID0gZXhwb3J0cy5Mb29wYmFja1BvcnQgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0NykpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZG9tX3V0aWxzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9mb250X2xvYWRlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUyKTtcblxuICAgICAgICAgICAgICAgIHZhciBfYXBpX2NvbXBhdGliaWxpdHkgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Myk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NhbnZhcyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU0KTtcblxuICAgICAgICAgICAgICAgIHZhciBfZ2xvYmFsX3Njb3BlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfd29ya2VyX29wdGlvbnMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX21lc3NhZ2VfaGFuZGxlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU3KTtcblxuICAgICAgICAgICAgICAgIHZhciBfbWV0YWRhdGEgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1OCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3RyYW5zcG9ydF9zdHJlYW0gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2MCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3dlYmdsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjEpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlXCIpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikgfHwgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGl0ZXIpID09PSBcIltvYmplY3QgQXJndW1lbnRzXVwiKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGFyci5sZW5ndGgpOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIERFRkFVTFRfUkFOR0VfQ0hVTktfU0laRSA9IDY1NTM2O1xuICAgICAgICAgICAgICAgIHZhciBpc1dvcmtlckRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrV29ya2VyU3JjO1xuICAgICAgICAgICAgICAgIHZhciBmYWtlV29ya2VyRmlsZXNMb2FkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZVJlcXVpcmVFbnN1cmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzV29ya2VyRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVpcmUuZW5zdXJlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUuZW5zdXJlID0gcmVxdWlyZSgnbm9kZS1lbnN1cmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVxdWlyZUVuc3VyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiByZXF1aXJlLmVuc3VyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlUmVxdWlyZUVuc3VyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWlyZWpzLnRvVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1dvcmtlclNyYyA9IHJlcXVpcmVqcy50b1VybCgnZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0cy53b3JrZXIuanMnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBkeW5hbWljTG9hZGVyU3VwcG9ydGVkID0gdHlwZW9mIHJlcXVpcmVqcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcmVxdWlyZWpzLmxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIGZha2VXb3JrZXJGaWxlc0xvYWRlciA9IHVzZVJlcXVpcmVFbnN1cmUgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUuZW5zdXJlKFtdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29ya2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyID0gcmVxdWlyZSgnLi9leHRyYWN0aGlnaGxpZ2h0cy53b3JrZXIuanMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUod29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByZWplY3QsICdleHRyYWN0aGlnaGxpZ2h0c1dvcmtlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gOiBkeW5hbWljTG9hZGVyU3VwcG9ydGVkID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlanMoWydleHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlciddLCBmdW5jdGlvbiAod29ya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHdvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIWZhbGxiYWNrV29ya2VyU3JjICYmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBcInVuZGVmaW5lZFwiIDogX3R5cGVvZihkb2N1bWVudCkpID09PSAnb2JqZWN0JyAmJiAnY3VycmVudFNjcmlwdCcgaW4gZG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHRyYWN0aGlnaGxpZ2h0c0ZpbGVQYXRoID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4dHJhY3RoaWdobGlnaHRzRmlsZVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxsYmFja1dvcmtlclNyYyA9IGV4dHJhY3RoaWdobGlnaHRzRmlsZVBhdGgucmVwbGFjZSgvKFxcLig/Om1pblxcLik/anMpKFxcPy4qKT8kL2ksICcud29ya2VyJDEkMicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVQREZOZXR3b3JrU3RyZWFtO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gc2V0UERGTmV0d29ya1N0cmVhbUZhY3RvcnkocGRmTmV0d29ya1N0cmVhbUZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlUERGTmV0d29ya1N0cmVhbSA9IHBkZk5ldHdvcmtTdHJlYW1GYWN0b3J5O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldERvY3VtZW50KHNyYykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFzayA9IG5ldyBQREZEb2N1bWVudExvYWRpbmdUYXNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzcmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzcmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzQXJyYXlCdWZmZXIpKHNyYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzcmNcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3JjIGluc3RhbmNlb2YgUERGRGF0YVJhbmdlVHJhbnNwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHNyY1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZW9mKHNyYykgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBhcmFtZXRlciBpbiBnZXREb2N1bWVudCwgJyArICduZWVkIGVpdGhlciBVaW50OEFycmF5LCBzdHJpbmcgb3IgYSBwYXJhbWV0ZXIgb2JqZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3JjLnVybCAmJiAhc3JjLmRhdGEgJiYgIXNyYy5yYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBwYXJhbWV0ZXIgb2JqZWN0OiBuZWVkIGVpdGhlciAuZGF0YSwgLnJhbmdlIG9yIC51cmwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gc3JjO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByYW5nZVRyYW5zcG9ydCA9IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICd1cmwnICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBuZXcgX3V0aWwuVVJMKHNvdXJjZVtrZXldLCB3aW5kb3cubG9jYXRpb24pLmhyZWY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3JhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlVHJhbnNwb3J0ID0gc291cmNlW2tleV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3dvcmtlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIgPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGF0YScgJiYgIShzb3VyY2Vba2V5XSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBkZkJ5dGVzID0gc291cmNlW2tleV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHBkZkJ5dGVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNba2V5XSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShwZGZCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfdHlwZW9mKHBkZkJ5dGVzKSA9PT0gJ29iamVjdCcgJiYgcGRmQnl0ZXMgIT09IG51bGwgJiYgIWlzTmFOKHBkZkJ5dGVzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBuZXcgVWludDhBcnJheShwZGZCeXRlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikocGRmQnl0ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1trZXldID0gbmV3IFVpbnQ4QXJyYXkocGRmQnl0ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBQREYgYmluYXJ5IGRhdGE6IGVpdGhlciB0eXBlZCBhcnJheSwgJyArICdzdHJpbmcgb3IgYXJyYXktbGlrZSBvYmplY3QgaXMgZXhwZWN0ZWQgaW4gdGhlICcgKyAnZGF0YSBwcm9wZXJ0eS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5yYW5nZUNodW5rU2l6ZSA9IHBhcmFtcy5yYW5nZUNodW5rU2l6ZSB8fCBERUZBVUxUX1JBTkdFX0NIVU5LX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSA9IHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSB8fCBfZG9tX3V0aWxzLkRPTUNNYXBSZWFkZXJGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaWdub3JlRXJyb3JzID0gcGFyYW1zLnN0b3BBdEVycm9ycyAhPT0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zLnBkZkJ1ZyA9IHBhcmFtcy5wZGZCdWcgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBOYXRpdmVJbWFnZURlY29kZXJWYWx1ZXMgPSBPYmplY3QudmFsdWVzKF91dGlsLk5hdGl2ZUltYWdlRGVjb2RpbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbXMubmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCA9PT0gdW5kZWZpbmVkIHx8ICFOYXRpdmVJbWFnZURlY29kZXJWYWx1ZXMuaW5jbHVkZXMocGFyYW1zLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMubmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCA9IF9hcGlfY29tcGF0aWJpbGl0eS5hcGlDb21wYXRpYmlsaXR5UGFyYW1zLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQgfHwgX3V0aWwuTmF0aXZlSW1hZ2VEZWNvZGluZy5ERUNPREU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIocGFyYW1zLm1heEltYWdlU2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5tYXhJbWFnZVNpemUgPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmlzRXZhbFN1cHBvcnRlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuaXNFdmFsU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVGb250RmFjZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZGlzYWJsZUZvbnRGYWNlID0gX2FwaV9jb21wYXRpYmlsaXR5LmFwaUNvbXBhdGliaWxpdHlQYXJhbXMuZGlzYWJsZUZvbnRGYWNlIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJhbXMuZGlzYWJsZVJhbmdlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kaXNhYmxlUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVTdHJlYW0gIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRpc2FibGVTdHJlYW0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVBdXRvRmV0Y2ggIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRpc2FibGVBdXRvRmV0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyYW1zLmRpc2FibGVDcmVhdGVPYmplY3RVUkwgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRpc2FibGVDcmVhdGVPYmplY3RVUkwgPSBfYXBpX2NvbXBhdGliaWxpdHkuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcy5kaXNhYmxlQ3JlYXRlT2JqZWN0VVJMIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnNldFZlcmJvc2l0eUxldmVsKShwYXJhbXMudmVyYm9zaXR5KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXdvcmtlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmtlclBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZVRyYW5zZmVyczogcGFyYW1zLnBvc3RNZXNzYWdlVHJhbnNmZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eTogcGFyYW1zLnZlcmJvc2l0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0OiBfd29ya2VyX29wdGlvbnMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyID0gd29ya2VyUGFyYW1zLnBvcnQgPyBQREZXb3JrZXIuZnJvbVBvcnQod29ya2VyUGFyYW1zKSA6IG5ldyBQREZXb3JrZXIod29ya2VyUGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suX3dvcmtlciA9IHdvcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBkb2NJZCA9IHRhc2suZG9jSWQ7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtlci5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2suZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2FkaW5nIGFib3J0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mZXRjaERvY3VtZW50KHdvcmtlciwgcGFyYW1zLCByYW5nZVRyYW5zcG9ydCwgZG9jSWQpLnRoZW4oZnVuY3Rpb24gKHdvcmtlcklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2suZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTG9hZGluZyBhYm9ydGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ldHdvcmtTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya1N0cmVhbSA9IG5ldyBfdHJhbnNwb3J0X3N0cmVhbS5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogcGFyYW1zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEYXRhOiBwYXJhbXMuaW5pdGlhbERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUmFuZ2U6IHBhcmFtcy5kaXNhYmxlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCByYW5nZVRyYW5zcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcGFyYW1zLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya1N0cmVhbSA9IGNyZWF0ZVBERk5ldHdvcmtTdHJlYW0oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBwYXJhbXMudXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiBwYXJhbXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cEhlYWRlcnM6IHBhcmFtcy5odHRwSGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogcGFyYW1zLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiBwYXJhbXMucmFuZ2VDaHVua1NpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUmFuZ2U6IHBhcmFtcy5kaXNhYmxlUmFuZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlU3RyZWFtOiBwYXJhbXMuZGlzYWJsZVN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihkb2NJZCwgd29ya2VySWQsIHdvcmtlci5wb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHdvcmtlci5wb3N0TWVzc2FnZVRyYW5zZmVycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNwb3J0ID0gbmV3IFdvcmtlclRyYW5zcG9ydChtZXNzYWdlSGFuZGxlciwgdGFzaywgbmV0d29ya1N0cmVhbSwgcGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZCgnUmVhZHknLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaCh0YXNrLl9jYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9mZXRjaERvY3VtZW50KHdvcmtlciwgc291cmNlLCBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQsIGRvY0lkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3b3JrZXIuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXb3JrZXIgd2FzIGRlc3Ryb3llZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwZGZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5sZW5ndGggPSBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmluaXRpYWxEYXRhID0gcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmluaXRpYWxEYXRhO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0dldERvY1JlcXVlc3QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2NJZDogZG9jSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcGlWZXJzaW9uOiAnMi4xLjI2NicsXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzb3VyY2UuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNvdXJjZS51cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQ6IHNvdXJjZS5wYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZldGNoOiBzb3VyY2UuZGlzYWJsZUF1dG9GZXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUNodW5rU2l6ZTogc291cmNlLnJhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDogc291cmNlLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEltYWdlU2l6ZTogc291cmNlLm1heEltYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogc291cmNlLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVDcmVhdGVPYmplY3RVUkw6IHNvdXJjZS5kaXNhYmxlQ3JlYXRlT2JqZWN0VVJMLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VUcmFuc2ZlcnM6IHdvcmtlci5wb3N0TWVzc2FnZVRyYW5zZmVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY0Jhc2VVcmw6IHNvdXJjZS5kb2NCYXNlVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydDogc291cmNlLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnM6IHNvdXJjZS5pZ25vcmVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHNvdXJjZS5pc0V2YWxTdXBwb3J0ZWRcbiAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAod29ya2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3b3JrZXIuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrZXIgd2FzIGRlc3Ryb3llZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VySWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZEb2N1bWVudExvYWRpbmdUYXNrID0gZnVuY3Rpb24gUERGRG9jdW1lbnRMb2FkaW5nVGFza0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuZXh0RG9jdW1lbnRJZCA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFBERkRvY3VtZW50TG9hZGluZ1Rhc2sgPVxuICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkRvY3VtZW50TG9hZGluZ1Rhc2soKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZEb2N1bWVudExvYWRpbmdUYXNrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl93b3JrZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY0lkID0gJ2QnICsgbmV4dERvY3VtZW50SWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblBhc3N3b3JkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblVuc3VwcG9ydGVkRmVhdHVyZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERkRvY3VtZW50TG9hZGluZ1Rhc2ssIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zcG9ydERlc3Ryb3llZCA9ICF0aGlzLl90cmFuc3BvcnQgPyBQcm9taXNlLnJlc29sdmUoKSA6IHRoaXMuX3RyYW5zcG9ydC5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwb3J0RGVzdHJveWVkLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl90cmFuc3BvcnQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLl93b3JrZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtlci5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3dvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0aGVuXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuZGVwcmVjYXRlZCkoJ1BERkRvY3VtZW50TG9hZGluZ1Rhc2sudGhlbiBtZXRob2QsICcgKyAndXNlIHRoZSBgcHJvbWlzZWAgZ2V0dGVyIGluc3RlYWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlLnRoZW4uYXBwbHkodGhpcy5wcm9taXNlLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicHJvbWlzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGRG9jdW1lbnRMb2FkaW5nVGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGRG9jdW1lbnRMb2FkaW5nVGFzaztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRGF0YVJhbmdlVHJhbnNwb3J0ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZEYXRhUmFuZ2VUcmFuc3BvcnQobGVuZ3RoLCBpbml0aWFsRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZEYXRhUmFuZ2VUcmFuc3BvcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRGF0YSA9IGluaXRpYWxEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlTGlzdGVuZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQREZEYXRhUmFuZ2VUcmFuc3BvcnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFkZFJhbmdlTGlzdGVuZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUmFuZ2VMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFkZFByb2dyZXNzTGlzdGVuZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkUHJvZ3Jlc3NMaXN0ZW5lcihsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZFByb2dyZXNzaXZlUmVhZExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uRGF0YVJhbmdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRGF0YVJhbmdlKGJlZ2luLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IHRoaXMuX3JhbmdlTGlzdGVuZXJzW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3N0ZXA7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IChfc3RlcCA9IF9pdGVyYXRvci5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaXN0ZW5lciA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKGJlZ2luLCBjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RpZEl0ZXJhdG9yRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiAmJiBfaXRlcmF0b3IucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IF9pdGVyYXRvckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25EYXRhUHJvZ3Jlc3NcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25EYXRhUHJvZ3Jlc3MobG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvcjIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JFcnJvcjIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2l0ZXJhdG9yMiA9IF90aGlzMi5fcHJvZ3Jlc3NMaXN0ZW5lcnNbU3ltYm9sLml0ZXJhdG9yXSgpLCBfc3RlcDI7ICEoX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbjIgPSAoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uZXh0KCkpLmRvbmUpOyBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMiA9IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpc3RlbmVyID0gX3N0ZXAyLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0ZW5lcihsb2FkZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yMiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2l0ZXJhdG9yRXJyb3IyID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24yICYmIF9pdGVyYXRvcjIucmV0dXJuICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvcjIucmV0dXJuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2RpZEl0ZXJhdG9yRXJyb3IyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfaXRlcmF0b3JFcnJvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25EYXRhUHJvZ3Jlc3NpdmVSZWFkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRGF0YVByb2dyZXNzaXZlUmVhZChjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RpZEl0ZXJhdG9yRXJyb3IzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZXJhdG9yRXJyb3IzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvcjMgPSBfdGhpczMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVyc1tTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwMzsgIShfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyA9IChfc3RlcDMgPSBfaXRlcmF0b3IzLm5leHQoKSkuZG9uZSk7IF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24zID0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlzdGVuZXIgPSBfc3RlcDMudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGlkSXRlcmF0b3JFcnJvcjMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVyYXRvckVycm9yMyA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXRlcmF0b3JOb3JtYWxDb21wbGV0aW9uMyAmJiBfaXRlcmF0b3IzLnJldHVybiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXRlcmF0b3IzLnJldHVybigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3IzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInRyYW5zcG9ydFJlYWR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRyYW5zcG9ydFJlYWR5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVxdWVzdERhdGFSYW5nZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXF1ZXN0RGF0YVJhbmdlKGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIFBERkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJhYm9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhYm9ydCgpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZEYXRhUmFuZ2VUcmFuc3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRGF0YVJhbmdlVHJhbnNwb3J0ID0gUERGRGF0YVJhbmdlVHJhbnNwb3J0O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERkRvY3VtZW50UHJveHkgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkRvY3VtZW50UHJveHkocGRmSW5mbywgdHJhbnNwb3J0LCBsb2FkaW5nVGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZEb2N1bWVudFByb3h5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1Rhc2sgPSBsb2FkaW5nVGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZJbmZvID0gcGRmSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQREZEb2N1bWVudFByb3h5LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhZ2UocGFnZU51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2UocGFnZU51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYWdlSW5kZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFnZUluZGV4KHJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VJbmRleChyZWYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RGVzdGluYXRpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlc3RpbmF0aW9ucygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldERlc3RpbmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlc3RpbmF0aW9uKGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGVzdGluYXRpb24oaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZUxhYmVsc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlTGFiZWxzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFBhZ2VNb2RlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhZ2VNb2RlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VNb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVuQWN0aW9uRGVzdGluYXRpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlbkFjdGlvbkRlc3RpbmF0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0QXR0YWNobWVudHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0QXR0YWNobWVudHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0QXR0YWNobWVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEphdmFTY3JpcHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0SmF2YVNjcmlwdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRKYXZhU2NyaXB0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPdXRsaW5lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE91dGxpbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0T3V0bGluZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGVybWlzc2lvbnNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGVybWlzc2lvbnMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGVybWlzc2lvbnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE1ldGFkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE1ldGFkYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXREYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RG93bmxvYWRJbmZvXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERvd25sb2FkSW5mbygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRTdGF0c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdGF0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRTdGF0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYW51cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdUYXNrLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm51bVBhZ2VzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZGZJbmZvLm51bVBhZ2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZmluZ2VycHJpbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BkZkluZm8uZmluZ2VycHJpbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJsb2FkaW5nUGFyYW1zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1BhcmFtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZEb2N1bWVudFByb3h5O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBERkRvY3VtZW50UHJveHkgPSBQREZEb2N1bWVudFByb3h5O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERlBhZ2VQcm94eSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGUGFnZVByb3h5KHBhZ2VJbmRleCwgcGFnZUluZm8sIHRyYW5zcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZCdWcgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERlBhZ2VQcm94eSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VJbmRleCA9IHBhZ2VJbmRleDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYWdlSW5mbyA9IHBhZ2VJbmZvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0cyA9IHBkZkJ1ZyA/IG5ldyBfZG9tX3V0aWxzLlN0YXRUaW1lcigpIDogX2RvbV91dGlscy5EdW1teVN0YXRUaW1lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZCdWcgPSBwZGZCdWc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25PYmpzID0gdHJhbnNwb3J0LmNvbW1vbk9ianM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmpzID0gbmV3IFBERk9iamVjdHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFudXBBZnRlclJlbmRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsZWFudXAgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVudFN0YXRlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERlBhZ2VQcm94eSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0Vmlld3BvcnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0Vmlld3BvcnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gX3JlZi5zY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkcm90YXRpb24gPSBfcmVmLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24gPSBfcmVmJHJvdGF0aW9uID09PSB2b2lkIDAgPyB0aGlzLnJvdGF0ZSA6IF9yZWYkcm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmJGRvbnRGbGlwID0gX3JlZi5kb250RmxpcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRGbGlwID0gX3JlZiRkb250RmxpcCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmJGRvbnRGbGlwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSB8fCB0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmRlcHJlY2F0ZWQpKCdnZXRWaWV3cG9ydCBpcyBjYWxsZWQgd2l0aCBvYnNvbGV0ZSBhcmd1bWVudHMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uID0gdHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ251bWJlcicgPyBhcmd1bWVudHNbMV0gOiB0aGlzLnJvdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRGbGlwID0gdHlwZW9mIGFyZ3VtZW50c1syXSA9PT0gJ2Jvb2xlYW4nID8gYXJndW1lbnRzWzJdIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF9kb21fdXRpbHMuUGFnZVZpZXdwb3J0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g6IHRoaXMudmlldyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uOiByb3RhdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRGbGlwOiBkb250RmxpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEFubm90YXRpb25zXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldEFubm90YXRpb25zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIkaW50ZW50ID0gX3JlZjIuaW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gX3JlZjIkaW50ZW50ID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjIkaW50ZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5hbm5vdGF0aW9uc1Byb21pc2UgfHwgdGhpcy5hbm5vdGF0aW9uc0ludGVudCAhPT0gaW50ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubm90YXRpb25zUHJvbWlzZSA9IHRoaXMuX3RyYW5zcG9ydC5nZXRBbm5vdGF0aW9ucyh0aGlzLnBhZ2VJbmRleCwgaW50ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnNJbnRlbnQgPSBpbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbm5vdGF0aW9uc1Byb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKF9yZWYzLCBhbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzQ29udGV4dCA9IF9yZWYzLmNhbnZhc0NvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydCA9IF9yZWYzLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjMkaW50ZW50ID0gX3JlZjMuaW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50ID0gX3JlZjMkaW50ZW50ID09PSB2b2lkIDAgPyAnZGlzcGxheScgOiBfcmVmMyRpbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRlbmFibGVXZWJHTCA9IF9yZWYzLmVuYWJsZVdlYkdMLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlV2ViR0wgPSBfcmVmMyRlbmFibGVXZWJHTCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMyRlbmFibGVXZWJHTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYzJHJlbmRlckludGVyYWN0aSA9IF9yZWYzLnJlbmRlckludGVyYWN0aXZlRm9ybXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbnRlcmFjdGl2ZUZvcm1zID0gX3JlZjMkcmVuZGVySW50ZXJhY3RpID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJHJlbmRlckludGVyYWN0aSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYzJHRyYW5zZm9ybSA9IF9yZWYzLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSA9IF9yZWYzJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJHRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYzJGltYWdlTGF5ZXIgPSBfcmVmMy5pbWFnZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VMYXllciA9IF9yZWYzJGltYWdlTGF5ZXIgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMyRpbWFnZUxheWVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjMkY2FudmFzRmFjdG9yeSA9IF9yZWYzLmNhbnZhc0ZhY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNGYWN0b3J5ID0gX3JlZjMkY2FudmFzRmFjdG9yeSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYzJGNhbnZhc0ZhY3RvcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRiYWNrZ3JvdW5kID0gX3JlZjMuYmFja2dyb3VuZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBfcmVmMyRiYWNrZ3JvdW5kID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjMkYmFja2dyb3VuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRzID0gdGhpcy5fc3RhdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLnRpbWUoJ092ZXJhbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xlYW51cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyaW5nSW50ZW50ID0gaW50ZW50ID09PSAncHJpbnQnID8gJ3ByaW50JyA6ICdkaXNwbGF5JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0ZhY3RvcnlJbnN0YW5jZSA9IGNhbnZhc0ZhY3RvcnkgfHwgbmV3IF9kb21fdXRpbHMuRE9NQ2FudmFzRmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2ViR0xDb250ZXh0ID0gbmV3IF93ZWJnbC5XZWJHTENvbnRleHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlOiBlbmFibGVXZWJHTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaW50ZW50U3RhdGVzW3JlbmRlcmluZ0ludGVudF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW50ZW50U3RhdGVzW3JlbmRlcmluZ0ludGVudF0gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbcmVuZGVyaW5nSW50ZW50XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVudFN0YXRlLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLnJlY2VpdmluZ09wZXJhdG9yTGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuQXJyYXk6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NBcnJheTogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENodW5rOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLnRpbWUoJ1BhZ2UgUmVxdWVzdCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZCgnUmVuZGVyUGFnZVJlcXVlc3QnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2VOdW1iZXIgLSAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudDogcmVuZGVyaW5nSW50ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckludGVyYWN0aXZlRm9ybXM6IHJlbmRlckludGVyYWN0aXZlRm9ybXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBsZXRlID0gZnVuY3Rpb24gY29tcGxldGUoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpID0gaW50ZW50U3RhdGUucmVuZGVyVGFza3MuaW5kZXhPZihpbnRlcm5hbFJlbmRlclRhc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3Muc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0LmNsZWFudXBBZnRlclJlbmRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5wZW5kaW5nQ2xlYW51cCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fdHJ5Q2xlYW51cCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2suY2FwYWJpbGl0eS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFJlbmRlclRhc2suY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRzLnRpbWVFbmQoJ1JlbmRlcmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHMudGltZUVuZCgnT3ZlcmFsbCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbFJlbmRlclRhc2sgPSBuZXcgSW50ZXJuYWxSZW5kZXJUYXNrKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBjb21wbGV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNhbnZhc0NvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlTGF5ZXI6IGltYWdlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogYmFja2dyb3VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ianM6IHRoaXMub2JqcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbk9ianM6IHRoaXMuY29tbW9uT2JqcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yTGlzdDogaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU51bWJlcjogdGhpcy5wYWdlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzRmFjdG9yeTogY2FudmFzRmFjdG9yeUluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xDb250ZXh0OiB3ZWJHTENvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IHJlbmRlcmluZ0ludGVudCAhPT0gJ3ByaW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZkJ1ZzogdGhpcy5fcGRmQnVnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLnB1c2goaW50ZXJuYWxSZW5kZXJUYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbmRlclRhc2sgPSBpbnRlcm5hbFJlbmRlclRhc2sudGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oZnVuY3Rpb24gKHRyYW5zcGFyZW5jeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNC5wZW5kaW5nQ2xlYW51cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0cy50aW1lKCdSZW5kZXJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsUmVuZGVyVGFzay5pbml0aWFsaXplR3JhcGhpY3ModHJhbnNwYXJlbmN5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsUmVuZGVyVGFzay5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGNvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRhc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRPcGVyYXRvckxpc3RcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3BlcmF0b3JMaXN0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBvcGVyYXRvckxpc3RDaGFuZ2VkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5pbmRleE9mKG9wTGlzdFRhc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbmRlcmluZ0ludGVudCA9ICdvcGxpc3QnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbnRlbnRTdGF0ZXNbcmVuZGVyaW5nSW50ZW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlbnRTdGF0ZXNbcmVuZGVyaW5nSW50ZW50XSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZW50U3RhdGUgPSB0aGlzLmludGVudFN0YXRlc1tyZW5kZXJpbmdJbnRlbnRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BMaXN0VGFzaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcExpc3RUYXNrID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcExpc3RUYXNrLm9wZXJhdG9yTGlzdENoYW5nZWQgPSBvcGVyYXRvckxpc3RDaGFuZ2VkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVjZWl2aW5nT3BlcmF0b3JMaXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVuZGVyVGFza3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLnB1c2gob3BMaXN0VGFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5vcGVyYXRvckxpc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm5BcnJheTogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FycmF5OiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2h1bms6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0cy50aW1lKCdQYWdlIFJlcXVlc3QnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmQoJ1JlbmRlclBhZ2VSZXF1ZXN0Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50OiByZW5kZXJpbmdJbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVudFN0YXRlLm9wTGlzdFJlYWRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzdHJlYW1UZXh0Q29udGVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBzdHJlYW1UZXh0Q29udGVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY0JG5vcm1hbGl6ZVdoaXRlcyA9IF9yZWY0Lm5vcm1hbGl6ZVdoaXRlc3BhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlID0gX3JlZjQkbm9ybWFsaXplV2hpdGVzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWY0JG5vcm1hbGl6ZVdoaXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY0JGRpc2FibGVDb21iaW5lVCA9IF9yZWY0LmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUNvbWJpbmVUZXh0SXRlbXMgPSBfcmVmNCRkaXNhYmxlQ29tYmluZVQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjQkZGlzYWJsZUNvbWJpbmVUO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBURVhUX0NPTlRFTlRfQ0hVTktfU0laRSA9IDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgnR2V0VGV4dENvbnRlbnQnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZU51bWJlciAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVXaGl0ZXNwYWNlOiBub3JtYWxpemVXaGl0ZXNwYWNlID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZVRleHRJdGVtczogZGlzYWJsZUNvbWJpbmVUZXh0SXRlbXMgIT09IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaFdhdGVyTWFyazogVEVYVF9DT05URU5UX0NIVU5LX1NJWkUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplOiBmdW5jdGlvbiBzaXplKHRleHRDb250ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHRDb250ZW50Lml0ZW1zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRUZXh0Q29udGVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRUZXh0Q29udGVudCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkYWJsZVN0cmVhbSA9IHRoaXMuc3RyZWFtVGV4dENvbnRlbnQocGFyYW1zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHB1bXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChfcmVmNSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RleHRDb250ZW50JGl0ZW1zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWY1LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IF9yZWY1LmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih0ZXh0Q29udGVudC5zdHlsZXMsIHZhbHVlLnN0eWxlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF90ZXh0Q29udGVudCRpdGVtcyA9IHRleHRDb250ZW50Lml0ZW1zKS5wdXNoLmFwcGx5KF90ZXh0Q29udGVudCRpdGVtcywgX3RvQ29uc3VtYWJsZUFycmF5KHZhbHVlLml0ZW1zKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtczogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzOiBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9kZXN0cm95XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9kZXN0cm95KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zcG9ydC5wYWdlQ2FjaGVbdGhpcy5wYWdlSW5kZXhdID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdhaXRPbiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmludGVudFN0YXRlcykuZm9yRWFjaChmdW5jdGlvbiAoaW50ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZW50ID09PSAnb3BsaXN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLnJlbmRlclRhc2tzLmZvckVhY2goZnVuY3Rpb24gKHJlbmRlclRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyQ29tcGxldGVkID0gcmVuZGVyVGFzay5jYXBhYmlsaXR5LnByb21pc2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRPbi5wdXNoKHJlbmRlckNvbXBsZXRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyVGFzay5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vYmpzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnNQcm9taXNlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xlYW51cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwod2FpdE9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNsZWFudXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc2V0U3RhdHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cnlDbGVhbnVwKHJlc2V0U3RhdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3RyeUNsZWFudXBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3RyeUNsZWFudXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXNldFN0YXRzID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGVuZGluZ0NsZWFudXAgfHwgT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLnNvbWUoZnVuY3Rpb24gKGludGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5sZW5ndGggIT09IDAgfHwgaW50ZW50U3RhdGUucmVjZWl2aW5nT3BlcmF0b3JMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGludGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuaW50ZW50U3RhdGVzW2ludGVudF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9ianMuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5vdGF0aW9uc1Byb21pc2UgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNldFN0YXRzICYmIHRoaXMuX3N0YXRzIGluc3RhbmNlb2YgX2RvbV91dGlscy5TdGF0VGltZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRzID0gbmV3IF9kb21fdXRpbHMuU3RhdFRpbWVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDbGVhbnVwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc3RhcnRSZW5kZXJQYWdlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zdGFydFJlbmRlclBhZ2UodHJhbnNwYXJlbmN5LCBpbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludGVudFN0YXRlID0gdGhpcy5pbnRlbnRTdGF0ZXNbaW50ZW50XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKHRyYW5zcGFyZW5jeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZW5kZXJQYWdlQ2h1bmtcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3JlbmRlclBhZ2VDaHVuayhvcGVyYXRvckxpc3RDaHVuaywgaW50ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnRlbnRTdGF0ZSA9IHRoaXMuaW50ZW50U3RhdGVzW2ludGVudF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gb3BlcmF0b3JMaXN0Q2h1bmsubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0LmZuQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5mbkFycmF5W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkucHVzaChvcGVyYXRvckxpc3RDaHVuay5hcmdzQXJyYXlbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUub3BlcmF0b3JMaXN0Lmxhc3RDaHVuayA9IG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW50ZW50U3RhdGUucmVuZGVyVGFza3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrc1tfaV0ub3BlcmF0b3JMaXN0Q2hhbmdlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wZXJhdG9yTGlzdENodW5rLmxhc3RDaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUucmVjZWl2aW5nT3BlcmF0b3JMaXN0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyeUNsZWFudXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFnZU51bWJlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYWdlSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicm90YXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby5yb3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZWZcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInVzZXJVbml0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wYWdlSW5mby51c2VyVW5pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInZpZXdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnZpZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzdGF0c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHMgaW5zdGFuY2VvZiBfZG9tX3V0aWxzLlN0YXRUaW1lciA/IHRoaXMuX3N0YXRzIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZQYWdlUHJveHk7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGUGFnZVByb3h5ID0gUERGUGFnZVByb3h5O1xuXG4gICAgICAgICAgICAgICAgdmFyIExvb3BiYWNrUG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTG9vcGJhY2tQb3J0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMb29wYmFja1BvcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVmZXIgPSBkZWZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZlcnJlZCA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoTG9vcGJhY2tQb3J0LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwb3N0TWVzc2FnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwb3N0TWVzc2FnZShvYmosIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM1ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjbG9uZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3R5cGVvZih2YWx1ZSkgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xvbmVkLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xvbmVkLmdldCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIsIHJlc3VsdDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChidWZmZXIgPSB2YWx1ZS5idWZmZXIpICYmICgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKShidWZmZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVyYWJsZSA9IHRyYW5zZmVycyAmJiB0cmFuc2ZlcnMuaW5jbHVkZXMoYnVmZmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gYnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHJhbnNmZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyB2YWx1ZS5jb25zdHJ1Y3RvcihidWZmZXIsIHZhbHVlLmJ5dGVPZmZzZXQsIHZhbHVlLmJ5dGVMZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyB2YWx1ZS5jb25zdHJ1Y3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVkLnNldCh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFtdIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZWQuc2V0KHZhbHVlLCByZXN1bHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSB2b2lkIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSB2YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghKGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHAsIGkpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIGRlc2MudmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gY2xvbmVWYWx1ZShkZXNjLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZGVmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVycy5mb3JFYWNoKGZ1bmN0aW9uIChsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyLmNhbGwodGhpcywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBvYmpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xvbmVkID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBjbG9uZVZhbHVlKG9iailcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWZlcnJlZC50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5fbGlzdGVuZXJzLmZvckVhY2goZnVuY3Rpb24gKGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF90aGlzNSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYWRkRXZlbnRMaXN0ZW5lclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKG5hbWUsIGxpc3RlbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbW92ZUV2ZW50TGlzdGVuZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLCBsaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidGVybWluYXRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRlcm1pbmF0ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTG9vcGJhY2tQb3J0O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkxvb3BiYWNrUG9ydCA9IExvb3BiYWNrUG9ydDtcblxuICAgICAgICAgICAgICAgIHZhciBQREZXb3JrZXIgPSBmdW5jdGlvbiBQREZXb3JrZXJDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGRmV29ya2VyUG9ydHMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dEZha2VXb3JrZXJJZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5O1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRXb3JrZXJTcmMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3dvcmtlcl9vcHRpb25zLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF93b3JrZXJfb3B0aW9ucy5HbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmYWxsYmFja1dvcmtlclNyYyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsbGJhY2tXb3JrZXJTcmM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gXCJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyY1wiIHNwZWNpZmllZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldE1haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuZXh0cmFjdGhpZ2hsaWdodHNXb3JrZXIgJiYgd2luZG93LmV4dHJhY3RoaWdobGlnaHRzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNldHVwRmFrZVdvcmtlckdsb2JhbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZha2VXb3JrZXJGaWxlc0xvYWRlZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZmFrZVdvcmtlckZpbGVzTG9hZGVkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYWluV29ya2VyTWVzc2FnZUhhbmRsZXIgPSBnZXRNYWluVGhyZWFkV29ya2VyTWVzc2FnZUhhbmRsZXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1haW5Xb3JrZXJNZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZha2VXb3JrZXJGaWxlc0xvYWRlZENhcGFiaWxpdHkucmVzb2x2ZShtYWluV29ya2VyTWVzc2FnZUhhbmRsZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsb2FkZXIgPSBmYWtlV29ya2VyRmlsZXNMb2FkZXIgfHwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX2RvbV91dGlscy5sb2FkU2NyaXB0KShfZ2V0V29ya2VyU3JjKCkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2luZG93LmV4dHJhY3RoaWdobGlnaHRzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyKCkudGhlbihmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5LnJlc29sdmUsIGZha2VXb3JrZXJGaWxlc0xvYWRlZENhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWtlV29ya2VyRmlsZXNMb2FkZWRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVDRE5XcmFwcGVyKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSAnaW1wb3J0U2NyaXB0cyhcXCcnICsgdXJsICsgJ1xcJyk7JztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdXRpbC5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt3cmFwcGVyXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFBERldvcmtlciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGV29ya2VyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjYgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjYkbmFtZSA9IF9yZWY2Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gX3JlZjYkbmFtZSA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWY2JG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNiRwb3J0ID0gX3JlZjYucG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBfcmVmNiRwb3J0ID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjYkcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY2JHBvc3RNZXNzYWdlVHJhbiA9IF9yZWY2LnBvc3RNZXNzYWdlVHJhbnNmZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSBfcmVmNiRwb3N0TWVzc2FnZVRyYW4gPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNiRwb3N0TWVzc2FnZVRyYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNiR2ZXJib3NpdHkgPSBfcmVmNi52ZXJib3NpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJib3NpdHkgPSBfcmVmNiR2ZXJib3NpdHkgPT09IHZvaWQgMCA/ICgwLCBfdXRpbC5nZXRWZXJib3NpdHlMZXZlbCkoKSA6IF9yZWY2JHZlcmJvc2l0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGV29ya2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9ydCAmJiBwZGZXb3JrZXJQb3J0cy5oYXMocG9ydCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSBtb3JlIHRoYW4gb25lIFBERldvcmtlciBwZXIgcG9ydCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IHBvc3RNZXNzYWdlVHJhbnNmZXJzICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52ZXJib3NpdHkgPSB2ZXJib3NpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcG9ydCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlYldvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGRmV29ya2VyUG9ydHMuc2V0KHBvcnQsIHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRnJvbVBvcnQocG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxpemUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUERGV29ya2VyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2luaXRpYWxpemVGcm9tUG9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRpYWxpemVGcm9tUG9ydChwb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wb3J0ID0gcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoJ21haW4nLCAnd29ya2VyJywgcG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21lc3NhZ2VIYW5kbGVyLm9uKCdyZWFkeScsIGZ1bmN0aW9uICgpIHt9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9pbml0aWFsaXplXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzV29ya2VyRGlzYWJsZWQgJiYgIWdldE1haW5UaHJlYWRXb3JrZXJNZXNzYWdlSGFuZGxlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmtlclNyYyA9IF9nZXRXb3JrZXJTcmMoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF91dGlsLmlzU2FtZU9yaWdpbikod2luZG93LmxvY2F0aW9uLmhyZWYsIHdvcmtlclNyYykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlclNyYyA9IGNyZWF0ZUNETldyYXBwZXIobmV3IF91dGlsLlVSTCh3b3JrZXJTcmMsIHdpbmRvdy5sb2NhdGlvbikuaHJlZik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29ya2VyID0gbmV3IFdvcmtlcih3b3JrZXJTcmMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcignbWFpbicsICd3b3JrZXInLCB3b3JrZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVFYXJseSA9IGZ1bmN0aW9uIHRlcm1pbmF0ZUVhcmx5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2Ll9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHdhcyBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fc2V0dXBGYWtlV29ya2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uV29ya2VyRXJyb3IgPSBmdW5jdGlvbiBvbldvcmtlckVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpczYuX3dlYldvcmtlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25Xb3JrZXJFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCd0ZXN0JywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uV29ya2VyRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM2LmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLnN1cHBvcnRUeXBlZEFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2Ll9tZXNzYWdlSGFuZGxlciA9IG1lc3NhZ2VIYW5kbGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fcG9ydCA9IHdvcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczYuX3dlYldvcmtlciA9IHdvcmtlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5zdXBwb3J0VHJhbnNmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5wb3N0TWVzc2FnZVRyYW5zZmVycyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLnNlbmQoJ2NvbmZpZ3VyZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5OiBfdGhpczYudmVyYm9zaXR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fc2V0dXBGYWtlV29ya2VyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ3JlYWR5JywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIG9uV29ya2VyRXJyb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM2LmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0ZUVhcmx5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRUZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2Ll9zZXR1cEZha2VXb3JrZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbmRUZXN0ID0gZnVuY3Rpb24gc2VuZFRlc3QoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVzdE9iaiA9IG5ldyBVaW50OEFycmF5KFtfdGhpczYucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPyAyNTUgOiAwXSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZCgndGVzdCcsIHRlc3RPYmosIFt0ZXN0T2JqLmJ1ZmZlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ0Nhbm5vdCB1c2UgcG9zdE1lc3NhZ2UgdHJhbnNmZXJzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE9ialswXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZCgndGVzdCcsIHRlc3RPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRUZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5pbmZvKSgnVGhlIHdvcmtlciBoYXMgYmVlbiBkaXNhYmxlZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldHVwRmFrZVdvcmtlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3NldHVwRmFrZVdvcmtlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldHVwRmFrZVdvcmtlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczcgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV29ya2VyRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ1NldHRpbmcgdXAgZmFrZSB3b3JrZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNXb3JrZXJEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwRmFrZVdvcmtlckdsb2JhbCgpLnRoZW4oZnVuY3Rpb24gKFdvcmtlck1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzNy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM3Ll9yZWFkeUNhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHdhcyBkZXN0cm95ZWQnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3J0ID0gbmV3IExvb3BiYWNrUG9ydCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5fcG9ydCA9IHBvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gJ2Zha2UnICsgbmV4dEZha2VXb3JrZXJJZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3b3JrZXJIYW5kbGVyID0gbmV3IF9tZXNzYWdlX2hhbmRsZXIuTWVzc2FnZUhhbmRsZXIoaWQgKyAnX3dvcmtlcicsIGlkLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXb3JrZXJNZXNzYWdlSGFuZGxlci5zZXR1cCh3b3JrZXJIYW5kbGVyLCBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWVzc2FnZUhhbmRsZXIgPSBuZXcgX21lc3NhZ2VfaGFuZGxlci5NZXNzYWdlSGFuZGxlcihpZCwgaWQgKyAnX3dvcmtlcicsIHBvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5fbWVzc2FnZUhhbmRsZXIgPSBtZXNzYWdlSGFuZGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNy5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczcuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKFwiU2V0dGluZyB1cCBmYWtlIHdvcmtlciBmYWlsZWQ6IFxcXCJcIi5jb25jYXQocmVhc29uLm1lc3NhZ2UsIFwiXFxcIi5cIikpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3dlYldvcmtlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlYldvcmtlci50ZXJtaW5hdGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3dlYldvcmtlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkZldvcmtlclBvcnRzLmRlbGV0ZSh0aGlzLl9wb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BvcnQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fbWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXNzYWdlSGFuZGxlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJwcm9taXNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicG9ydFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9wb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwibWVzc2FnZUhhbmRsZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZyb21Qb3J0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmcm9tUG9ydChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyYW1zIHx8ICFwYXJhbXMucG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUERGV29ya2VyLmZyb21Qb3J0IC0gaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmV29ya2VyUG9ydHMuaGFzKHBhcmFtcy5wb3J0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwZGZXb3JrZXJQb3J0cy5nZXQocGFyYW1zLnBvcnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBERldvcmtlcihwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0V29ya2VyU3JjXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRXb3JrZXJTcmMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2dldFdvcmtlclNyYygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERldvcmtlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGV29ya2VyO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGV29ya2VyID0gUERGV29ya2VyO1xuXG4gICAgICAgICAgICAgICAgdmFyIFdvcmtlclRyYW5zcG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV29ya2VyVHJhbnNwb3J0KG1lc3NhZ2VIYW5kbGVyLCBsb2FkaW5nVGFzaywgbmV0d29ya1N0cmVhbSwgcGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdvcmtlclRyYW5zcG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gbWVzc2FnZUhhbmRsZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nVGFzayA9IGxvYWRpbmdUYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uT2JqcyA9IG5ldyBQREZPYmplY3RzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250TG9hZGVyID0gbmV3IF9mb250X2xvYWRlci5Gb250TG9hZGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jSWQ6IGxvYWRpbmdUYXNrLmRvY0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblVuc3VwcG9ydGVkRmVhdHVyZTogdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLkNNYXBSZWFkZXJGYWN0b3J5ID0gbmV3IHBhcmFtcy5DTWFwUmVhZGVyRmFjdG9yeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VVcmw6IHBhcmFtcy5jTWFwVXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NvbXByZXNzZWQ6IHBhcmFtcy5jTWFwUGFja2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25ldHdvcmtTdHJlYW0gPSBuZXR3b3JrU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZWFkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlQ2FjaGUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VQcm9taXNlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHVwTWVzc2FnZUhhbmRsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdvcmtlclRyYW5zcG9ydCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZGVzdHJveVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM4ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdHJveUNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95Q2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHdhcyBkZXN0cm95ZWQgZHVyaW5nIG9uUGFzc3dvcmQgY2FsbGJhY2snKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2FpdE9uID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUNhY2hlLmZvckVhY2goZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdE9uLnB1c2gocGFnZS5fZGVzdHJveSgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZUNhY2hlID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVByb21pc2VzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXJtaW5hdGVkID0gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ1Rlcm1pbmF0ZScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0T24ucHVzaCh0ZXJtaW5hdGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvbWlzZS5hbGwod2FpdE9uKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5mb250TG9hZGVyLmNsZWFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczguX25ldHdvcmtTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczguX25ldHdvcmtTdHJlYW0uY2FuY2VsQWxsUmVxdWVzdHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzOC5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5tZXNzYWdlSGFuZGxlci5kZXN0cm95KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczgubWVzc2FnZUhhbmRsZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczguZGVzdHJveUNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJzZXR1cE1lc3NhZ2VIYW5kbGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHNldHVwTWVzc2FnZUhhbmRsZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlSGFuZGxlciA9IHRoaXMubWVzc2FnZUhhbmRsZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nVGFzayA9IHRoaXMubG9hZGluZ1Rhc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdHZXRSZWFkZXInLCBmdW5jdGlvbiAoZGF0YSwgc2luaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuX25ldHdvcmtTdHJlYW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlYWRlciA9IHRoaXMuX25ldHdvcmtTdHJlYW0uZ2V0RnVsbFJlYWRlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVhZGVyLm9uUHJvZ3Jlc3MgPSBmdW5jdGlvbiAoZXZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9sYXN0UHJvZ3Jlc3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2dC50b3RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLm9uUHVsbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczkuX2Z1bGxSZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKF9yZWY3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9yZWY3LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IF9yZWY3LmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKCgwLCBfdXRpbC5pc0FycmF5QnVmZmVyKSh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpLCAxLCBbdmFsdWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsuZXJyb3IocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsub25DYW5jZWwgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM5Ll9mdWxsUmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdSZWFkZXJIZWFkZXJzUmVhZHknLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTAgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVhZGVyc0NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbFJlYWRlciA9IHRoaXMuX2Z1bGxSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsUmVhZGVyLmhlYWRlcnNSZWFkeS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ1bGxSZWFkZXIuaXNTdHJlYW1pbmdTdXBwb3J0ZWQgfHwgIWZ1bGxSZWFkZXIuaXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMxMC5fbGFzdFByb2dyZXNzICYmIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3MoX3RoaXMxMC5fbGFzdFByb2dyZXNzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxSZWFkZXIub25Qcm9ncmVzcyA9IGZ1bmN0aW9uIChldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nVGFzay5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IGV2dC50b3RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1N0cmVhbWluZ1N1cHBvcnRlZDogZnVsbFJlYWRlci5pc1N0cmVhbWluZ1N1cHBvcnRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSYW5nZVN1cHBvcnRlZDogZnVsbFJlYWRlci5pc1JhbmdlU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50TGVuZ3RoOiBmdWxsUmVhZGVyLmNvbnRlbnRMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGhlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdHZXRSYW5nZVJlYWRlcicsIGZ1bmN0aW9uIChkYXRhLCBzaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlUmVhZGVyID0gdGhpcy5fbmV0d29ya1N0cmVhbS5nZXRSYW5nZVJlYWRlcihkYXRhLmJlZ2luLCBkYXRhLmVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmsub25QdWxsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlUmVhZGVyLnJlYWQoKS50aGVuKGZ1bmN0aW9uIChfcmVmOCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBfcmVmOC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBfcmVmOC5kb25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSgoMCwgX3V0aWwuaXNBcnJheUJ1ZmZlcikodmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2luay5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSwgMSwgW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLmVycm9yKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5rLm9uQ2FuY2VsID0gZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlUmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdHZXREb2MnLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZGZJbmZvID0gX3JlZjkucGRmSW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubnVtUGFnZXMgPSBwZGZJbmZvLm51bVBhZ2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IG5ldyBQREZEb2N1bWVudFByb3h5KHBkZkluZm8sIHRoaXMsIGxvYWRpbmdUYXNrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnBkZkRvY3VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdQYXNzd29yZFJlcXVlc3QnLCBmdW5jdGlvbiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRlUGFzc3dvcmQgPSBmdW5jdGlvbiB1cGRhdGVQYXNzd29yZChwYXNzd29yZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczExLl9wYXNzd29yZENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZDogcGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUGFzc3dvcmQodXBkYXRlUGFzc3dvcmQsIGV4Y2VwdGlvbi5jb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGV4Y2VwdGlvbi5tZXNzYWdlLCBleGNlcHRpb24uY29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbignUGFzc3dvcmRFeGNlcHRpb24nLCBmdW5jdGlvbiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlBhc3N3b3JkRXhjZXB0aW9uKGV4Y2VwdGlvbi5tZXNzYWdlLCBleGNlcHRpb24uY29kZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ0ludmFsaWRQREYnLCBmdW5jdGlvbiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLkludmFsaWRQREZFeGNlcHRpb24oZXhjZXB0aW9uLm1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdNaXNzaW5nUERGJywgZnVuY3Rpb24gKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKGV4Y2VwdGlvbi5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbignVW5leHBlY3RlZFJlc3BvbnNlJywgZnVuY3Rpb24gKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2suX2NhcGFiaWxpdHkucmVqZWN0KG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oZXhjZXB0aW9uLm1lc3NhZ2UsIGV4Y2VwdGlvbi5zdGF0dXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdVbmtub3duRXJyb3InLCBmdW5jdGlvbiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nVGFzay5fY2FwYWJpbGl0eS5yZWplY3QobmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihleGNlcHRpb24ubWVzc2FnZSwgZXhjZXB0aW9uLmRldGFpbHMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdEYXRhTG9hZGVkJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nVGFzay5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZ1Rhc2sub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZGF0YS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkSW5mb0NhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdTdGFydFJlbmRlclBhZ2UnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZSA9IHRoaXMucGFnZUNhY2hlW2RhdGEucGFnZUluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZS5fc3RhdHMudGltZUVuZCgnUGFnZSBSZXF1ZXN0Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UuX3N0YXJ0UmVuZGVyUGFnZShkYXRhLnRyYW5zcGFyZW5jeSwgZGF0YS5pbnRlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ1JlbmRlclBhZ2VDaHVuaycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlQ2FjaGVbZGF0YS5wYWdlSW5kZXhdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlLl9yZW5kZXJQYWdlQ2h1bmsoZGF0YS5vcGVyYXRvckxpc3QsIGRhdGEuaW50ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdjb21tb25vYmonLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGF0YSA9IF9zbGljZWRUb0FycmF5KGRhdGEsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gX2RhdGFbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IF9kYXRhWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cG9ydGVkRGF0YSA9IF9kYXRhWzJdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21tb25PYmpzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0ZvbnQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyYW1zID0gdGhpcy5fcGFyYW1zO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgnZXJyb3InIGluIGV4cG9ydGVkRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGV4cG9ydGVkRXJyb3IgPSBleHBvcnRlZERhdGEuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJFcnJvciBkdXJpbmcgZm9udCBsb2FkaW5nOiBcIi5jb25jYXQoZXhwb3J0ZWRFcnJvcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21tb25PYmpzLnJlc29sdmUoaWQsIGV4cG9ydGVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFJlZ2lzdHJ5ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1zLnBkZkJ1ZyAmJiBfZ2xvYmFsX3Njb3BlLmRlZmF1bHQuRm9udEluc3BlY3RvciAmJiBfZ2xvYmFsX3Njb3BlLmRlZmF1bHQuRm9udEluc3BlY3Rvci5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250UmVnaXN0cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJGb250OiBmdW5jdGlvbiByZWdpc3RlckZvbnQoZm9udCwgdXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9nbG9iYWxfc2NvcGUuZGVmYXVsdFsnRm9udEluc3BlY3RvciddLmZvbnRBZGRlZChmb250LCB1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udCA9IG5ldyBfZm9udF9sb2FkZXIuRm9udEZhY2VPYmplY3QoZXhwb3J0ZWREYXRhLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQ6IHBhcmFtcy5pc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlRm9udEZhY2U6IHBhcmFtcy5kaXNhYmxlRm9udEZhY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnM6IHBhcmFtcy5pZ25vcmVFcnJvcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvblVuc3VwcG9ydGVkRmVhdHVyZTogdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRSZWdpc3RyeTogZm9udFJlZ2lzdHJ5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRMb2FkZXIuYmluZChmb250KS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTIuY29tbW9uT2Jqcy5yZXNvbHZlKGlkLCBmb250KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdGb250RmFsbGJhY2snLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5maW5hbGx5KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczEyLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZm9udCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRm9udFBhdGgnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMucmVzb2x2ZShpZCwgZXhwb3J0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdW5rbm93biBjb21tb24gb2JqZWN0IHR5cGUgXCIuY29uY2F0KHR5cGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VIYW5kbGVyLm9uKCdvYmonLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RhdGEyID0gX3NsaWNlZFRvQXJyYXkoZGF0YSwgNCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBfZGF0YTJbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4ID0gX2RhdGEyWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBfZGF0YTJbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VEYXRhID0gX2RhdGEyWzNdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZVByb3h5ID0gdGhpcy5wYWdlQ2FjaGVbcGFnZUluZGV4XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhZ2VQcm94eS5vYmpzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0pwZWdTdHJlYW0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZy5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0Vycm9yIGR1cmluZyBKUEVHIGltYWdlIGxvYWRpbmcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gaW1hZ2VEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChpbWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VQcm94eS5vYmpzLnJlc29sdmUoaWQsIGltZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnSW1hZ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlUHJveHkub2Jqcy5yZXNvbHZlKGlkLCBpbWFnZURhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX0lNQUdFX1NJWkVfVE9fU1RPUkUgPSA4MDAwMDAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWFnZURhdGEgJiYgJ2RhdGEnIGluIGltYWdlRGF0YSAmJiBpbWFnZURhdGEuZGF0YS5sZW5ndGggPiBNQVhfSU1BR0VfU0laRV9UT19TVE9SRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVByb3h5LmNsZWFudXBBZnRlclJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCB1bmtub3duIG9iamVjdCB0eXBlIFwiLmNvbmNhdCh0eXBlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbignRG9jUHJvZ3Jlc3MnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZ1Rhc2sub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRpbmdUYXNrLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IGRhdGEubG9hZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS50b3RhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ1BhZ2VFcnJvcicsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWdlID0gdGhpcy5wYWdlQ2FjaGVbZGF0YS5wYWdlTnVtIC0gMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW50ZW50U3RhdGUgPSBwYWdlLmludGVudFN0YXRlc1tkYXRhLmludGVudF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnRTdGF0ZS5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50U3RhdGUuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eS5yZWplY3QoZGF0YS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihkYXRhLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVudFN0YXRlLm9wZXJhdG9yTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVudFN0YXRlLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bmsgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnRTdGF0ZS5yZW5kZXJUYXNrc1tpXS5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ1Vuc3VwcG9ydGVkRmVhdHVyZScsIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUhhbmRsZXIub24oJ0pwZWdEZWNvZGUnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignV29ya2VyIHdhcyBkZXN0cm95ZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignXCJkb2N1bWVudFwiIGlzIG5vdCBkZWZpbmVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kYXRhMyA9IF9zbGljZWRUb0FycmF5KGRhdGEsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlVXJsID0gX2RhdGEzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudHMgPSBfZGF0YTNbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzICE9PSAzICYmIGNvbXBvbmVudHMgIT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdPbmx5IDMgY29tcG9uZW50cyBvciAxIGNvbXBvbmVudCBjYW4gYmUgcmV0dXJuZWQnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZyA9IG5ldyBJbWFnZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaW1nLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNpemUgPSB3aWR0aCAqIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJnYmFMZW5ndGggPSBzaXplICogNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OENsYW1wZWRBcnJheShzaXplICogY29tcG9uZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ3R4LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRtcEN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCkuZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50cyA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgcmdiYUxlbmd0aDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZbal0gPSBkYXRhW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZltqICsgMV0gPSBkYXRhW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZbaiArIDJdID0gZGF0YVtpICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50cyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kyID0gMCwgX2ogPSAwOyBfaTIgPCByZ2JhTGVuZ3RoOyBfaTIgKz0gNCwgX2orKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zltfal0gPSBkYXRhW19pMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGJ1ZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignSnBlZ0RlY29kZSBmYWlsZWQgdG8gbG9hZCBpbWFnZScpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IGltYWdlVXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSGFuZGxlci5vbignRmV0Y2hCdWlsdEluQ01hcCcsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdXb3JrZXIgd2FzIGRlc3Ryb3llZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuQ01hcFJlYWRlckZhY3RvcnkuZmV0Y2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGRhdGEubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX29uVW5zdXBwb3J0ZWRGZWF0dXJlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9vblVuc3VwcG9ydGVkRmVhdHVyZShfcmVmMTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZlYXR1cmVJZCA9IF9yZWYxMC5mZWF0dXJlSWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2FkaW5nVGFzay5vblVuc3VwcG9ydGVkRmVhdHVyZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nVGFzay5vblVuc3VwcG9ydGVkRmVhdHVyZShmZWF0dXJlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXREYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0RGF0YScsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlKHBhZ2VOdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihwYWdlTnVtYmVyKSB8fCBwYWdlTnVtYmVyIDw9IDAgfHwgcGFnZU51bWJlciA+IHRoaXMubnVtUGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ0ludmFsaWQgcGFnZSByZXF1ZXN0JykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2VJbmRleCA9IHBhZ2VOdW1iZXIgLSAxO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWdlSW5kZXggaW4gdGhpcy5wYWdlUHJvbWlzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VQcm9taXNlc1twYWdlSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2UgPSB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0UGFnZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogcGFnZUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHBhZ2VJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMxMy5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zcG9ydCBkZXN0cm95ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2UgPSBuZXcgUERGUGFnZVByb3h5KHBhZ2VJbmRleCwgcGFnZUluZm8sIF90aGlzMTMsIF90aGlzMTMuX3BhcmFtcy5wZGZCdWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxMy5wYWdlQ2FjaGVbcGFnZUluZGV4XSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFnZVByb21pc2VzW3BhZ2VJbmRleF0gPSBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldFBhZ2VJbmRleFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQYWdlSW5kZXgocmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0UGFnZUluZGV4Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiByZWZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihyZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRBbm5vdGF0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbm5vdGF0aW9ucyhwYWdlSW5kZXgsIGludGVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0dldEFubm90YXRpb25zJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbnQ6IGludGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldERlc3RpbmF0aW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXN0aW5hdGlvbnMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0RGVzdGluYXRpb25zJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXREZXN0aW5hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZXN0aW5hdGlvbihpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0RGVzdGluYXRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYWdlTGFiZWxzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhZ2VMYWJlbHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0UGFnZUxhYmVscycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UGFnZU1vZGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UGFnZU1vZGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnR2V0UGFnZU1vZGUnLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE9wZW5BY3Rpb25EZXN0aW5hdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRPcGVuQWN0aW9uRGVzdGluYXRpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgnZ2V0T3BlbkFjdGlvbkRlc3RpbmF0aW9uJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRBdHRhY2htZW50c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBdHRhY2htZW50cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdHZXRBdHRhY2htZW50cycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0SmF2YVNjcmlwdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRKYXZhU2NyaXB0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0dldEphdmFTY3JpcHQnLCBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldE91dGxpbmVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0T3V0bGluZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdHZXRPdXRsaW5lJywgbnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQZXJtaXNzaW9uc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQZXJtaXNzaW9ucygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdHZXRQZXJtaXNzaW9ucycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0TWV0YWRhdGFcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0TWV0YWRhdGEoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczE0ID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoJ0dldE1ldGFkYXRhJywgbnVsbCkudGhlbihmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvOiByZXN1bHRzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiByZXN1bHRzWzFdID8gbmV3IF9tZXRhZGF0YS5NZXRhZGF0YShyZXN1bHRzWzFdKSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudERpc3Bvc2l0aW9uRmlsZW5hbWU6IF90aGlzMTQuX2Z1bGxSZWFkZXIgPyBfdGhpczE0Ll9mdWxsUmVhZGVyLmZpbGVuYW1lIDogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRTdGF0c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRTdGF0cygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdHZXRTdGF0cycsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwic3RhcnRDbGVhbnVwXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHN0YXJ0Q2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMTUgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCdDbGVhbnVwJywgbnVsbCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBfdGhpczE1LnBhZ2VDYWNoZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhZ2UgPSBfdGhpczE1LnBhZ2VDYWNoZVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UuY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNS5jb21tb25PYmpzLmNsZWFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMTUuZm9udExvYWRlci5jbGVhcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImxvYWRpbmdQYXJhbXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHRoaXMuX3BhcmFtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdsb2FkaW5nUGFyYW1zJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUF1dG9GZXRjaDogcGFyYW1zLmRpc2FibGVBdXRvRmV0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQ3JlYXRlT2JqZWN0VVJMOiBwYXJhbXMuZGlzYWJsZUNyZWF0ZU9iamVjdFVSTCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVGb250RmFjZTogcGFyYW1zLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6IHBhcmFtcy5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdvcmtlclRyYW5zcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERk9iamVjdHMgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERk9iamVjdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERk9iamVjdHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb2JqcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQREZPYmplY3RzLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZW5zdXJlT2JqXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVPYmoob2JqSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29ianNbb2JqSWRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2Jqc1tvYmpJZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fb2Jqc1tvYmpJZF0gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5OiAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0KG9iaklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZU9iaihvYmpJZCkuY2FwYWJpbGl0eS5wcm9taXNlLnRoZW4oY2FsbGJhY2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9vYmpzW29iaklkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9iaiB8fCAhb2JqLnJlc29sdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJSZXF1ZXN0aW5nIG9iamVjdCB0aGF0IGlzbid0IHJlc29sdmVkIHlldCBcIi5jb25jYXQob2JqSWQsIFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJoYXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gaGFzKG9iaklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9vYmpzW29iaklkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9iaiA/IG9iai5yZXNvbHZlZCA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVzb2x2ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZXNvbHZlKG9iaklkLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSB0aGlzLl9lbnN1cmVPYmoob2JqSWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5yZXNvbHZlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLmNhcGFiaWxpdHkucmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNsZWFyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vYmpzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZPYmplY3RzO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUmVuZGVyVGFzayA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUmVuZGVyVGFzayhpbnRlcm5hbFJlbmRlclRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmVuZGVyVGFzayk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnRlcm5hbFJlbmRlclRhc2sgPSBpbnRlcm5hbFJlbmRlclRhc2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNvbnRpbnVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFJlbmRlclRhc2ssIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNhbmNlbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjYW5jZWwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2ludGVybmFsUmVuZGVyVGFzay5jYW5jZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInRoZW5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuZGVwcmVjYXRlZCkoJ1JlbmRlclRhc2sudGhlbiBtZXRob2QsIHVzZSB0aGUgYHByb21pc2VgIGdldHRlciBpbnN0ZWFkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9taXNlLnRoZW4uYXBwbHkodGhpcy5wcm9taXNlLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicHJvbWlzZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxSZW5kZXJUYXNrLmNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZW5kZXJUYXNrO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSW50ZXJuYWxSZW5kZXJUYXNrID0gZnVuY3Rpb24gSW50ZXJuYWxSZW5kZXJUYXNrQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0luUmVuZGVyaW5nID0gbmV3IFdlYWtTZXQoKTtcblxuICAgICAgICAgICAgICAgICAgICB2YXIgSW50ZXJuYWxSZW5kZXJUYXNrID1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbnRlcm5hbFJlbmRlclRhc2soX3JlZjExKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IF9yZWYxMS5jYWxsYmFjayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcyA9IF9yZWYxMS5wYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpzID0gX3JlZjExLm9ianMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tb25PYmpzID0gX3JlZjExLmNvbW1vbk9ianMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvckxpc3QgPSBfcmVmMTEub3BlcmF0b3JMaXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZU51bWJlciA9IF9yZWYxMS5wYWdlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzRmFjdG9yeSA9IF9yZWYxMS5jYW52YXNGYWN0b3J5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViR0xDb250ZXh0ID0gX3JlZjExLndlYkdMQ29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYxMSR1c2VSZXF1ZXN0QW5pbSA9IF9yZWYxMS51c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBfcmVmMTEkdXNlUmVxdWVzdEFuaW0gPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjExJHVzZVJlcXVlc3RBbmltLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjExJHBkZkJ1ZyA9IF9yZWYxMS5wZGZCdWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGZCdWcgPSBfcmVmMTEkcGRmQnVnID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYxMSRwZGZCdWcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9ucyA9IF9yZWYxMS5hbm5vdGF0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgSW50ZXJuYWxSZW5kZXJUYXNrKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9ianMgPSBvYmpzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZXJhdG9yTGlzdElkeCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JMaXN0ID0gb3BlcmF0b3JMaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2VOdW1iZXIgPSBwYWdlTnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkgPSBjYW52YXNGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLndlYkdMQ29udGV4dCA9IHdlYkdMQ29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGRmQnVnID0gcGRmQnVnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYXBoaWNzUmVhZHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gdXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lID09PSB0cnVlICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFzayA9IG5ldyBSZW5kZXJUYXNrKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250aW51ZUJvdW5kID0gdGhpcy5fY29udGludWUuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQgPSB0aGlzLl9zY2hlZHVsZU5leHQuYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmV4dEJvdW5kID0gdGhpcy5fbmV4dC5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYW52YXMgPSBwYXJhbXMuY2FudmFzQ29udGV4dC5jYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoSW50ZXJuYWxSZW5kZXJUYXNrLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaW5pdGlhbGl6ZUdyYXBoaWNzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBpbml0aWFsaXplR3JhcGhpY3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNwYXJlbmN5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbnZhc0luUmVuZGVyaW5nLmhhcyh0aGlzLl9jYW52YXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuICcgKyAnVXNlIGRpZmZlcmVudCBjYW52YXMgb3IgZW5zdXJlIHByZXZpb3VzIG9wZXJhdGlvbnMgd2VyZSAnICsgJ2NhbmNlbGxlZCBvciBjb21wbGV0ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzSW5SZW5kZXJpbmcuYWRkKHRoaXMuX2NhbnZhcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9wZGZCdWcgJiYgX2dsb2JhbF9zY29wZS5kZWZhdWx0LlN0ZXBwZXJNYW5hZ2VyICYmIF9nbG9iYWxfc2NvcGUuZGVmYXVsdC5TdGVwcGVyTWFuYWdlci5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyID0gX2dsb2JhbF9zY29wZS5kZWZhdWx0LlN0ZXBwZXJNYW5hZ2VyLmNyZWF0ZSh0aGlzLnBhZ2VOdW1iZXIgLSAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50ID0gdGhpcy5zdGVwcGVyLmdldE5leHRCcmVha1BvaW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyRwYXJhbXMgPSB0aGlzLnBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNDb250ZXh0ID0gX3RoaXMkcGFyYW1zLmNhbnZhc0NvbnRleHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQgPSBfdGhpcyRwYXJhbXMudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gX3RoaXMkcGFyYW1zLnRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUxheWVyID0gX3RoaXMkcGFyYW1zLmltYWdlTGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZCA9IF90aGlzJHBhcmFtcy5iYWNrZ3JvdW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZnggPSBuZXcgX2NhbnZhcy5DYW52YXNHcmFwaGljcyhjYW52YXNDb250ZXh0LCB0aGlzLmNvbW1vbk9ianMsIHRoaXMub2JqcywgdGhpcy5jYW52YXNGYWN0b3J5LCB0aGlzLndlYkdMQ29udGV4dCwgaW1hZ2VMYXllciwgdGhpcy5hbm5vdGF0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdmeC5iZWdpbkRyYXdpbmcoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BhcmVuY3k6IHRyYW5zcGFyZW5jeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiBiYWNrZ3JvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3JMaXN0SWR4ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjYW5jZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZngpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdmeC5lbmREcmF3aW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYW52YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNJblJlbmRlcmluZy5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFjayhlcnJvciB8fCBuZXcgX2RvbV91dGlscy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oXCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlIFwiLmNvbmNhdCh0aGlzLnBhZ2VOdW1iZXIpLCAnY2FudmFzJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib3BlcmF0b3JMaXN0Q2hhbmdlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb3BlcmF0b3JMaXN0Q2hhbmdlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ncmFwaGljc1JlYWR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayA9IHRoaXMuX2NvbnRpbnVlQm91bmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGVwcGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwcGVyLnVwZGF0ZU9wZXJhdG9yTGlzdCh0aGlzLm9wZXJhdG9yTGlzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJ1bm5pbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRpbnVlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfY29udGludWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jb250aW51ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnVubmluZyA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGFzay5vbkNvbnRpbnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YXNrLm9uQ29udGludWUodGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zY2hlZHVsZU5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9zY2hlZHVsZU5leHRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zY2hlZHVsZU5leHQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMxNiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl91c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMxNi5fbmV4dEJvdW5kKCkuY2F0Y2goX3RoaXMxNi5jYW5jZWwuYmluZChfdGhpczE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5fbmV4dEJvdW5kKS5jYXRjaCh0aGlzLmNhbmNlbC5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9uZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX25leHQyID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvci5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvckxpc3RJZHggPSB0aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LCB0aGlzLm9wZXJhdG9yTGlzdElkeCwgdGhpcy5fY29udGludWVCb3VuZCwgdGhpcy5zdGVwcGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlcmF0b3JMaXN0SWR4ID09PSB0aGlzLm9wZXJhdG9yTGlzdC5hcmdzQXJyYXkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2Z4LmVuZERyYXdpbmcoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNJblJlbmRlcmluZy5kZWxldGUodGhpcy5fY2FudmFzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsbGJhY2soKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBfbmV4dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX25leHQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfbmV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVybmFsUmVuZGVyVGFzaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJuYWxSZW5kZXJUYXNrO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciB2ZXJzaW9uID0gJzIuMS4yNjYnO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4gICAgICAgICAgICAgICAgdmFyIGJ1aWxkID0gJzgxZjU4MzVjJztcbiAgICAgICAgICAgICAgICBleHBvcnRzLmJ1aWxkID0gYnVpbGQ7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0NyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDgpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNDggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzIHx8ICh0eXBlb2Ygc2VsZiA9PT0gXCJ1bmRlZmluZWRcIiA/IFwidW5kZWZpbmVkXCIgOiBfdHlwZW9mKHNlbGYpKSA9PT0gXCJvYmplY3RcIiAmJiBzZWxmO1xuICAgICAgICAgICAgICAgIH0oKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaGFkUnVudGltZSA9IGcucmVnZW5lcmF0b3JSdW50aW1lICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGcpLmluZGV4T2YoXCJyZWdlbmVyYXRvclJ1bnRpbWVcIikgPj0gMDtcbiAgICAgICAgICAgICAgICB2YXIgb2xkUnVudGltZSA9IGhhZFJ1bnRpbWUgJiYgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gICAgICAgICAgICAgICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0OSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoaGFkUnVudGltZSkge1xuICAgICAgICAgICAgICAgICAgICBnLnJlZ2VuZXJhdG9yUnVudGltZSA9IG9sZFJ1bnRpbWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBnLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE0OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgICAgICAgICAgICAgLyogV0VCUEFDSyBWQVIgSU5KRUNUSU9OICovKGZ1bmN0aW9uKG1vZHVsZSkge1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICAgICAgIWZ1bmN0aW9uIChnbG9iYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5Nb2R1bGUgPSAoIGZhbHNlID8gdW5kZWZpbmVkIDogX3R5cGVvZihtb2R1bGUpKSA9PT0gXCJvYmplY3RcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJ1bnRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzogZm4uY2FsbChvYmosIGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzogZXJyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJiBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3RvciA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24gKGdlbkZ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZW5GdW47XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXdhaXQ6IGFyZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSBcIm9iamVjdFwiICYmIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24gKHVud3JhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW52b2tlKFwidGhyb3dcIiwgZXJyb3IsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcmV2aW91c1Byb21pc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbnF1ZXVlKG1ldGhvZCwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1Byb21pc2UgPSBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZywgY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcpIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbnZva2UgPSBlbnF1ZXVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUuYXN5bmMgPSBmdW5jdGlvbiAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uKG91dGVyRm4pID8gaXRlciA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQgPT09IENvbnRpbnVlU2VudGluZWwpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUV4ZWN1dGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBjb250ZXh0LmRvbmUgPyBHZW5TdGF0ZUNvbXBsZXRlZCA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gR2VuU3RhdGVDb21wbGV0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2QgPSBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIEdwW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yXCI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIltvYmplY3QgR2VuZXJhdG9yXVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUxvYzogbG9jc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNhdGNoTG9jID0gbG9jc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMiBpbiBsb2NzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNldFRyeUVudHJ5KGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb24gfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLnR5cGUgPSBcIm5vcm1hbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZWNvcmQuYXJnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LmNvbXBsZXRpb24gPSByZWNvcmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlMb2M6IFwicm9vdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uIChvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzLnJldmVyc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHZhbHVlcyhpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yTWV0aG9kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IC0xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiBkb25lUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRvbmVSZXN1bHQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbiByZXNldChza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKHJlc2V0VHJ5RW50cnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0aGlzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJiBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJiAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbbmFtZV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9wOiBmdW5jdGlvbiBzdG9wKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcm9vdFJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC5hcmcgPSBleGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFjYXVnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gXCJyb290XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJydXB0OiBmdW5jdGlvbiBhYnJ1cHQodHlwZSwgYXJnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsbHlFbnRyeSA9IGVudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJiAodHlwZSA9PT0gXCJicmVha1wiIHx8IHR5cGUgPT09IFwiY29udGludWVcIikgJiYgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiYgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGZpbmFsbHlFbnRyeSA/IGZpbmFsbHlFbnRyeS5jb21wbGV0aW9uIDoge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmluYWxseUVudHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJicmVha1wiIHx8IHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIgJiYgYWZ0ZXJMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pc2g6IGZ1bmN0aW9uIGZpbmlzaChmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJjYXRjaFwiOiBmdW5jdGlvbiBfY2F0Y2godHJ5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA9PT0gdHJ5TG9jKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IGVudHJ5LmNvbXBsZXRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGVnYXRlWWllbGQ6IGZ1bmN0aW9uIGRlbGVnYXRlWWllbGQoaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0TmFtZTogcmVzdWx0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMgfHwgKHR5cGVvZiBzZWxmID09PSBcInVuZGVmaW5lZFwiID8gXCJ1bmRlZmluZWRcIiA6IF90eXBlb2Yoc2VsZikpID09PSBcIm9iamVjdFwiICYmIHNlbGY7XG4gICAgICAgICAgICAgICAgICAgIH0oKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCkpO1xuICAgICAgICAgICAgICAgICAgICAvKiBXRUJQQUNLIFZBUiBJTkpFQ1RJT04gKi99LmNhbGwodGhpcywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTApKG1vZHVsZSkpKVxuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtb2R1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5wYXRocyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUubDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwiaWRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUuaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZTtcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTEgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLmFkZExpbmtBdHRyaWJ1dGVzID0gYWRkTGlua0F0dHJpYnV0ZXM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRGaWxlbmFtZUZyb21VcmwgPSBnZXRGaWxlbmFtZUZyb21Vcmw7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5sb2FkU2NyaXB0ID0gbG9hZFNjcmlwdDtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkR1bW15U3RhdFRpbWVyID0gZXhwb3J0cy5TdGF0VGltZXIgPSBleHBvcnRzLkRPTVNWR0ZhY3RvcnkgPSBleHBvcnRzLkRPTUNNYXBSZWFkZXJGYWN0b3J5ID0gZXhwb3J0cy5ET01DYW52YXNGYWN0b3J5ID0gZXhwb3J0cy5ERUZBVUxUX0xJTktfUkVMID0gZXhwb3J0cy5MaW5rVGFyZ2V0ID0gZXhwb3J0cy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gPSBleHBvcnRzLlBhZ2VWaWV3cG9ydCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBERUZBVUxUX0xJTktfUkVMID0gJ25vb3BlbmVyIG5vcmVmZXJyZXIgbm9mb2xsb3cnO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuREVGQVVMVF9MSU5LX1JFTCA9IERFRkFVTFRfTElOS19SRUw7XG4gICAgICAgICAgICAgICAgdmFyIFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG5cbiAgICAgICAgICAgICAgICB2YXIgRE9NQ2FudmFzRmFjdG9yeSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRE9NQ2FudmFzRmFjdG9yeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRE9NQ2FudmFzRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhET01DYW52YXNGYWN0b3J5LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjcmVhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlKHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBjYW52YXMgc2l6ZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhczogY2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVzZXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXQoY2FudmFzQW5kQ29udGV4dCwgd2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbnZhc0FuZENvbnRleHQuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbnZhcyBpcyBub3Qgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIGNhbnZhcyBzaXplJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJkZXN0cm95XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGRlc3Ryb3koY2FudmFzQW5kQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbnZhc0FuZENvbnRleHQuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbnZhcyBpcyBub3Qgc3BlY2lmaWVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNBbmRDb250ZXh0LmNhbnZhcy53aWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0FuZENvbnRleHQuY2FudmFzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzQW5kQ29udGV4dC5jb250ZXh0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBET01DYW52YXNGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkRPTUNhbnZhc0ZhY3RvcnkgPSBET01DYW52YXNGYWN0b3J5O1xuXG4gICAgICAgICAgICAgICAgdmFyIERPTUNNYXBSZWFkZXJGYWN0b3J5ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBET01DTWFwUmVhZGVyRmFjdG9yeShfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYkYmFzZVVybCA9IF9yZWYuYmFzZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVVybCA9IF9yZWYkYmFzZVVybCA9PT0gdm9pZCAwID8gbnVsbCA6IF9yZWYkYmFzZVVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZiRpc0NvbXByZXNzZWQgPSBfcmVmLmlzQ29tcHJlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wcmVzc2VkID0gX3JlZiRpc0NvbXByZXNzZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRpc0NvbXByZXNzZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRE9NQ01hcFJlYWRlckZhY3RvcnkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlVXJsID0gYmFzZVVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzQ29tcHJlc3NlZCA9IGlzQ29tcHJlc3NlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKERPTUNNYXBSZWFkZXJGYWN0b3J5LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJmZXRjaFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBmZXRjaChfcmVmMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gX3JlZjIubmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuYmFzZVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignVGhlIENNYXAgXCJiYXNlVXJsXCIgcGFyYW1ldGVyIG11c3QgYmUgc3BlY2lmaWVkLCBlbnN1cmUgdGhhdCAnICsgJ3RoZSBcImNNYXBVcmxcIiBhbmQgXCJjTWFwUGFja2VkXCIgQVBJIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignQ01hcCBuYW1lIG11c3QgYmUgc3BlY2lmaWVkLicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gX3RoaXMuYmFzZVVybCArIG5hbWUgKyAoX3RoaXMuaXNDb21wcmVzc2VkID8gJy5iY21hcCcgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNDb21wcmVzc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlICE9PSBYTUxIdHRwUmVxdWVzdC5ET05FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDIwMCB8fCByZXF1ZXN0LnN0YXR1cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaXNDb21wcmVzc2VkICYmIHJlcXVlc3QucmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBuZXcgVWludDhBcnJheShyZXF1ZXN0LnJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghX3RoaXMuaXNDb21wcmVzc2VkICYmIHJlcXVlc3QucmVzcG9uc2VUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gKDAsIF91dGlsLnN0cmluZ1RvQnl0ZXMpKHJlcXVlc3QucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjTWFwRGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvblR5cGU6IF90aGlzLmlzQ29tcHJlc3NlZCA/IF91dGlsLkNNYXBDb21wcmVzc2lvblR5cGUuQklOQVJZIDogX3V0aWwuQ01hcENvbXByZXNzaW9uVHlwZS5OT05FXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VuYWJsZSB0byBsb2FkICcgKyAoX3RoaXMuaXNDb21wcmVzc2VkID8gJ2JpbmFyeSAnIDogJycpICsgJ0NNYXAgYXQ6ICcgKyB1cmwpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VuZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRE9NQ01hcFJlYWRlckZhY3Rvcnk7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuRE9NQ01hcFJlYWRlckZhY3RvcnkgPSBET01DTWFwUmVhZGVyRmFjdG9yeTtcblxuICAgICAgICAgICAgICAgIHZhciBET01TVkdGYWN0b3J5ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBET01TVkdGYWN0b3J5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBET01TVkdGYWN0b3J5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKERPTVNWR0ZhY3RvcnksIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNyZWF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUod2lkdGgsIGhlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSh3aWR0aCA+IDAgJiYgaGVpZ2h0ID4gMCwgJ0ludmFsaWQgU1ZHIGRpbWVuc2lvbnMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN2ZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdzdmc6c3ZnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3ZlcnNpb24nLCAnMS4xJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2lkdGggKyAncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgaGVpZ2h0ICsgJ3B4Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLCAnbm9uZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKCd2aWV3Qm94JywgJzAgMCAnICsgd2lkdGggKyAnICcgKyBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ZnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnLCAnSW52YWxpZCBTVkcgZWxlbWVudCB0eXBlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCB0eXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBET01TVkdGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkRPTVNWR0ZhY3RvcnkgPSBET01TVkdGYWN0b3J5O1xuXG4gICAgICAgICAgICAgICAgdmFyIFBhZ2VWaWV3cG9ydCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUGFnZVZpZXdwb3J0KF9yZWYzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXdCb3ggPSBfcmVmMy52aWV3Qm94LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IF9yZWYzLnNjYWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbiA9IF9yZWYzLnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRvZmZzZXRYID0gX3JlZjMub2Zmc2V0WCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WCA9IF9yZWYzJG9mZnNldFggPT09IHZvaWQgMCA/IDAgOiBfcmVmMyRvZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRvZmZzZXRZID0gX3JlZjMub2Zmc2V0WSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WSA9IF9yZWYzJG9mZnNldFkgPT09IHZvaWQgMCA/IDAgOiBfcmVmMyRvZmZzZXRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMyRkb250RmxpcCA9IF9yZWYzLmRvbnRGbGlwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250RmxpcCA9IF9yZWYzJGRvbnRGbGlwID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYzJGRvbnRGbGlwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBhZ2VWaWV3cG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdCb3ggPSB2aWV3Qm94O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vZmZzZXRYID0gb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9mZnNldFkgPSBvZmZzZXRZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjZW50ZXJYID0gKHZpZXdCb3hbMl0gKyB2aWV3Qm94WzBdKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNlbnRlclkgPSAodmlld0JveFszXSArIHZpZXdCb3hbMV0pIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm90YXRlQSwgcm90YXRlQiwgcm90YXRlQywgcm90YXRlRDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbiA9IHJvdGF0aW9uICUgMzYwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uID0gcm90YXRpb24gPCAwID8gcm90YXRpb24gKyAzNjAgOiByb3RhdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxODA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVBID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVCID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDkwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlQSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVCID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUMgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDI3MDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUEgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlQiA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlQyA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlQSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGVCID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbnRGbGlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0ZUMgPSAtcm90YXRlQztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRlRCA9IC1yb3RhdGVEO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXRDYW52YXNYLCBvZmZzZXRDYW52YXNZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCwgaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0ZUEgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q2FudmFzWCA9IE1hdGguYWJzKGNlbnRlclkgLSB2aWV3Qm94WzFdKSAqIHNjYWxlICsgb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q2FudmFzWSA9IE1hdGguYWJzKGNlbnRlclggLSB2aWV3Qm94WzBdKSAqIHNjYWxlICsgb2Zmc2V0WTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmFicyh2aWV3Qm94WzNdIC0gdmlld0JveFsxXSkgKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5hYnModmlld0JveFsyXSAtIHZpZXdCb3hbMF0pICogc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q2FudmFzWCA9IE1hdGguYWJzKGNlbnRlclggLSB2aWV3Qm94WzBdKSAqIHNjYWxlICsgb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Q2FudmFzWSA9IE1hdGguYWJzKGNlbnRlclkgLSB2aWV3Qm94WzFdKSAqIHNjYWxlICsgb2Zmc2V0WTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBNYXRoLmFicyh2aWV3Qm94WzJdIC0gdmlld0JveFswXSkgKiBzY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5hYnModmlld0JveFszXSAtIHZpZXdCb3hbMV0pICogc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0gPSBbcm90YXRlQSAqIHNjYWxlLCByb3RhdGVCICogc2NhbGUsIHJvdGF0ZUMgKiBzY2FsZSwgcm90YXRlRCAqIHNjYWxlLCBvZmZzZXRDYW52YXNYIC0gcm90YXRlQSAqIHNjYWxlICogY2VudGVyWCAtIHJvdGF0ZUMgKiBzY2FsZSAqIGNlbnRlclksIG9mZnNldENhbnZhc1kgLSByb3RhdGVCICogc2NhbGUgKiBjZW50ZXJYIC0gcm90YXRlRCAqIHNjYWxlICogY2VudGVyWV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUGFnZVZpZXdwb3J0LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjbG9uZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWY0JHNjYWxlID0gX3JlZjQuc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZSA9IF9yZWY0JHNjYWxlID09PSB2b2lkIDAgPyB0aGlzLnNjYWxlIDogX3JlZjQkc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmNCRyb3RhdGlvbiA9IF9yZWY0LnJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb24gPSBfcmVmNCRyb3RhdGlvbiA9PT0gdm9pZCAwID8gdGhpcy5yb3RhdGlvbiA6IF9yZWY0JHJvdGF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjQkZG9udEZsaXAgPSBfcmVmNC5kb250RmxpcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRGbGlwID0gX3JlZjQkZG9udEZsaXAgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjQkZG9udEZsaXA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQYWdlVmlld3BvcnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveDogdGhpcy52aWV3Qm94LnNsaWNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogc2NhbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbjogcm90YXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiB0aGlzLm9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiB0aGlzLm9mZnNldFksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb250RmxpcDogZG9udEZsaXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjb252ZXJ0VG9WaWV3cG9ydFBvaW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnZlcnRUb1ZpZXdwb3J0UG9pbnQoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbeCwgeV0sIHRoaXMudHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlKHJlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRsID0gX3V0aWwuVXRpbC5hcHBseVRyYW5zZm9ybShbcmVjdFswXSwgcmVjdFsxXV0sIHRoaXMudHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnIgPSBfdXRpbC5VdGlsLmFwcGx5VHJhbnNmb3JtKFtyZWN0WzJdLCByZWN0WzNdXSwgdGhpcy50cmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdGxbMF0sIHRsWzFdLCBiclswXSwgYnJbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY29udmVydFRvUGRmUG9pbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY29udmVydFRvUGRmUG9pbnQoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3V0aWwuVXRpbC5hcHBseUludmVyc2VUcmFuc2Zvcm0oW3gsIHldLCB0aGlzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFnZVZpZXdwb3J0O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBhZ2VWaWV3cG9ydCA9IFBhZ2VWaWV3cG9ydDtcblxuICAgICAgICAgICAgICAgIHZhciBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gPSBmdW5jdGlvbiBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbihtc2csIHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIFJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbi5wcm90b3R5cGUubmFtZSA9ICdSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24nO1xuICAgICAgICAgICAgICAgICAgICBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24uY29uc3RydWN0b3IgPSBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24gPSBSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb247XG4gICAgICAgICAgICAgICAgdmFyIExpbmtUYXJnZXQgPSB7XG4gICAgICAgICAgICAgICAgICAgIE5PTkU6IDAsXG4gICAgICAgICAgICAgICAgICAgIFNFTEY6IDEsXG4gICAgICAgICAgICAgICAgICAgIEJMQU5LOiAyLFxuICAgICAgICAgICAgICAgICAgICBQQVJFTlQ6IDMsXG4gICAgICAgICAgICAgICAgICAgIFRPUDogNFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5MaW5rVGFyZ2V0ID0gTGlua1RhcmdldDtcbiAgICAgICAgICAgICAgICB2YXIgTGlua1RhcmdldFN0cmluZ01hcCA9IFsnJywgJ19zZWxmJywgJ19ibGFuaycsICdfcGFyZW50JywgJ190b3AnXTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZExpbmtBdHRyaWJ1dGVzKGxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWY1ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybCA9IF9yZWY1LnVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9IF9yZWY1LnRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbCA9IF9yZWY1LnJlbDtcblxuICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSBsaW5rLnRpdGxlID0gdXJsID8gKDAsIF91dGlsLnJlbW92ZU51bGxDaGFyYWN0ZXJzKSh1cmwpIDogJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExpbmtUYXJnZXRWYWx1ZXMgPSBPYmplY3QudmFsdWVzKExpbmtUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldEluZGV4ID0gTGlua1RhcmdldFZhbHVlcy5pbmNsdWRlcyh0YXJnZXQpID8gdGFyZ2V0IDogTGlua1RhcmdldC5OT05FO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluay50YXJnZXQgPSBMaW5rVGFyZ2V0U3RyaW5nTWFwW3RhcmdldEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsucmVsID0gdHlwZW9mIHJlbCA9PT0gJ3N0cmluZycgPyByZWwgOiBERUZBVUxUX0xJTktfUkVMO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2V0RmlsZW5hbWVGcm9tVXJsKHVybCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYW5jaG9yID0gdXJsLmluZGV4T2YoJyMnKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHF1ZXJ5ID0gdXJsLmluZGV4T2YoJz8nKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IE1hdGgubWluKGFuY2hvciA+IDAgPyBhbmNob3IgOiB1cmwubGVuZ3RoLCBxdWVyeSA+IDAgPyBxdWVyeSA6IHVybC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnN1YnN0cmluZyh1cmwubGFzdEluZGV4T2YoJy8nLCBlbmQpICsgMSwgZW5kKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgU3RhdFRpbWVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBTdGF0VGltZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTdGF0VGltZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVkID0gISFlbmFibGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTdGF0VGltZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGltZShuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSBpbiB0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAnICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0ZWRbbmFtZV0gPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidGltZUVuZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB0aW1lRW5kKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG5hbWUgaW4gdGhpcy5zdGFydGVkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdUaW1lciBoYXMgbm90IGJlZW4gc3RhcnRlZCBmb3IgJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydCc6IHRoaXMuc3RhcnRlZFtuYW1lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmQnOiBEYXRlLm5vdygpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zdGFydGVkW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aW1lcyA9IHRoaXMudGltZXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXQgPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdlc3QgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRpbWVzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gdGltZXNbaV1bJ25hbWUnXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUubGVuZ3RoID4gbG9uZ2VzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdlc3QgPSBuYW1lLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMCwgX2lpID0gdGltZXMubGVuZ3RoOyBfaSA8IF9paTsgKytfaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSB0aW1lc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBzcGFuLmVuZCAtIHNwYW4uc3RhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gXCJcIi5jb25jYXQoc3BhblsnbmFtZSddLnBhZEVuZChsb25nZXN0KSwgXCIgXCIpLmNvbmNhdChkdXJhdGlvbiwgXCJtc1xcblwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhdFRpbWVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlN0YXRUaW1lciA9IFN0YXRUaW1lcjtcblxuICAgICAgICAgICAgICAgIHZhciBEdW1teVN0YXRUaW1lciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gRHVtbXlTdGF0VGltZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIER1bW15U3RhdFRpbWVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Nhbm5vdCBpbml0aWFsaXplIER1bW15U3RhdFRpbWVyLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoRHVtbXlTdGF0VGltZXIsIG51bGwsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdGltZShuYW1lKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJ0aW1lRW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHRpbWVFbmQobmFtZSkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidG9TdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBEdW1teVN0YXRUaW1lcjtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5EdW1teVN0YXRUaW1lciA9IER1bW15U3RhdFRpbWVyO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbG9hZFNjcmlwdChzcmMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzcmM7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHQub25sb2FkID0gcmVzb2x2ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkNhbm5vdCBsb2FkIHNjcmlwdCBhdDogXCIuY29uY2F0KHNjcmlwdC5zcmMpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAoZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTUyICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250TG9hZGVyID0gZXhwb3J0cy5Gb250RmFjZU9iamVjdCA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfcmVnZW5lcmF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ3KSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBCYXNlRm9udExvYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQmFzZUZvbnRMb2FkZXIoX3JlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkb2NJZCA9IF9yZWYuZG9jSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVW5zdXBwb3J0ZWRGZWF0dXJlID0gX3JlZi5vblVuc3VwcG9ydGVkRmVhdHVyZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBCYXNlRm9udExvYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb25zdHJ1Y3RvciA9PT0gQmFzZUZvbnRMb2FkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQ2Fubm90IGluaXRpYWxpemUgQmFzZUZvbnRMb2FkZXIuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2NJZCA9IGRvY0lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlID0gb25VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb250RmFjZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhCYXNlRm9udExvYWRlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiYWRkTmF0aXZlRm9udEZhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gYWRkTmF0aXZlRm9udEZhY2UobmF0aXZlRm9udEZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb250RmFjZXMucHVzaChuYXRpdmVGb250RmFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmZvbnRzLmFkZChuYXRpdmVGb250RmFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpbnNlcnRSdWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGluc2VydFJ1bGUocnVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVFbGVtZW50ID0gdGhpcy5zdHlsZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudCA9IHRoaXMuc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlRWxlbWVudC5pZCA9IFwiZXh0cmFjdGhpZ2hsaWdodHNfRk9OVF9TVFlMRV9UQUdfXCIuY29uY2F0KHRoaXMuZG9jSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZVNoZWV0ID0gc3R5bGVFbGVtZW50LnNoZWV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF0aXZlRm9udEZhY2VzLmZvckVhY2goZnVuY3Rpb24gKG5hdGl2ZUZvbnRGYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5mb250cy5kZWxldGUobmF0aXZlRm9udEZhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJiaW5kXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9iaW5kID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoZm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmF0aXZlRm9udEZhY2UsIHJ1bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvci5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGZvbnQuYXR0YWNoZWQgfHwgZm9udC5taXNzaW5nRmlsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250LmF0dGFjaGVkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVGb250RmFjZSA9IGZvbnQuY3JlYXRlTmF0aXZlRm9udEZhY2UoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5hdGl2ZUZvbnRGYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTmF0aXZlRm9udEZhY2UobmF0aXZlRm9udEZhY2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gNztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmF0aXZlRm9udEZhY2UubG9hZGVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDE4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQudDAgPSBfY29udGV4dFtcImNhdGNoXCJdKDcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJGYWlsZWQgdG8gbG9hZCBmb250ICdcIi5jb25jYXQobmF0aXZlRm9udEZhY2UuZmFtaWx5LCBcIic6ICdcIikuY29uY2F0KF9jb250ZXh0LnQwLCBcIicuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udC5kaXNhYmxlRm9udEZhY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBfY29udGV4dC50MDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxlID0gZm9udC5jcmVhdGVGb250RmFjZVJ1bGUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRSdWxlKHJ1bGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSBfdGhpcy5fcXVldWVMb2FkaW5nQ2FsbGJhY2socmVzb2x2ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9wcmVwYXJlRm9udExvYWRFdmVudChbcnVsZV0sIFtmb250XSwgcmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgdGhpcywgW1s3LCAxMl1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBiaW5kKF94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2JpbmQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcXVldWVMb2FkaW5nQ2FsbGJhY2tcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgX3F1ZXVlTG9hZGluZ0NhbGxiYWNrYC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9wcmVwYXJlRm9udExvYWRFdmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHJlcGFyZUZvbnRMb2FkRXZlbnQocnVsZXMsIGZvbnRzVG9Mb2FkLCByZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgX3ByZXBhcmVGb250TG9hZEV2ZW50YC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLnVucmVhY2hhYmxlKSgnQWJzdHJhY3QgbWV0aG9kIGBpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkYC4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ0Fic3RyYWN0IG1ldGhvZCBgaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWRgLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2xvYWRUZXN0Rm9udFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdBYnN0cmFjdCBtZXRob2QgYF9sb2FkVGVzdEZvbnRgLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhc2VGb250TG9hZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRm9udExvYWRlcjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkZvbnRMb2FkZXIgPSBGb250TG9hZGVyO1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5Gb250TG9hZGVyID0gRm9udExvYWRlciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Jhc2VGb250TG9hZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKEdlbmVyaWNGb250TG9hZGVyLCBfQmFzZUZvbnRMb2FkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gR2VuZXJpY0ZvbnRMb2FkZXIoZG9jSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgR2VuZXJpY0ZvbnRMb2FkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihHZW5lcmljRm9udExvYWRlcikuY2FsbCh0aGlzLCBkb2NJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIubG9hZGluZ0NvbnRleHQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0czogW10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UmVxdWVzdElkOiAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5sb2FkVGVzdEZvbnRJZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEdlbmVyaWNGb250TG9hZGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3F1ZXVlTG9hZGluZ0NhbGxiYWNrXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcXVldWVMb2FkaW5nQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBsZXRlUmVxdWVzdCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghcmVxdWVzdC5kb25lLCAnY29tcGxldGVSZXF1ZXN0KCkgY2Fubm90IGJlIGNhbGxlZCB0d2ljZS4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNvbnRleHQucmVxdWVzdHMubGVuZ3RoID4gMCAmJiBjb250ZXh0LnJlcXVlc3RzWzBdLmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG90aGVyUmVxdWVzdCA9IGNvbnRleHQucmVxdWVzdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChvdGhlclJlcXVlc3QuY2FsbGJhY2ssIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB0aGlzLmxvYWRpbmdDb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiZXh0cmFjdGhpZ2hsaWdodHMtZm9udC1sb2FkaW5nLVwiLmNvbmNhdChjb250ZXh0Lm5leHRSZXF1ZXN0SWQrKyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlUmVxdWVzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcXVlc3RzLnB1c2gocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9wcmVwYXJlRm9udExvYWRFdmVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3ByZXBhcmVGb250TG9hZEV2ZW50KHJ1bGVzLCBmb250cywgcmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW50MzIoZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY2hhckNvZGVBdChvZmZzZXQpIDw8IDI0IHwgZGF0YS5jaGFyQ29kZUF0KG9mZnNldCArIDEpIDw8IDE2IHwgZGF0YS5jaGFyQ29kZUF0KG9mZnNldCArIDIpIDw8IDggfCBkYXRhLmNoYXJDb2RlQXQob2Zmc2V0ICsgMykgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzcGxpY2VTdHJpbmcocywgb2Zmc2V0LCByZW1vdmUsIGluc2VydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuazEgPSBzLnN1YnN0cmluZygwLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuazIgPSBzLnN1YnN0cmluZyhvZmZzZXQgKyByZW1vdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHVuazEgKyBpbnNlcnQgKyBjaHVuazI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBpaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsZWQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBpc0ZvbnRSZWFkeShuYW1lLCBjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZCsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZCA+IDMwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnTG9hZCB0ZXN0IGZvbnQgbmV2ZXIgbG9hZGVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZvbnQgPSAnMzBweCAnICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFRleHQoJy4nLCAwLCAyMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgMSwgMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1hZ2VEYXRhLmRhdGFbM10gPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGlzRm9udFJlYWR5LmJpbmQobnVsbCwgbmFtZSwgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxvYWRUZXN0Rm9udElkID0gXCJsdFwiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fbG9hZFRlc3RGb250O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIENPTU1FTlRfT0ZGU0VUID0gOTc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNwbGljZVN0cmluZyhkYXRhLCBDT01NRU5UX09GRlNFVCwgbG9hZFRlc3RGb250SWQubGVuZ3RoLCBsb2FkVGVzdEZvbnRJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ0ZGX0NIRUNLU1VNX09GRlNFVCA9IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFhYWFhfVkFMVUUgPSAweDU4NTg1ODU4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrc3VtID0gaW50MzIoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gbG9hZFRlc3RGb250SWQubGVuZ3RoIC0gMzsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGNoZWNrc3VtIC0gWFhYWF9WQUxVRSArIGludDMyKGxvYWRUZXN0Rm9udElkLCBpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgbG9hZFRlc3RGb250SWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBjaGVja3N1bSAtIFhYWFhfVkFMVUUgKyBpbnQzMihsb2FkVGVzdEZvbnRJZCArICdYWFgnLCBpKSB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBzcGxpY2VTdHJpbmcoZGF0YSwgQ0ZGX0NIRUNLU1VNX09GRlNFVCwgNCwgKDAsIF91dGlsLnN0cmluZzMyKShjaGVja3N1bSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybCA9IFwidXJsKGRhdGE6Zm9udC9vcGVudHlwZTtiYXNlNjQsXCIuY29uY2F0KGJ0b2EoZGF0YSksIFwiKTtcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IFwiQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XFxcIlwiLmNvbmNhdChsb2FkVGVzdEZvbnRJZCwgXCJcXFwiO3NyYzpcIikuY29uY2F0KHVybCwgXCJ9XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRSdWxlKHJ1bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZm9udHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2goZm9udHNbaV0ubG9hZGVkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzLnB1c2gobG9hZFRlc3RGb250SWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCAndmlzaWJpbGl0eTogaGlkZGVuOycgKyAnd2lkdGg6IDEwcHg7IGhlaWdodDogMTBweDsnICsgJ3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwcHg7IGxlZnQ6IDBweDsnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi50ZXh0Q29udGVudCA9ICdIaSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5mb250RmFtaWx5ID0gbmFtZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LmFwcGVuZENoaWxkKHNwYW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0ZvbnRSZWFkeShsb2FkVGVzdEZvbnRJZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydGVkID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhIWRvY3VtZW50LmZvbnRzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydGVkICYmIHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSAvTW96aWxsYVxcLzUuMC4qP3J2OihcXGQrKS4qPyBHZWNrby8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0gPCA2Mykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnaXNGb250TG9hZGluZ0FQSVN1cHBvcnRlZCcsIHN1cHBvcnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdXBwb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSAvTW96aWxsYVxcLzUuMC4qP3J2OihcXGQrKS4qPyBHZWNrby8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtICYmIG1bMV0gPj0gMTQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwgX3V0aWwuc2hhZG93KSh0aGlzLCAnaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQnLCBzdXBwb3J0ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX2xvYWRUZXN0Rm9udFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXRMb2FkVGVzdEZvbnQgPSBmdW5jdGlvbiBnZXRMb2FkVGVzdEZvbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF0b2IoJ1QxUlVUd0FMQUlBQUF3QXdRMFpHSURIdFpnNEFBQU9ZQUFBQWdVWkdWRTFsa3pad0FBQUVIQUFBQUJ4SFJFVkdBQlFBJyArICdGUUFBQkRnQUFBQWVUMU12TWxZTll3a0FBQUVnQUFBQVlHTnRZWEFCRFFMVUFBQUNOQUFBQVVKb1pXRmsveFZGRFFBQScgKyAnQUx3QUFBQTJhR2hsWVFka0Erb0FBQUQwQUFBQUpHaHRkSGdENkFBQUFBQUVXQUFBQUFadFlYaHdBQUpRQUFBQUFSZ0EnICsgJ0FBQUdibUZ0WlZqbWRINEFBQUdBQUFBQXNYQnZjM1QvaGdBekFBQURlQUFBQUNBQUFRQUFBQUVBQUxaUkZzUmZEenoxJyArICdBQXNENkFBQUFBRE9CT1RMQUFBQUFNNEtIRHdBQUFBQUErZ0RJUUFBQUFnQUFnQUFBQUFBQUFBQkFBQURJUUFBQUZvRCcgKyAnNkFBQUFBQUQ2QUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBVUFBQUFnQUFBQVFENkFIMEFBVUFBQUtLQXJ3QUFBQ00nICsgJ0Fvb0N2QUFBQWVBQU1RRUNBQUFDQUFZSkFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBRkJtUldRQXdBQXVBQzREJyArICdJUDg0QUZvRElRQUFBQUFBQVFBQUFBQUFBQUFBQUNBQUlBQUJBQUFBRGdDdUFBRUFBQUFBQUFBQUFRQUFBQUVBQUFBQScgKyAnQUFFQUFRQUFBQUVBQUFBQUFBSUFBUUFBQUFFQUFBQUFBQU1BQVFBQUFBRUFBQUFBQUFRQUFRQUFBQUVBQUFBQUFBVUEnICsgJ0FRQUFBQUVBQUFBQUFBWUFBUUFBQUFNQUFRUUpBQUFBQWdBQkFBTUFBUVFKQUFFQUFnQUJBQU1BQVFRSkFBSUFBZ0FCJyArICdBQU1BQVFRSkFBTUFBZ0FCQUFNQUFRUUpBQVFBQWdBQkFBTUFBUVFKQUFVQUFnQUJBQU1BQVFRSkFBWUFBZ0FCV0FCWScgKyAnQUFBQUFBQUFBd0FBQUFNQUFBQWNBQUVBQUFBQUFEd0FBd0FCQUFBQUhBQUVBQ0FBQUFBRUFBUUFBUUFBQUM3Ly93QUEnICsgJ0FDNy8vLy9UQUFFQUFBQUFBQUFCQmdBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBJyArICdBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQScgKyAnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEnICsgJ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBJyArICdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQScgKyAnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUFBQUFBQUFEL2d3QXlBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUEnICsgJ0FBQUJBQVFFQUFFQkFRSllBQUVCQVNINER3RDRHd0hFQXZnY0EvZ1hCSXdNQVl1TCtuejV0UVhrRDVqM0NCTG5FUUFDJyArICdBUUVCSVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlBQUFCQVFBQUR3QUNBUUVFRS90MycgKyAnRG92NmZBSDZmQVQrZlBwOCtud0hEb3NNQ3ZtMUN2bTFEQXo2ZkJRQUFBQUFBQUFCQUFBQUFNbUpiekVBQUFBQXpnVGonICsgJ0ZRQUFBQURPQk9RcEFBRUFBQUFBQUFBQURBQVVBQVFBQUFBQkFBQUFBZ0FCQUFBQUFBQUFBQUFENkFBQUFBQUFBQT09Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ19sb2FkVGVzdEZvbnQnLCBnZXRMb2FkVGVzdEZvbnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2VuZXJpY0ZvbnRMb2FkZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KEJhc2VGb250TG9hZGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIElzRXZhbFN1cHBvcnRlZENhY2hlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICd2YWx1ZScsICgwLCBfdXRpbC5pc0V2YWxTdXBwb3J0ZWQpKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgdmFyIEZvbnRGYWNlT2JqZWN0ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBGb250RmFjZU9iamVjdCh0cmFuc2xhdGVkRGF0YSwgX3JlZjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZjIkaXNFdmFsU3VwcG9ydGVkID0gX3JlZjIuaXNFdmFsU3VwcG9ydGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0V2YWxTdXBwb3J0ZWQgPSBfcmVmMiRpc0V2YWxTdXBwb3J0ZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRpc0V2YWxTdXBwb3J0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYyJGRpc2FibGVGb250RmFjZSA9IF9yZWYyLmRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUZvbnRGYWNlID0gX3JlZjIkZGlzYWJsZUZvbnRGYWNlID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYyJGRpc2FibGVGb250RmFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIkaWdub3JlRXJyb3JzID0gX3JlZjIuaWdub3JlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVFcnJvcnMgPSBfcmVmMiRpZ25vcmVFcnJvcnMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkaWdub3JlRXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmMiRvblVuc3VwcG9ydGVkRmUgPSBfcmVmMi5vblVuc3VwcG9ydGVkRmVhdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25VbnN1cHBvcnRlZEZlYXR1cmUgPSBfcmVmMiRvblVuc3VwcG9ydGVkRmUgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmMiRvblVuc3VwcG9ydGVkRmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYyJGZvbnRSZWdpc3RyeSA9IF9yZWYyLmZvbnRSZWdpc3RyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFJlZ2lzdHJ5ID0gX3JlZjIkZm9udFJlZ2lzdHJ5ID09PSB2b2lkIDAgPyBudWxsIDogX3JlZjIkZm9udFJlZ2lzdHJ5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZvbnRGYWNlT2JqZWN0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGlsZWRHbHlwaHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB0cmFuc2xhdGVkRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzW2ldID0gdHJhbnNsYXRlZERhdGFbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0V2YWxTdXBwb3J0ZWQgPSBpc0V2YWxTdXBwb3J0ZWQgIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUZvbnRGYWNlID0gZGlzYWJsZUZvbnRGYWNlID09PSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaWdub3JlRXJyb3JzID0gaWdub3JlRXJyb3JzID09PSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlID0gb25VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250UmVnaXN0cnkgPSBmb250UmVnaXN0cnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhGb250RmFjZU9iamVjdCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlTmF0aXZlRm9udEZhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY3JlYXRlTmF0aXZlRm9udEZhY2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhIHx8IHRoaXMuZGlzYWJsZUZvbnRGYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYXRpdmVGb250RmFjZSA9IG5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsIHRoaXMuZGF0YSwge30pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvbnRSZWdpc3RyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250UmVnaXN0cnkucmVnaXN0ZXJGb250KHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5hdGl2ZUZvbnRGYWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY3JlYXRlRm9udEZhY2VSdWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNyZWF0ZUZvbnRGYWNlUnVsZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEgfHwgdGhpcy5kaXNhYmxlRm9udEZhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSAoMCwgX3V0aWwuYnl0ZXNUb1N0cmluZykobmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBcInVybChkYXRhOlwiLmNvbmNhdCh0aGlzLm1pbWV0eXBlLCBcIjtiYXNlNjQsXCIpLmNvbmNhdChidG9hKGRhdGEpLCBcIik7XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnVsZSA9IFwiQGZvbnQtZmFjZSB7Zm9udC1mYW1pbHk6XFxcIlwiLmNvbmNhdCh0aGlzLmxvYWRlZE5hbWUsIFwiXFxcIjtzcmM6XCIpLmNvbmNhdCh1cmwsIFwifVwiKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb250UmVnaXN0cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udFJlZ2lzdHJ5LnJlZ2lzdGVyRm9udCh0aGlzLCB1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJnZXRQYXRoR2VuZXJhdG9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldFBhdGhHZW5lcmF0b3Iob2JqcywgY2hhcmFjdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tcGlsZWRHbHlwaHNbY2hhcmFjdGVyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjbWRzLCBjdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWRzID0gb2Jqcy5nZXQodGhpcy5sb2FkZWROYW1lICsgJ19wYXRoXycgKyBjaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlnbm9yZUVycm9ycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVJZDogX3V0aWwuVU5TVVBQT1JURURfRkVBVFVSRVMuZm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJnZXRQYXRoR2VuZXJhdG9yIC0gaWdub3JpbmcgY2hhcmFjdGVyOiBcXFwiXCIuY29uY2F0KGV4LCBcIlxcXCIuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBmdW5jdGlvbiAoYywgc2l6ZSkge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0V2YWxTdXBwb3J0ZWQgJiYgSXNFdmFsU3VwcG9ydGVkQ2FjaGVkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcyA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjbWRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY21kc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmFyZ3MgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gY3VycmVudC5hcmdzLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganMgKz0gJ2MuJyArIGN1cnJlbnQuY21kICsgJygnICsgYXJncyArICcpO1xcbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBuZXcgRnVuY3Rpb24oJ2MnLCAnc2l6ZScsIGpzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW2NoYXJhY3Rlcl0gPSBmdW5jdGlvbiAoYywgc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwLCBfaWkgPSBjbWRzLmxlbmd0aDsgX2kgPCBfaWk7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY21kc1tfaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5jbWQgPT09ICdzY2FsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5hcmdzID0gW3NpemUsIC1zaXplXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2N1cnJlbnQuY21kXS5hcHBseShjLCBjdXJyZW50LmFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZvbnRGYWNlT2JqZWN0O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLkZvbnRGYWNlT2JqZWN0ID0gRm9udEZhY2VPYmplY3Q7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1MyAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIHZhciBjb21wYXRpYmlsaXR5UGFyYW1zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc05vZGVKUyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oNCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHVzZXJBZ2VudCA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0lFID0gL1RyaWRlbnQvLnRlc3QodXNlckFnZW50KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGlzSU9TQ2hyb21lID0gL0NyaU9TLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uIGNoZWNrT25CbG9iU3VwcG9ydCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0lFIHx8IGlzSU9TQ2hyb21lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eVBhcmFtcy5kaXNhYmxlQ3JlYXRlT2JqZWN0VVJMID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkoKTtcblxuICAgICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gY2hlY2tGb250RmFjZUFuZEltYWdlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZUpTKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmlsaXR5UGFyYW1zLmRpc2FibGVGb250RmFjZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eVBhcmFtcy5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBleHBvcnRzLmFwaUNvbXBhdGliaWxpdHlQYXJhbXMgPSBPYmplY3QuZnJlZXplKGNvbXBhdGliaWxpdHlQYXJhbXMpO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLkNhbnZhc0dyYXBoaWNzID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfcGF0dGVybl9oZWxwZXIgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE1NSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgTUlOX0ZPTlRfU0laRSA9IDE2O1xuICAgICAgICAgICAgICAgIHZhciBNQVhfRk9OVF9TSVpFID0gMTAwO1xuICAgICAgICAgICAgICAgIHZhciBNQVhfR1JPVVBfU0laRSA9IDQwOTY7XG4gICAgICAgICAgICAgICAgdmFyIE1JTl9XSURUSF9GQUNUT1IgPSAwLjY1O1xuICAgICAgICAgICAgICAgIHZhciBDT01QSUxFX1RZUEUzX0dMWVBIUyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIE1BWF9TSVpFX1RPX0NPTVBJTEUgPSAxMDAwO1xuICAgICAgICAgICAgICAgIHZhciBGVUxMX0NIVU5LX0hFSUdIVCA9IDE2O1xuICAgICAgICAgICAgICAgIHZhciBJc0xpdHRsZUVuZGlhbkNhY2hlZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKElzTGl0dGxlRW5kaWFuQ2FjaGVkLCAndmFsdWUnLCAoMCwgX3V0aWwuaXNMaXR0bGVFbmRpYW4pKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5fb3JpZ2luYWxTYXZlID0gY3R4LnNhdmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguX29yaWdpbmFsUmVzdG9yZSA9IGN0eC5yZXN0b3JlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Ll9vcmlnaW5hbFJvdGF0ZSA9IGN0eC5yb3RhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguX29yaWdpbmFsU2NhbGUgPSBjdHguc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguX29yaWdpbmFsVHJhbnNsYXRlID0gY3R4LnRyYW5zbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5fb3JpZ2luYWxUcmFuc2Zvcm0gPSBjdHgudHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Ll9vcmlnaW5hbFNldFRyYW5zZm9ybSA9IGN0eC5zZXRUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguX3RyYW5zZm9ybU1hdHJpeCA9IGN0eC5fdHJhbnNmb3JtTWF0cml4IHx8IFsxLCAwLCAwLCAxLCAwLCAwXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5fdHJhbnNmb3JtU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsICdtb3pDdXJyZW50VHJhbnNmb3JtJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0Q3VycmVudFRyYW5zZm9ybSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjdHgsICdtb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldEN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBtWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IG1bMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbVsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBtWzNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9IG1bNF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFkX2JjID0gYSAqIGQgLSBiICogYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJjX2FkID0gYiAqIGMgLSBhICogZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtkIC8gYWRfYmMsIGIgLyBiY19hZCwgYyAvIGJjX2FkLCBhIC8gYWRfYmMsIChkICogZSAtIGMgKiBmKSAvIGJjX2FkLCAoYiAqIGUgLSBhICogZikgLyBhZF9iY107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlID0gZnVuY3Rpb24gY3R4U2F2ZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2xkID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtU3RhY2sucHVzaChvbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gb2xkLnNsaWNlKDAsIDYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxTYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSA9IGZ1bmN0aW9uIGN0eFJlc3RvcmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByZXYgPSB0aGlzLl90cmFuc2Zvcm1TdGFjay5wb3AoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyYW5zZm9ybU1hdHJpeCA9IHByZXY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3JpZ2luYWxSZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSA9IGZ1bmN0aW9uIGN0eFRyYW5zbGF0ZSh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVs0XSA9IG1bMF0gKiB4ICsgbVsyXSAqIHkgKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bNV0gPSBtWzFdICogeCArIG1bM10gKiB5ICsgbVs1XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsVHJhbnNsYXRlKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlID0gZnVuY3Rpb24gY3R4U2NhbGUoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gdGhpcy5fdHJhbnNmb3JtTWF0cml4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bMF0gPSBtWzBdICogeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtWzFdID0gbVsxXSAqIHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbVsyXSA9IG1bMl0gKiB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1bM10gPSBtWzNdICogeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsU2NhbGUoeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtID0gZnVuY3Rpb24gY3R4VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IHRoaXMuX3RyYW5zZm9ybU1hdHJpeDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXggPSBbbVswXSAqIGEgKyBtWzJdICogYiwgbVsxXSAqIGEgKyBtWzNdICogYiwgbVswXSAqIGMgKyBtWzJdICogZCwgbVsxXSAqIGMgKyBtWzNdICogZCwgbVswXSAqIGUgKyBtWzJdICogZiArIG1bNF0sIG1bMV0gKiBlICsgbVszXSAqIGYgKyBtWzVdXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5fb3JpZ2luYWxUcmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gY3R4U2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2Zvcm1NYXRyaXggPSBbYSwgYiwgYywgZCwgZSwgZl07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguX29yaWdpbmFsU2V0VHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJvdGF0ZSA9IGZ1bmN0aW9uIGN0eFJvdGF0ZShhbmdsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3NWYWx1ZSA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2luVmFsdWUgPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG0gPSB0aGlzLl90cmFuc2Zvcm1NYXRyaXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNmb3JtTWF0cml4ID0gW21bMF0gKiBjb3NWYWx1ZSArIG1bMl0gKiBzaW5WYWx1ZSwgbVsxXSAqIGNvc1ZhbHVlICsgbVszXSAqIHNpblZhbHVlLCBtWzBdICogLXNpblZhbHVlICsgbVsyXSAqIGNvc1ZhbHVlLCBtWzFdICogLXNpblZhbHVlICsgbVszXSAqIGNvc1ZhbHVlLCBtWzRdLCBtWzVdXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX29yaWdpbmFsUm90YXRlKGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2FjaGVkQ2FudmFzZXMgPSBmdW5jdGlvbiBDYWNoZWRDYW52YXNlc0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIENhY2hlZENhbnZhc2VzKGNhbnZhc0ZhY3RvcnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzRmFjdG9yeSA9IGNhbnZhc0ZhY3Rvcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENhY2hlZENhbnZhc2VzLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENhbnZhczogZnVuY3Rpb24gQ2FjaGVkQ2FudmFzZXNfZ2V0Q2FudmFzKGlkLCB3aWR0aCwgaGVpZ2h0LCB0cmFja1RyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXNFbnRyeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhY2hlW2lkXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0VudHJ5ID0gdGhpcy5jYWNoZVtpZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzRmFjdG9yeS5yZXNldChjYW52YXNFbnRyeSwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0VudHJ5LmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0VudHJ5ID0gdGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZVtpZF0gPSBjYW52YXNFbnRyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2tUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkQ29udGV4dEN1cnJlbnRUcmFuc2Zvcm0oY2FudmFzRW50cnkuY29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZhc0VudHJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLmNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXNFbnRyeSA9IHRoaXMuY2FjaGVbaWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0ZhY3RvcnkuZGVzdHJveShjYW52YXNFbnRyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlW2lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBDYWNoZWRDYW52YXNlcztcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21waWxlVHlwZTNHbHlwaChpbWdEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQT0lOVF9UT19QUk9DRVNTX0xJTUlUID0gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGosXG4gICAgICAgICAgICAgICAgICAgICAgICBqMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoMSA9IHdpZHRoICsgMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IG5ldyBVaW50OEFycmF5KHdpZHRoMSAqIChoZWlnaHQgKyAxKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBQT0lOVF9UWVBFUyA9IG5ldyBVaW50OEFycmF5KFswLCAyLCA0LCAwLCAxLCAwLCA1LCA0LCA4LCAxMCwgMCwgOCwgMCwgMiwgMSwgMF0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGluZVNpemUgPSB3aWR0aCArIDcgJiB+NyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEwID0gaW1nRGF0YS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KGxpbmVTaXplICogaGVpZ2h0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBpaTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGRhdGEwLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrID0gMTI4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW0gPSBkYXRhMFtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG1hc2sgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtwb3MrK10gPSBlbGVtICYgbWFzayA/IDAgOiAyNTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzWzBdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAxOyBqIDwgd2lkdGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gZGF0YVtwb3MgKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tqXSA9IGRhdGFbcG9zXSA/IDIgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2pdID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgaGVpZ2h0OyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcyA9IGkgKiBsaW5lU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGowID0gaSAqIHdpZHRoMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zIC0gbGluZVNpemVdICE9PSBkYXRhW3Bvc10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbajBdID0gZGF0YVtwb3NdID8gMSA6IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN1bSA9IChkYXRhW3Bvc10gPyA0IDogMCkgKyAoZGF0YVtwb3MgLSBsaW5lU2l6ZV0gPyA4IDogMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCB3aWR0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VtID0gKHN1bSA+PiAyKSArIChkYXRhW3BvcyArIDFdID8gNCA6IDApICsgKGRhdGFbcG9zIC0gbGluZVNpemUgKyAxXSA/IDggOiAwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQT0lOVF9UWVBFU1tzdW1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c1tqMCArIGpdID0gUE9JTlRfVFlQRVNbc3VtXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zIC0gbGluZVNpemVdICE9PSBkYXRhW3Bvc10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbajAgKyBqXSA9IGRhdGFbcG9zXSA/IDIgOiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IFBPSU5UX1RPX1BST0NFU1NfTElNSVQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHBvcyA9IGxpbmVTaXplICogKGhlaWdodCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICBqMCA9IGkgKiB3aWR0aDE7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2owXSA9IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICArK2NvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMTsgaiA8IHdpZHRoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW3Bvc10gIT09IGRhdGFbcG9zICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbajAgKyBqXSA9IGRhdGFbcG9zXSA/IDQgOiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrY291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcysrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFbcG9zXSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW2owICsgal0gPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgKytjb3VudDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IFBPSU5UX1RPX1BST0NFU1NfTElNSVQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXBzID0gbmV3IEludDMyQXJyYXkoWzAsIHdpZHRoMSwgLTEsIDAsIC13aWR0aDEsIDAsIDAsIDAsIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG91dGxpbmVzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgY291bnQgJiYgaSA8PSBoZWlnaHQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBpICogd2lkdGgxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHAgKyB3aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlbmQgJiYgIXBvaW50c1twXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPT09IGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzID0gW3AgJSB3aWR0aDEsIGldO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBwb2ludHNbcF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDAgPSBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSBzdGVwc1t0eXBlXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSBzdGVwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCFwb2ludHNbcF0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHAgPSBwb2ludHNbcF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHAgIT09IDUgJiYgcHAgIT09IDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBwcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzW3BdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gcHAgJiAweDMzICogdHlwZSA+PiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNbcF0gJj0gdHlwZSA+PiAyIHwgdHlwZSA8PCAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHAgJSB3aWR0aDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkcy5wdXNoKHAgLyB3aWR0aDEgfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWNvdW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocDAgIT09IHApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRsaW5lcy5wdXNoKGNvb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAtLWk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgZHJhd091dGxpbmUgPSBmdW5jdGlvbiBkcmF3T3V0bGluZShjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuc2NhbGUoMSAvIHdpZHRoLCAtMSAvIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjLnRyYW5zbGF0ZSgwLCAtaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG91dGxpbmVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IG91dGxpbmVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMubW92ZVRvKG9bMF0sIG9bMV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDIsIGpqID0gby5sZW5ndGg7IGogPCBqajsgaiArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMubGluZVRvKG9bal0sIG9baiArIDFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYy5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkcmF3T3V0bGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2FudmFzRXh0cmFTdGF0ZSA9IGZ1bmN0aW9uIENhbnZhc0V4dHJhU3RhdGVDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDYW52YXNFeHRyYVN0YXRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbHBoYUlzU2hhcGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250U2l6ZVNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dE1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGV4dE1hdHJpeFNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9udE1hdHJpeCA9IF91dGlsLkZPTlRfSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lWCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhclNwYWNpbmcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRIU2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0UmVuZGVyaW5nTW9kZSA9IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTEw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbENvbG9yID0gJyMwMDAwMDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2VDb2xvciA9ICcjMDAwMDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGF0dGVybkZpbGwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbEFscGhhID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Ryb2tlQWxwaGEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVTTWFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VtZVNNYXNrQ3R4ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIENhbnZhc0V4dHJhU3RhdGUucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uIENhbnZhc0V4dHJhU3RhdGVfY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudFBvaW50OiBmdW5jdGlvbiBDYW52YXNFeHRyYVN0YXRlX3NldEN1cnJlbnRQb2ludCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2FudmFzRXh0cmFTdGF0ZTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2FudmFzR3JhcGhpY3MgPSBmdW5jdGlvbiBDYW52YXNHcmFwaGljc0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBFWEVDVVRJT05fVElNRSA9IDE1O1xuICAgICAgICAgICAgICAgICAgICB2YXIgRVhFQ1VUSU9OX1NURVBTID0gMTA7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3MoY2FudmFzQ3R4LCBjb21tb25PYmpzLCBvYmpzLCBjYW52YXNGYWN0b3J5LCB3ZWJHTENvbnRleHQsIGltYWdlTGF5ZXIsIGFubm90YXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IGNhbnZhc0N0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG5ldyBDYW52YXNFeHRyYVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhvYmpzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uT2JqcyA9IGNvbW1vbk9ianM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9ianMgPSBvYmpzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYW52YXNGYWN0b3J5ID0gY2FudmFzRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2ViR0xDb250ZXh0ID0gd2ViR0xDb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyID0gaW1hZ2VMYXllcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBTdGFjayA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlVHJhbnNmb3JtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFza1N0YWNrID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYXNrQ291bnRlciA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZENhbnZhc2VzID0gbmV3IENhY2hlZENhbnZhc2VzKHRoaXMuY2FudmFzRmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW52YXNDdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRDb250ZXh0Q3VycmVudFRyYW5zZm9ybShjYW52YXNDdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHB1dEJpbmFyeUltYWdlRGF0YShjdHgsIGltZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgSW1hZ2VEYXRhICE9PSAndW5kZWZpbmVkJyAmJiBpbWdEYXRhIGluc3RhbmNlb2YgSW1hZ2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGlhbENodW5rSGVpZ2h0ID0gaGVpZ2h0ICUgRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZnVsbENodW5rcyA9IChoZWlnaHQgLSBwYXJ0aWFsQ2h1bmtIZWlnaHQpIC8gRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG90YWxDaHVua3MgPSBwYXJ0aWFsQ2h1bmtIZWlnaHQgPT09IDAgPyBmdWxsQ2h1bmtzIDogZnVsbENodW5rcyArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtJbWdEYXRhID0gY3R4LmNyZWF0ZUltYWdlRGF0YSh3aWR0aCwgRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY1BvcyA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBpbWdEYXRhLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdCA9IGNodW5rSW1nRGF0YS5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGosIHRoaXNDaHVua0hlaWdodCwgZWxlbXNJblRoaXNDaHVuaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltZ0RhdGEua2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY0xlbmd0aCA9IHNyYy5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXN0MzIgPSBuZXcgVWludDMyQXJyYXkoZGVzdC5idWZmZXIsIDAsIGRlc3QuYnl0ZUxlbmd0aCA+PiAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdDMyRGF0YUxlbmd0aCA9IGRlc3QzMi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxTcmNEaWZmID0gd2lkdGggKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdoaXRlID0gMHhGRkZGRkZGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxhY2sgPSBJc0xpdHRsZUVuZGlhbkNhY2hlZC52YWx1ZSA/IDB4RkYwMDAwMDAgOiAweDAwMDAwMEZGO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NodW5rSGVpZ2h0ID0gaSA8IGZ1bGxDaHVua3MgPyBGVUxMX0NIVU5LX0hFSUdIVCA6IHBhcnRpYWxDaHVua0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXNDaHVua0hlaWdodDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JjRGlmZiA9IHNyY0xlbmd0aCAtIHNyY1BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrRW5kID0gc3JjRGlmZiA+IGZ1bGxTcmNEaWZmID8gd2lkdGggOiBzcmNEaWZmICogOCAtIDc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIga0VuZFVucm9sbGVkID0ga0VuZCAmIH43O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNyY0J5dGUgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgayA8IGtFbmRVbnJvbGxlZDsgayArPSA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjQnl0ZSA9IHNyY1tzcmNQb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMTI4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA2NCA/IHdoaXRlIDogYmxhY2s7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdDMyW2Rlc3RQb3MrK10gPSBzcmNCeXRlICYgMzIgPyB3aGl0ZSA6IGJsYWNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QzMltkZXN0UG9zKytdID0gc3JjQnl0ZSAmIDE2ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA4ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiA0ID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAyID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiAxID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IGsgPCBrRW5kOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzayA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNCeXRlID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA9IDEyODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IHNyY0J5dGUgJiBtYXNrID8gd2hpdGUgOiBibGFjaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID4+PSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGRlc3RQb3MgPCBkZXN0MzJEYXRhTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0MzJbZGVzdFBvcysrXSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGNodW5rSW1nRGF0YSwgMCwgaSAqIEZVTExfQ0hVTktfSEVJR0hUKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGltZ0RhdGEua2luZCA9PT0gX3V0aWwuSW1hZ2VLaW5kLlJHQkFfMzJCUFApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtc0luVGhpc0NodW5rID0gd2lkdGggKiBGVUxMX0NIVU5LX0hFSUdIVCAqIDQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZnVsbENodW5rczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUG9zICs9IGVsZW1zSW5UaGlzQ2h1bms7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IHRvdGFsQ2h1bmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1zSW5UaGlzQ2h1bmsgPSB3aWR0aCAqIHBhcnRpYWxDaHVua0hlaWdodCAqIDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Quc2V0KHNyYy5zdWJhcnJheShzcmNQb3MsIHNyY1BvcyArIGVsZW1zSW5UaGlzQ2h1bmspKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1nRGF0YS5raW5kID09PSBfdXRpbC5JbWFnZUtpbmQuUkdCXzI0QlBQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NodW5rSGVpZ2h0ID0gRlVMTF9DSFVOS19IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXNJblRoaXNDaHVuayA9IHdpZHRoICogdGhpc0NodW5rSGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gZnVsbENodW5rcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0NodW5rSGVpZ2h0ID0gcGFydGlhbENodW5rSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbXNJblRoaXNDaHVuayA9IHdpZHRoICogdGhpc0NodW5rSGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gZWxlbXNJblRoaXNDaHVuazsgai0tOykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbZGVzdFBvcysrXSA9IHNyY1tzcmNQb3MrK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RQb3MrK10gPSBzcmNbc3JjUG9zKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFtkZXN0UG9zKytdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShjaHVua0ltZ0RhdGEsIDAsIGkgKiBGVUxMX0NIVU5LX0hFSUdIVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJiYWQgaW1hZ2Uga2luZDogXCIuY29uY2F0KGltZ0RhdGEua2luZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcHV0QmluYXJ5SW1hZ2VNYXNrKGN0eCwgaW1nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0aWFsQ2h1bmtIZWlnaHQgPSBoZWlnaHQgJSBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmdWxsQ2h1bmtzID0gKGhlaWdodCAtIHBhcnRpYWxDaHVua0hlaWdodCkgLyBGVUxMX0NIVU5LX0hFSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3RhbENodW5rcyA9IHBhcnRpYWxDaHVua0hlaWdodCA9PT0gMCA/IGZ1bGxDaHVua3MgOiBmdWxsQ2h1bmtzICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVua0ltZ0RhdGEgPSBjdHguY3JlYXRlSW1hZ2VEYXRhKHdpZHRoLCBGVUxMX0NIVU5LX0hFSUdIVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3JjUG9zID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzcmMgPSBpbWdEYXRhLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdCA9IGNodW5rSW1nRGF0YS5kYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRvdGFsQ2h1bmtzOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGhpc0NodW5rSGVpZ2h0ID0gaSA8IGZ1bGxDaHVua3MgPyBGVUxMX0NIVU5LX0hFSUdIVCA6IHBhcnRpYWxDaHVua0hlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzdFBvcyA9IDM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHRoaXNDaHVua0hlaWdodDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHdpZHRoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtID0gc3JjW3NyY1BvcysrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gMTI4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W2Rlc3RQb3NdID0gZWxlbSAmIG1hc2sgPyAwIDogMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFBvcyArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA+Pj0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5wdXRJbWFnZURhdGEoY2h1bmtJbWdEYXRhLCAwLCBpICogRlVMTF9DSFVOS19IRUlHSFQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29weUN0eFN0YXRlKHNvdXJjZUN0eCwgZGVzdEN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb3BlcnRpZXMgPSBbJ3N0cm9rZVN0eWxlJywgJ2ZpbGxTdHlsZScsICdmaWxsUnVsZScsICdnbG9iYWxBbHBoYScsICdsaW5lV2lkdGgnLCAnbGluZUNhcCcsICdsaW5lSm9pbicsICdtaXRlckxpbWl0JywgJ2dsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbicsICdmb250J107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHByb3BlcnRpZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlQ3R4W3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RDdHhbcHJvcGVydHldID0gc291cmNlQ3R4W3Byb3BlcnR5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VDdHguc2V0TGluZURhc2ggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RDdHguc2V0TGluZURhc2goc291cmNlQ3R4LmdldExpbmVEYXNoKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RDdHgubGluZURhc2hPZmZzZXQgPSBzb3VyY2VDdHgubGluZURhc2hPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZXNldEN0eFRvRGVmYXVsdChjdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9ICcjMDAwMDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAnIzAwMDAwMCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFJ1bGUgPSAnbm9uemVybyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZ2xvYmFsQWxwaGEgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgubGluZUNhcCA9ICdidXR0JztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lSm9pbiA9ICdtaXRlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHgubWl0ZXJMaW1pdCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZm9udCA9ICcxMHB4IHNhbnMtc2VyaWYnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0TGluZURhc2goW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21wb3NlU01hc2tCYWNrZHJvcChieXRlcywgcjAsIGcwLCBiMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IGJ5dGVzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBsZW5ndGg7IGkgKz0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbHBoYSA9IGJ5dGVzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW2kgLSAzXSA9IHIwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tpIC0gMl0gPSBnMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSAtIDFdID0gYjA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhbHBoYSA8IDI1NSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWxwaGFfID0gMjU1IC0gYWxwaGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW2kgLSAzXSA9IGJ5dGVzW2kgLSAzXSAqIGFscGhhICsgcjAgKiBhbHBoYV8gPj4gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSAtIDJdID0gYnl0ZXNbaSAtIDJdICogYWxwaGEgKyBnMCAqIGFscGhhXyA+PiA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tpIC0gMV0gPSBieXRlc1tpIC0gMV0gKiBhbHBoYSArIGIwICogYWxwaGFfID4+IDg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29tcG9zZVNNYXNrQWxwaGEobWFza0RhdGEsIGxheWVyRGF0YSwgdHJhbnNmZXJNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBtYXNrRGF0YS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxIC8gMjU1O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMzsgaSA8IGxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFscGhhID0gdHJhbnNmZXJNYXAgPyB0cmFuc2Zlck1hcFttYXNrRGF0YVtpXV0gOiBtYXNrRGF0YVtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckRhdGFbaV0gPSBsYXllckRhdGFbaV0gKiBhbHBoYSAqIHNjYWxlIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBvc2VTTWFza0x1bWlub3NpdHkobWFza0RhdGEsIGxheWVyRGF0YSwgdHJhbnNmZXJNYXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBtYXNrRGF0YS5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAzOyBpIDwgbGVuZ3RoOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IG1hc2tEYXRhW2kgLSAzXSAqIDc3ICsgbWFza0RhdGFbaSAtIDJdICogMTUyICsgbWFza0RhdGFbaSAtIDFdICogMjg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJEYXRhW2ldID0gdHJhbnNmZXJNYXAgPyBsYXllckRhdGFbaV0gKiB0cmFuc2Zlck1hcFt5ID4+IDhdID4+IDggOiBsYXllckRhdGFbaV0gKiB5ID4+IDE2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZ2VuZXJpY0NvbXBvc2VTTWFzayhtYXNrQ3R4LCBsYXllckN0eCwgd2lkdGgsIGhlaWdodCwgc3VidHlwZSwgYmFja2Ryb3AsIHRyYW5zZmVyTWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFzQmFja2Ryb3AgPSAhIWJhY2tkcm9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIwID0gaGFzQmFja2Ryb3AgPyBiYWNrZHJvcFswXSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZzAgPSBoYXNCYWNrZHJvcCA/IGJhY2tkcm9wWzFdIDogMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiMCA9IGhhc0JhY2tkcm9wID8gYmFja2Ryb3BbMl0gOiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbXBvc2VGbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnR5cGUgPT09ICdMdW1pbm9zaXR5Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VGbiA9IGNvbXBvc2VTTWFza0x1bWlub3NpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VGbiA9IGNvbXBvc2VTTWFza0FscGhhO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgUElYRUxTX1RPX1BST0NFU1MgPSAxMDQ4NTc2O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rU2l6ZSA9IE1hdGgubWluKGhlaWdodCwgTWF0aC5jZWlsKFBJWEVMU19UT19QUk9DRVNTIC8gd2lkdGgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMDsgcm93IDwgaGVpZ2h0OyByb3cgKz0gY2h1bmtTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rSGVpZ2h0ID0gTWF0aC5taW4oY2h1bmtTaXplLCBoZWlnaHQgLSByb3cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrRGF0YSA9IG1hc2tDdHguZ2V0SW1hZ2VEYXRhKDAsIHJvdywgd2lkdGgsIGNodW5rSGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGF5ZXJEYXRhID0gbGF5ZXJDdHguZ2V0SW1hZ2VEYXRhKDAsIHJvdywgd2lkdGgsIGNodW5rSGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNCYWNrZHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlU01hc2tCYWNrZHJvcChtYXNrRGF0YS5kYXRhLCByMCwgZzAsIGIwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlRm4obWFza0RhdGEuZGF0YSwgbGF5ZXJEYXRhLmRhdGEsIHRyYW5zZmVyTWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LnB1dEltYWdlRGF0YShsYXllckRhdGEsIDAsIHJvdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb21wb3NlU01hc2soY3R4LCBzbWFzaywgbGF5ZXJDdHgsIHdlYkdMQ29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2sgPSBzbWFzay5jYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza0N0eCA9IHNtYXNrLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtKHNtYXNrLnNjYWxlWCwgMCwgMCwgc21hc2suc2NhbGVZLCBzbWFzay5vZmZzZXRYLCBzbWFzay5vZmZzZXRZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYWNrZHJvcCA9IHNtYXNrLmJhY2tkcm9wIHx8IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc21hc2sudHJhbnNmZXJNYXAgJiYgd2ViR0xDb250ZXh0LmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wb3NlZCA9IHdlYkdMQ29udGV4dC5jb21wb3NlU01hc2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogbGF5ZXJDdHguY2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrOiBtYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlOiBzbWFzay5zdWJ0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6IGJhY2tkcm9wXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoY29tcG9zZWQsIHNtYXNrLm9mZnNldFgsIHNtYXNrLm9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY0NvbXBvc2VTTWFzayhtYXNrQ3R4LCBsYXllckN0eCwgbWFzay53aWR0aCwgbWFzay5oZWlnaHQsIHNtYXNrLnN1YnR5cGUsIGJhY2tkcm9wLCBzbWFzay50cmFuc2Zlck1hcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKG1hc2ssIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIExJTkVfQ0FQX1NUWUxFUyA9IFsnYnV0dCcsICdyb3VuZCcsICdzcXVhcmUnXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIExJTkVfSk9JTl9TVFlMRVMgPSBbJ21pdGVyJywgJ3JvdW5kJywgJ2JldmVsJ107XG4gICAgICAgICAgICAgICAgICAgIHZhciBOT1JNQUxfQ0xJUCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB2YXIgRU9fQ0xJUCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBDYW52YXNHcmFwaGljcy5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkRyYXdpbmc6IGZ1bmN0aW9uIGJlZ2luRHJhd2luZyhfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybSA9IF9yZWYudHJhbnNmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydCA9IF9yZWYudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYkdHJhbnNwYXJlbmN5ID0gX3JlZi50cmFuc3BhcmVuY3ksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcGFyZW5jeSA9IF9yZWYkdHJhbnNwYXJlbmN5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9yZWYkdHJhbnNwYXJlbmN5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVmJGJhY2tncm91bmQgPSBfcmVmLmJhY2tncm91bmQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQgPSBfcmVmJGJhY2tncm91bmQgPT09IHZvaWQgMCA/IG51bGwgOiBfcmVmJGJhY2tncm91bmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5jdHguY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSB0aGlzLmN0eC5jYW52YXMuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5maWxsU3R5bGUgPSBiYWNrZ3JvdW5kIHx8ICdyZ2IoMjU1LCAyNTUsIDI1NSknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnJlc3RvcmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc3BhcmVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zcGFyZW50Q2FudmFzID0gdGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoJ3RyYW5zcGFyZW50Jywgd2lkdGgsIGhlaWdodCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9zaXRlQ3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNwYXJlbnRDYW52YXMgPSB0cmFuc3BhcmVudENhbnZhcy5jYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdHJhbnNwYXJlbnRDYW52YXMuY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuY29tcG9zaXRlQ3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldEN0eFRvRGVmYXVsdCh0aGlzLmN0eCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCwgdHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHZpZXdwb3J0LnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYXNlVHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybS5zbGljZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlQW5ub0RpbXModGhpcy5hbm5vdGF0aW9ucywgdGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmJlZ2luTGF5b3V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVPcGVyYXRvckxpc3Q6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2V4ZWN1dGVPcGVyYXRvckxpc3Qob3BlcmF0b3JMaXN0LCBleGVjdXRpb25TdGFydElkeCwgY29udGludWVDYWxsYmFjaywgc3RlcHBlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzQXJyYXkgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbkFycmF5ID0gb3BlcmF0b3JMaXN0LmZuQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBleGVjdXRpb25TdGFydElkeCB8fCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzQXJyYXlMZW4gPSBhcmdzQXJyYXkubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3NBcnJheUxlbiA9PT0gaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmtPcGVyYXRpb25zID0gYXJnc0FycmF5TGVuIC0gaSA+IEVYRUNVVElPTl9TVEVQUyAmJiB0eXBlb2YgY29udGludWVDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kVGltZSA9IGNodW5rT3BlcmF0aW9ucyA/IERhdGUubm93KCkgKyBFWEVDVVRJT05fVElNRSA6IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0ZXBzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tbW9uT2JqcyA9IHRoaXMuY29tbW9uT2JqcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2JqcyA9IHRoaXMub2JqcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5JZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGVwcGVyICE9PSB1bmRlZmluZWQgJiYgaSA9PT0gc3RlcHBlci5uZXh0QnJlYWtQb2ludCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcHBlci5icmVha0l0KGksIGNvbnRpbnVlQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbklkID0gZm5BcnJheVtpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm5JZCAhPT0gX3V0aWwuT1BTLmRlcGVuZGVuY3kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNbZm5JZF0uYXBwbHkodGhpcywgYXJnc0FycmF5W2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXBzID0gYXJnc0FycmF5W2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBuID0gMCwgbm4gPSBkZXBzLmxlbmd0aDsgbiA8IG5uOyBuKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVwT2JqSWQgPSBkZXBzW25dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21tb24gPSBkZXBPYmpJZFswXSA9PT0gJ2cnICYmIGRlcE9iaklkWzFdID09PSAnXyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ianNQb29sID0gY29tbW9uID8gY29tbW9uT2JqcyA6IG9ianM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9ianNQb29sLmhhcyhkZXBPYmpJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jqc1Bvb2wuZ2V0KGRlcE9iaklkLCBjb250aW51ZUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBhcmdzQXJyYXlMZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rT3BlcmF0aW9ucyAmJiArK3N0ZXBzID4gRVhFQ1VUSU9OX1NURVBTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZS5ub3coKSA+IGVuZFRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZUNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmREcmF3aW5nOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmREcmF3aW5nKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRTTWFza0dyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudHJhbnNwYXJlbnRDYW52YXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHggPSB0aGlzLmNvbXBvc2l0ZUN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmRyYXdJbWFnZSh0aGlzLnRyYW5zcGFyZW50Q2FudmFzLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zcGFyZW50Q2FudmFzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlZENhbnZhc2VzLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJHTENvbnRleHQuY2xlYXIoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmVuZExheW91dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMaW5lV2lkdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExpbmVXaWR0aCh3aWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMaW5lQ2FwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRMaW5lQ2FwKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZUNhcCA9IExJTkVfQ0FQX1NUWUxFU1tzdHlsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TGluZUpvaW46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExpbmVKb2luKHN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZUpvaW4gPSBMSU5FX0pPSU5fU1RZTEVTW3N0eWxlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRNaXRlckxpbWl0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubWl0ZXJMaW1pdCA9IGxpbWl0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldERhc2g6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldERhc2goZGFzaEFycmF5LCBkYXNoUGhhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LnNldExpbmVEYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNldExpbmVEYXNoKGRhc2hBcnJheSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lRGFzaE9mZnNldCA9IGRhc2hQaGFzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVuZGVyaW5nSW50ZW50OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRSZW5kZXJpbmdJbnRlbnQoaW50ZW50KSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZsYXRuZXNzOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRGbGF0bmVzcyhmbGF0bmVzcykge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRHU3RhdGU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEdTdGF0ZShzdGF0ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdGF0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdGUgPSBzdGF0ZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSBzdGF0ZVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RhdGVbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xXJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xDJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVDYXAodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMSic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ01MJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE1pdGVyTGltaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdEJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhc2godmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnUkknOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVuZGVyaW5nSW50ZW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnRkwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmxhdG5lc3ModmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZvbnQodmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQ0EnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5zdHJva2VBbHBoYSA9IHN0YXRlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjYSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxBbHBoYSA9IHN0YXRlWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lmdsb2JhbEFscGhhID0gc3RhdGVbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0JNJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnU01hc2snOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVTdGFjay5sZW5ndGggPiAwICYmIHRoaXMuc3RhdGVTdGFja1t0aGlzLnN0YXRlU3RhY2subGVuZ3RoIC0gMV0uYWN0aXZlU01hc2sgPT09IHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdXNwZW5kU01hc2tHcm91cCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRTTWFza0dyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSB2YWx1ZSA/IHRoaXMudGVtcFNNYXNrIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpblNNYXNrR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5TTWFza0dyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpblNNYXNrR3JvdXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZVNNYXNrID0gdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3bldpZHRoID0gYWN0aXZlU01hc2suY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3bkhlaWdodCA9IGFjdGl2ZVNNYXNrLmNhbnZhcy5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlSWQgPSAnc21hc2tHcm91cEF0JyArIHRoaXMuZ3JvdXBMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NyYXRjaENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGNhY2hlSWQsIGRyYXduV2lkdGgsIGRyYXduSGVpZ2h0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudEN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VHJhbnNmb3JtID0gY3VycmVudEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBDdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHguc2NhbGUoMSAvIGFjdGl2ZVNNYXNrLnNjYWxlWCwgMSAvIGFjdGl2ZVNNYXNrLnNjYWxlWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHgudHJhbnNsYXRlKC1hY3RpdmVTTWFzay5vZmZzZXRYLCAtYWN0aXZlU01hc2sub2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHgudHJhbnNmb3JtLmFwcGx5KGdyb3VwQ3R4LCBjdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVTTWFzay5zdGFydFRyYW5zZm9ybUludmVyc2UgPSBncm91cEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5Q3R4U3RhdGUoY3VycmVudEN0eCwgZ3JvdXBDdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gZ3JvdXBDdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRHU3RhdGUoW1snQk0nLCAnc291cmNlLW92ZXInXSwgWydjYScsIDFdLCBbJ0NBJywgMV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwU3RhY2sucHVzaChjdXJyZW50Q3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzdXNwZW5kU01hc2tHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kU01hc2tHcm91cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuZ3JvdXBTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlU01hc2sodGhpcy5jdHgsIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaywgZ3JvdXBDdHgsIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlDdHhTdGF0ZShncm91cEN0eCwgdGhpcy5jdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCA9IGdyb3VwQ3R4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhVHJhbnNmb3JtID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0odGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLnN0YXJ0VHJhbnNmb3JtSW52ZXJzZSwgZ3JvdXBDdHgubW96Q3VycmVudFRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIGRlbHRhVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cEN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHguc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ3R4LmNsZWFyUmVjdCgwLCAwLCBncm91cEN0eC5jYW52YXMud2lkdGgsIGdyb3VwQ3R4LmNhbnZhcy5oZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bWVTTWFza0dyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRTTWFza0dyb3VwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cEN0eCA9IHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudEN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gZ3JvdXBDdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cFN0YWNrLnB1c2goY3VycmVudEN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cExldmVsKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kU01hc2tHcm91cDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kU01hc2tHcm91cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBDdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IHRoaXMuZ3JvdXBTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlU01hc2sodGhpcy5jdHgsIHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaywgZ3JvdXBDdHgsIHRoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weUN0eFN0YXRlKGdyb3VwQ3R4LCB0aGlzLmN0eCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFUcmFuc2Zvcm0gPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2suc3RhcnRUcmFuc2Zvcm1JbnZlcnNlLCBncm91cEN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCwgZGVsdGFUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NhdmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVN0YWNrLnB1c2gob2xkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBvbGQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQucmVzdW1lU01hc2tDdHggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3Jlc3RvcmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VtZVNNYXNrR3JvdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrICE9PSBudWxsICYmICh0aGlzLnN0YXRlU3RhY2subGVuZ3RoID09PSAwIHx8IHRoaXMuc3RhdGVTdGFja1t0aGlzLnN0YXRlU3RhY2subGVuZ3RoIC0gMV0uYWN0aXZlU01hc2sgIT09IHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRTTWFza0dyb3VwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVTdGFjay5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5zdGF0ZVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc190cmFuc2Zvcm0oYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zZm9ybShhLCBiLCBjLCBkLCBlLCBmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RQYXRoOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jb25zdHJ1Y3RQYXRoKG9wcywgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IGN1cnJlbnQueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGN1cnJlbnQueTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBqID0gMCwgaWkgPSBvcHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wc1tpXSB8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnJlY3RhbmdsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBhcmdzW2orK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGVpZ2h0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCA9IHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeWggPSB5ICsgaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lVG8oeHcsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4dywgeWgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyh4LCB5aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgubGluZVRvKHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGFyZ3NbaisrXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5tb3ZlVG8oeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmxpbmVUbzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVUbyh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqICsgNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGFyZ3NbaiArIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZXppZXJDdXJ2ZVRvKGFyZ3Nbal0sIGFyZ3NbaiArIDFdLCBhcmdzW2ogKyAyXSwgYXJnc1tqICsgM10sIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY3VydmVUbzI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oeCwgeSwgYXJnc1tqXSwgYXJnc1tqICsgMV0sIGFyZ3NbaiArIDJdLCBhcmdzW2ogKyAzXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqICs9IDQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8zOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBhcmdzW2ogKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oYXJnc1tqXSwgYXJnc1tqICsgMV0sIHgsIHksIHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc2V0Q3VycmVudFBvaW50KHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlUGF0aDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfY2xvc2VQYXRoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc3Ryb2tlKGNvbnN1bWVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVBhdGggPSB0eXBlb2YgY29uc3VtZVBhdGggIT09ICd1bmRlZmluZWQnID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Ryb2tlQ29sb3IgPSB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmxpbmVXaWR0aCA9IE1hdGgubWF4KHRoaXMuZ2V0U2luZ2xlUGl4ZWxXaWR0aCgpICogTUlOX1dJRFRIX0ZBQ1RPUiwgdGhpcy5jdXJyZW50LmxpbmVXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmdsb2JhbEFscGhhID0gdGhpcy5jdXJyZW50LnN0cm9rZUFscGhhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm9rZUNvbG9yICYmIHN0cm9rZUNvbG9yLmhhc093blByb3BlcnR5KCd0eXBlJykgJiYgc3Ryb2tlQ29sb3IudHlwZSA9PT0gJ1BhdHRlcm4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VTdHlsZSA9IHN0cm9rZUNvbG9yLmdldFBhdHRlcm4oY3R4LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5nbG9iYWxBbHBoYSA9IHRoaXMuY3VycmVudC5maWxsQWxwaGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VTdHJva2U6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2Nsb3NlU3Ryb2tlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19maWxsKGNvbnN1bWVQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVBhdGggPSB0eXBlb2YgY29uc3VtZVBhdGggIT09ICd1bmRlZmluZWQnID8gY29uc3VtZVBhdGggOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmVlZFJlc3RvcmUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1BhdHRlcm5GaWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNldFRyYW5zZm9ybS5hcHBseShjdHgsIHRoaXMuYmFzZVRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFN0eWxlID0gZmlsbENvbG9yLmdldFBhdHRlcm4oY3R4LCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFJlc3RvcmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdFT0ZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGwoJ2V2ZW5vZGQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZFJlc3RvcmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3VtZVBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlb0ZpbGw6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VvRmlsbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdFT0ZpbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHJva2U6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cm9rZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVvRmlsbFN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW9GaWxsU3Ryb2tlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0VPRmlsbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VGaWxsU3Ryb2tlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19jbG9zZUZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZUVPRmlsbFN0cm9rZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfY2xvc2VFT0ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBhdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZFBhdGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2NsaXAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IE5PUk1BTF9DTElQO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVvQ2xpcDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW9DbGlwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBFT19DTElQO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfYmVnaW5UZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kVGV4dCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aHMgPSB0aGlzLnBlbmRpbmdUZXh0UGF0aHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGhzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXRoID0gcGF0aHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXRoLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUocGF0aC54LCBwYXRoLnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLmFkZFRvUGF0aChjdHgsIHBhdGguZm9udFNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmNsaXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguYmVnaW5QYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMucGVuZGluZ1RleHRQYXRocztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRDaGFyU3BhY2luZzogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhclNwYWNpbmcoc3BhY2luZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5jaGFyU3BhY2luZyA9IHNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0V29yZFNwYWNpbmc6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFdvcmRTcGFjaW5nKHNwYWNpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQud29yZFNwYWNpbmcgPSBzcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhTY2FsZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0SFNjYWxlKHNjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRIU2NhbGUgPSBzY2FsZSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMZWFkaW5nOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRMZWFkaW5nKGxlYWRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC1sZWFkaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvbnQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZvbnQoZm9udFJlZk5hbWUsIHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE9iaiA9IHRoaXMuY29tbW9uT2Jqcy5nZXQoZm9udFJlZk5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb250T2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbid0IGZpbmQgZm9udCBmb3IgXCIuY29uY2F0KGZvbnRSZWZOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5mb250TWF0cml4ID0gZm9udE9iai5mb250TWF0cml4ID8gZm9udE9iai5mb250TWF0cml4IDogX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5mb250TWF0cml4WzBdID09PSAwIHx8IGN1cnJlbnQuZm9udE1hdHJpeFszXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0ludmFsaWQgZm9udCBtYXRyaXggZm9yIGZvbnQgJyArIGZvbnRSZWZOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2l6ZSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IC1zaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5mb250ID0gZm9udE9iajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZm9udFNpemUgPSBzaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRPYmouaXNUeXBlM0ZvbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0gZm9udE9iai5sb2FkZWROYW1lIHx8ICdzYW5zLXNlcmlmJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm9sZCA9IGZvbnRPYmouYmxhY2sgPyAnOTAwJyA6IGZvbnRPYmouYm9sZCA/ICdib2xkJyA6ICdub3JtYWwnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGFsaWMgPSBmb250T2JqLml0YWxpYyA/ICdpdGFsaWMnIDogJ25vcm1hbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGVmYWNlID0gXCJcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIiwgXCIpLmNvbmNhdChmb250T2JqLmZhbGxiYWNrTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJyb3dzZXJGb250U2l6ZSA9IHNpemUgPCBNSU5fRk9OVF9TSVpFID8gTUlOX0ZPTlRfU0laRSA6IHNpemUgPiBNQVhfRk9OVF9TSVpFID8gTUFYX0ZPTlRfU0laRSA6IHNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZvbnRTaXplU2NhbGUgPSBzaXplIC8gYnJvd3NlckZvbnRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZvbnQgPSBcIlwiLmNvbmNhdChpdGFsaWMsIFwiIFwiKS5jb25jYXQoYm9sZCwgXCIgXCIpLmNvbmNhdChicm93c2VyRm9udFNpemUsIFwicHggXCIpLmNvbmNhdCh0eXBlZmFjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFRleHRSZW5kZXJpbmdNb2RlKG1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgPSBtb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRleHRSaXNlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRUZXh0UmlzZShyaXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRSaXNlID0gcmlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfbW92ZVRleHQoeCwgeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC54ID0gdGhpcy5jdXJyZW50LmxpbmVYICs9IHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnkgPSB0aGlzLmN1cnJlbnQubGluZVkgKz0geTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMZWFkaW5nTW92ZVRleHQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldExlYWRpbmdNb3ZlVGV4dCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nKC15KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0KHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRleHRNYXRyaXg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldFRleHRNYXRyaXgoYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGUgPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnggPSB0aGlzLmN1cnJlbnQubGluZVggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGluZTogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfbmV4dExpbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlVGV4dCgwLCB0aGlzLmN1cnJlbnQubGVhZGluZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiogQ29tcHV0ZSB0aGUgY29vcmRpbmF0ZXMgYW5kIHdpZHRoIG9mIHRoZSBjaGFyYWN0ZXIgZ2l2ZW4gaXRzIHdpZHRoIGFuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICogeC1vZmZzZXQgaW4gZm9udCBzcGFjZSwgYSBmb250IG9iamVjdCwgYW5kIGEgbWF0cml4IHVzZWQgZm9yIHRyYW5zZm9ybWluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICogZnJvbSBmb250IHNwYWNlIHRvIGRldmljZSBzcGFjZS4gUmV0dXJucyBhbiBvYmplY3Qgd2l0aCB0aGUgY2hhcmFjdGVyJ3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHgsIHksIGFuZCB3aWR0aCBwcm9wZXJ0aWVzLCBhbmQgdGhlIHdpZHRoIG9mIGEgc3BhY2UgaW4gdGhlIGdpdmVuIGZvbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBhbGwgaW4gZGV2aWNlIHNwYWNlLlxuICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWtlQ2hhckRpbXM6IGZ1bmN0aW9uIGNhbnZhc01ha2VDaGFyRGltcyhjaGFyV2lkdGgsIHhPZmZzZXQsIHNwYWNlV2lkdGgsIGZvbnQyZGV2KSB7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbihwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4dCwgeXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFwcGx5VHJhbnNmb3JtWCA9IGZ1bmN0aW9uKHAsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4eSA9IGFwcGx5VHJhbnNmb3JtKFt4T2Zmc2V0LCAwXSwgZm9udDJkZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gYXBwbHlUcmFuc2Zvcm1YKFt4T2Zmc2V0ICsgY2hhcldpZHRoLCAwXSwgZm9udDJkZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaW1zID0ge3g6IHh5WzBdLCB5OiB4eVsxXX07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltcy53aWR0aCA9IE1hdGguYWJzKHh5WzBdIC0gdyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltcy5zcGFjZVdpZHRoID0gc3BhY2VXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1zLnhQbHVzSGFsZldpZHRoID0gZGltcy54ICsgKDAuNSAqIGRpbXMud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkaW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBDb21wdXRlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcXVhZHBvaW50cyBnaXZlbiBpdHMgdGhlIGFubm90YXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiBhbmQgYSBtYXRyaXggdXNlZCBmb3IgdHJhbnNmb3JtaW5nIGZyb20gZm9udCBzcGFjZSB0byBkZXZpY2Ugc3BhY2UuICovXG4gICAgICAgICAgICAgICAgICAgICAgICBtYWtlQW5ub0RpbXM6IGZ1bmN0aW9uIGNhbnZhc01ha2VBbm5vRGltcyhhbm5vdGF0aW9ucywgdXNlcjJkZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFubm90YXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdCA9IGFubm90YXRpb25zW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFubm90LnN1YnR5cGUgfHwgKGFubm90LnN1YnR5cGUgIT0gJ0hpZ2hsaWdodCcgJiYgYW5ub3Quc3VidHlwZSAhPSAnVW5kZXJsaW5lJykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFubm90LnF1YWRQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcHBseVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHl0ID0gcFswXSAqIG1bMV0gKyBwWzFdICogbVszXSArIG1bNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4dCwgeXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWQgPSBhbm5vdC5xdWFkUG9pbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF4eTAgPSBhcHBseVRyYW5zZm9ybShbcXVhZC54LCBxdWFkLnldLCB1c2VyMmRldik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhZE90aGVyQ29ybmVyID0gW3F1YWQueCArIHF1YWQud2lkdGgsIHF1YWQueSArIHF1YWQuaGVpZ2h0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxeHkxID0gYXBwbHlUcmFuc2Zvcm0ocXVhZE90aGVyQ29ybmVyLCB1c2VyMmRldik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5xdWFkUG9pbnRzW2ldLmRpbXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21pblgnOiBNYXRoLm1pbihxeHkwWzBdLCBxeHkxWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4WCc6IE1hdGgubWF4KHF4eTBbMF0sIHF4eTFbMF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaW5ZJzogTWF0aC5taW4ocXh5MFsxXSwgcXh5MVsxXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21heFknOiBNYXRoLm1heChxeHkwWzFdLCBxeHkxWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBEZXRlcm1pbmVzIGlmIGNoYXJhY3Rlciwgd2l0aCB0aGUgZ2l2ZW4gZGltZW5zaW9ucywgZmFsbHMgd2l0aGluIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogYm91bmRzIG9mIGFubm90YXRpb24gYW5ub3QuIElmIHNvLCByZXR1cm5zIHRoZSAwLWJhc2VkIGluZGV4IG9mIHRoZSBxdWFkXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiByZWdpb24gd2l0aGluIHdoaWNoIHRoZSBjaGFyYWN0ZXIgZmFsbHMuIElmIHRoZSBjaGFyYWN0ZXIgaXMgb3V0c2lkZSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIGFubm90YXRpb24sIHJldHVybnMgLTEuICovXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFySW5Bbm5vdDogZnVuY3Rpb24gY2FudmFzQ2hhckluQW5ub3QoYW5ub3QsIGNkaW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbm5vdC5zdWJ0eXBlIHx8IChhbm5vdC5zdWJ0eXBlICE9ICdIaWdobGlnaHQnICYmIGFubm90LnN1YnR5cGUgIT0gJ1VuZGVybGluZScpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YgYW5ub3QucXVhZFBvaW50cyA9PSAndW5kZWZpbmVkJykgcmV0dXJuIC0xO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbm5vdC5xdWFkUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxZGltcyA9IGFubm90LnF1YWRQb2ludHNbaV0uZGltcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBncmFiIGNoYXJhY3RlcnMgd2hlcmUgNTAlIG9mIHRoZSBjaGFyYWN0ZXInc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWR0aCBsaWVzIHdpdGhpbiB0aGUgYW5ub3RhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2RpbXMueFBsdXNIYWxmV2lkdGggPj0gcWRpbXMubWluWCAmJiBjZGltcy54UGx1c0hhbGZXaWR0aCA8PSBxZGltcy5tYXhYICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGltcy55ID49cWRpbXMubWluWSAmJiBjZGltcy55IDw9IHFkaW1zLm1heFkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiogZ2V0IGxhc3QgY2hhciAoYS16IG9yIGRpZ2l0cykgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldExhc3RBWkNoYXI6IGZ1bmN0aW9uIGNhbnZhc0dyYXBoaWNzR2V0TGFzdEFaQ2hhciAoYW5ub3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdENoYXIsIGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGMgPSBhbm5vdC5jaGFycy5sZW5ndGgtMTsgYyA+PSAwOyBjLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBhbm5vdC5jaGFyc1tjXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL15bXFx3XSokLy50ZXN0KGNoLmNoYXJhY3RlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gY2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RDaGFyKSBsYXN0Q2hhciA9IGFubm90LmNoYXJzLnNsaWNlKC0xKVswXTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBVcGRhdGUgdGhlIG1hcmt1cCBhcnJheSBmb3IgYW5ub3QsIHBsYWNpbmcgdGhlIGdpdmVuIGNoYXJhY3RlciBpbnRvIHRoZVxuICAgICAgICAgICAgICAgICAgICAgICAgICogc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gcXVhZC4gKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU1hcmt1cDogZnVuY3Rpb24gY2FudmFzR3JhcGhpY3NVcGRhdGVNYXJrdXAoYW5ub3QsIHF1YWQsIGdseXBoLCBjaGFyRGltcywgaXNTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFkIDwgMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IGdseXBoLnN0cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckluZm8gPSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXIsIG1hcmt1cEVuZCwgbGFzdENoYXJTcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjaGFyYWN0ZXI9PT11bmRlZmluZWQgfHwgKCFhbm5vdC5tYXJrdXAgJiYgY2hhcmFjdGVyPT0nICcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjaGFyYWN0ZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hhciBkZXRhaWxzIGZvciBkZWJ1Z2dpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFySW5mby5nbHlwaCA9IGdseXBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJJbmZvLmNoYXJEaW1zID0gY2hhckRpbXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckluZm8uaXNTcGFjZSA9IGlzU3BhY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHRvIGFubm90YXRpb24gb2JqZWN0XG5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYW5ub3QubWFya3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90Lm1hcmt1cCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBHZW9tID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LmNoYXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LnNwYWNlcyA9IHsnbic6MCwgJ3N1bVdpZHRoJzowfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhbm5vdC5tYXJrdXBbcXVhZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5ub3QubWFya3VwR2VvbVtxdWFkXS5icnggZW5zdXJlcyB0aGF0IG9ubHkgY2hhcmFjdGVycyBhcmUgYWRkZWQgdGhhdCBhcmUgcmlnaHQgb2YgdGhlIGZpcnN0IG9uZSBpbiBhbm5vdGF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90Lm1hcmt1cEdlb21bcXVhZF0gPSB7YnJ4OiBjaGFyRGltcy54ICsgY2hhckRpbXMud2lkdGh9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBbcXVhZF0gPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJJbmZvLmNoYXJhY3RlciA9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QuY2hhcnMucHVzaChjaGFySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya3VwRW5kID0gYW5ub3QubWFya3VwW3F1YWRdLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyU3BhY2UgPSAoYW5ub3QubWFya3VwW3F1YWRdLmNoYXJBdChtYXJrdXBFbmQpID09ICcgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGUgZG91YmxlIHNwYWNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNTcGFjZSAmJiBsYXN0Q2hhclNwYWNlKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4Y2x1ZGUgcHJldmlvdXMgc3BhY2UgaWYgaXQgaXMgZnVydGhlciByaWdodCB0aGVuIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gYW5ub3QuY2hhcnMuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihhbm5vdC5jaGFycy5sZW5ndGggPiAxICYmICFpc1NwYWNlICYmIGxhc3RDaGFyU3BhY2UgJiYgdHlwZW9mIGxhc3RDaGFyLmNoYXJEaW1zLnggIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Q2hhci5jaGFyRGltcy54LyotY2hhckRpbXMuc3BhY2VXaWR0aCovPmNoYXJEaW1zLngrY2hhckRpbXMuc3BhY2VXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobGFzdENoYXIuaXNTcGFjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBbcXVhZF0gPSBhbm5vdC5tYXJrdXBbcXVhZF0uc3Vic3RyaW5nKDAsIG1hcmt1cEVuZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5jaGFycyA9IGFubm90LmNoYXJzLnNwbGljZSgwLGFubm90LmNoYXJzLmxlbmd0aC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gYW5ub3QuY2hhcnMuc2xpY2UoLTIpWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QubWFya3VwR2VvbVtxdWFkXS5icnggPSBsYXN0Q2hhci5jaGFyRGltcy54ICsgbGFzdENoYXIuY2hhckRpbXMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXNldCBtYXJrdXBFbmQgYW5kIGxhc3RDaGFyU3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmt1cEVuZCA9IGFubm90Lm1hcmt1cFtxdWFkXS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXJTcGFjZSA9IChhbm5vdC5tYXJrdXBbcXVhZF0uY2hhckF0KG1hcmt1cEVuZCkgPT0gJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluc2VydCBzcGFjZSBpZiAuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyIHNwYWNlV2lkdGggPSBjaGFyRGltcy5zcGFjZVdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2VXaWR0aCA9IGFubm90LnNwYWNlcy5uPjAgPyBhbm5vdC5zcGFjZXMuc3VtV2lkdGgvYW5ub3Quc3BhY2VzLm4gOiBjaGFyRGltcy5zcGFjZVdpZHRoKjAuODU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZSAmJiAhbGFzdENoYXJTcGFjZSAmJiAoY2hhckRpbXMuc3BhY2VXaWR0aCAhPT0gMCB8fCAvXltcXHUyMDFDXFwoXSokLy50ZXN0KGNoYXJhY3RlcikgKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhckRpbXMueCA+IGFubm90Lm1hcmt1cEdlb21bcXVhZF0uYnJ4ICsgc3BhY2VXaWR0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBjaGFyIChhLXogb3IgZGlnaXRzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdENoYXIgPSB0aGlzLmdldExhc3RBWkNoYXIoYW5ub3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IGFkZCAnbWluaScgb3IgY29tcGFyYXRpdmVseSBzbWFsbCBzcGFjZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGNoYXJEaW1zLnggLSBhbm5vdC5tYXJrdXBHZW9tW3F1YWRdLmJyeCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVNpemUgPSB3aWR0aC9sYXN0Q2hhci5jaGFyRGltcy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5pU3BhY2UgPSByZWxhdGl2ZVNpemU8MC4xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsU3BhY2UgPSBhbm5vdC5zcGFjZXMubj4wID8gd2lkdGgvKGFubm90LnNwYWNlcy5zdW1XaWR0aC9hbm5vdC5zcGFjZXMubik8MC4zIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighbWluaVNwYWNlICYmICFzbWFsbFNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QubWFya3VwW3F1YWRdICs9ICcgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFySW5mby5jaGFyYWN0ZXIgPSAnICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QuY2hhcnMucHVzaChjaGFySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgY3VycmVudCBjaGFyYWN0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKCFpc1NwYWNlICYmIGFubm90Lm1hcmt1cEdlb21bcXVhZF0uYnJ4IDwgY2hhckRpbXMueCArIGNoYXJEaW1zLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTcGFjZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhbm5vdC5tYXJrdXBHZW9tW3F1YWRdLmJyeCA8IGNoYXJEaW1zLnggKyBjaGFyRGltcy53aWR0aCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcmFjdGVyPT0nICcgJiYgYW5ub3QubWFya3VwR2VvbVtxdWFkXS5icnggPCBjaGFyRGltcy54ICsgbGFzdENoYXIuY2hhckRpbXMud2lkdGgpKSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBHZW9tW3F1YWRdLmJyeCA9IGNoYXJEaW1zLnggKyBjaGFyRGltcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFubm90Lm1hcmt1cEdlb21bcXVhZF0uYnJ4ID0gKGNoYXJhY3Rlcj09PScgJyB8fCBpc1NwYWNlKSA/IChjaGFyRGltcy54ICsgY2hhckRpbXMuc3BhY2VXaWR0aCkgOiAoY2hhckRpbXMueCArIGNoYXJEaW1zLndpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90Lm1hcmt1cFtxdWFkXSArPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFySW5mby5jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5jaGFycy5wdXNoKGNoYXJJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNoYXJhY3Rlcj09PScgJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LnNwYWNlcy5zdW1XaWR0aCA9IGFubm90LnNwYWNlcy5zdW1XaWR0aCArIGNoYXJEaW1zLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LnNwYWNlcy5uKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWRkIHNwYWNlIGJ1dCBleGNsdWRlIG1pbmkgc3BhY2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1NwYWNlICYmIChhbm5vdC5tYXJrdXBHZW9tW3F1YWRdLmJyeCA8IGNoYXJEaW1zLnggKyBsYXN0Q2hhci5jaGFyRGltcy53aWR0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJJbmZvLmNoYXJhY3RlciA9IGNoYXJhY3RlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhc3QgY2hhciAoYS16IG9yIGRpZ2l0cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RDaGFyID0gdGhpcy5nZXRMYXN0QVpDaGFyKGFubm90KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBhZGQgJ21pbmknIHNwYWNlcyB0aGF0IGFyZSBiZXR3ZWVuIHRvIGNoYXJhY3RlcnMgb2Ygb25lIHdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZVNpemUgPSBjaGFyRGltcy53aWR0aC9sYXN0Q2hhci5jaGFyRGltcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlbGF0aXZlU2l6ZTwwLjIpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhjbHVkZSBzcGFjZXMgdGhhdCBhcmUgc21hbGwgY29tcHJlZCB0byBvdGhlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbm5vdC5zcGFjZXMubj4wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF2ZyA9IGFubm90LnNwYWNlcy5zdW1XaWR0aC9hbm5vdC5zcGFjZXMubjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjaGFyRGltcy53aWR0aC9hdmc8MC4zKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5zcGFjZXMuc3VtV2lkdGggPSBhbm5vdC5zcGFjZXMuc3VtV2lkdGggKyBjaGFyRGltcy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm90LnNwYWNlcy5uKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QubWFya3VwR2VvbVtxdWFkXS5icnggPSBjaGFyRGltcy54ICsgY2hhckRpbXMud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdC5tYXJrdXBbcXVhZF0gKz0gY2hhcmFjdGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5ub3QuY2hhcnMucHVzaChjaGFySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWludENoYXI6IGZ1bmN0aW9uIHBhaW50Q2hhcihjaGFyYWN0ZXIsIHgsIHksIHBhdHRlcm5UcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRSZW5kZXJpbmdNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udFNpemUgPSBjdXJyZW50LmZvbnRTaXplIC8gY3VycmVudC5mb250U2l6ZVNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsU3Ryb2tlTW9kZSA9IHRleHRSZW5kZXJpbmdNb2RlICYgX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNBZGRUb1BhdGhTZXQgPSAhISh0ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuRmlsbCA9IGN1cnJlbnQucGF0dGVybkZpbGwgJiYgZm9udC5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGRUb1BhdGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC5kaXNhYmxlRm9udEZhY2UgfHwgaXNBZGRUb1BhdGhTZXQgfHwgcGF0dGVybkZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9QYXRoID0gZm9udC5nZXRQYXRoR2VuZXJhdG9yKHRoaXMuY29tbW9uT2JqcywgY2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC5kaXNhYmxlRm9udEZhY2UgfHwgcGF0dGVybkZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZSh4LCB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRUb1BhdGgoY3R4LCBmb250U2l6ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTCB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxUZXh0KGNoYXJhY3RlciwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zdHJva2VUZXh0KGNoYXJhY3RlciwgeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBZGRUb1BhdGhTZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdGhzID0gdGhpcy5wZW5kaW5nVGV4dFBhdGhzIHx8ICh0aGlzLnBlbmRpbmdUZXh0UGF0aHMgPSBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtOiBjdHgubW96Q3VycmVudFRyYW5zZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiB5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFNpemU6IGZvbnRTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkVG9QYXRoOiBhZGRUb1BhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGlzRm9udFN1YnBpeGVsQUFFbmFibGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmNhbnZhc0ZhY3RvcnkuY3JlYXRlKDEwLCAxMCkuY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMS41LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZmlsbFRleHQoJ0knLCAwLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIDEwLCAxMCkuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5hYmxlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDM7IGkgPCBkYXRhLmxlbmd0aDsgaSArPSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhW2ldID4gMCAmJiBkYXRhW2ldIDwgMjU1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5zaGFkb3cpKHRoaXMsICdpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCcsIGVuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RleHQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3Nob3dUZXh0KGdseXBocykge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9udC5pc1R5cGUzRm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93VHlwZTNUZXh0KGdseXBocyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250U2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250U2l6ZVNjYWxlID0gY3VycmVudC5mb250U2l6ZVNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyU3BhY2luZyA9IGN1cnJlbnQuY2hhclNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdvcmRTcGFjaW5nID0gY3VycmVudC53b3JkU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2VXaWR0aCA9IGZvbnQuY29kZWQgPyBmb250LnNwYWNlV2lkdGggOiBmb250LnNwYWNlV2lkdGggKiAwLjAwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dEhTY2FsZSA9IGN1cnJlbnQudGV4dEhTY2FsZSAqIGZvbnREaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoc0xlbmd0aCA9IGdseXBocy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2luZ0RpciA9IHZlcnRpY2FsID8gMSA6IC0xO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZhdWx0Vk1ldHJpY3MgPSBmb250LmRlZmF1bHRWTWV0cmljcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhBZHZhbmNlU2NhbGUgPSBmb250U2l6ZSAqIGN1cnJlbnQuZm9udE1hdHJpeFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2ltcGxlRmlsbFRleHQgPSBjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMICYmICFmb250LmRpc2FibGVGb250RmFjZSAmJiAhY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuVHJhbnNmb3JtO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN3LCBzcGFjZVdpZHRoUHJvaiwgZm9udDJkZXYgPSBbXTtcblxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucGF0dGVybkZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSBjdXJyZW50LmZpbGxDb2xvci5nZXRQYXR0ZXJuKGN0eCwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm0gPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZpbGxTdHlsZSA9IHBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGN1cnJlbnQudGV4dE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSArIGN1cnJlbnQudGV4dFJpc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDJkZXYgPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybS5zbGljZSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcHBseVRyYW5zZm9ybVggPSBmdW5jdGlvbihwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2plY3RlZCBzcGFjZVdpZHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3cgPSBhcHBseVRyYW5zZm9ybVgoW3NwYWNlV2lkdGgsMF0sIGZvbnQyZGV2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiB3aHkgMi4wPyBJIGNoYW5nZWQgaXQgdG8gM1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRpbXMuc3BhY2VXaWR0aCA9IChzd1swXSAtIGZvbnQyZGV2WzRdKSAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZVdpZHRoUHJvaiA9IChzdyAtIGZvbnQyZGV2WzRdKSAvIDMuMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250RGlyZWN0aW9uID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUodGV4dEhTY2FsZSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zY2FsZSh0ZXh0SFNjYWxlLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluZVdpZHRoID0gY3VycmVudC5saW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gY3VycmVudC50ZXh0TWF0cml4U2NhbGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NhbGUgPT09IDAgfHwgbGluZVdpZHRoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsU3Ryb2tlTW9kZSA9IGN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGUgJiBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGggPSB0aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKSAqIE1JTl9XSURUSF9GQUNUT1I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lV2lkdGggLz0gc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRTaXplU2NhbGUgIT09IDEuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoZm9udFNpemVTY2FsZSwgZm9udFNpemVTY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVXaWR0aCAvPSBmb250U2l6ZVNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGdseXBoc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnbHlwaCA9IGdseXBoc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggKz0gc3BhY2luZ0RpciAqIGdseXBoICogZm9udFNpemUgLyAxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG9yZU5lZWRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2luZyA9IChnbHlwaC5pc1NwYWNlID8gd29yZFNwYWNpbmcgOiAwKSArIGNoYXJTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVyID0gZ2x5cGguZm9udENoYXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhY2NlbnQgPSBnbHlwaC5hY2NlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZWRYLCBzY2FsZWRZLCBzY2FsZWRBY2NlbnRYLCBzY2FsZWRBY2NlbnRZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBnbHlwaC53aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2bWV0cmljLCB2eCwgdnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bWV0cmljID0gZ2x5cGgudm1ldHJpYyB8fCBkZWZhdWx0Vk1ldHJpY3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2eCA9IGdseXBoLnZtZXRyaWMgPyB2bWV0cmljWzFdIDogd2lkdGggKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2eCA9IC12eCAqIHdpZHRoQWR2YW5jZVNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnkgPSB2bWV0cmljWzJdICogd2lkdGhBZHZhbmNlU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHZtZXRyaWMgPyAtdm1ldHJpY1swXSA6IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkWCA9IHZ4IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZFkgPSAoeCArIHZ5KSAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRYID0geCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250LnJlbWVhc3VyZSAmJiB3aWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWFzdXJlZFdpZHRoID0gY3R4Lm1lYXN1cmVUZXh0KGNoYXJhY3Rlcikud2lkdGggKiAxMDAwIC8gZm9udFNpemUgKiBmb250U2l6ZVNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGggPCBtZWFzdXJlZFdpZHRoICYmIHRoaXMuaXNGb250U3VicGl4ZWxBQUVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcmFjdGVyU2NhbGVYID0gd2lkdGggLyBtZWFzdXJlZFdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RvcmVOZWVkZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKGNoYXJhY3RlclNjYWxlWCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkWCAvPSBjaGFyYWN0ZXJTY2FsZVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpZHRoICE9PSBtZWFzdXJlZFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkWCArPSAod2lkdGggLSBtZWFzdXJlZFdpZHRoKSAvIDIwMDAgKiBmb250U2l6ZSAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2x5cGggaXMgd2l0aGluIGFuIGFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyRGltcyA9IHRoaXMubWFrZUNoYXJEaW1zKHdpZHRoICogZm9udFNpemUgKiBjdXJyZW50LmZvbnRNYXRyaXhbMF0sIHgsIHNwYWNlV2lkdGhQcm9qLCBmb250MmRldik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5wcmludCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB0aGlzLmFubm90YXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFubm90ID0gdGhpcy5hbm5vdGF0aW9uc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVhZCA9IHRoaXMuY2hhckluQW5ub3QoYW5ub3QsIGNoYXJEaW1zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHF1YWQgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFubm90YXRpb25zW2pdLmhpZ2hsaWdodGVkVGV4dCArPSBnbHlwaC51bmljb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWFya3VwKGFubm90LCBxdWFkLCBnbHlwaCwgY2hhckRpbXMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbHlwaC5pc0luRm9udCB8fCBmb250Lm1pc3NpbmdGaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2ltcGxlRmlsbFRleHQgJiYgIWFjY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsVGV4dChjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50Q2hhcihjaGFyYWN0ZXIsIHNjYWxlZFgsIHNjYWxlZFksIHBhdHRlcm5UcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRBY2NlbnRYID0gc2NhbGVkWCArIGFjY2VudC5vZmZzZXQueCAvIGZvbnRTaXplU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZEFjY2VudFkgPSBzY2FsZWRZIC0gYWNjZW50Lm9mZnNldC55IC8gZm9udFNpemVTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludENoYXIoYWNjZW50LmZvbnRDaGFyLCBzY2FsZWRBY2NlbnRYLCBzY2FsZWRBY2NlbnRZLCBwYXR0ZXJuVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhcldpZHRoID0gd2lkdGggKiB3aWR0aEFkdmFuY2VTY2FsZSArIHNwYWNpbmcgKiBmb250RGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGNoYXJXaWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdG9yZU5lZWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnkgLT0geCAqIHRleHRIU2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1R5cGUzVGV4dDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2hvd1R5cGUzVGV4dChnbHlwaHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gY3VycmVudC5mb250U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BhY2luZ0RpciA9IGZvbnQudmVydGljYWwgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJTcGFjaW5nID0gY3VycmVudC5jaGFyU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29yZFNwYWNpbmcgPSBjdXJyZW50LndvcmRTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0SFNjYWxlID0gY3VycmVudC50ZXh0SFNjYWxlICogZm9udERpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udE1hdHJpeCA9IGN1cnJlbnQuZm9udE1hdHJpeCB8fCBfdXRpbC5GT05UX0lERU5USVRZX01BVFJJWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzTGVuZ3RoID0gZ2x5cGhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNUZXh0SW52aXNpYmxlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuSU5WSVNJQkxFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpLCBnbHlwaCwgd2lkdGgsIHNwYWNpbmdMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN3LCBzcGFjZVdpZHRoUHJvaiwgZm9udDJkZXYgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1RleHRJbnZpc2libGUgfHwgZm9udFNpemUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zZm9ybS5hcHBseShjdHgsIGN1cnJlbnQudGV4dE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnRyYW5zbGF0ZShjdXJyZW50LngsIGN1cnJlbnQueSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250MmRldiA9IGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByb2plY3RlZCBzcGFjZVdpZHRoXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwbHlUcmFuc2Zvcm1YID0gZnVuY3Rpb24ocCwgbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHQgPSBwWzBdICogbVswXSArIHBbMV0gKiBtWzJdICsgbVs0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdyA9IGFwcGx5VHJhbnNmb3JtWChbc3BhY2VXaWR0aCwwXSwgZm9udDJkZXYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IHdoeSAyLjA/IEkgY2hhbmdlZCBpdCB0byAzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGltcy5zcGFjZVdpZHRoID0gKHN3WzBdIC0gZm9udDJkZXZbNF0pIC8gMi4wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlV2lkdGhQcm9qID0gKHN3IC0gZm9udDJkZXZbNF0pIC8gMy4wO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKHRleHRIU2NhbGUsIGZvbnREaXJlY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGdseXBoc0xlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoID0gZ2x5cGhzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoMCwgX3V0aWwuaXNOdW0pKGdseXBoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZ0xlbmd0aCA9IHNwYWNpbmdEaXIgKiBnbHlwaCAqIGZvbnRTaXplIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnRyYW5zbGF0ZShzcGFjaW5nTGVuZ3RoLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQueCArPSBzcGFjaW5nTGVuZ3RoICogdGV4dEhTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wZXJhdG9yTGlzdCA9IGZvbnQuY2hhclByb2NPcGVyYXRvckxpc3RbZ2x5cGgub3BlcmF0b3JMaXN0SWRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoXCJUeXBlMyBjaGFyYWN0ZXIgXFxcIlwiLmNvbmNhdChnbHlwaC5vcGVyYXRvckxpc3RJZCwgXCJcXFwiIGlzIG5vdCBhdmFpbGFibGUuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBnbHlwaDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zY2FsZShmb250U2l6ZSwgZm9udFNpemUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgZm9udE1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbiAocCwgbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHh0ID0gcFswXSAqIG1bMF0gKyBwWzFdICogbVsyXSArIG1bNF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXQgPSBwWzBdICogbVsxXSArIHBbMV0gKiBtWzNdICsgbVs1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbeHQsIHl0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtZWQgPSBhcHBseVRyYW5zZm9ybShbZ2x5cGgud2lkdGgsIDBdLCBmb250TWF0cml4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IHRyYW5zZm9ybWVkWzBdICogZm9udFNpemUgKyBzcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNsYXRlKHdpZHRoLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54ICs9IHdpZHRoICogdGV4dEhTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hbm5vdGF0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgZ2x5cGggaXMgd2l0aGluIGFuIGFubm90YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaERpbXMgPSB0aGlzLm1ha2VDaGFyRGltcyh0cmFuc2Zvcm1lZCAqIGZvbnRTaXplLCB3aWR0aCwgc3BhY2VXaWR0aFByb2osIGZvbnQyZGV2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdGhpcy5hbm5vdGF0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbm5vdCA9IHRoaXMuYW5ub3RhdGlvbnNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1YWQgPSB0aGlzLmNoYXJJbkFubm90KGFubm90LCBjaERpbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlTWFya3VwKGFubm90LCBxdWFkLCBnbHlwaCwgY2hEaW1zLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nVHlwZTMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENoYXJXaWR0aDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhcldpZHRoKHhXaWR0aCwgeVdpZHRoKSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldENoYXJXaWR0aEFuZEJvdW5kczogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3Nfc2V0Q2hhcldpZHRoQW5kQm91bmRzKHhXaWR0aCwgeVdpZHRoLCBsbHgsIGxseSwgdXJ4LCB1cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5yZWN0KGxseCwgbGx5LCB1cnggLSBsbHgsIHVyeSAtIGxseSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29sb3JOX1BhdHRlcm46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2dldENvbG9yTl9QYXR0ZXJuKElSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXR0ZXJuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKElSWzBdID09PSAnVGlsaW5nUGF0dGVybicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gSVJbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYXNlVHJhbnNmb3JtID0gdGhpcy5iYXNlVHJhbnNmb3JtIHx8IHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0uc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbnZhc0dyYXBoaWNzOiBmdW5jdGlvbiBjcmVhdGVDYW52YXNHcmFwaGljcyhjdHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENhbnZhc0dyYXBoaWNzKGN0eCwgX3RoaXMuY29tbW9uT2JqcywgX3RoaXMub2JqcywgX3RoaXMuY2FudmFzRmFjdG9yeSwgX3RoaXMud2ViR0xDb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9IG5ldyBfcGF0dGVybl9oZWxwZXIuVGlsaW5nUGF0dGVybihJUiwgY29sb3IsIHRoaXMuY3R4LCBjYW52YXNHcmFwaGljc0ZhY3RvcnksIGJhc2VUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAoMCwgX3BhdHRlcm5faGVscGVyLmdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSKShJUik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhdHRlcm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0U3Ryb2tlQ29sb3JOOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRTdHJva2VDb2xvck4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gdGhpcy5nZXRDb2xvck5fUGF0dGVybihhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbGxDb2xvck46IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZpbGxDb2xvck4oKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IHRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGwgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFN0cm9rZVJHQkNvbG9yOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zZXRTdHJva2VSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIsIGcsIGIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWxsUkdCQ29sb3I6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3NldEZpbGxSR0JDb2xvcihyLCBnLCBiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIsIGcsIGIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguZmlsbFN0eWxlID0gY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxDb2xvciA9IGNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRpbmdGaWxsOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19zaGFkaW5nRmlsbChwYXR0ZXJuSVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhdHRlcm4gPSAoMCwgX3BhdHRlcm5faGVscGVyLmdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSKShwYXR0ZXJuSVIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSBwYXR0ZXJuLmdldFBhdHRlcm4oY3R4LCB0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW52ID0gY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm1JbnZlcnNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gY3R4LmNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gY2FudmFzLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gY2FudmFzLmhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbihwLCBtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeHQgPSBwWzBdICogbVswXSArIHBbMV0gKiBtWzJdICsgbVs0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5dCA9IHBbMF0gKiBtWzFdICsgcFsxXSAqIG1bM10gKyBtWzVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFt4dCwgeXRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBibCA9IGFwcGx5VHJhbnNmb3JtKFswLCAwXSwgaW52KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnIgPSBhcHBseVRyYW5zZm9ybShbMCwgaGVpZ2h0XSwgaW52KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdWwgPSBhcHBseVRyYW5zZm9ybShbd2lkdGgsIDBdLCBpbnYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1ciA9IGFwcGx5VHJhbnNmb3JtKFt3aWR0aCwgaGVpZ2h0XSwgaW52KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDAgPSBNYXRoLm1pbihibFswXSwgYnJbMF0sIHVsWzBdLCB1clswXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5MCA9IE1hdGgubWluKGJsWzFdLCBiclsxXSwgdWxbMV0sIHVyWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0gTWF0aC5tYXgoYmxbMF0sIGJyWzBdLCB1bFswXSwgdXJbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSBNYXRoLm1heChibFsxXSwgYnJbMV0sIHVsWzFdLCB1clsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguZmlsbFJlY3QoLTFlMTAsIC0xZTEwLCAyZTEwLCAyZTEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbklubGluZUltYWdlOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbklubGluZUltYWdlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ1Nob3VsZCBub3QgY2FsbCBiZWdpbklubGluZUltYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5JbWFnZURhdGE6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luSW1hZ2VEYXRhKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC51bnJlYWNoYWJsZSkoJ1Nob3VsZCBub3QgY2FsbCBiZWdpbkltYWdlRGF0YScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1hdHJpeCkgJiYgbWF0cml4Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLCBtYXRyaXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IHRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VBbm5vRGltcyh0aGlzLmFubm90YXRpb25zLCB0aGlzLmJhc2VUcmFuc2Zvcm0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gYmJveFsyXSAtIGJib3hbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBiYm94WzNdIC0gYmJveFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVjdChiYm94WzBdLCBiYm94WzFdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWludEZvcm1YT2JqZWN0RW5kOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEZvcm1YT2JqZWN0RW5kKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlQW5ub0RpbXModGhpcy5hbm5vdGF0aW9ucywgdGhpcy5iYXNlVHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkdyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbkdyb3VwKGdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRDdHggPSB0aGlzLmN0eDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3JvdXAuaXNvbGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmluZm8pKCdUT0RPOiBTdXBwb3J0IG5vbi1pc29sYXRlZCBncm91cHMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdyb3VwLmtub2Nrb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnS25vY2tvdXQgZ3JvdXBzIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBjdXJyZW50Q3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAubWF0cml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDdHgudHJhbnNmb3JtLmFwcGx5KGN1cnJlbnRDdHgsIGdyb3VwLm1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFncm91cC5iYm94KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQm91bmRpbmcgYm94IGlzIHJlcXVpcmVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSBfdXRpbC5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGdyb3VwLmJib3gsIGN1cnJlbnRDdHgubW96Q3VycmVudFRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzQm91bmRzID0gWzAsIDAsIGN1cnJlbnRDdHguY2FudmFzLndpZHRoLCBjdXJyZW50Q3R4LmNhbnZhcy5oZWlnaHRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcyA9IF91dGlsLlV0aWwuaW50ZXJzZWN0KGJvdW5kcywgY2FudmFzQm91bmRzKSB8fCBbMCwgMCwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFggPSBNYXRoLmZsb29yKGJvdW5kc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFkgPSBNYXRoLmZsb29yKGJvdW5kc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyYXduV2lkdGggPSBNYXRoLm1heChNYXRoLmNlaWwoYm91bmRzWzJdKSAtIG9mZnNldFgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkcmF3bkhlaWdodCA9IE1hdGgubWF4KE1hdGguY2VpbChib3VuZHNbM10pIC0gb2Zmc2V0WSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlWCA9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWSA9IDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZHJhd25XaWR0aCA+IE1BWF9HUk9VUF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWCA9IGRyYXduV2lkdGggLyBNQVhfR1JPVVBfU0laRTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd25XaWR0aCA9IE1BWF9HUk9VUF9TSVpFO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcmF3bkhlaWdodCA+IE1BWF9HUk9VUF9TSVpFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWSA9IGRyYXduSGVpZ2h0IC8gTUFYX0dST1VQX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXduSGVpZ2h0ID0gTUFYX0dST1VQX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhY2hlSWQgPSAnZ3JvdXBBdCcgKyB0aGlzLmdyb3VwTGV2ZWw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ3JvdXAuc21hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVJZCArPSAnX3NtYXNrXycgKyB0aGlzLnNtYXNrQ291bnRlcisrICUgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NyYXRjaENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGNhY2hlSWQsIGRyYXduV2lkdGgsIGRyYXduSGVpZ2h0LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JvdXBDdHggPSBzY3JhdGNoQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHguc2NhbGUoMSAvIHNjYWxlWCwgMSAvIHNjYWxlWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHgudHJhbnNsYXRlKC1vZmZzZXRYLCAtb2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBDdHgudHJhbnNmb3JtLmFwcGx5KGdyb3VwQ3R4LCBjdXJyZW50VHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5zbWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYXNrU3RhY2sucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXM6IHNjcmF0Y2hDYW52YXMuY2FudmFzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDogZ3JvdXBDdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiBvZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogb2Zmc2V0WSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogc2NhbGVYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVZOiBzY2FsZVksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlOiBncm91cC5zbWFzay5zdWJ0eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2Ryb3A6IGdyb3VwLnNtYXNrLmJhY2tkcm9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmZXJNYXA6IGdyb3VwLnNtYXNrLnRyYW5zZmVyTWFwIHx8IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFRyYW5zZm9ybUludmVyc2U6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEN0eC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDdHgudHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q3R4LnNjYWxlKHNjYWxlWCwgc2NhbGVZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5Q3R4U3RhdGUoY3VycmVudEN0eCwgZ3JvdXBDdHgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gZ3JvdXBDdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRHU3RhdGUoW1snQk0nLCAnc291cmNlLW92ZXInXSwgWydjYScsIDFdLCBbJ0NBJywgMV1dKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwU3RhY2sucHVzaChjdXJyZW50Q3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwTGV2ZWwrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2sgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEdyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRHcm91cChncm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBMZXZlbC0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cEN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4ID0gdGhpcy5ncm91cFN0YWNrLnBvcCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5zbWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBTTWFzayA9IHRoaXMuc21hc2tTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5kcmF3SW1hZ2UoZ3JvdXBDdHguY2FudmFzLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkFubm90YXRpb25zOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbkFubm90YXRpb25zKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYmFzZVRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsIHRoaXMuYmFzZVRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZEFubm90YXRpb25zOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRBbm5vdGF0aW9ucygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkFubm90YXRpb246IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luQW5ub3RhdGlvbihyZWN0LCB0cmFuc2Zvcm0sIG1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0Q3R4VG9EZWZhdWx0KHRoaXMuY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgQ2FudmFzRXh0cmFTdGF0ZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVjdCkgJiYgcmVjdC5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gcmVjdFsyXSAtIHJlY3RbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSByZWN0WzNdIC0gcmVjdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucmVjdChyZWN0WzBdLCByZWN0WzFdLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsIHRyYW5zZm9ybSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm0uYXBwbHkodGhpcywgbWF0cml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRBbm5vdGF0aW9uOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19lbmRBbm5vdGF0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SnBlZ1hPYmplY3Q6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SnBlZ1hPYmplY3Qob2JqSWQsIHcsIGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9tSW1hZ2UgPSB0aGlzLm9ianMuZ2V0KG9iaklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZG9tSW1hZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdEZXBlbmRlbnQgaW1hZ2UgaXNuXFwndCByZWFkeSB5ZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSAvIHcsIC0xIC8gaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShkb21JbWFnZSwgMCwgMCwgZG9tSW1hZ2Uud2lkdGgsIGRvbUltYWdlLmhlaWdodCwgMCwgLWgsIHcsIGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaW1hZ2VMYXllcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudFRyYW5zZm9ybSA9IGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5nZXRDYW52YXNQb3NpdGlvbigwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaklkOiBvYmpJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBwb3NpdGlvblsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3IC8gY3VycmVudFRyYW5zZm9ybVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaCAvIGN1cnJlbnRUcmFuc2Zvcm1bM11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3QoaW1nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGltZy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gaW1nLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGggPSB0aGlzLnByb2Nlc3NpbmdUeXBlMztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChDT01QSUxFX1RZUEUzX0dMWVBIUyAmJiBnbHlwaCAmJiBnbHlwaC5jb21waWxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8PSBNQVhfU0laRV9UT19DT01QSUxFICYmIGhlaWdodCA8PSBNQVhfU0laRV9UT19DT01QSUxFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaC5jb21waWxlZCA9IGNvbXBpbGVUeXBlM0dseXBoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBpbWcuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGguY29tcGlsZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdseXBoICYmIGdseXBoLmNvbXBpbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoLmNvbXBpbGVkKGN0eCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtYXNrQ2FudmFzJywgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tDdHggPSBtYXNrQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLWluJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LmZpbGxTdHlsZSA9IGlzUGF0dGVybkZpbGwgPyBmaWxsQ29sb3IuZ2V0UGF0dGVybihtYXNrQ3R4LCB0aGlzKSA6IGZpbGxDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QobWFza0NhbnZhcy5jYW52YXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdFJlcGVhdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KGltZ0RhdGEsIHNjYWxlWCwgc2NhbGVZLCBwb3NpdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbENvbG9yID0gdGhpcy5jdXJyZW50LmZpbGxDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNQYXR0ZXJuRmlsbCA9IHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtYXNrQ2FudmFzJywgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hc2tDdHggPSBtYXNrQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1pbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5maWxsU3R5bGUgPSBpc1BhdHRlcm5GaWxsID8gZmlsbENvbG9yLmdldFBhdHRlcm4obWFza0N0eCwgdGhpcykgOiBmaWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwb3NpdGlvbnMubGVuZ3RoOyBpIDwgaWk7IGkgKz0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtKHNjYWxlWCwgMCwgMCwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKG1hc2tDYW52YXMuY2FudmFzLCAwLCAwLCB3aWR0aCwgaGVpZ2h0LCAwLCAtMSwgMSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3RHcm91cChpbWFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3R4ID0gdGhpcy5jdHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGxDb2xvciA9IHRoaXMuY3VycmVudC5maWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUGF0dGVybkZpbGwgPSB0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbWFnZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSBpbWFnZXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGltYWdlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gaW1hZ2UuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza0NhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtYXNrQ2FudmFzJywgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrQ3R4ID0gbWFza0NhbnZhcy5jb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ3R4LnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VNYXNrKG1hc2tDdHgsIGltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnc291cmNlLWluJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza0N0eC5maWxsU3R5bGUgPSBpc1BhdHRlcm5GaWxsID8gZmlsbENvbG9yLmdldFBhdHRlcm4obWFza0N0eCwgdGhpcykgOiBmaWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDdHguZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgaW1hZ2UudHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnNjYWxlKDEsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmRyYXdJbWFnZShtYXNrQ2FudmFzLmNhbnZhcywgMCwgMCwgd2lkdGgsIGhlaWdodCwgMCwgLTEsIDEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWludEltYWdlWE9iamVjdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRJbWFnZVhPYmplY3Qob2JqSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nRGF0YSA9IHRoaXMub2Jqcy5nZXQob2JqSWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbWdEYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnRGVwZW5kZW50IGltYWdlIGlzblxcJ3QgcmVhZHkgeWV0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19wYWludEltYWdlWE9iamVjdFJlcGVhdChvYmpJZCwgc2NhbGVYLCBzY2FsZVksIHBvc2l0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdEYXRhID0gdGhpcy5vYmpzLmdldChvYmpJZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdEZXBlbmRlbnQgaW1hZ2UgaXNuXFwndCByZWFkeSB5ZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXAgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBvc2l0aW9ucy5sZW5ndGg7IGkgPCBpaTsgaSArPSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogW3NjYWxlWCwgMCwgMCwgc2NhbGVZLCBwb3NpdGlvbnNbaV0sIHBvc2l0aW9uc1tpICsgMV1dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3OiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGg6IGhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaW1nRGF0YSwgbWFwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWludElubGluZUltYWdlWE9iamVjdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoaW1nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGltZ0RhdGEud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSAvIHdpZHRoLCAtMSAvIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUcmFuc2Zvcm0gPSBjdHgubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBjdXJyZW50VHJhbnNmb3JtWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gY3VycmVudFRyYW5zZm9ybVsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGhTY2FsZSA9IE1hdGgubWF4KE1hdGguc3FydChhICogYSArIGIgKiBiKSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBjdXJyZW50VHJhbnNmb3JtWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkID0gY3VycmVudFRyYW5zZm9ybVszXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0U2NhbGUgPSBNYXRoLm1heChNYXRoLnNxcnQoYyAqIGMgKyBkICogZCksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdUb1BhaW50LCB0bXBDYW52YXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ID09PSAnZnVuY3Rpb24nICYmIGltZ0RhdGEgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCAhaW1nRGF0YS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1RvUGFpbnQgPSBpbWdEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENhbnZhcyA9IHRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdpbmxpbmVJbWFnZScsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dEJpbmFyeUltYWdlRGF0YSh0bXBDdHgsIGltZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdUb1BhaW50ID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFpbnRXaWR0aCA9IHdpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludEhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wQ2FudmFzSWQgPSAncHJlc2NhbGUxJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh3aWR0aFNjYWxlID4gMiAmJiBwYWludFdpZHRoID4gMSB8fCBoZWlnaHRTY2FsZSA+IDIgJiYgcGFpbnRIZWlnaHQgPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuZXdXaWR0aCA9IHBhaW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdIZWlnaHQgPSBwYWludEhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2lkdGhTY2FsZSA+IDIgJiYgcGFpbnRXaWR0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1dpZHRoID0gTWF0aC5jZWlsKHBhaW50V2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoU2NhbGUgLz0gcGFpbnRXaWR0aCAvIG5ld1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhlaWdodFNjYWxlID4gMiAmJiBwYWludEhlaWdodCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0hlaWdodCA9IE1hdGguY2VpbChwYWludEhlaWdodCAvIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0U2NhbGUgLz0gcGFpbnRIZWlnaHQgLyBuZXdIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyh0bXBDYW52YXNJZCwgbmV3V2lkdGgsIG5ld0hlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcEN0eCA9IHRtcENhbnZhcy5jb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDdHguY2xlYXJSZWN0KDAsIDAsIG5ld1dpZHRoLCBuZXdIZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDdHguZHJhd0ltYWdlKGltZ1RvUGFpbnQsIDAsIDAsIHBhaW50V2lkdGgsIHBhaW50SGVpZ2h0LCAwLCAwLCBuZXdXaWR0aCwgbmV3SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nVG9QYWludCA9IHRtcENhbnZhcy5jYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50V2lkdGggPSBuZXdXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRIZWlnaHQgPSBuZXdIZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENhbnZhc0lkID0gdG1wQ2FudmFzSWQgPT09ICdwcmVzY2FsZTEnID8gJ3ByZXNjYWxlMicgOiAncHJlc2NhbGUxJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZ1RvUGFpbnQsIDAsIDAsIHBhaW50V2lkdGgsIHBhaW50SGVpZ2h0LCAwLCAtaGVpZ2h0LCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmltYWdlTGF5ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5nZXRDYW52YXNQb3NpdGlvbigwLCAtaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0RhdGE6IGltZ0RhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBwb3NpdGlvblswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogcG9zaXRpb25bMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGggLyBjdXJyZW50VHJhbnNmb3JtWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgLyBjdXJyZW50VHJhbnNmb3JtWzNdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX3BhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaW1nRGF0YSwgbWFwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3ID0gaW1nRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDYW52YXMgPSB0aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygnaW5saW5lSW1hZ2UnLCB3LCBoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wQ3R4ID0gdG1wQ2FudmFzLmNvbnRleHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0QmluYXJ5SW1hZ2VEYXRhKHRtcEN0eCwgaW1nRGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBtYXAubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW50cnkgPSBtYXBbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zYXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCBlbnRyeS50cmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUoMSwgLTEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguZHJhd0ltYWdlKHRtcENhbnZhcy5jYW52YXMsIGVudHJ5LngsIGVudHJ5LnksIGVudHJ5LncsIGVudHJ5LmgsIDAsIC0xLCAxLCAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pbWFnZUxheWVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLmdldENhbnZhc1Bvc2l0aW9uKGVudHJ5LngsIGVudHJ5LnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdEYXRhOiBpbWdEYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IHBvc2l0aW9uWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogcG9zaXRpb25bMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5yZXN0b3JlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzazogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmZpbGxSZWN0KDAsIDAsIDEsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50WE9iamVjdDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfcGFpbnRYT2JqZWN0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5zdXBwb3J0ZWQgXFwncGFpbnRYT2JqZWN0XFwnIGNvbW1hbmQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFya1BvaW50OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19tYXJrUG9pbnQodGFnKSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtQb2ludFByb3BzOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19tYXJrUG9pbnRQcm9wcyh0YWcsIHByb3BlcnRpZXMpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5NYXJrZWRDb250ZW50OiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbk1hcmtlZENvbnRlbnQodGFnKSB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luTWFya2VkQ29udGVudFByb3BzOiBmdW5jdGlvbiBDYW52YXNHcmFwaGljc19iZWdpbk1hcmtlZENvbnRlbnRQcm9wcyh0YWcsIHByb3BlcnRpZXMpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kTWFya2VkQ29udGVudDogZnVuY3Rpb24gQ2FudmFzR3JhcGhpY3NfZW5kTWFya2VkQ29udGVudCgpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5Db21wYXQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2JlZ2luQ29tcGF0KCkge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRDb21wYXQ6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2VuZENvbXBhdCgpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVBhdGg6IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2NvbnN1bWVQYXRoKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwID09PSBFT19DTElQKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguY2xpcCgnZXZlbm9kZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmNsaXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTaW5nbGVQaXhlbFdpZHRoOiBmdW5jdGlvbiBnZXRTaW5nbGVQaXhlbFdpZHRoKHNjYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGggPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGludmVyc2UgPSB0aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aCA9IE1hdGguc3FydChNYXRoLm1heChpbnZlcnNlWzBdICogaW52ZXJzZVswXSArIGludmVyc2VbMV0gKiBpbnZlcnNlWzFdLCBpbnZlcnNlWzJdICogaW52ZXJzZVsyXSArIGludmVyc2VbM10gKiBpbnZlcnNlWzNdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q2FudmFzUG9zaXRpb246IGZ1bmN0aW9uIENhbnZhc0dyYXBoaWNzX2dldENhbnZhc1Bvc2l0aW9uKHgsIHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJhbnNmb3JtID0gdGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3RyYW5zZm9ybVswXSAqIHggKyB0cmFuc2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdLCB0cmFuc2Zvcm1bMV0gKiB4ICsgdHJhbnNmb3JtWzNdICogeSArIHRyYW5zZm9ybVs1XV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgb3AgaW4gX3V0aWwuT1BTKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBDYW52YXNHcmFwaGljcy5wcm90b3R5cGVbX3V0aWwuT1BTW29wXV0gPSBDYW52YXNHcmFwaGljcy5wcm90b3R5cGVbb3BdO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIENhbnZhc0dyYXBoaWNzO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQ2FudmFzR3JhcGhpY3MgPSBDYW52YXNHcmFwaGljcztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU1ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRTaGFkaW5nUGF0dGVybkZyb21JUiA9IGdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuVGlsaW5nUGF0dGVybiA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU2hhZGluZ0lScyA9IHt9O1xuICAgICAgICAgICAgICAgIFNoYWRpbmdJUnMuUmFkaWFsQXhpYWwgPSB7XG4gICAgICAgICAgICAgICAgICAgIGZyb21JUjogZnVuY3Rpb24gUmFkaWFsQXhpYWxfZnJvbUlSKHJhdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSByYXdbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3JTdG9wcyA9IHJhd1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMCA9IHJhd1szXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwMSA9IHJhd1s0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByMCA9IHJhd1s1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByMSA9IHJhd1s2XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1BhdHRlcm4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhdHRlcm46IGZ1bmN0aW9uIFJhZGlhbEF4aWFsX2dldFBhdHRlcm4oY3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncmFkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSAnYXhpYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFkID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KHAwWzBdLCBwMFsxXSwgcDFbMF0sIHAxWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAncmFkaWFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZCA9IGN0eC5jcmVhdGVSYWRpYWxHcmFkaWVudChwMFswXSwgcDBbMV0sIHIwLCBwMVswXSwgcDFbMV0sIHIxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGNvbG9yU3RvcHMubGVuZ3RoOyBpIDwgaWk7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBjb2xvclN0b3BzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhZC5hZGRDb2xvclN0b3AoY1swXSwgY1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ3JhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHZhciBjcmVhdGVNZXNoQ2FudmFzID0gZnVuY3Rpb24gY3JlYXRlTWVzaENhbnZhc0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwMSwgcDIsIHAzLCBjMSwgYzIsIGMzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gY29udGV4dC5jb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSBkYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93U2l6ZSA9IGRhdGEud2lkdGggKiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvb3Jkc1twMSArIDFdID4gY29vcmRzW3AyICsgMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBwMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMSA9IHAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAyID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IGMxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxID0gYzI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSB0bXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb29yZHNbcDIgKyAxXSA+IGNvb3Jkc1twMyArIDFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSBwMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwMyA9IHRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBjMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IGMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMzID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29vcmRzW3AxICsgMV0gPiBjb29yZHNbcDIgKyAxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCA9IHAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAxID0gcDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcDIgPSB0bXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gYzE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEgPSBjMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IHRtcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0gKGNvb3Jkc1twMV0gKyBjb250ZXh0Lm9mZnNldFgpICogY29udGV4dC5zY2FsZVg7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSAoY29vcmRzW3AxICsgMV0gKyBjb250ZXh0Lm9mZnNldFkpICogY29udGV4dC5zY2FsZVk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSAoY29vcmRzW3AyXSArIGNvbnRleHQub2Zmc2V0WCkgKiBjb250ZXh0LnNjYWxlWDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5MiA9IChjb29yZHNbcDIgKyAxXSArIGNvbnRleHQub2Zmc2V0WSkgKiBjb250ZXh0LnNjYWxlWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4MyA9IChjb29yZHNbcDNdICsgY29udGV4dC5vZmZzZXRYKSAqIGNvbnRleHQuc2NhbGVYO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkzID0gKGNvb3Jkc1twMyArIDFdICsgY29udGV4dC5vZmZzZXRZKSAqIGNvbnRleHQuc2NhbGVZO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeTEgPj0geTMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjMXIgPSBjb2xvcnNbYzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxZyA9IGNvbG9yc1tjMSArIDFdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxYiA9IGNvbG9yc1tjMSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMyciA9IGNvbG9yc1tjMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJnID0gY29sb3JzW2MyICsgMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYzJiID0gY29sb3JzW2MyICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYzNyID0gY29sb3JzW2MzXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjM2cgPSBjb2xvcnNbYzMgKyAxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjM2IgPSBjb2xvcnNbYzMgKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtaW5ZID0gTWF0aC5yb3VuZCh5MSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WSA9IE1hdGgucm91bmQoeTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhhLCBjYXIsIGNhZywgY2FiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhiLCBjYnIsIGNiZywgY2JiO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHkgPSBtaW5ZOyB5IDw9IG1heFk7IHkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh5IDwgeTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IHkgPCB5MSA/IDAgOiB5MSA9PT0geTIgPyAxIDogKHkxIC0geSkgLyAoeTEgLSB5Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhhID0geDEgLSAoeDEgLSB4MikgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXIgPSBjMXIgLSAoYzFyIC0gYzJyKSAqIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZyA9IGMxZyAtIChjMWcgLSBjMmcpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FiID0gYzFiIC0gKGMxYiAtIGMyYikgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgPSB5ID4geTMgPyAxIDogeTIgPT09IHkzID8gMCA6ICh5MiAtIHkpIC8gKHkyIC0geTMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YSA9IHgyIC0gKHgyIC0geDMpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FyID0gYzJyIC0gKGMyciAtIGMzcikgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWcgPSBjMmcgLSAoYzJnIC0gYzNnKSAqIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhYiA9IGMyYiAtIChjMmIgLSBjM2IpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0geSA8IHkxID8gMCA6IHkgPiB5MyA/IDEgOiAoeTEgLSB5KSAvICh5MSAtIHkzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YiA9IHgxIC0gKHgxIC0geDMpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYnIgPSBjMXIgLSAoYzFyIC0gYzNyKSAqIGs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2JnID0gYzFnIC0gKGMxZyAtIGMzZykgKiBrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNiYiA9IGMxYiAtIChjMWIgLSBjM2IpICogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDFfID0gTWF0aC5yb3VuZChNYXRoLm1pbih4YSwgeGIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDJfID0gTWF0aC5yb3VuZChNYXRoLm1heCh4YSwgeGIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaiA9IHJvd1NpemUgKiB5ICsgeDFfICogNDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSB4MV87IHggPD0geDJfOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9ICh4YSAtIHgpIC8gKHhhIC0geGIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrID0gayA8IDAgPyAwIDogayA+IDEgPyAxIDogaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaisrXSA9IGNhciAtIChjYXIgLSBjYnIpICogayB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW2orK10gPSBjYWcgLSAoY2FnIC0gY2JnKSAqIGsgfCAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlc1tqKytdID0gY2FiIC0gKGNhYiAtIGNiYikgKiBrIHwgMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaisrXSA9IDI1NTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkcmF3RmlndXJlKGRhdGEsIGZpZ3VyZSwgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBzID0gZmlndXJlLmNvb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcyA9IGZpZ3VyZS5jb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmlndXJlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdsYXR0aWNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2VzUGVyUm93ID0gZmlndXJlLnZlcnRpY2VzUGVyUm93O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93cyA9IE1hdGguZmxvb3IocHMubGVuZ3RoIC8gdmVydGljZXNQZXJSb3cpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHMgPSB2ZXJ0aWNlc1BlclJvdyAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSBpICogdmVydGljZXNQZXJSb3c7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sczsgaisrLCBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmF3VHJpYW5nbGUoZGF0YSwgY29udGV4dCwgcHNbcV0sIHBzW3EgKyAxXSwgcHNbcSArIHZlcnRpY2VzUGVyUm93XSwgY3NbcV0sIGNzW3EgKyAxXSwgY3NbcSArIHZlcnRpY2VzUGVyUm93XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd1RyaWFuZ2xlKGRhdGEsIGNvbnRleHQsIHBzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBwc1txICsgMV0sIHBzW3EgKyB2ZXJ0aWNlc1BlclJvd10sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvdyArIDFdLCBjc1txICsgMV0sIGNzW3EgKyB2ZXJ0aWNlc1BlclJvd10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0cmlhbmdsZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IHBzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRyYXdUcmlhbmdsZShkYXRhLCBjb250ZXh0LCBwc1tpXSwgcHNbaSArIDFdLCBwc1tpICsgMl0sIGNzW2ldLCBjc1tpICsgMV0sIGNzW2kgKyAyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWxsZWdhbCBmaWd1cmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZU1lc2hDYW52YXMoYm91bmRzLCBjb21iaW5lc1NjYWxlLCBjb29yZHMsIGNvbG9ycywgZmlndXJlcywgYmFja2dyb3VuZENvbG9yLCBjYWNoZWRDYW52YXNlcywgd2ViR0xDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgRVhQRUNURURfU0NBTEUgPSAxLjE7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTUFYX1BBVFRFUk5fU0laRSA9IDMwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQk9SREVSX1NJWkUgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldFggPSBNYXRoLmZsb29yKGJvdW5kc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0WSA9IE1hdGguZmxvb3IoYm91bmRzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHNXaWR0aCA9IE1hdGguY2VpbChib3VuZHNbMl0pIC0gb2Zmc2V0WDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHNIZWlnaHQgPSBNYXRoLmNlaWwoYm91bmRzWzNdKSAtIG9mZnNldFk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBNYXRoLm1pbihNYXRoLmNlaWwoTWF0aC5hYnMoYm91bmRzV2lkdGggKiBjb21iaW5lc1NjYWxlWzBdICogRVhQRUNURURfU0NBTEUpKSwgTUFYX1BBVFRFUk5fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGJvdW5kc0hlaWdodCAqIGNvbWJpbmVzU2NhbGVbMV0gKiBFWFBFQ1RFRF9TQ0FMRSkpLCBNQVhfUEFUVEVSTl9TSVpFKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZVggPSBib3VuZHNXaWR0aCAvIHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlWSA9IGJvdW5kc0hlaWdodCAvIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3JkczogY29vcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yczogY29sb3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IC1vZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogMSAvIHNjYWxlWCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZVk6IDEgLyBzY2FsZVlcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFkZGVkV2lkdGggPSB3aWR0aCArIEJPUkRFUl9TSVpFICogMjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWRkZWRIZWlnaHQgPSBoZWlnaHQgKyBCT1JERVJfU0laRSAqIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzLCB0bXBDYW52YXMsIGksIGlpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAod2ViR0xDb250ZXh0LmlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcyA9IHdlYkdMQ29udGV4dC5kcmF3RmlndXJlcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogYmFja2dyb3VuZENvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVzOiBmaWd1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ2FudmFzID0gY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtZXNoJywgcGFkZGVkV2lkdGgsIHBhZGRlZEhlaWdodCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENhbnZhcy5jb250ZXh0LmRyYXdJbWFnZShjYW52YXMsIEJPUkRFUl9TSVpFLCBCT1JERVJfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ2FudmFzID0gY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCdtZXNoJywgcGFkZGVkV2lkdGgsIHBhZGRlZEhlaWdodCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRtcEN0eC5jcmVhdGVJbWFnZURhdGEod2lkdGgsIGhlaWdodCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBieXRlcyA9IGRhdGEuZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzW2ldID0gYmFja2dyb3VuZENvbG9yWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSArIDFdID0gYmFja2dyb3VuZENvbG9yWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSArIDJdID0gYmFja2dyb3VuZENvbG9yWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNbaSArIDNdID0gMjU1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZ3VyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0ZpZ3VyZShkYXRhLCBmaWd1cmVzW2ldLCBjb250ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDdHgucHV0SW1hZ2VEYXRhKGRhdGEsIEJPUkRFUl9TSVpFLCBCT1JERVJfU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gdG1wQ2FudmFzLmNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXM6IGNhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRYOiBvZmZzZXRYIC0gQk9SREVSX1NJWkUgKiBzY2FsZVgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogb2Zmc2V0WSAtIEJPUkRFUl9TSVpFICogc2NhbGVZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWDogc2NhbGVYLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlWTogc2NhbGVZXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc2hDYW52YXM7XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgU2hhZGluZ0lScy5NZXNoID0ge1xuICAgICAgICAgICAgICAgICAgICBmcm9tSVI6IGZ1bmN0aW9uIE1lc2hfZnJvbUlSKHJhdykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3JkcyA9IHJhd1syXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnMgPSByYXdbM107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlndXJlcyA9IHJhd1s0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSByYXdbNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0cml4ID0gcmF3WzZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJhY2tncm91bmQgPSByYXdbOF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXR0ZXJuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBNZXNoX2dldFBhdHRlcm4oY3R4LCBvd25lciwgc2hhZGluZ0ZpbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkaW5nRmlsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGN0eC5tb3pDdXJyZW50VHJhbnNmb3JtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShvd25lci5iYXNlVHJhbnNmb3JtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdHJpeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXRyaXhTY2FsZSA9IF91dGlsLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUobWF0cml4KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlID0gW3NjYWxlWzBdICogbWF0cml4U2NhbGVbMF0sIHNjYWxlWzFdICogbWF0cml4U2NhbGVbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMgPSBjcmVhdGVNZXNoQ2FudmFzKGJvdW5kcywgc2NhbGUsIGNvb3JkcywgY29sb3JzLCBmaWd1cmVzLCBzaGFkaW5nRmlsbCA/IG51bGwgOiBiYWNrZ3JvdW5kLCBvd25lci5jYWNoZWRDYW52YXNlcywgb3duZXIud2ViR0xDb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNoYWRpbmdGaWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2V0VHJhbnNmb3JtLmFwcGx5KGN0eCwgb3duZXIuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgudHJhbnNmb3JtLmFwcGx5KGN0eCwgbWF0cml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2xhdGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5vZmZzZXRYLCB0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLm9mZnNldFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguc2NhbGUodGVtcG9yYXJ5UGF0dGVybkNhbnZhcy5zY2FsZVgsIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuc2NhbGVZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5jcmVhdGVQYXR0ZXJuKHRlbXBvcmFyeVBhdHRlcm5DYW52YXMuY2FudmFzLCAnbm8tcmVwZWF0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgU2hhZGluZ0lScy5EdW1teSA9IHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUlSOiBmdW5jdGlvbiBEdW1teV9mcm9tSVIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdQYXR0ZXJuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRQYXR0ZXJuOiBmdW5jdGlvbiBEdW1teV9mcm9tSVJfZ2V0UGF0dGVybigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdob3RwaW5rJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldFNoYWRpbmdQYXR0ZXJuRnJvbUlSKHJhdykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGluZ0lSID0gU2hhZGluZ0lSc1tyYXdbMF1dO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2hhZGluZ0lSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIElSIHR5cGU6IFwiLmNvbmNhdChyYXdbMF0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzaGFkaW5nSVIuZnJvbUlSKHJhdyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFRpbGluZ1BhdHRlcm4gPSBmdW5jdGlvbiBUaWxpbmdQYXR0ZXJuQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIFBhaW50VHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIENPTE9SRUQ6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBVTkNPTE9SRUQ6IDJcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9QQVRURVJOX1NJWkUgPSAzMDAwO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm4oSVIsIGNvbG9yLCBjdHgsIGNhbnZhc0dyYXBoaWNzRmFjdG9yeSwgYmFzZVRyYW5zZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvckxpc3QgPSBJUlsyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0cml4ID0gSVJbM10gfHwgWzEsIDAsIDAsIDEsIDAsIDBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iYm94ID0gSVJbNF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnhzdGVwID0gSVJbNV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnlzdGVwID0gSVJbNl07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50VHlwZSA9IElSWzddO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50aWxpbmdUeXBlID0gSVJbOF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbG9yID0gY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeSA9IGNhbnZhc0dyYXBoaWNzRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFzZVRyYW5zZm9ybSA9IGJhc2VUcmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSAnUGF0dGVybic7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eCA9IGN0eDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRpbGluZ1BhdHRlcm4ucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlUGF0dGVybkNhbnZhczogZnVuY3Rpb24gVGlsaW5QYXR0ZXJuX2NyZWF0ZVBhdHRlcm5DYW52YXMob3duZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0b3JMaXN0ID0gdGhpcy5vcGVyYXRvckxpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJib3ggPSB0aGlzLmJib3g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhzdGVwID0gdGhpcy54c3RlcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeXN0ZXAgPSB0aGlzLnlzdGVwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYWludFR5cGUgPSB0aGlzLnBhaW50VHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGlsaW5nVHlwZSA9IHRoaXMudGlsaW5nVHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXNHcmFwaGljc0ZhY3RvcnkgPSB0aGlzLmNhbnZhc0dyYXBoaWNzRmFjdG9yeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuaW5mbykoJ1RpbGluZ1R5cGU6ICcgKyB0aWxpbmdUeXBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeDAgPSBiYm94WzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MCA9IGJib3hbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxID0gYmJveFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTEgPSBiYm94WzNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3BMZWZ0ID0gW3gwLCB5MF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvdFJpZ2h0ID0gW3gwICsgeHN0ZXAsIHkwICsgeXN0ZXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGJvdFJpZ2h0WzBdIC0gdG9wTGVmdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gYm90UmlnaHRbMV0gLSB0b3BMZWZ0WzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdHJpeFNjYWxlID0gX3V0aWwuVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZSh0aGlzLm1hdHJpeCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VyTWF0cml4U2NhbGUgPSBfdXRpbC5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tYmluZWRTY2FsZSA9IFttYXRyaXhTY2FsZVswXSAqIGN1ck1hdHJpeFNjYWxlWzBdLCBtYXRyaXhTY2FsZVsxXSAqIGN1ck1hdHJpeFNjYWxlWzFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyh3aWR0aCAqIGNvbWJpbmVkU2NhbGVbMF0pKSwgTUFYX1BBVFRFUk5fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5jZWlsKE1hdGguYWJzKGhlaWdodCAqIGNvbWJpbmVkU2NhbGVbMV0pKSwgTUFYX1BBVFRFUk5fU0laRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcENhbnZhcyA9IG93bmVyLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygncGF0dGVybicsIHdpZHRoLCBoZWlnaHQsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0bXBDdHggPSB0bXBDYW52YXMuY29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhcGhpY3MgPSBjYW52YXNHcmFwaGljc0ZhY3RvcnkuY3JlYXRlQ2FudmFzR3JhcGhpY3ModG1wQ3R4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5ncm91cExldmVsID0gb3duZXIuZ3JvdXBMZXZlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dChncmFwaGljcywgcGFpbnRUeXBlLCBjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTY2FsZSh3aWR0aCwgaGVpZ2h0LCB4c3RlcCwgeXN0ZXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtVG9TY2FsZShncmFwaGljcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcFRyYW5zbGF0ZSA9IFsxLCAwLCAwLCAxLCAtdG9wTGVmdFswXSwgLXRvcExlZnRbMV1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLnRyYW5zZm9ybS5hcHBseShncmFwaGljcywgdG1wVHJhbnNsYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaXBCYm94KGdyYXBoaWNzLCBiYm94LCB4MCwgeTAsIHgxLCB5MSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuZXhlY3V0ZU9wZXJhdG9yTGlzdChvcGVyYXRvckxpc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bXBDYW52YXMuY2FudmFzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFNjYWxlOiBmdW5jdGlvbiBUaWxpbmdQYXR0ZXJuX3NldFNjYWxlKHdpZHRoLCBoZWlnaHQsIHhzdGVwLCB5c3RlcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NhbGUgPSBbd2lkdGggLyB4c3RlcCwgaGVpZ2h0IC8geXN0ZXBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybVRvU2NhbGU6IGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm5fdHJhbnNmb3JtVG9TY2FsZShncmFwaGljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY2FsZSA9IHRoaXMuc2NhbGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRtcFNjYWxlID0gW3NjYWxlWzBdLCAwLCAwLCBzY2FsZVsxXSwgMCwgMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MudHJhbnNmb3JtLmFwcGx5KGdyYXBoaWNzLCB0bXBTY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVUb0NvbnRleHQ6IGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm5fc2NhbGVUb0NvbnRleHQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNjYWxlID0gdGhpcy5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5zY2FsZSgxIC8gc2NhbGVbMF0sIDEgLyBzY2FsZVsxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xpcEJib3g6IGZ1bmN0aW9uIGNsaXBCYm94KGdyYXBoaWNzLCBiYm94LCB4MCwgeTAsIHgxLCB5MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJib3gpICYmIGJib3gubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiYm94V2lkdGggPSB4MSAtIHgwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmJveEhlaWdodCA9IHkxIC0geTA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzLmN0eC5yZWN0KHgwLCB5MCwgYmJveFdpZHRoLCBiYm94SGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3MuY2xpcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFwaGljcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbGxBbmRTdHJva2VTdHlsZVRvQ29udGV4dDogZnVuY3Rpb24gc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0KGdyYXBoaWNzLCBwYWludFR5cGUsIGNvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBncmFwaGljcy5jdHgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBncmFwaGljcy5jdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwYWludFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQYWludFR5cGUuQ09MT1JFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdHggPSB0aGlzLmN0eDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gY3R4LmZpbGxTdHlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuc3Ryb2tlU3R5bGUgPSBjdHguc3Ryb2tlU3R5bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZpbGxDb2xvciA9IGN0eC5maWxsU3R5bGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnN0cm9rZUNvbG9yID0gY3R4LnN0cm9rZVN0eWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBQYWludFR5cGUuVU5DT0xPUkVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNzc0NvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKGNvbG9yWzBdLCBjb2xvclsxXSwgY29sb3JbMl0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGNzc0NvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zdHJva2VTdHlsZSA9IGNzc0NvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5maWxsQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc3Ryb2tlQ29sb3IgPSBjc3NDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgX3V0aWwuRm9ybWF0RXJyb3IoXCJVbnN1cHBvcnRlZCBwYWludCB0eXBlOiBcIi5jb25jYXQocGFpbnRUeXBlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFBhdHRlcm46IGZ1bmN0aW9uIFRpbGluZ1BhdHRlcm5fZ2V0UGF0dGVybihjdHgsIG93bmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXBvcmFyeVBhdHRlcm5DYW52YXMgPSB0aGlzLmNyZWF0ZVBhdHRlcm5DYW52YXMob3duZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuY3R4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkoY3R4LCB0aGlzLmJhc2VUcmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC50cmFuc2Zvcm0uYXBwbHkoY3R4LCB0aGlzLm1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2FsZVRvQ29udGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjdHguY3JlYXRlUGF0dGVybih0ZW1wb3JhcnlQYXR0ZXJuQ2FudmFzLCAncmVwZWF0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBUaWxpbmdQYXR0ZXJuO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuVGlsaW5nUGF0dGVybiA9IFRpbGluZ1BhdHRlcm47XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE1NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuR2xvYmFsV29ya2VyT3B0aW9ucyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICB2YXIgR2xvYmFsV29ya2VyT3B0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5HbG9iYWxXb3JrZXJPcHRpb25zID0gR2xvYmFsV29ya2VyT3B0aW9ucztcbiAgICAgICAgICAgICAgICBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnQgPSBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnQgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclBvcnQ7XG4gICAgICAgICAgICAgICAgR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9PT0gdW5kZWZpbmVkID8gJycgOiBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYztcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTU3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5NZXNzYWdlSGFuZGxlciA9IE1lc3NhZ2VIYW5kbGVyO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9yZWdlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDcpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNhbGwoX3gsIF94Mikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Jlc29sdmVDYWxsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3Jlc29sdmVDYWxsKCkge1xuICAgICAgICAgICAgICAgICAgICBfcmVzb2x2ZUNhbGwgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZShmbiwgYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0aGlzQXJnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0FyZyA9IF9hcmdzLmxlbmd0aCA+IDIgJiYgX2FyZ3NbMl0gIT09IHVuZGVmaW5lZCA/IF9hcmdzWzJdIDogbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3MpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXNvbHZlQ2FsbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyYXBSZWFzb24ocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdHlwZW9mKHJlYXNvbikgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyZWFzb24ubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQWJvcnRFeGNlcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdNaXNzaW5nUERGRXhjZXB0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24ocmVhc29uLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24uc3RhdHVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbihyZWFzb24ubWVzc2FnZSwgcmVhc29uLmRldGFpbHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gbWFrZVJlYXNvblNlcmlhbGl6YWJsZShyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVhc29uIGluc3RhbmNlb2YgRXJyb3IpIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLkFib3J0RXhjZXB0aW9uIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24gfHwgcmVhc29uIGluc3RhbmNlb2YgX3V0aWwuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIHx8IHJlYXNvbiBpbnN0YW5jZW9mIF91dGlsLlVua25vd25FcnJvckV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuVW5rbm93bkVycm9yRXhjZXB0aW9uKHJlYXNvbi5tZXNzYWdlLCByZWFzb24udG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZU9yUmVqZWN0KGNhcGFiaWxpdHksIHN1Y2Nlc3MsIHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZmluYWxpemUocHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb21pc2UpLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBNZXNzYWdlSGFuZGxlcihzb3VyY2VOYW1lLCB0YXJnZXROYW1lLCBjb21PYmopIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZU5hbWUgPSBzb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE5hbWUgPSB0YXJnZXROYW1lO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iaiA9IGNvbU9iajtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja0lkID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1JZCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVNpbmtzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1Db250cm9sbGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFja3NDYXBhYmlsaXRpZXMgPSB0aGlzLmNhbGxiYWNrc0NhcGFiaWxpdGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlciA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gZXZlbnQuZGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEudGFyZ2V0TmFtZSAhPT0gX3RoaXMuc291cmNlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLmlzUmVwbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FsbGJhY2tJZCA9IGRhdGEuY2FsbGJhY2tJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmNhbGxiYWNrSWQgaW4gY2FsbGJhY2tzQ2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IGNhbGxiYWNrc0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGNhbGxiYWNrc0NhcGFiaWxpdGllc1tjYWxsYmFja0lkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ2Vycm9yJyBpbiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5yZWplY3Qod3JhcFJlYXNvbihkYXRhLmVycm9yKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjay5yZXNvbHZlKGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayBcIi5jb25jYXQoY2FsbGJhY2tJZCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5hY3Rpb24gaW4gYWgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gYWhbZGF0YS5hY3Rpb25dO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuY2FsbGJhY2tJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3NvdXJjZU5hbWUgPSBfdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RhcmdldE5hbWUgPSBkYXRhLnNvdXJjZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjdGlvblswXS5jYWxsKGFjdGlvblsxXSwgZGF0YS5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21PYmoucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IF9zb3VyY2VOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IF90YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVwbHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJZDogZGF0YS5jYWxsYmFja0lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHJlc3VsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbU9iai5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogX3NvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogX3RhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXBseTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0lkOiBkYXRhLmNhbGxiYWNrSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IG1ha2VSZWFzb25TZXJpYWxpemFibGUocmVhc29uKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5zdHJlYW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fY3JlYXRlU3RyZWFtU2luayhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25bMF0uY2FsbChhY3Rpb25bMV0sIGRhdGEuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogXCIuY29uY2F0KGRhdGEuYWN0aW9uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgY29tT2JqLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgTWVzc2FnZUhhbmRsZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBvbjogZnVuY3Rpb24gb24oYWN0aW9uTmFtZSwgaGFuZGxlciwgc2NvcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhaCA9IHRoaXMuYWN0aW9uSGFuZGxlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFoW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCBcXFwiXCIuY29uY2F0KGFjdGlvbk5hbWUsIFwiXFxcIlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFoW2FjdGlvbk5hbWVdID0gW2hhbmRsZXIsIHNjb3BlXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2VuZDogZnVuY3Rpb24gc2VuZChhY3Rpb25OYW1lLCBkYXRhLCB0cmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGFcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVycyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHNlbmRXaXRoUHJvbWlzZTogZnVuY3Rpb24gc2VuZFdpdGhQcm9taXNlKGFjdGlvbk5hbWUsIGRhdGEsIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrSWQgPSB0aGlzLmNhbGxiYWNrSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZXNzYWdlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHRoaXMuc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0aGlzLnRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJZDogY2FsbGJhY2tJZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxsYmFja3NDYXBhYmlsaXRpZXNbY2FsbGJhY2tJZF0gPSBjYXBhYmlsaXR5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2VuZFdpdGhTdHJlYW06IGZ1bmN0aW9uIHNlbmRXaXRoU3RyZWFtKGFjdGlvbk5hbWUsIGRhdGEsIHF1ZXVlaW5nU3RyYXRlZ3ksIHRyYW5zZmVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2VOYW1lID0gdGhpcy5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldE5hbWUgPSB0aGlzLnRhcmdldE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IF91dGlsLlJlYWRhYmxlU3RyZWFtKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogZnVuY3Rpb24gc3RhcnQoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q2FsbDogc3RhcnRDYXBhYmlsaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiB0YXJnZXROYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb25OYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtSWQ6IHN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGFydENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bGw6IGZ1bmN0aW9uIHB1bGwoY29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHVsbENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5zdHJlYW1Db250cm9sbGVyc1tzdHJlYW1JZF0ucHVsbENhbGwgPSBwdWxsQ2FwYWJpbGl0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdwdWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBjb250cm9sbGVyLmRlc2lyZWRTaXplXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwdWxsQ2FwYWJpbGl0eS5wcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiBjYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW5jZWxDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmNhbmNlbENhbGwgPSBjYW5jZWxDYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuc3RyZWFtQ29udHJvbGxlcnNbc3RyZWFtSWRdLmlzQ2xvc2VkID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdjYW5jZWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JZDogc3RyZWFtSWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbmNlbENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBxdWV1ZWluZ1N0cmF0ZWd5KTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZVN0cmVhbVNpbms6IGZ1bmN0aW9uIF9jcmVhdGVTdHJlYW1TaW5rKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gdGhpcy5hY3Rpb25IYW5kbGVyW2RhdGEuYWN0aW9uXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW1JZCA9IGRhdGEuc3RyZWFtSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVzaXJlZFNpemUgPSBkYXRhLmRlc2lyZWRTaXplO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZU5hbWUgPSB0aGlzLnNvdXJjZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0TmFtZSA9IGRhdGEuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VuZFN0cmVhbVJlcXVlc3QgPSBmdW5jdGlvbiBzZW5kU3RyZWFtUmVxdWVzdChfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbSA9IF9yZWYuc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IF9yZWYuY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVycyA9IF9yZWYudHJhbnNmZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gX3JlZi5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gPSBfcmVmLnJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5hbWU6IHNvdXJjZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IHRhcmdldE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1JZDogc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzczogc3VjY2VzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0cmFuc2ZlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbVNpbmsgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5xdWV1ZTogZnVuY3Rpb24gZW5xdWV1ZShjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZmVycyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzQ2FuY2VsbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGFzdERlc2lyZWRTaXplID0gdGhpcy5kZXNpcmVkU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXNpcmVkU2l6ZSAtPSBzaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0RGVzaXJlZFNpemUgPiAwICYmIHRoaXMuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaW5rQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kU3RyZWFtUmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdlbnF1ZXVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZmVyczogdHJhbnNmZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2U6IGZ1bmN0aW9uIGNsb3NlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogJ2Nsb3NlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuc3RyZWFtU2lua3Nbc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0NhbmNlbGxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lua0NhcGFiaWxpdHk6IGNhcGFiaWxpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25QdWxsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2FuY2VsOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2FuY2VsbGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogZGVzaXJlZFNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZHk6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbVNpbmsucmVhZHkgPSBzdHJlYW1TaW5rLnNpbmtDYXBhYmlsaXR5LnByb21pc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbVNpbmtzW3N0cmVhbUlkXSA9IHN0cmVhbVNpbms7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FsbChhY3Rpb25bMF0sIFtkYXRhLmRhdGEsIHN0cmVhbVNpbmtdLCBhY3Rpb25bMV0pLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAnc3RhcnRfY29tcGxldGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN0cmVhbVJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdzdGFydF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb246IHJlYXNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9wcm9jZXNzU3RyZWFtTWVzc2FnZTogZnVuY3Rpb24gX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlTmFtZSA9IHRoaXMuc291cmNlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXROYW1lID0gZGF0YS5zb3VyY2VOYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0cmVhbUlkID0gZGF0YS5zdHJlYW1JZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbmRTdHJlYW1SZXNwb25zZSA9IGZ1bmN0aW9uIHNlbmRTdHJlYW1SZXNwb25zZShfcmVmMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHJlYW0gPSBfcmVmMi5zdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBfcmVmMi5zdWNjZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFzb24gPSBfcmVmMi5yZWFzb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuY29tT2JqLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTmFtZTogc291cmNlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZTogdGFyZ2V0TmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IHN1Y2Nlc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbUlkOiBzdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWxldGVTdHJlYW1Db250cm9sbGVyID0gZnVuY3Rpb24gZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9taXNlLmFsbChbX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLnN0YXJ0Q2FsbCwgX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLnB1bGxDYWxsLCBfdGhpczQuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY2FuY2VsQ2FsbF0ubWFwKGZ1bmN0aW9uIChjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYXBhYmlsaXR5ICYmIGZpbmFsaXplKGNhcGFiaWxpdHkucHJvbWlzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgX3RoaXM0LnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLnN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3N0YXJ0X2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU9yUmVqZWN0KHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uc3RhcnRDYWxsLCBkYXRhLnN1Y2Nlc3MsIHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdwdWxsX2NvbXBsZXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZU9yUmVqZWN0KHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0ucHVsbENhbGwsIGRhdGEuc3VjY2Vzcywgd3JhcFJlYXNvbihkYXRhLnJlYXNvbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3B1bGwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdLmRlc2lyZWRTaXplIDw9IDAgJiYgZGF0YS5kZXNpcmVkU2l6ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXS5kZXNpcmVkU2l6ZSA9IGRhdGEuZGVzaXJlZFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVDYWxsKHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0ub25QdWxsKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAncHVsbF9jb21wbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiByZWFzb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdlbnF1ZXVlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXSwgJ2VucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uaXNDbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGRhdGEuY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjbG9zZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0sICdjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlcicpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLmlzQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2RhdGEuc3RyZWFtSWRdLmNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXSwgJ2Vycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZGF0YS5zdHJlYW1JZF0uY29udHJvbGxlci5lcnJvcih3cmFwUmVhc29uKGRhdGEucmVhc29uKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZVN0cmVhbUNvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdjYW5jZWxfY29tcGxldGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlT3JSZWplY3QodGhpcy5zdHJlYW1Db250cm9sbGVyc1tkYXRhLnN0cmVhbUlkXS5jYW5jZWxDYWxsLCBkYXRhLnN1Y2Nlc3MsIHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlU3RyZWFtQ29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhbmNlbCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlQ2FsbCh0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdLm9uQ2FuY2VsLCBbd3JhcFJlYXNvbihkYXRhLnJlYXNvbildKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRTdHJlYW1SZXNwb25zZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtOiAnY2FuY2VsX2NvbXBsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFN0cmVhbVJlc3BvbnNlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW06ICdjYW5jZWxfY29tcGxldGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogcmVhc29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyZWFtU2lua3NbZGF0YS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KHdyYXBSZWFzb24oZGF0YS5yZWFzb24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJlYW1TaW5rc1tkYXRhLnN0cmVhbUlkXS5pc0NhbmNlbGxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW2RhdGEuc3RyZWFtSWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzdHJlYW0gY2FzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZTogZnVuY3Rpb24gcG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNmZXJzICYmIHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2ZlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTggKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLk1ldGFkYXRhID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfeG1sX3BhcnNlciA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTU5KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIE1ldGFkYXRhID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNZXRhZGF0YShkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE1ldGFkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJywgJ01ldGFkYXRhOiBpbnB1dCBpcyBub3QgYSBzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5fcmVwYWlyKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZXIgPSBuZXcgX3htbF9wYXJzZXIuU2ltcGxlWE1MUGFyc2VyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhtbERvY3VtZW50ID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tZXRhZGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeG1sRG9jdW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGFyc2UoeG1sRG9jdW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKE1ldGFkYXRhLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcmVwYWlyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9yZXBhaXIoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5yZXBsYWNlKC9eKFtePF0rKS8sICcnKS5yZXBsYWNlKC8+XFxcXDM3NlxcXFwzNzcoW148XSspL2csIGZ1bmN0aW9uIChhbGwsIGNvZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSBjb2Rlcy5yZXBsYWNlKC9cXFxcKFswLTNdKShbMC03XSkoWzAtN10pL2csIGZ1bmN0aW9uIChjb2RlLCBkMSwgZDIsIGQzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZDEgKiA2NCArIGQyICogOCArIGQzICogMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLCBmdW5jdGlvbiAoc3RyLCBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FtcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Fwb3MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXCcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbHQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdxdW90JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFxcIic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiX3JlcGFpcjogXCIuY29uY2F0KG5hbWUsIFwiIGlzbid0IGRlZmluZWQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJzID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGJ5dGVzLmxlbmd0aDsgaSA8IGlpOyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGJ5dGVzLmNoYXJDb2RlQXQoaSkgKiAyNTYgKyBieXRlcy5jaGFyQ29kZUF0KGkgKyAxKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID49IDMyICYmIGNvZGUgPCAxMjcgJiYgY29kZSAhPT0gNjAgJiYgY29kZSAhPT0gNjIgJiYgY29kZSAhPT0gMzgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFycyArPSAnJiN4JyArICgweDEwMDAwICsgY29kZSkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSArICc7JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnPicgKyBjaGFycztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcGFyc2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3BhcnNlKHhtbERvY3VtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZGYgPSB4bWxEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJkZi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAncmRmOnJkZicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJkZiA9IHJkZi5maXJzdENoaWxkO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmRmICYmIHJkZi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSAncmRmOnJkZicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZGYgPSByZGYubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZU5hbWUgPSByZGYgPyByZGYubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZGYgfHwgbm9kZU5hbWUgIT09ICdyZGY6cmRmJyB8fCAhcmRmLmhhc0NoaWxkTm9kZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoaWxkcmVuID0gcmRmLmNoaWxkTm9kZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlc2MgPSBjaGlsZHJlbltpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc2Mubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gJ3JkZjpkZXNjcmlwdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0gZGVzYy5jaGlsZE5vZGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzYy5jaGlsZE5vZGVzW2pdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICcjdGV4dCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gZGVzYy5jaGlsZE5vZGVzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGVudHJ5Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21ldGFkYXRhW25hbWVdID0gZW50cnkudGV4dENvbnRlbnQudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5fbWV0YWRhdGFbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0eXBlb2YgZGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBkYXRhIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEFsbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRBbGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tZXRhZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImhhc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYXMobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuX21ldGFkYXRhW25hbWVdICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNZXRhZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5NZXRhZGF0YSA9IE1ldGFkYXRhO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNTkgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlNpbXBsZVhNTFBhcnNlciA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKGNhbGwgJiYgKF90eXBlb2YoY2FsbCkgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikpIHsgcmV0dXJuIGNhbGw7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikgeyBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gc2VsZjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikgeyBpZiAodHlwZW9mIFJlZmxlY3QgIT09IFwidW5kZWZpbmVkXCIgJiYgUmVmbGVjdC5nZXQpIHsgX2dldCA9IFJlZmxlY3QuZ2V0OyB9IGVsc2UgeyBfZ2V0ID0gZnVuY3Rpb24gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlcikgeyB2YXIgYmFzZSA9IF9zdXBlclByb3BCYXNlKHRhcmdldCwgcHJvcGVydHkpOyBpZiAoIWJhc2UpIHJldHVybjsgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2UsIHByb3BlcnR5KTsgaWYgKGRlc2MuZ2V0KSB7IHJldHVybiBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKTsgfSByZXR1cm4gZGVzYy52YWx1ZTsgfTsgfSByZXR1cm4gX2dldCh0YXJnZXQsIHByb3BlcnR5LCByZWNlaXZlciB8fCB0YXJnZXQpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc3VwZXJQcm9wQmFzZShvYmplY3QsIHByb3BlcnR5KSB7IHdoaWxlICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpKSB7IG9iamVjdCA9IF9nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAob2JqZWN0ID09PSBudWxsKSBicmVhazsgfSByZXR1cm4gb2JqZWN0OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YgOiBmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pOyB9OyByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZihvLCBwKSB7IG8uX19wcm90b19fID0gcDsgcmV0dXJuIG87IH07IHJldHVybiBfc2V0UHJvdG90eXBlT2YobywgcCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFhNTFBhcnNlckVycm9yQ29kZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgTm9FcnJvcjogMCxcbiAgICAgICAgICAgICAgICAgICAgRW5kT2ZEb2N1bWVudDogLTEsXG4gICAgICAgICAgICAgICAgICAgIFVudGVybWluYXRlZENkYXQ6IC0yLFxuICAgICAgICAgICAgICAgICAgICBVbnRlcm1pbmF0ZWRYbWxEZWNsYXJhdGlvbjogLTMsXG4gICAgICAgICAgICAgICAgICAgIFVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbjogLTQsXG4gICAgICAgICAgICAgICAgICAgIFVudGVybWluYXRlZENvbW1lbnQ6IC01LFxuICAgICAgICAgICAgICAgICAgICBNYWxmb3JtZWRFbGVtZW50OiAtNixcbiAgICAgICAgICAgICAgICAgICAgT3V0T2ZNZW1vcnk6IC03LFxuICAgICAgICAgICAgICAgICAgICBVbnRlcm1pbmF0ZWRBdHRyaWJ1dGVWYWx1ZTogLTgsXG4gICAgICAgICAgICAgICAgICAgIFVudGVybWluYXRlZEVsZW1lbnQ6IC05LFxuICAgICAgICAgICAgICAgICAgICBFbGVtZW50TmV2ZXJCZWd1bjogLTEwXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzV2hpdGVzcGFjZShzLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY2ggPSBzW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoID09PSAnICcgfHwgY2ggPT09ICdcXG4nIHx8IGNoID09PSAnXFxyJyB8fCBjaCA9PT0gJ1xcdCc7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlU3RyaW5nKHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZShzLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBYTUxQYXJzZXJCYXNlID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBYTUxQYXJzZXJCYXNlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBYTUxQYXJzZXJCYXNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFhNTFBhcnNlckJhc2UsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9yZXNvbHZlRW50aXRpZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3Jlc29sdmVFbnRpdGllcyhzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvJihbXjtdKyk7L2csIGZ1bmN0aW9uIChhbGwsIGVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eS5zdWJzdHJpbmcoMCwgMikgPT09ICcjeCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlbnRpdHkuc3Vic3RyaW5nKDIpLCAxNikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRpdHkuc3Vic3RyaW5nKDAsIDEpID09PSAnIycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChlbnRpdHkuc3Vic3RyaW5nKDEpLCAxMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVudGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2x0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2d0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc+JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2FtcCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdxdW90JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXFwiJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLm9uUmVzb2x2ZUVudGl0eShlbnRpdHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9wYXJzZUNvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3BhcnNlQ29udGVudChzLCBzdGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHNraXBXcygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiBpc1doaXRlc3BhY2UocywgcG9zKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09ICc+JyAmJiBzW3Bvc10gIT09ICcvJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytwb3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gcy5zdWJzdHJpbmcoc3RhcnQsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBXcygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiBzW3Bvc10gIT09ICc+JyAmJiBzW3Bvc10gIT09ICcvJyAmJiBzW3Bvc10gIT09ICc/Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFdzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXR0ck5hbWUgPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyVmFsdWUgPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcyA8IHMubGVuZ3RoICYmICFpc1doaXRlc3BhY2UocywgcG9zKSAmJiBzW3Bvc10gIT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJOYW1lICs9IHNbcG9zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFdzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW3Bvc10gIT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBXcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJFbmRDaGFyID0gc1twb3NdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ckVuZENoYXIgIT09ICdcXFwiJyAmJiBhdHRyRW5kQ2hhciAhPT0gJ1xcJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJFbmRJbmRleCA9IHMuaW5kZXhPZihhdHRyRW5kQ2hhciwgKytwb3MpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ckVuZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyVmFsdWUgPSBzLnN1YnN0cmluZyhwb3MsIGF0dHJFbmRJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGF0dHJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9yZXNvbHZlRW50aXRpZXMoYXR0clZhbHVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBhdHRyRW5kSW5kZXggKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFdzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWQ6IHBvcyAtIHN0YXJ0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKHMsIHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3MgPSBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBza2lwV3MoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgaXNXaGl0ZXNwYWNlKHMsIHBvcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3BvcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwb3MgPCBzLmxlbmd0aCAmJiAhaXNXaGl0ZXNwYWNlKHMsIHBvcykgJiYgc1twb3NdICE9PSAnPicgJiYgc1twb3NdICE9PSAnLycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHMuc3Vic3RyaW5nKHN0YXJ0LCBwb3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwV3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGF0dHJTdGFydCA9IHBvcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocG9zIDwgcy5sZW5ndGggJiYgKHNbcG9zXSAhPT0gJz8nIHx8IHNbcG9zICsgMV0gIT09ICc+JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzLnN1YnN0cmluZyhhdHRyU3RhcnQsIHBvcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkOiBwb3MgLSBzdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicGFyc2VYbWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcGFyc2VYbWwocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBqID0gaTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09PSAnPCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2o7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoMiA9IHNbal07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrajtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoJz4nLCBqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FbmRFbGVtZW50KHMuc3Vic3RyaW5nKGosIHEpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBxICsgMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJz8nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytqO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGkgPSB0aGlzLl9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihzLCBqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyBwaS5wYXJzZWQsIGogKyBwaS5wYXJzZWQgKyAyKSAhPT0gJz8+Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25FcnJvcihYTUxQYXJzZXJFcnJvckNvZGUuVW50ZXJtaW5hdGVkWG1sRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblBpKHBpLm5hbWUsIHBpLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gcGkucGFyc2VkICsgMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyEnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuc3Vic3RyaW5nKGogKyAxLCBqICsgMykgPT09ICctLScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKCctLT4nLCBqICsgMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRDb21tZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Db21tZW50KHMuc3Vic3RyaW5nKGogKyAzLCBxKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiA9IHEgKyAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgMSwgaiArIDgpID09PSAnW0NEQVRBWycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxID0gcy5pbmRleE9mKCddXT4nLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWRDZGF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DZGF0YShzLnN1YnN0cmluZyhqICsgOCwgcSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBxICsgMztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdWJzdHJpbmcoaiArIDEsIGogKyA4KSA9PT0gJ0RPQ1RZUEUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHEyID0gcy5pbmRleE9mKCdbJywgaiArIDgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21wbGV4RG9jdHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEgPSBzLmluZGV4T2YoJz4nLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5VbnRlcm1pbmF0ZWREb2N0eXBlRGVjbGFyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEyID4gMCAmJiBxID4gcTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcSA9IHMuaW5kZXhPZignXT4nLCBqICsgOCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHEgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZERvY3R5cGVEZWNsYXJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4RG9jdHlwZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRvY3R5cGVDb250ZW50ID0gcy5zdWJzdHJpbmcoaiArIDgsIHEgKyAoY29tcGxleERvY3R5cGUgPyAxIDogMCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Eb2N0eXBlKGRvY3R5cGVDb250ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqID0gcSArIChjb21wbGV4RG9jdHlwZSA/IDIgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKFhNTFBhcnNlckVycm9yQ29kZS5NYWxmb3JtZWRFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudCA9IHRoaXMuX3BhcnNlQ29udGVudChzLCBqKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLk1hbGZvcm1lZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzQ2xvc2VkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLnN1YnN0cmluZyhqICsgY29udGVudC5wYXJzZWQsIGogKyBjb250ZW50LnBhcnNlZCArIDIpID09PSAnLz4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzLnN1YnN0cmluZyhqICsgY29udGVudC5wYXJzZWQsIGogKyBjb250ZW50LnBhcnNlZCArIDEpICE9PSAnPicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoWE1MUGFyc2VyRXJyb3JDb2RlLlVudGVybWluYXRlZEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkJlZ2luRWxlbWVudChjb250ZW50Lm5hbWUsIGNvbnRlbnQuYXR0cmlidXRlcywgaXNDbG9zZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSBjb250ZW50LnBhcnNlZCArIChpc0Nsb3NlZCA/IDIgOiAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBzLmxlbmd0aCAmJiBzW2pdICE9PSAnPCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaisrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0ID0gcy5zdWJzdHJpbmcoaSwgaik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblRleHQodGhpcy5fcmVzb2x2ZUVudGl0aWVzKHRleHQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9IGo7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUmVzb2x2ZUVudGl0eVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvblJlc29sdmVFbnRpdHkobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCImXCIuY29uY2F0KG5hbWUsIFwiO1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uUGlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25QaShuYW1lLCB2YWx1ZSkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25Db21tZW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ29tbWVudCh0ZXh0KSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkNkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2RhdGEodGV4dCkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25Eb2N0eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRG9jdHlwZShkb2N0eXBlQ29udGVudCkge31cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25UZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uVGV4dCh0ZXh0KSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkJlZ2luRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbkJlZ2luRWxlbWVudChuYW1lLCBhdHRyaWJ1dGVzLCBpc0VtcHR5KSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkVuZEVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25FbmRFbGVtZW50KG5hbWUpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uRXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25FcnJvcihjb2RlKSB7fVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWE1MUGFyc2VyQmFzZTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNpbXBsZURPTU5vZGUgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNpbXBsZURPTU5vZGUobm9kZU5hbWUsIG5vZGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTaW1wbGVET01Ob2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZU5hbWUgPSBub2RlTmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vZGVWYWx1ZSA9IG5vZGVWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3BhcmVudE5vZGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoU2ltcGxlRE9NTm9kZSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaGFzQ2hpbGROb2Rlc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBoYXNDaGlsZE5vZGVzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzICYmIHRoaXMuY2hpbGROb2Rlcy5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZmlyc3RDaGlsZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVzICYmIHRoaXMuY2hpbGROb2Rlc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm5leHRTaWJsaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGlsZE5vZGVzID0gdGhpcy5wYXJlbnROb2RlLmNoaWxkTm9kZXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZE5vZGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gY2hpbGROb2Rlcy5pbmRleE9mKHRoaXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGROb2Rlc1tpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwidGV4dENvbnRlbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoaWxkTm9kZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGVWYWx1ZSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNoaWxkTm9kZXMubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnRleHRDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTaW1wbGVET01Ob2RlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU2ltcGxlWE1MUGFyc2VyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1hNTFBhcnNlckJhc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhTaW1wbGVYTUxQYXJzZXIsIF9YTUxQYXJzZXJCYXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU2ltcGxlWE1MUGFyc2VyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU2ltcGxlWE1MUGFyc2VyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihTaW1wbGVYTUxQYXJzZXIpLmNhbGwodGhpcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fY3VycmVudEZyYWdtZW50ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3N0YWNrID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX2Vycm9yQ29kZSA9IFhNTFBhcnNlckVycm9yQ29kZS5Ob0Vycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTaW1wbGVYTUxQYXJzZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInBhcnNlRnJvbVN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBwYXJzZUZyb21TdHJpbmcoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JDb2RlID0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyc2VYbWwoZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yQ29kZSAhPT0gWE1MUGFyc2VyRXJyb3JDb2RlLk5vRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMkX2N1cnJlbnRGcmFnbWVuID0gX3NsaWNlZFRvQXJyYXkodGhpcy5fY3VycmVudEZyYWdtZW50LCAxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IF90aGlzJF9jdXJyZW50RnJhZ21lblswXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQ6IGRvY3VtZW50RWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25SZXNvbHZlRW50aXR5XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uUmVzb2x2ZUVudGl0eShuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnYXBvcyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXCcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9nZXQoX2dldFByb3RvdHlwZU9mKFNpbXBsZVhNTFBhcnNlci5wcm90b3R5cGUpLCBcIm9uUmVzb2x2ZUVudGl0eVwiLCB0aGlzKS5jYWxsKHRoaXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25UZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uVGV4dCh0ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc1doaXRlc3BhY2VTdHJpbmcodGV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub2RlID0gbmV3IFNpbXBsZURPTU5vZGUoJyN0ZXh0JywgdGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkNkYXRhXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uQ2RhdGEodGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKCcjdGV4dCcsIHRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwib25CZWdpbkVsZW1lbnRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gb25CZWdpbkVsZW1lbnQobmFtZSwgYXR0cmlidXRlcywgaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IG5ldyBTaW1wbGVET01Ob2RlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmNoaWxkTm9kZXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChub2RlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50RnJhZ21lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRGcmFnbWVudCA9IG5vZGUuY2hpbGROb2RlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIm9uRW5kRWxlbWVudFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvbkVuZEVsZW1lbnQobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50RnJhZ21lbnQgPSB0aGlzLl9zdGFjay5wb3AoKSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxhc3RFbGVtZW50ID0gdGhpcy5fY3VycmVudEZyYWdtZW50W3RoaXMuX2N1cnJlbnRGcmFnbWVudC5sZW5ndGggLSAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxhc3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBsYXN0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFbGVtZW50LmNoaWxkTm9kZXNbaV0ucGFyZW50Tm9kZSA9IGxhc3RFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJvbkVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9uRXJyb3IoY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvckNvZGUgPSBjb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNpbXBsZVhNTFBhcnNlcjtcbiAgICAgICAgICAgICAgICAgICAgfShYTUxQYXJzZXJCYXNlKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuU2ltcGxlWE1MUGFyc2VyID0gU2ltcGxlWE1MUGFyc2VyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNjAgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlBERkRhdGFUcmFuc3BvcnRTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0NykpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZEYXRhVHJhbnNwb3J0U3RyZWFtID0gZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbUNsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkRhdGFUcmFuc3BvcnRTdHJlYW0ocGFyYW1zLCBwZGZEYXRhUmFuZ2VUcmFuc3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC5hc3NlcnQpKHBkZkRhdGFSYW5nZVRyYW5zcG9ydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbml0aWFsRGF0YSA9IHBhcmFtcy5pbml0aWFsRGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluaXRpYWxEYXRhICYmIGluaXRpYWxEYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoaW5pdGlhbERhdGEpLmJ1ZmZlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydCA9IHBkZkRhdGFSYW5nZVRyYW5zcG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gIXBhcmFtcy5kaXNhYmxlU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9ICFwYXJhbXMuZGlzYWJsZVJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHBhcmFtcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZVJlYWRlcnMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGRmRGF0YVJhbmdlVHJhbnNwb3J0LmFkZFJhbmdlTGlzdGVuZXIoZnVuY3Rpb24gKGJlZ2luLCBjaHVuaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9vblJlY2VpdmVEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IGJlZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogY2h1bmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcihmdW5jdGlvbiAobG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX29uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IGxvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hZGRQcm9ncmVzc2l2ZVJlYWRMaXN0ZW5lcihmdW5jdGlvbiAoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fb25SZWNlaXZlRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC50cmFuc3BvcnRSZWFkeSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUERGRGF0YVRyYW5zcG9ydFN0cmVhbS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfb25SZWNlaXZlRGF0YTogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbV9vblJlY2VpdmVEYXRhKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoYXJncy5jaHVuaykuYnVmZmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MuYmVnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLl9lbnF1ZXVlKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVua3MucHVzaChidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvdW5kID0gdGhpcy5fcmFuZ2VSZWFkZXJzLnNvbWUoZnVuY3Rpb24gKHJhbmdlUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmFuZ2VSZWFkZXIuX2JlZ2luICE9PSBhcmdzLmJlZ2luKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZVJlYWRlci5fZW5xdWV1ZShidWZmZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoZm91bmQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfb25Qcm9ncmVzczogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbV9vbkRhdGFQcm9ncmVzcyhldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmFuZ2VSZWFkZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0UmVhZGVyID0gdGhpcy5fcmFuZ2VSZWFkZXJzWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFJlYWRlci5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFJlYWRlci5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IGV2dC5sb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9yZW1vdmVSYW5nZVJlYWRlcjogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbV9yZW1vdmVSYW5nZVJlYWRlcihyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHRoaXMuX3JhbmdlUmVhZGVycy5pbmRleE9mKHJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVhZGVycy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEZ1bGxSZWFkZXI6IGZ1bmN0aW9uIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1fZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBxdWV1ZWRDaHVua3MgPSB0aGlzLl9xdWV1ZWRDaHVua3M7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SZWFkZXIodGhpcywgcXVldWVkQ2h1bmtzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRSYW5nZVJlYWRlcjogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbV9nZXRSYW5nZVJlYWRlcihiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgYmVnaW4sIGVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZShiZWdpbiwgZW5kKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbEFsbFJlcXVlc3RzOiBmdW5jdGlvbiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtX2NhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVhZGVycy5zbGljZSgwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmFuZ2VSZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VSZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWJvcnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyKHN0cmVhbSwgcXVldWVkQ2h1bmtzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVua3MgPSBxdWV1ZWRDaHVua3MgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc1JlYWR5ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uX2Z1bGxSZXF1ZXN0UmVhZGVyID0gdGhpcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9lbnF1ZXVlOiBmdW5jdGlvbiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmVhZGVyX2VucXVldWUoY2h1bmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlcXVlc3RDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGhlYWRlcnNSZWFkeSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGZpbGVuYW1lKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBpc1JhbmdlU3VwcG9ydGVkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdHJlYW0uX2lzUmFuZ2VTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmVhbS5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgY29udGVudExlbmd0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RyZWFtLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVhZCA9IF9hc3luY1RvR2VuZXJhdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuaywgcmVxdWVzdENhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh0aGlzLl9xdWV1ZWRDaHVua3MubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5fcXVldWVkQ2h1bmtzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHJlcXVlc3RDYXBhYmlsaXR5LnByb21pc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gUERGRGF0YVRyYW5zcG9ydFN0cmVhbVJlYWRlcl9jYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXIoc3RyZWFtLCBiZWdpbiwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdHJlYW0gPSBzdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iZWdpbiA9IGJlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5kID0gZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBQREZEYXRhVHJhbnNwb3J0U3RyZWFtUmFuZ2VSZWFkZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2VucXVldWU6IGZ1bmN0aW9uIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcl9lbnF1ZXVlKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9yZXF1ZXN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdHNDYXBhYmlsaXR5ID0gdGhpcy5fcmVxdWVzdHMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0c0NhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVhZDIgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rLCByZXF1ZXN0Q2FwYWJpbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3F1ZXVlZENodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMucHVzaChyZXF1ZXN0Q2FwYWJpbGl0eSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImVuZFwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uIFBERkRhdGFUcmFuc3BvcnRTdHJlYW1SYW5nZVJlYWRlcl9jYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZEYXRhVHJhbnNwb3J0U3RyZWFtO1xuICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRGF0YVRyYW5zcG9ydFN0cmVhbSA9IFBERkRhdGFUcmFuc3BvcnRTdHJlYW07XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2MSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuV2ViR0xDb250ZXh0ID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgdmFyIFdlYkdMQ29udGV4dCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gV2ViR0xDb250ZXh0KF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlZiRlbmFibGUgPSBfcmVmLmVuYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlID0gX3JlZiRlbmFibGUgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZiRlbmFibGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV2ViR0xDb250ZXh0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuYWJsZWQgPSBlbmFibGUgPT09IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhXZWJHTENvbnRleHQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbXBvc2VTTWFza1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb3NlU01hc2soX3JlZjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxheWVyID0gX3JlZjIubGF5ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrID0gX3JlZjIubWFzayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBfcmVmMi5wcm9wZXJ0aWVzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVdGlscy5jb21wb3NlU01hc2sobGF5ZXIsIG1hc2ssIHByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZHJhd0ZpZ3VyZXNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZHJhd0ZpZ3VyZXMoX3JlZjMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gX3JlZjMud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBfcmVmMy5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBfcmVmMy5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVzID0gX3JlZjMuZmlndXJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBfcmVmMy5jb250ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVdGlscy5kcmF3RmlndXJlcyh3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kQ29sb3IsIGZpZ3VyZXMsIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2xlYXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYkdMVXRpbHMuY2xlYW51cCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNFbmFibGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmFibGVkID0gdGhpcy5fZW5hYmxlZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCA9IFdlYkdMVXRpbHMudHJ5SW5pdEdMKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDAsIF91dGlsLnNoYWRvdykodGhpcywgJ2lzRW5hYmxlZCcsIGVuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMQ29udGV4dDtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5XZWJHTENvbnRleHQgPSBXZWJHTENvbnRleHQ7XG5cbiAgICAgICAgICAgICAgICB2YXIgV2ViR0xVdGlscyA9IGZ1bmN0aW9uIFdlYkdMVXRpbHNDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBsb2FkU2hhZGVyKGdsLCBjb2RlLCBzaGFkZXJUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2hhZGVyID0gZ2wuY3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuc2hhZGVyU291cmNlKHNoYWRlciwgY29kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5jb21waWxlU2hhZGVyKHNoYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tcGlsZWQgPSBnbC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uOiAnICsgZXJyb3JNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVmVydGV4U2hhZGVyKGdsLCBjb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZFNoYWRlcihnbCwgY29kZSwgZ2wuVkVSVEVYX1NIQURFUik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudFNoYWRlcihnbCwgY29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIGNvZGUsIGdsLkZSQUdNRU5UX1NIQURFUik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9ncmFtKGdsLCBzaGFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gc2hhZGVycy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5saW5rUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5rZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNc2cgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIGR1cmluZyBwcm9ncmFtIGxpbmtpbmc6ICcgKyBlcnJvck1zZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9ncmFtO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVGV4dHVyZShnbCwgaW1hZ2UsIHRleHR1cmVJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYWN0aXZlVGV4dHVyZSh0ZXh0dXJlSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0dXJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9XUkFQX1MsIGdsLkNMQU1QX1RPX0VER0UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfVCwgZ2wuQ0xBTVBfVE9fRURHRSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRHTCwgY3VycmVudENhbnZhcztcblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZUdMKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRHTCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudEdMID0gY3VycmVudENhbnZhcy5nZXRDb250ZXh0KCd3ZWJnbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVtdWx0aXBsaWVkYWxwaGE6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBzbWFza1ZlcnRleFNoYWRlckNvZGUgPSAnXFxcbiAgYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICBhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2b2lkIG1haW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgdmVjMiBjbGlwU3BhY2UgPSAoYV9wb3NpdGlvbiAvIHVfcmVzb2x1dGlvbikgKiAyLjAgLSAxLjA7ICAgXFxcbiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoY2xpcFNwYWNlICogdmVjMigxLCAtMSksIDAsIDEpOyAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnO1xuICAgICAgICAgICAgICAgICAgICB2YXIgc21hc2tGcmFnbWVudFNoYWRlckNvZGUgPSAnXFxcbiAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gdmVjNCB1X2JhY2tkcm9wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSBpbnQgdV9zdWJ0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHNhbXBsZXIyRCB1X2ltYWdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gc2FtcGxlcjJEIHVfbWFzazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIHZlYzQgaW1hZ2VDb2xvciA9IHRleHR1cmUyRCh1X2ltYWdlLCB2X3RleENvb3JkKTsgICAgICAgICAgIFxcXG4gICAgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQodV9tYXNrLCB2X3RleENvb3JkKTsgICAgICAgICAgICAgXFxcbiAgICBpZiAodV9iYWNrZHJvcC5hID4gMC4wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgbWFza0NvbG9yLnJnYiA9IG1hc2tDb2xvci5yZ2IgKiBtYXNrQ29sb3IuYSArICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgdV9iYWNrZHJvcC5yZ2IgKiAoMS4wIC0gbWFza0NvbG9yLmEpOyAgICAgXFxcbiAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGZsb2F0IGx1bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgaWYgKHVfc3VidHlwZSA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgIGx1bSA9IG1hc2tDb2xvci5hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICBsdW0gPSBtYXNrQ29sb3IuciAqIDAuMyArIG1hc2tDb2xvci5nICogMC41OSArICAgICAgICAgICAgXFxcbiAgICAgICAgICAgIG1hc2tDb2xvci5iICogMC4xMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgaW1hZ2VDb2xvci5hICo9IGx1bTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICBpbWFnZUNvbG9yLnJnYiAqPSBpbWFnZUNvbG9yLmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGdsX0ZyYWdDb2xvciA9IGltYWdlQ29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNtYXNrQ2FjaGUgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGluaXRTbWFza0dMKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNhbnZhcywgZ2w7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUdMKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSBjdXJyZW50Q2FudmFzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENhbnZhcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbCA9IGN1cnJlbnRHTDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRHTCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGV4U2hhZGVyID0gY3JlYXRlVmVydGV4U2hhZGVyKGdsLCBzbWFza1ZlcnRleFNoYWRlckNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gY3JlYXRlRnJhZ21lbnRTaGFkZXIoZ2wsIHNtYXNrRnJhZ21lbnRTaGFkZXJDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbShnbCwgW3ZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmdsID0gZ2w7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5jYW52YXMgPSBjYW52YXM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VfcmVzb2x1dGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUucG9zaXRpb25Mb2NhdGlvbiA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICdhX3Bvc2l0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5iYWNrZHJvcExvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICd1X2JhY2tkcm9wJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zdWJ0eXBlTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3Vfc3VidHlwZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleENvb3JkTG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAnYV90ZXhDb29yZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleExheWVyTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VfaW1hZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXhNYXNrTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgJ3VfbWFzaycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleENvb3JkQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdGV4Q29vcmRCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWzAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMS4wLCAxLjAsIDAuMCwgMS4wLCAxLjBdKSwgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkodGV4Q29vcmRMb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHRleENvb3JkTG9jYXRpb24sIDIsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWkodGV4TGF5ZXJMb2NhdGlvbiwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMWkodGV4TWFza0xvY2F0aW9uLCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYXNrQ2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvbXBvc2VTTWFzayhsYXllciwgbWFzaywgcHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gbGF5ZXIud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID0gbGF5ZXIuaGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNtYXNrQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0U21hc2tHTCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FjaGUgPSBzbWFza0NhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcyA9IGNhY2hlLmNhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbCA9IGNhY2hlLmdsO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudmlld3BvcnQoMCwgMCwgZ2wuZHJhd2luZ0J1ZmZlcldpZHRoLCBnbC5kcmF3aW5nQnVmZmVySGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0yZihjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24sIHdpZHRoLCBoZWlnaHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydGllcy5iYWNrZHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm00ZihjYWNoZS5yZXNvbHV0aW9uTG9jYXRpb24sIHByb3BlcnRpZXMuYmFja2Ryb3BbMF0sIHByb3BlcnRpZXMuYmFja2Ryb3BbMV0sIHByb3BlcnRpZXMuYmFja2Ryb3BbMl0sIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtNGYoY2FjaGUucmVzb2x1dGlvbkxvY2F0aW9uLCAwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTFpKGNhY2hlLnN1YnR5cGVMb2NhdGlvbiwgcHJvcGVydGllcy5zdWJ0eXBlID09PSAnTHVtaW5vc2l0eScgPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dHVyZSA9IGNyZWF0ZVRleHR1cmUoZ2wsIGxheWVyLCBnbC5URVhUVVJFMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWFza1RleHR1cmUgPSBjcmVhdGVUZXh0dXJlKGdsLCBtYXNrLCBnbC5URVhUVVJFMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCB3aWR0aCwgMCwgMCwgaGVpZ2h0LCAwLCBoZWlnaHQsIHdpZHRoLCAwLCB3aWR0aCwgaGVpZ2h0XSksIGdsLlNUQVRJQ19EUkFXKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGNhY2hlLnBvc2l0aW9uTG9jYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihjYWNoZS5wb3NpdGlvbkxvY2F0aW9uLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmVuYWJsZShnbC5CTEVORCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5ibGVuZEZ1bmMoZ2wuT05FLCBnbC5PTkVfTUlOVVNfU1JDX0FMUEhBKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZmx1c2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5kZWxldGVUZXh0dXJlKG1hc2tUZXh0dXJlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcihidWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWd1cmVzVmVydGV4U2hhZGVyQ29kZSA9ICdcXFxuICBhdHRyaWJ1dGUgdmVjMiBhX3Bvc2l0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIGF0dHJpYnV0ZSB2ZWMzIGFfY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB1bmlmb3JtIHZlYzIgdV9yZXNvbHV0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHVuaWZvcm0gdmVjMiB1X3NjYWxlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdW5pZm9ybSB2ZWMyIHVfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIHZhcnlpbmcgdmVjNCB2X2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2b2lkIG1haW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgdmVjMiBwb3NpdGlvbiA9IChhX3Bvc2l0aW9uICsgdV9vZmZzZXQpICogdV9zY2FsZTsgICAgICAgICAgXFxcbiAgICB2ZWMyIGNsaXBTcGFjZSA9IChwb3NpdGlvbiAvIHVfcmVzb2x1dGlvbikgKiAyLjAgLSAxLjA7ICAgICBcXFxuICAgIGdsX1Bvc2l0aW9uID0gdmVjNChjbGlwU3BhY2UgKiB2ZWMyKDEsIC0xKSwgMCwgMSk7ICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICB2X2NvbG9yID0gdmVjNChhX2NvbG9yIC8gMjU1LjAsIDEuMCk7ICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc7XG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWd1cmVzRnJhZ21lbnRTaGFkZXJDb2RlID0gJ1xcXG4gIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICB2YXJ5aW5nIHZlYzQgdl9jb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcbiAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxuICAgIGdsX0ZyYWdDb2xvciA9IHZfY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXG4gIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpZ3VyZXNDYWNoZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gaW5pdEZpZ3VyZXNHTCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW52YXMsIGdsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVHTCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzID0gY3VycmVudENhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDYW52YXMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wgPSBjdXJyZW50R0w7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50R0wgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRleFNoYWRlciA9IGNyZWF0ZVZlcnRleFNoYWRlcihnbCwgZmlndXJlc1ZlcnRleFNoYWRlckNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZyYWdtZW50U2hhZGVyID0gY3JlYXRlRnJhZ21lbnRTaGFkZXIoZ2wsIGZpZ3VyZXNGcmFnbWVudFNoYWRlckNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKGdsLCBbdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuZ2wgPSBnbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLmNhbnZhcyA9IGNhbnZhcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnJlc29sdXRpb25Mb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAndV9yZXNvbHV0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5zY2FsZUxvY2F0aW9uID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICd1X3NjYWxlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5vZmZzZXRMb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAndV9vZmZzZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnBvc2l0aW9uTG9jYXRpb24gPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAnYV9wb3NpdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUuY29sb3JMb2NhdGlvbiA9IGdsLmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICdhX2NvbG9yJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVzQ2FjaGUgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRyYXdGaWd1cmVzKHdpZHRoLCBoZWlnaHQsIGJhY2tncm91bmRDb2xvciwgZmlndXJlcywgY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaWd1cmVzQ2FjaGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0RmlndXJlc0dMKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYWNoZSA9IGZpZ3VyZXNDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSBjYWNoZS5jYW52YXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2wgPSBjYWNoZS5nbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIGdsLmRyYXdpbmdCdWZmZXJXaWR0aCwgZ2wuZHJhd2luZ0J1ZmZlckhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC51bmlmb3JtMmYoY2FjaGUucmVzb2x1dGlvbkxvY2F0aW9uLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSwgaWksIHJvd3M7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZmlndXJlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChmaWd1cmVzW2ldLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGF0dGljZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzID0gZmlndXJlc1tpXS5jb29yZHMubGVuZ3RoIC8gZmlndXJlc1tpXS52ZXJ0aWNlc1BlclJvdyB8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCArPSAocm93cyAtIDEpICogKGZpZ3VyZXNbaV0udmVydGljZXNQZXJSb3cgLSAxKSAqIDY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0cmlhbmdsZXMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gZmlndXJlc1tpXS5jb29yZHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzID0gbmV3IEZsb2F0MzJBcnJheShjb3VudCAqIDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9ycyA9IG5ldyBVaW50OEFycmF5KGNvdW50ICogMyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29vcmRzTWFwID0gY29udGV4dC5jb29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzTWFwID0gY29udGV4dC5jb2xvcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcEluZGV4ID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjSW5kZXggPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGZpZ3VyZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaWd1cmUgPSBmaWd1cmVzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcyA9IGZpZ3VyZS5jb29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNzID0gZmlndXJlLmNvbG9ycztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmlndXJlLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGF0dGljZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29scyA9IGZpZ3VyZS52ZXJ0aWNlc1BlclJvdztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3MgPSBwcy5sZW5ndGggLyBjb2xzIHwgMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcm93ID0gMTsgcm93IDwgcm93czsgcm93KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gcm93ICogY29scyArIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBjb2wgPSAxOyBjb2wgPCBjb2xzOyBjb2wrKywgb2Zmc2V0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleF0gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29scyAtIDFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDFdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIGNvbHMgLSAxXSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMl0gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29sc11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgM10gPSBjb29yZHNNYXBbcHNbb2Zmc2V0IC0gY29sc10gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDRdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIDFdXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDVdID0gY29vcmRzTWFwW3BzW29mZnNldCAtIDFdICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXhdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHMgLSAxXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAxXSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSBjb2xzIC0gMV0gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDJdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHMgLSAxXSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgM10gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gY29sc11dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgNF0gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gY29sc10gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDVdID0gY29sb3JzTWFwW2NzW29mZnNldCAtIGNvbHNdICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyA2XSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSAxXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyA3XSA9IGNvbG9yc01hcFtjc1tvZmZzZXQgLSAxXSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgOF0gPSBjb2xvcnNNYXBbY3Nbb2Zmc2V0IC0gMV0gKyAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDZdID0gY29vcmRzW3BJbmRleCArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgN10gPSBjb29yZHNbcEluZGV4ICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvb3Jkc1twSW5kZXggKyA4XSA9IGNvb3Jkc1twSW5kZXggKyA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDldID0gY29vcmRzW3BJbmRleCArIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMTBdID0gY29vcmRzTWFwW3BzW29mZnNldF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4ICsgMTFdID0gY29vcmRzTWFwW3BzW29mZnNldF0gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDldID0gY29sb3JzW2NJbmRleCArIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTBdID0gY29sb3JzW2NJbmRleCArIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTFdID0gY29sb3JzW2NJbmRleCArIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTJdID0gY29sb3JzW2NJbmRleCArIDZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTNdID0gY29sb3JzW2NJbmRleCArIDddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTRdID0gY29sb3JzW2NJbmRleCArIDhdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTVdID0gY29sb3JzTWFwW2NzW29mZnNldF1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY0luZGV4ICsgMTZdID0gY29sb3JzTWFwW2NzW29mZnNldF0gKyAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleCArIDE3XSA9IGNvbG9yc01hcFtjc1tvZmZzZXRdICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbmRleCArPSAxMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY0luZGV4ICs9IDE4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAndHJpYW5nbGVzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IHBzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29yZHNbcEluZGV4XSA9IGNvb3Jkc01hcFtwc1tqXV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vcmRzW3BJbmRleCArIDFdID0gY29vcmRzTWFwW3BzW2pdICsgMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JzW2NJbmRleF0gPSBjb2xvcnNNYXBbY3Nbal1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAxXSA9IGNvbG9yc01hcFtjc1tqXSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjSW5kZXggKyAyXSA9IGNvbG9yc01hcFtjc1tqXSArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBJbmRleCArPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNJbmRleCArPSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbC5jbGVhckNvbG9yKGJhY2tncm91bmRDb2xvclswXSAvIDI1NSwgYmFja2dyb3VuZENvbG9yWzFdIC8gMjU1LCBiYWNrZ3JvdW5kQ29sb3JbMl0gLyAyNTUsIDEuMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsLmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvb3Jkc0J1ZmZlciA9IGdsLmNyZWF0ZUJ1ZmZlcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGNvb3Jkc0J1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgY29vcmRzLCBnbC5TVEFUSUNfRFJBVyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShjYWNoZS5wb3NpdGlvbkxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoY2FjaGUucG9zaXRpb25Mb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2xvcnNCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnNCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIGNvbG9ycywgZ2wuU1RBVElDX0RSQVcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoY2FjaGUuY29sb3JMb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGNhY2hlLmNvbG9yTG9jYXRpb24sIDMsIGdsLlVOU0lHTkVEX0JZVEUsIGZhbHNlLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLnVuaWZvcm0yZihjYWNoZS5zY2FsZUxvY2F0aW9uLCBjb250ZXh0LnNjYWxlWCwgY29udGV4dC5zY2FsZVkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wudW5pZm9ybTJmKGNhY2hlLm9mZnNldExvY2F0aW9uLCBjb250ZXh0Lm9mZnNldFgsIGNvbnRleHQub2Zmc2V0WSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgY291bnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZmx1c2goKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdsLmRlbGV0ZUJ1ZmZlcihjb29yZHNCdWZmZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2wuZGVsZXRlQnVmZmVyKGNvbG9yc0J1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FudmFzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeUluaXRHTDogZnVuY3Rpb24gdHJ5SW5pdEdMKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlR0woKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhY3VycmVudEdMO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2VTTWFzazogY29tcG9zZVNNYXNrLFxuICAgICAgICAgICAgICAgICAgICAgICAgZHJhd0ZpZ3VyZXM6IGRyYXdGaWd1cmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW51cDogZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc21hc2tDYWNoZSAmJiBzbWFza0NhY2hlLmNhbnZhcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbWFza0NhY2hlLmNhbnZhcy53aWR0aCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtYXNrQ2FjaGUuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZ3VyZXNDYWNoZSAmJiBmaWd1cmVzQ2FjaGUuY2FudmFzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZ3VyZXNDYWNoZS5jYW52YXMud2lkdGggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWd1cmVzQ2FjaGUuY2FudmFzLmhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hc2tDYWNoZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlndXJlc0NhY2hlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2MiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMucmVuZGVyVGV4dExheWVyID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZ2xvYmFsX3Njb3BlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDMpKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgcmVuZGVyVGV4dExheWVyID0gZnVuY3Rpb24gcmVuZGVyVGV4dExheWVyQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIE1BWF9URVhUX0RJVlNfVE9fUkVOREVSID0gMTAwMDAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTm9uV2hpdGVzcGFjZVJlZ2V4cCA9IC9cXFMvO1xuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGlzQWxsV2hpdGVzcGFjZShzdHIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhTm9uV2hpdGVzcGFjZVJlZ2V4cC50ZXN0KHN0cik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVCdWYgPSBbJ2xlZnQ6ICcsIDAsICdweDsgdG9wOiAnLCAwLCAncHg7IGZvbnQtc2l6ZTogJywgMCwgJ3B4OyBmb250LWZhbWlseTogJywgJycsICc7J107XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwZW5kVGV4dCh0YXNrLCBnZW9tLCBzdHlsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0RGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHREaXZQcm9wZXJ0aWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc1dpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzV2hpdGVzcGFjZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxUcmFuc2Zvcm06IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ0JvdHRvbTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZ1RvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZTogMVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fdGV4dERpdnMucHVzaCh0ZXh0RGl2KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWxsV2hpdGVzcGFjZShnZW9tLnN0cikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5pc1doaXRlc3BhY2UgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fdGV4dERpdlByb3BlcnRpZXMuc2V0KHRleHREaXYsIHRleHREaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHR4ID0gX3V0aWwuVXRpbC50cmFuc2Zvcm0odGFzay5fdmlld3BvcnQudHJhbnNmb3JtLCBnZW9tLnRyYW5zZm9ybSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIodHhbMV0sIHR4WzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0eWxlc1tnZW9tLmZvbnROYW1lXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgKz0gTWF0aC5QSSAvIDI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250SGVpZ2h0ID0gTWF0aC5zcXJ0KHR4WzJdICogdHhbMl0gKyB0eFszXSAqIHR4WzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250QXNjZW50ID0gZm9udEhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLmFzY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRBc2NlbnQgPSBzdHlsZS5hc2NlbnQgKiBmb250QXNjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZS5kZXNjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udEFzY2VudCA9ICgxICsgc3R5bGUuZGVzY2VudCkgKiBmb250QXNjZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0b3A7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSB0eFs0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3AgPSB0eFs1XSAtIGZvbnRBc2NlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSB0eFs0XSArIGZvbnRBc2NlbnQgKiBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wID0gdHhbNV0gLSBmb250QXNjZW50ICogTWF0aC5jb3MoYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUJ1ZlsxXSA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZUJ1ZlszXSA9IHRvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQnVmWzVdID0gZm9udEhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQnVmWzddID0gc3R5bGUuZm9udEZhbWlseTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLnN0eWxlID0gc3R5bGVCdWYuam9pbignJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2LnNldEF0dHJpYnV0ZSgnc3R5bGUnLCB0ZXh0RGl2UHJvcGVydGllcy5zdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2LnRleHRDb250ZW50ID0gZ2VvbS5zdHI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLl9mb250SW5zcGVjdG9yRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREaXYuZGF0YXNldC5mb250TmFtZSA9IGdlb20uZm9udE5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLmFuZ2xlID0gYW5nbGUgKiAoMTgwIC8gTWF0aC5QSSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZW9tLnN0ci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHREaXZQcm9wZXJ0aWVzLmNhbnZhc1dpZHRoID0gZ2VvbS5oZWlnaHQgKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5jYW52YXNXaWR0aCA9IGdlb20ud2lkdGggKiB0YXNrLl92aWV3cG9ydC5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLnNldCh0ZXh0RGl2LCB0ZXh0RGl2UHJvcGVydGllcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLl90ZXh0Q29udGVudFN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suX2xheW91dFRleHQodGV4dERpdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0YXNrLl9lbmhhbmNlVGV4dFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhbmdsZUNvcyA9IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlU2luID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbmdsZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZUNvcyA9IE1hdGguY29zKGFuZ2xlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVTaW4gPSBNYXRoLnNpbihhbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdldpZHRoID0gKHN0eWxlLnZlcnRpY2FsID8gZ2VvbS5oZWlnaHQgOiBnZW9tLndpZHRoKSAqIHRhc2suX3ZpZXdwb3J0LnNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXZIZWlnaHQgPSBmb250SGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtLCBiO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFuZ2xlICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBbYW5nbGVDb3MsIGFuZ2xlU2luLCAtYW5nbGVTaW4sIGFuZ2xlQ29zLCBsZWZ0LCB0b3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gX3V0aWwuVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveChbMCwgMCwgZGl2V2lkdGgsIGRpdkhlaWdodF0sIG0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBbbGVmdCwgdG9wLCBsZWZ0ICsgZGl2V2lkdGgsIHRvcCArIGRpdkhlaWdodF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fYm91bmRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBiWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGJbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBiWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b206IGJbM10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdjogdGV4dERpdixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogW2RpdldpZHRoLCBkaXZIZWlnaHRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtOiBtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZW5kZXIodGFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhc2suX2NhbmNlbGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dERpdnMgPSB0YXNrLl90ZXh0RGl2cztcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gdGFzay5fY2FwYWJpbGl0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0RGl2c0xlbmd0aCA9IHRleHREaXZzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHREaXZzTGVuZ3RoID4gTUFYX1RFWFRfRElWU19UT19SRU5ERVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLl9yZW5kZXJpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGFzay5fdGV4dENvbnRlbnRTdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRleHREaXZzTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fbGF5b3V0VGV4dCh0ZXh0RGl2c1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrLl9yZW5kZXJpbmdEb25lID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXhwYW5kKHRhc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3VuZHMgPSB0YXNrLl9ib3VuZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmlld3BvcnQgPSB0YXNrLl92aWV3cG9ydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBleHBhbmRlZCA9IGV4cGFuZEJvdW5kcyh2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0LCBib3VuZHMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGFuZGVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdiA9IGJvdW5kc1tpXS5kaXY7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGl2UHJvcGVydGllcyA9IHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLmdldChkaXYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMuYW5nbGUgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCA9IGJvdW5kc1tpXS5sZWZ0IC0gZXhwYW5kZWRbaV0ubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nVG9wID0gYm91bmRzW2ldLnRvcCAtIGV4cGFuZGVkW2ldLnRvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nUmlnaHQgPSBleHBhbmRlZFtpXS5yaWdodCAtIGJvdW5kc1tpXS5yaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nQm90dG9tID0gZXhwYW5kZWRbaV0uYm90dG9tIC0gYm91bmRzW2ldLmJvdHRvbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXNrLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZGl2LCBkaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGV4cGFuZGVkW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gYm91bmRzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtID0gYi5tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gbVswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvaW50cyA9IFtbMCwgMF0sIFswLCBiLnNpemVbMV1dLCBbYi5zaXplWzBdLCAwXSwgYi5zaXplXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHMgPSBuZXcgRmxvYXQ2NEFycmF5KDY0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHMuZm9yRWFjaChmdW5jdGlvbiAocCwgaSkge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ID0gZnVuY3Rpb24gKHAsIG0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dCA9IHBbMF0gKiBtWzBdICsgcFsxXSAqIG1bMl0gKyBtWzRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHl0ID0gcFswXSAqIG1bMV0gKyBwWzFdICogbVszXSArIG1bNV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3h0LCB5dF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDBdID0gYyAmJiAoZS5sZWZ0IC0gdFswXSkgLyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c1tpICsgNF0gPSBzICYmIChlLnRvcCAtIHRbMV0pIC8gcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDhdID0gYyAmJiAoZS5yaWdodCAtIHRbMF0pIC8gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDEyXSA9IHMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c1tpICsgMTZdID0gcyAmJiAoZS5sZWZ0IC0gdFswXSkgLyAtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDIwXSA9IGMgJiYgKGUudG9wIC0gdFsxXSkgLyBjO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c1tpICsgMjRdID0gcyAmJiAoZS5yaWdodCAtIHRbMF0pIC8gLXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzW2kgKyAyOF0gPSBjICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDMyXSA9IGMgJiYgKGUubGVmdCAtIHRbMF0pIC8gLWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzW2kgKyAzNl0gPSBzICYmIChlLnRvcCAtIHRbMV0pIC8gLXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzW2kgKyA0MF0gPSBjICYmIChlLnJpZ2h0IC0gdFswXSkgLyAtYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDQ0XSA9IHMgJiYgKGUuYm90dG9tIC0gdFsxXSkgLyAtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDQ4XSA9IHMgJiYgKGUubGVmdCAtIHRbMF0pIC8gcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDUyXSA9IGMgJiYgKGUudG9wIC0gdFsxXSkgLyAtYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNbaSArIDU2XSA9IHMgJiYgKGUucmlnaHQgLSB0WzBdKSAvIHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzW2kgKyA2MF0gPSBjICYmIChlLmJvdHRvbSAtIHRbMV0pIC8gLWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmluZFBvc2l0aXZlTWluID0gZnVuY3Rpb24gZmluZFBvc2l0aXZlTWluKHRzLCBvZmZzZXQsIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSB0c1tvZmZzZXQrK107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCA/IE1hdGgubWluKHQsIHJlc3VsdCkgOiB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJveFNjYWxlID0gMSArIE1hdGgubWluKE1hdGguYWJzKGMpLCBNYXRoLmFicyhzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCA9IGZpbmRQb3NpdGl2ZU1pbih0cywgMzIsIDE2KSAvIGJveFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ1RvcCA9IGZpbmRQb3NpdGl2ZU1pbih0cywgNDgsIDE2KSAvIGJveFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlByb3BlcnRpZXMucGFkZGluZ1JpZ2h0ID0gZmluZFBvc2l0aXZlTWluKHRzLCAwLCAxNikgLyBib3hTY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdCb3R0b20gPSBmaW5kUG9zaXRpdmVNaW4odHMsIDE2LCAxNikgLyBib3hTY2FsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhc2suX3RleHREaXZQcm9wZXJ0aWVzLnNldChkaXYsIGRpdlByb3BlcnRpZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZXhwYW5kQm91bmRzKHdpZHRoLCBoZWlnaHQsIGJveGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm91bmRzID0gYm94ZXMubWFwKGZ1bmN0aW9uIChib3gsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MTogYm94LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkxOiBib3gudG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4MjogYm94LnJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MjogYm94LmJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgxTmV3OiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyTmV3OiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRCb3VuZHNMVFIod2lkdGgsIGJvdW5kcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhwYW5kZWQgPSBuZXcgQXJyYXkoYm94ZXMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kcy5mb3JFYWNoKGZ1bmN0aW9uIChiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBiLmluZGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkW2ldID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBiLngxTmV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0OiBiLngyTmV3LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3R0b206IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3hlcy5tYXAoZnVuY3Rpb24gKGJveCwgaSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlID0gZXhwYW5kZWRbaV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBib3VuZHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi54MSA9IGJveC50b3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi55MSA9IHdpZHRoIC0gZS5yaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLngyID0gYm94LmJvdHRvbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLnkyID0gd2lkdGggLSBlLmxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5pbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi54MU5ldyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLngyTmV3ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRCb3VuZHNMVFIoaGVpZ2h0LCBib3VuZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmZvckVhY2goZnVuY3Rpb24gKGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGIuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kZWRbaV0udG9wID0gYi54MU5ldztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRlZFtpXS5ib3R0b20gPSBiLngyTmV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBleHBhbmRCb3VuZHNMVFIod2lkdGgsIGJvdW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS54MSAtIGIueDEgfHwgYS5pbmRleCAtIGIuaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWtlQm91bmRhcnkgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDE6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5MTogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkyOiBJbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogLTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDFOZXc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeDJOZXc6IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaG9yaXpvbiA9IFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IEluZmluaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiBmYWtlQm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmZvckVhY2goZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2ldLmVuZCA8PSBib3VuZGFyeS55MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGogPSBob3Jpem9uLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaiA+PSAwICYmIGhvcml6b25bal0uc3RhcnQgPj0gYm91bmRhcnkueTIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBob3Jpem9uUGFydCwgYWZmZWN0ZWRCb3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4WE5ldyA9IC1JbmZpbml0eTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IGk7IHEgPD0gajsgcSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeE5ldztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54MiA+IGJvdW5kYXJ5LngxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4TmV3ID0gYWZmZWN0ZWRCb3VuZGFyeS5pbmRleCA+IGJvdW5kYXJ5LmluZGV4ID8gYWZmZWN0ZWRCb3VuZGFyeS54MU5ldyA6IGJvdW5kYXJ5LngxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeE5ldyA9IChhZmZlY3RlZEJvdW5kYXJ5LngyICsgYm91bmRhcnkueDEpIC8gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhOZXcgPSBhZmZlY3RlZEJvdW5kYXJ5LngyTmV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhOZXcgPiBtYXhYTmV3KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhYTmV3ID0geE5ldztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5LngxTmV3ID0gbWF4WE5ldztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAocSA9IGk7IHEgPD0gajsgcSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvcml6b25QYXJ0ID0gaG9yaXpvbltxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeSA9IGhvcml6b25QYXJ0LmJvdW5kYXJ5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyTmV3ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhZmZlY3RlZEJvdW5kYXJ5LngyID4gYm91bmRhcnkueDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS5pbmRleCA+IGJvdW5kYXJ5LmluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBhZmZlY3RlZEJvdW5kYXJ5LngyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9IG1heFhOZXc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA+IG1heFhOZXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBNYXRoLm1heChtYXhYTmV3LCBhZmZlY3RlZEJvdW5kYXJ5LngyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFuZ2VkSG9yaXpvbiA9IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Qm91bmRhcnkgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1c2VCb3VuZGFyeSA9IGFmZmVjdGVkQm91bmRhcnkueDIgPiBib3VuZGFyeS54MiA/IGFmZmVjdGVkQm91bmRhcnkgOiBib3VuZGFyeTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGFzdEJvdW5kYXJ5ID09PSB1c2VCb3VuZGFyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b25bY2hhbmdlZEhvcml6b24ubGVuZ3RoIC0gMV0uZW5kID0gaG9yaXpvblBhcnQuZW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b24ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQ6IGhvcml6b25QYXJ0LnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogaG9yaXpvblBhcnQuZW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdW5kYXJ5OiB1c2VCb3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Qm91bmRhcnkgPSB1c2VCb3VuZGFyeTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChob3Jpem9uW2ldLnN0YXJ0IDwgYm91bmRhcnkueTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b25bMF0uc3RhcnQgPSBib3VuZGFyeS55MTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b24udW5zaGlmdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogaG9yaXpvbltpXS5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZDogYm91bmRhcnkueTEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZGFyeTogaG9yaXpvbltpXS5ib3VuZGFyeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm91bmRhcnkueTIgPCBob3Jpem9uW2pdLmVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkSG9yaXpvbltjaGFuZ2VkSG9yaXpvbi5sZW5ndGggLSAxXS5lbmQgPSBib3VuZGFyeS55MjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZEhvcml6b24ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydDogYm91bmRhcnkueTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGhvcml6b25bal0uZW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRhcnk6IGhvcml6b25bal0uYm91bmRhcnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChxID0gaTsgcSA8PSBqOyBxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvblBhcnQgPSBob3Jpem9uW3FdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFmZmVjdGVkQm91bmRhcnkueDJOZXcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXNlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoayA9IGkgLSAxOyAhdXNlZCAmJiBrID49IDAgJiYgaG9yaXpvbltrXS5zdGFydCA+PSBhZmZlY3RlZEJvdW5kYXJ5LnkxOyBrLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgPSBob3Jpem9uW2tdLmJvdW5kYXJ5ID09PSBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gaiArIDE7ICF1c2VkICYmIGsgPCBob3Jpem9uLmxlbmd0aCAmJiBob3Jpem9uW2tdLmVuZCA8PSBhZmZlY3RlZEJvdW5kYXJ5LnkyOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZWQgPSBob3Jpem9uW2tdLmJvdW5kYXJ5ID09PSBhZmZlY3RlZEJvdW5kYXJ5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgIXVzZWQgJiYgayA8IGNoYW5nZWRIb3Jpem9uLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkID0gY2hhbmdlZEhvcml6b25ba10uYm91bmRhcnkgPT09IGFmZmVjdGVkQm91bmRhcnk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBtYXhYTmV3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShob3Jpem9uLCBbaSwgaiAtIGkgKyAxXS5jb25jYXQoY2hhbmdlZEhvcml6b24pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbi5mb3JFYWNoKGZ1bmN0aW9uIChob3Jpem9uUGFydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZmZlY3RlZEJvdW5kYXJ5ID0gaG9yaXpvblBhcnQuYm91bmRhcnk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWZmZWN0ZWRCb3VuZGFyeS54Mk5ldyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmZmVjdGVkQm91bmRhcnkueDJOZXcgPSBNYXRoLm1heCh3aWR0aCwgYWZmZWN0ZWRCb3VuZGFyeS54Mik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBUZXh0TGF5ZXJSZW5kZXJUYXNrKF9yZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0Q29udGVudCA9IF9yZWYudGV4dENvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRTdHJlYW0gPSBfcmVmLnRleHRDb250ZW50U3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IF9yZWYuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0ID0gX3JlZi52aWV3cG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2cyA9IF9yZWYudGV4dERpdnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtc1N0ciA9IF9yZWYudGV4dENvbnRlbnRJdGVtc1N0cixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmhhbmNlVGV4dFNlbGVjdGlvbiA9IF9yZWYuZW5oYW5jZVRleHRTZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0Q29udGVudCA9IHRleHRDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dENvbnRlbnRTdHJlYW0gPSB0ZXh0Q29udGVudFN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRhaW5lciA9IGNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdwb3J0ID0gdmlld3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90ZXh0RGl2cyA9IHRleHREaXZzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0ciA9IHRleHRDb250ZW50SXRlbXNTdHIgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiA9ICEhZW5oYW5jZVRleHRTZWxlY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZCA9ICEhKF9nbG9iYWxfc2NvcGUuZGVmYXVsdC5Gb250SW5zcGVjdG9yICYmIF9nbG9iYWxfc2NvcGUuZGVmYXVsdC5Gb250SW5zcGVjdG9yLmVuYWJsZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udFNpemUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0VGV4dExhc3RGb250RmFtaWx5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFRleHRDdHggPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dERpdlByb3BlcnRpZXMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyaW5nRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJUaW1lciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ib3VuZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIFRleHRMYXllclJlbmRlclRhc2sucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IHByb21pc2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gVGV4dExheWVyX2NhbmNlbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlci5jYW5jZWwobmV3IF91dGlsLkFib3J0RXhjZXB0aW9uKCd0ZXh0IGxheWVyIHRhc2sgY2FuY2VsbGVkJykpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FuY2VsZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlbmRlclRpbWVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZW5kZXJUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlclRpbWVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYXBhYmlsaXR5LnJlamVjdCgnY2FuY2VsZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfcHJvY2Vzc0l0ZW1zOiBmdW5jdGlvbiBfcHJvY2Vzc0l0ZW1zKGl0ZW1zLCBzdHlsZUNhY2hlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RleHRDb250ZW50SXRlbXNTdHIucHVzaChpdGVtc1tpXS5zdHIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRleHQodGhpcywgaXRlbXNbaV0sIHN0eWxlQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBfbGF5b3V0VGV4dDogZnVuY3Rpb24gX2xheW91dFRleHQodGV4dERpdikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0ZXh0TGF5ZXJGcmFnID0gdGhpcy5fY29udGFpbmVyO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHREaXZQcm9wZXJ0aWVzID0gdGhpcy5fdGV4dERpdlByb3BlcnRpZXMuZ2V0KHRleHREaXYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHREaXZQcm9wZXJ0aWVzLmlzV2hpdGVzcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRTaXplID0gdGV4dERpdi5zdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udEZhbWlseSA9IHRleHREaXYuc3R5bGUuZm9udEZhbWlseTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb250U2l6ZSAhPT0gdGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSB8fCBmb250RmFtaWx5ICE9PSB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eC5mb250ID0gZm9udFNpemUgKyAnICcgKyBmb250RmFtaWx5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRTaXplID0gZm9udFNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseSA9IGZvbnRGYW1pbHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gdGhpcy5fbGF5b3V0VGV4dEN0eC5tZWFzdXJlVGV4dCh0ZXh0RGl2LnRleHRDb250ZW50KS53aWR0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSAnJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0RGl2UHJvcGVydGllcy5jYW52YXNXaWR0aCAhPT0gMCAmJiB3aWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dERpdlByb3BlcnRpZXMuc2NhbGUgPSB0ZXh0RGl2UHJvcGVydGllcy5jYW52YXNXaWR0aCAvIHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gPSBcInNjYWxlWChcIi5jb25jYXQodGV4dERpdlByb3BlcnRpZXMuc2NhbGUsIFwiKVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dERpdlByb3BlcnRpZXMuYW5nbGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gXCJyb3RhdGUoXCIuY29uY2F0KHRleHREaXZQcm9wZXJ0aWVzLmFuZ2xlLCBcImRlZykgXCIpLmNvbmNhdCh0cmFuc2Zvcm0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0RGl2UHJvcGVydGllcy5vcmlnaW5hbFRyYW5zZm9ybSA9IHRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dERpdi5zdHlsZS50cmFuc2Zvcm0gPSB0cmFuc2Zvcm07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGV4dERpdlByb3BlcnRpZXMuc2V0KHRleHREaXYsIHRleHREaXZQcm9wZXJ0aWVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMYXllckZyYWcuYXBwZW5kQ2hpbGQodGV4dERpdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgX3JlbmRlcjogZnVuY3Rpb24gVGV4dExheWVyX3JlbmRlcih0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZUNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLm1vek9wYXF1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbGF5b3V0VGV4dEN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRJdGVtcyA9IHRoaXMuX3RleHRDb250ZW50Lml0ZW1zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dFN0eWxlcyA9IHRoaXMuX3RleHRDb250ZW50LnN0eWxlcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzSXRlbXModGV4dEl0ZW1zLCB0ZXh0U3R5bGVzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3RleHRDb250ZW50U3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwdW1wID0gZnVuY3Rpb24gcHVtcCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFkZXIucmVhZCgpLnRoZW4oZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX3JlZjIudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBfcmVmMi5kb25lO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHN0eWxlQ2FjaGUsIHZhbHVlLnN0eWxlcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc0l0ZW1zKHZhbHVlLml0ZW1zLCBzdHlsZUNhY2hlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1bXAoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGNhcGFiaWxpdHkucmVqZWN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSB0aGlzLl90ZXh0Q29udGVudFN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVtcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTmVpdGhlciBcInRleHRDb250ZW50XCIgbm9yIFwidGV4dENvbnRlbnRTdHJlYW1cIicgKyAnIHBhcmFtZXRlcnMgc3BlY2lmaWVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkucHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVDYWNoZSA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXIoX3RoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JlbmRlclRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyKF90aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fcmVuZGVyVGltZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGltZW91dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLl9jYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kVGV4dERpdnM6IGZ1bmN0aW9uIFRleHRMYXllcl9leHBhbmRUZXh0RGl2cyhleHBhbmREaXZzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9lbmhhbmNlVGV4dFNlbGVjdGlvbiB8fCAhdGhpcy5fcmVuZGVyaW5nRG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2JvdW5kcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmQodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2JvdW5kcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fdGV4dERpdnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGl2ID0gdGhpcy5fdGV4dERpdnNbaV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpdlByb3BlcnRpZXMgPSB0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQoZGl2KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGl2UHJvcGVydGllcy5pc1doaXRlc3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZERpdnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0cmFuc2Zvcm0gPSAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXZQcm9wZXJ0aWVzLnNjYWxlICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtID0gJ3NjYWxlWCgnICsgZGl2UHJvcGVydGllcy5zY2FsZSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMuYW5nbGUgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gPSAncm90YXRlKCcgKyBkaXZQcm9wZXJ0aWVzLmFuZ2xlICsgJ2RlZykgJyArIHRyYW5zZm9ybTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMucGFkZGluZ0xlZnQgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nICs9ICcgcGFkZGluZy1sZWZ0OiAnICsgZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCAvIGRpdlByb3BlcnRpZXMuc2NhbGUgKyAncHg7JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm0gKz0gJyB0cmFuc2xhdGVYKCcgKyAtZGl2UHJvcGVydGllcy5wYWRkaW5nTGVmdCAvIGRpdlByb3BlcnRpZXMuc2NhbGUgKyAncHgpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMucGFkZGluZ1RvcCAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgKz0gJyBwYWRkaW5nLXRvcDogJyArIGRpdlByb3BlcnRpZXMucGFkZGluZ1RvcCArICdweDsnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybSArPSAnIHRyYW5zbGF0ZVkoJyArIC1kaXZQcm9wZXJ0aWVzLnBhZGRpbmdUb3AgKyAncHgpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMucGFkZGluZ1JpZ2h0ICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZyArPSAnIHBhZGRpbmctcmlnaHQ6ICcgKyBkaXZQcm9wZXJ0aWVzLnBhZGRpbmdSaWdodCAvIGRpdlByb3BlcnRpZXMuc2NhbGUgKyAncHg7JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdlByb3BlcnRpZXMucGFkZGluZ0JvdHRvbSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgKz0gJyBwYWRkaW5nLWJvdHRvbTogJyArIGRpdlByb3BlcnRpZXMucGFkZGluZ0JvdHRvbSArICdweDsnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFkZGluZyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuc2V0QXR0cmlidXRlKCdzdHlsZScsIGRpdlByb3BlcnRpZXMuc3R5bGUgKyBwYWRkaW5nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zZm9ybSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXYuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLnBhZGRpbmcgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2LnN0eWxlLnRyYW5zZm9ybSA9IGRpdlByb3BlcnRpZXMub3JpZ2luYWxUcmFuc2Zvcm0gfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVuZGVyVGV4dExheWVyKHJlbmRlclBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YXNrID0gbmV3IFRleHRMYXllclJlbmRlclRhc2soe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50OiByZW5kZXJQYXJhbWV0ZXJzLnRleHRDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRDb250ZW50U3RyZWFtOiByZW5kZXJQYXJhbWV0ZXJzLnRleHRDb250ZW50U3RyZWFtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogcmVuZGVyUGFyYW1ldGVycy5jb250YWluZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHJlbmRlclBhcmFtZXRlcnMudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dERpdnM6IHJlbmRlclBhcmFtZXRlcnMudGV4dERpdnMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dENvbnRlbnRJdGVtc1N0cjogcmVuZGVyUGFyYW1ldGVycy50ZXh0Q29udGVudEl0ZW1zU3RyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuaGFuY2VUZXh0U2VsZWN0aW9uOiByZW5kZXJQYXJhbWV0ZXJzLmVuaGFuY2VUZXh0U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGFzay5fcmVuZGVyKHJlbmRlclBhcmFtZXRlcnMudGltZW91dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXNrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRleHRMYXllcjtcbiAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLnJlbmRlclRleHRMYXllciA9IHJlbmRlclRleHRMYXllcjtcblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTYzICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5Bbm5vdGF0aW9uTGF5ZXIgPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2RvbV91dGlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTUxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IGlmICh0eXBlb2YgUmVmbGVjdCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBSZWZsZWN0LmdldCkgeyBfZ2V0ID0gUmVmbGVjdC5nZXQ7IH0gZWxzZSB7IF9nZXQgPSBmdW5jdGlvbiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyKSB7IHZhciBiYXNlID0gX3N1cGVyUHJvcEJhc2UodGFyZ2V0LCBwcm9wZXJ0eSk7IGlmICghYmFzZSkgcmV0dXJuOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYmFzZSwgcHJvcGVydHkpOyBpZiAoZGVzYy5nZXQpIHsgcmV0dXJuIGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpOyB9IHJldHVybiBkZXNjLnZhbHVlOyB9OyB9IHJldHVybiBfZ2V0KHRhcmdldCwgcHJvcGVydHksIHJlY2VpdmVyIHx8IHRhcmdldCk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9zdXBlclByb3BCYXNlKG9iamVjdCwgcHJvcGVydHkpIHsgd2hpbGUgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSkpIHsgb2JqZWN0ID0gX2dldFByb3RvdHlwZU9mKG9iamVjdCk7IGlmIChvYmplY3QgPT09IG51bGwpIGJyZWFrOyB9IHJldHVybiBvYmplY3Q7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsgcmV0dXJuIENvbnN0cnVjdG9yOyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbm5vdGF0aW9uRWxlbWVudEZhY3RvcnkoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFubm90YXRpb25FbGVtZW50RmFjdG9yeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBbm5vdGF0aW9uRWxlbWVudEZhY3RvcnksIG51bGwsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNyZWF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBjcmVhdGUocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3VidHlwZSA9IHBhcmFtZXRlcnMuZGF0YS5hbm5vdGF0aW9uVHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1YnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuTElOSzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpbmtBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5URVhUOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLldJREdFVDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmllbGRUeXBlID0gcGFyYW1ldGVycy5kYXRhLmZpZWxkVHlwZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0J0bic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVycy5kYXRhLnJhZGlvQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJzLmRhdGEuY2hlY2tCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0NoJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT1BVUDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuTElORTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVBUkU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5DSVJDTEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDaXJjbGVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuSU5LOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5rQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuUE9MWUdPTjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RSSUtFT1VUOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvblR5cGUuU1RBTVA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5UOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWdub3JlQm9yZGVyID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVuZGVyYWJsZSA9IGlzUmVuZGVyYWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSBwYXJhbWV0ZXJzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXllciA9IHBhcmFtZXRlcnMubGF5ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdlID0gcGFyYW1ldGVycy5wYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld3BvcnQgPSBwYXJhbWV0ZXJzLnZpZXdwb3J0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlua1NlcnZpY2UgPSBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93bmxvYWRNYW5hZ2VyID0gcGFyYW1ldGVycy5kb3dubG9hZE1hbmFnZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbWFnZVJlc291cmNlc1BhdGggPSBwYXJhbWV0ZXJzLmltYWdlUmVzb3VyY2VzUGF0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlckludGVyYWN0aXZlRm9ybXMgPSBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdmdGYWN0b3J5ID0gcGFyYW1ldGVycy5zdmdGYWN0b3J5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVuZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IHRoaXMuX2NyZWF0ZUNvbnRhaW5lcihpZ25vcmVCb3JkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfY3JlYXRlQ29udGFpbmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9jcmVhdGVDb250YWluZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZ25vcmVCb3JkZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2UgPSB0aGlzLnBhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3cG9ydCA9IHRoaXMudmlld3BvcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgnZGF0YS1hbm5vdGF0aW9uLWlkJywgZGF0YS5pZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY3QgPSBfdXRpbC5VdGlsLm5vcm1hbGl6ZVJlY3QoW2RhdGEucmVjdFswXSwgcGFnZS52aWV3WzNdIC0gZGF0YS5yZWN0WzFdICsgcGFnZS52aWV3WzFdLCBkYXRhLnJlY3RbMl0sIHBhZ2Uudmlld1szXSAtIGRhdGEucmVjdFszXSArIHBhZ2Uudmlld1sxXV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAnbWF0cml4KCcgKyB2aWV3cG9ydC50cmFuc2Zvcm0uam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gLXJlY3RbMF0gKyAncHggJyArIC1yZWN0WzFdICsgJ3B4JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlnbm9yZUJvcmRlciAmJiBkYXRhLmJvcmRlclN0eWxlLndpZHRoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aCArICdweCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLmJvcmRlclN0eWxlLnN0eWxlICE9PSBfdXRpbC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGggLSAyICogZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQgLSAyICogZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhvcml6b250YWxSYWRpdXMgPSBkYXRhLmJvcmRlclN0eWxlLmhvcml6b250YWxDb3JuZXJSYWRpdXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGljYWxSYWRpdXMgPSBkYXRhLmJvcmRlclN0eWxlLnZlcnRpY2FsQ29ybmVyUmFkaXVzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbFJhZGl1cyA+IDAgfHwgdmVydGljYWxSYWRpdXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhZGl1cyA9IGhvcml6b250YWxSYWRpdXMgKyAncHggLyAnICsgdmVydGljYWxSYWRpdXMgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJSYWRpdXMgPSByYWRpdXM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS5ib3JkZXJTdHlsZS5zdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlclN0eWxlID0gJ3NvbGlkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyU3R5bGUgPSAnZGFzaGVkJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogYmV2ZWxlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5JTlNFVDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogaW5zZXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuYm9yZGVyQm90dG9tU3R5bGUgPSAnc29saWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5jb2xvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3JkZXJDb2xvciA9IF91dGlsLlV0aWwubWFrZUNzc1JnYihkYXRhLmNvbG9yWzBdIHwgMCwgZGF0YS5jb2xvclsxXSB8IDAsIGRhdGEuY29sb3JbMl0gfCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvcmRlcldpZHRoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gcmVjdFswXSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSByZWN0WzFdICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gaGVpZ2h0ICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9jcmVhdGVQb3B1cFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfY3JlYXRlUG9wdXAoY29udGFpbmVyLCB0cmlnZ2VyLCBkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJpZ2dlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5zdHlsZS5oZWlnaHQgPSBjb250YWluZXIuc3R5bGUuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5zdHlsZS53aWR0aCA9IGNvbnRhaW5lci5zdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0cmlnZ2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3B1cEVsZW1lbnQgPSBuZXcgUG9wdXBFbGVtZW50KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogdHJpZ2dlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBkYXRhLmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGRhdGEudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50czogZGF0YS5jb250ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVXcmFwcGVyOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9wdXAgPSBwb3B1cEVsZW1lbnQucmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBjb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChwb3B1cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwudW5yZWFjaGFibGUpKCdBYnN0cmFjdCBtZXRob2QgYEFubm90YXRpb25FbGVtZW50LnJlbmRlcmAgY2FsbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIHZhciBMaW5rQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhMaW5rQW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIExpbmtBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExpbmtBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLnVybCB8fCBwYXJhbWV0ZXJzLmRhdGEuZGVzdCB8fCBwYXJhbWV0ZXJzLmRhdGEuYWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKExpbmtBbm5vdGF0aW9uRWxlbWVudCkuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKExpbmtBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2xpbmtBbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rU2VydmljZSA9IHRoaXMubGlua1NlcnZpY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX2RvbV91dGlscy5hZGRMaW5rQXR0cmlidXRlcykobGluaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBkYXRhLnVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldDogZGF0YS5uZXdXaW5kb3cgPyBfZG9tX3V0aWxzLkxpbmtUYXJnZXQuQkxBTksgOiBsaW5rU2VydmljZS5leHRlcm5hbExpbmtUYXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWw6IGxpbmtTZXJ2aWNlLmV4dGVybmFsTGlua1JlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kTmFtZWRBY3Rpb24obGluaywgZGF0YS5hY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9iaW5kTGluayhsaW5rLCBkYXRhLmRlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9iaW5kTGlua1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfYmluZExpbmsobGluaywgZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rLmhyZWYgPSB0aGlzLmxpbmtTZXJ2aWNlLmdldERlc3RpbmF0aW9uSGFzaChkZXN0aW5hdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5vbmNsaWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMubGlua1NlcnZpY2UubmF2aWdhdGVUbyhkZXN0aW5hdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuY2xhc3NOYW1lID0gJ2ludGVybmFsTGluayc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9iaW5kTmFtZWRBY3Rpb25cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2JpbmROYW1lZEFjdGlvbihsaW5rLCBhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5ocmVmID0gdGhpcy5saW5rU2VydmljZS5nZXRBbmNob3JVcmwoJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsub25jbGljayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5saW5rU2VydmljZS5leGVjdXRlTmFtZWRBY3Rpb24oYWN0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsuY2xhc3NOYW1lID0gJ2ludGVybmFsTGluayc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGlua0Fubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBUZXh0QW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoVGV4dEFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVGV4dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1JlbmRlcmFibGUgPSAhIShwYXJhbWV0ZXJzLmRhdGEuaGFzUG9wdXAgfHwgcGFyYW1ldGVycy5kYXRhLnRpdGxlIHx8IHBhcmFtZXRlcnMuZGF0YS5jb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihUZXh0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUZXh0QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICd0ZXh0QW5ub3RhdGlvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5zdHlsZS5oZWlnaHQgPSB0aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLnN0eWxlLndpZHRoID0gdGhpcy5jb250YWluZXIuc3R5bGUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLnNyYyA9IHRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoICsgJ2Fubm90YXRpb24tJyArIHRoaXMuZGF0YS5uYW1lLnRvTG93ZXJDYXNlKCkgKyAnLnN2Zyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLmFsdCA9ICdbe3t0eXBlfX0gQW5ub3RhdGlvbl0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZS5kYXRhc2V0LmwxMG5JZCA9ICd0ZXh0X2Fubm90YXRpb25fdHlwZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlLmRhdGFzZXQubDEwbkFyZ3MgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLmRhdGEubmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIGltYWdlLCB0aGlzLmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoaW1hZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dEFubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCwgX0Fubm90YXRpb25FbGVtZW50Myk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFdpZGdldEFubm90YXRpb25FbGVtZW50KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFdpZGdldEFubm90YXRpb25FbGVtZW50KS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFdpZGdldEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9XaWRnZXRBbm5vdGF0aW9uRWxlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFRleHRXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCwgX1dpZGdldEFubm90YXRpb25FbGVtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpc1JlbmRlcmFibGUgPSBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMgfHwgIXBhcmFtZXRlcnMuZGF0YS5oYXNBcHBlYXJhbmNlICYmICEhcGFyYW1ldGVycy5kYXRhLmZpZWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhUZXh0V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBURVhUX0FMSUdOTUVOVCA9IFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ3RleHRXaWRnZXRBbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlckludGVyYWN0aXZlRm9ybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEubXVsdGlMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHRoaXMuZGF0YS5maWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdGhpcy5kYXRhLmZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc2FibGVkID0gdGhpcy5kYXRhLnJlYWRPbmx5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLm1heExlbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQubWF4TGVuZ3RoID0gdGhpcy5kYXRhLm1heExlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5jb21iKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkV2lkdGggPSB0aGlzLmRhdGEucmVjdFsyXSAtIHRoaXMuZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb21iV2lkdGggPSBmaWVsZFdpZHRoIC8gdGhpcy5kYXRhLm1heExlbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2NvbWInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLmxldHRlclNwYWNpbmcgPSAnY2FsYygnICsgY29tYldpZHRoICsgJ3B4IC0gMWNoKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGhpcy5kYXRhLmZpZWxkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnZlcnRpY2FsQWxpZ24gPSAnbWlkZGxlJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICd0YWJsZS1jZWxsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS5mb250UmVmTmFtZSAmJiB0aGlzLnBhZ2UuY29tbW9uT2Jqcy5oYXModGhpcy5kYXRhLmZvbnRSZWZOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgPSB0aGlzLnBhZ2UuY29tbW9uT2Jqcy5nZXQodGhpcy5kYXRhLmZvbnRSZWZOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0VGV4dFN0eWxlKGVsZW1lbnQsIGZvbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YS50ZXh0QWxpZ25tZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnN0eWxlLnRleHRBbGlnbiA9IFRFWFRfQUxJR05NRU5UW3RoaXMuZGF0YS50ZXh0QWxpZ25tZW50XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc2V0VGV4dFN0eWxlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9zZXRUZXh0U3R5bGUoZWxlbWVudCwgZm9udCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGUgPSBlbGVtZW50LnN0eWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5mb250U2l6ZSA9IHRoaXMuZGF0YS5mb250U2l6ZSArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmRpcmVjdGlvbiA9IHRoaXMuZGF0YS5mb250RGlyZWN0aW9uIDwgMCA/ICdydGwnIDogJ2x0cic7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb250KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS5mb250V2VpZ2h0ID0gZm9udC5ibGFjayA/IGZvbnQuYm9sZCA/ICc5MDAnIDogJ2JvbGQnIDogZm9udC5ib2xkID8gJ2JvbGQnIDogJ25vcm1hbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLmZvbnRTdHlsZSA9IGZvbnQuaXRhbGljID8gJ2l0YWxpYycgOiAnbm9ybWFsJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRGYW1pbHkgPSBmb250LmxvYWRlZE5hbWUgPyAnXCInICsgZm9udC5sb2FkZWROYW1lICsgJ1wiLCAnIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmYWxsYmFja05hbWUgPSBmb250LmZhbGxiYWNrTmFtZSB8fCAnSGVsdmV0aWNhLCBzYW5zLXNlcmlmJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUuZm9udEZhbWlseSA9IGZvbnRGYW1pbHkgKyBmYWxsYmFja05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGV4dFdpZGdldEFubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KFdpZGdldEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1dpZGdldEFubm90YXRpb25FbGVtMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIF9XaWRnZXRBbm5vdGF0aW9uRWxlbTIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2hlY2tib3hXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKENoZWNrYm94V2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBjaGVja0JveCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNhYmxlZCA9IHRoaXMuZGF0YS5yZWFkT25seTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gJ2NoZWNrYm94JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmZpZWxkVmFsdWUgJiYgdGhpcy5kYXRhLmZpZWxkVmFsdWUgIT09ICdPZmYnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaGVja2JveFdpZGdldEFubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KFdpZGdldEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX1dpZGdldEFubm90YXRpb25FbGVtMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIF9XaWRnZXRBbm5vdGF0aW9uRWxlbTMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUmFkaW9CdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFJhZGlvQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhSYWRpb0J1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiByYWRpb0J1dHRvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNhYmxlZCA9IHRoaXMuZGF0YS5yZWFkT25seTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID0gJ3JhZGlvJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5uYW1lID0gdGhpcy5kYXRhLmZpZWxkTmFtZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhLmZpZWxkVmFsdWUgPT09IHRoaXMuZGF0YS5idXR0b25WYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NoZWNrZWQnLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmFkaW9CdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0xpbmtBbm5vdGF0aW9uRWxlbWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50LCBfTGlua0Fubm90YXRpb25FbGVtZW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFB1c2hCdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFB1c2hCdXR0b25XaWRnZXRBbm5vdGF0aW9uRWxlbWVudCkuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSBfZ2V0KF9nZXRQcm90b3R5cGVPZihQdXNoQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQucHJvdG90eXBlKSwgXCJyZW5kZXJcIiwgdGhpcykuY2FsbCh0aGlzKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIuY2xhc3NOYW1lID0gJ2J1dHRvbldpZGdldEFubm90YXRpb24gcHVzaEJ1dHRvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHVzaEJ1dHRvbldpZGdldEFubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KExpbmtBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfV2lkZ2V0QW5ub3RhdGlvbkVsZW00KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQsIF9XaWRnZXRBbm5vdGF0aW9uRWxlbTQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENob2ljZVdpZGdldEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgcGFyYW1ldGVycy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2Nob2ljZVdpZGdldEFubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmRpc2FibGVkID0gdGhpcy5kYXRhLnJlYWRPbmx5O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmNvbWJvKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LnNpemUgPSB0aGlzLmRhdGEub3B0aW9ucy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50Lm11bHRpcGxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb24gPSB0aGlzLmRhdGEub3B0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnRleHRDb250ZW50ID0gb3B0aW9uLmRpc3BsYXlWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudmFsdWUgPSBvcHRpb24uZXhwb3J0VmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGEuZmllbGRWYWx1ZS5pbmNsdWRlcyhvcHRpb24uZGlzcGxheVZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQuc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtZW50LmFwcGVuZENoaWxkKG9wdGlvbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZWN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShXaWRnZXRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUG9wdXBBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhQb3B1cEFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQ0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9wdXBBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUG9wdXBBbm5vdGF0aW9uRWxlbWVudCkuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBJR05PUkVfVFlQRVMgPSBbJ0xpbmUnLCAnU3F1YXJlJywgJ0NpcmNsZScsICdQb2x5TGluZScsICdQb2x5Z29uJywgJ0luayddO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAncG9wdXBBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoSUdOT1JFX1RZUEVTLmluY2x1ZGVzKHRoaXMuZGF0YS5wYXJlbnRUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJ1tkYXRhLWFubm90YXRpb24taWQ9XCInICsgdGhpcy5kYXRhLnBhcmVudElkICsgJ1wiXSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRFbGVtZW50ID0gdGhpcy5sYXllci5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3B1cCA9IG5ldyBQb3B1cEVsZW1lbnQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6IHBhcmVudEVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5kYXRhLmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuZGF0YS50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzOiB0aGlzLmRhdGEuY29udGVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRMZWZ0ID0gcGFyc2VGbG9hdChwYXJlbnRFbGVtZW50LnN0eWxlLmxlZnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyZW50V2lkdGggPSBwYXJzZUZsb2F0KHBhcmVudEVsZW1lbnQuc3R5bGUud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAtKHBhcmVudExlZnQgKyBwYXJlbnRXaWR0aCkgKyAncHggLScgKyBwYXJlbnRFbGVtZW50LnN0eWxlLnRvcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUubGVmdCA9IHBhcmVudExlZnQgKyBwYXJlbnRXaWR0aCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHBvcHVwLnJlbmRlcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvcHVwQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvcHVwRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9wdXBFbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9wdXBFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID0gcGFyYW1ldGVycy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyID0gcGFyYW1ldGVycy50cmlnZ2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sb3IgPSBwYXJhbWV0ZXJzLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGl0bGUgPSBwYXJhbWV0ZXJzLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGVudHMgPSBwYXJhbWV0ZXJzLmNvbnRlbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVdyYXBwZXIgPSBwYXJhbWV0ZXJzLmhpZGVXcmFwcGVyIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGlubmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQb3B1cEVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBCQUNLR1JPVU5EX0VOTElHSFQgPSAwLjc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gJ3BvcHVwV3JhcHBlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZUVsZW1lbnQgPSB0aGlzLmhpZGVXcmFwcGVyID8gd3JhcHBlciA6IHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5jbGFzc05hbWUgPSAncG9wdXAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSB0aGlzLmNvbG9yO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2xvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHIgPSBCQUNLR1JPVU5EX0VOTElHSFQgKiAoMjU1IC0gY29sb3JbMF0pICsgY29sb3JbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZyA9IEJBQ0tHUk9VTkRfRU5MSUdIVCAqICgyNTUgLSBjb2xvclsxXSkgKyBjb2xvclsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBiID0gQkFDS0dST1VORF9FTkxJR0hUICogKDI1NSAtIGNvbG9yWzJdKSArIGNvbG9yWzJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIgfCAwLCBnIHwgMCwgYiB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRzID0gdGhpcy5fZm9ybWF0Q29udGVudHModGhpcy5jb250ZW50cyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaDEnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSB0aGlzLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl90b2dnbGUuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCB0aGlzLl9zaG93LmJpbmQodGhpcywgZmFsc2UpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlb3V0JywgdGhpcy5faGlkZS5iaW5kKHRoaXMsIGZhbHNlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5faGlkZS5iaW5kKHRoaXMsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQodGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChjb250ZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQocG9wdXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9mb3JtYXRDb250ZW50c1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfZm9ybWF0Q29udGVudHMoY29udGVudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lcyA9IGNvbnRlbnRzLnNwbGl0KC8oPzpcXHJcXG4/fFxcbikvKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBsaW5lcy5sZW5ndGg7IGkgPCBpaTsgKytpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsaW5lKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpIDwgaWkgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiX3RvZ2dsZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfdG9nZ2xlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5waW5uZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc2hvd1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfc2hvdygpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBpbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5waW5uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGlkZUVsZW1lbnQuaGFzQXR0cmlidXRlKCdoaWRkZW4nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcIl9oaWRlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIF9oaWRlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdW5waW4gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVucGluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBpbm5lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmhpZGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnaGlkZGVuJykgJiYgIXRoaXMucGlubmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaGlkZGVuJywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5zdHlsZS56SW5kZXggLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvcHVwRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgdmFyIExpbmVBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhMaW5lQW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBMaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBMaW5lQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKExpbmVBbm5vdGF0aW9uRWxlbWVudCkuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKExpbmVBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2xpbmVBbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGRhdGEucmVjdFsyXSAtIGRhdGEucmVjdFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGRhdGEucmVjdFszXSAtIGRhdGEucmVjdFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN2ZyA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUod2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpsaW5lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuc2V0QXR0cmlidXRlKCd4MScsIGRhdGEucmVjdFsyXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3kxJywgZGF0YS5yZWN0WzNdIC0gZGF0YS5saW5lQ29vcmRpbmF0ZXNbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnNldEF0dHJpYnV0ZSgneDInLCBkYXRhLnJlY3RbMl0gLSBkYXRhLmxpbmVDb29yZGluYXRlc1syXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuc2V0QXR0cmlidXRlKCd5MicsIGRhdGEucmVjdFszXSAtIGRhdGEubGluZUNvb3JkaW5hdGVzWzNdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIGRhdGEuYm9yZGVyU3R5bGUud2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChsaW5lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kKHN2Zyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIGxpbmUsIGRhdGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5lQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNxdWFyZUFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb25FbGVtZW50Nikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFNxdWFyZUFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQ2KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTcXVhcmVBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ3NxdWFyZUFubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNxdWFyZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6cmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXVhcmUuc2V0QXR0cmlidXRlKCd4JywgYm9yZGVyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgneScsIGJvcmRlcldpZHRoIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2lkdGggLSBib3JkZXJXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxdWFyZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIGhlaWdodCAtIGJvcmRlcldpZHRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgYm9yZGVyV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcXVhcmUuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAndHJhbnNwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3F1YXJlLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChzcXVhcmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgc3F1YXJlLCBkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3F1YXJlQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIENpcmNsZUFubm90YXRpb25FbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Fubm90YXRpb25FbGVtZW50Nykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKENpcmNsZUFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQ3KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBDaXJjbGVBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhDaXJjbGVBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2NpcmNsZUFubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gZGF0YS5yZWN0WzJdIC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGVpZ2h0ID0gZGF0YS5yZWN0WzNdIC0gZGF0YS5yZWN0WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNpcmNsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6ZWxsaXBzZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdjeCcsIHdpZHRoIC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ2N5JywgaGVpZ2h0IC8gMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZS5zZXRBdHRyaWJ1dGUoJ3J4Jywgd2lkdGggLyAyIC0gYm9yZGVyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgncnknLCBoZWlnaHQgLyAyIC0gYm9yZGVyV2lkdGggLyAyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgYm9yZGVyV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGUuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAndHJhbnNwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lyY2xlLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChjaXJjbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgY2lyY2xlLCBkYXRhKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ2lyY2xlQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQ4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCwgX0Fubm90YXRpb25FbGVtZW50OCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQb2x5bGluZUFubm90YXRpb25FbGVtZW50KS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5jb250YWluZXJDbGFzc05hbWUgPSAncG9seWxpbmVBbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuc3ZnRWxlbWVudE5hbWUgPSAnc3ZnOnBvbHlsaW5lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gdGhpcy5jb250YWluZXJDbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmVydGljZXMgPSBkYXRhLnZlcnRpY2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdmVydGljZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHggPSB2ZXJ0aWNlc1tpXS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHkgPSBkYXRhLnJlY3RbM10gLSB2ZXJ0aWNlc1tpXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzLnB1c2goeCArICcsJyArIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gcG9pbnRzLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJvcmRlcldpZHRoID0gZGF0YS5ib3JkZXJTdHlsZS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvbHlsaW5lID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgncG9pbnRzJywgcG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBib3JkZXJXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgJ3RyYW5zcGFyZW50Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChwb2x5bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZChzdmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBwb2x5bGluZSwgZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBvbHlsaW5lQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Qb2x5bGluZUFubm90YXRpb25FbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudCwgX1BvbHlsaW5lQW5ub3RhdGlvbkVsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUG9seWdvbkFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBvbHlnb25Bbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUG9seWdvbkFubm90YXRpb25FbGVtZW50KS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuY29udGFpbmVyQ2xhc3NOYW1lID0gJ3BvbHlnb25Bbm5vdGF0aW9uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuc3ZnRWxlbWVudE5hbWUgPSAnc3ZnOnBvbHlnb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQb2x5Z29uQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oUG9seWxpbmVBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgSW5rQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQ5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoSW5rQW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBJbmtBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzNTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBJbmtBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNSA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihJbmtBbm5vdGF0aW9uRWxlbWVudCkuY2FsbCh0aGlzLCBwYXJhbWV0ZXJzLCBpc1JlbmRlcmFibGUsIHRydWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuY29udGFpbmVyQ2xhc3NOYW1lID0gJ2lua0Fubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5zdmdFbGVtZW50TmFtZSA9ICdzdmc6cG9seWxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhJbmtBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gdGhpcy5jb250YWluZXJDbGFzc05hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBkYXRhLnJlY3RbMl0gLSBkYXRhLnJlY3RbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBkYXRhLnJlY3RbM10gLSBkYXRhLnJlY3RbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdmcgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5rTGlzdHMgPSBkYXRhLmlua0xpc3RzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGlua0xpc3RzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmtMaXN0ID0gaW5rTGlzdHNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9pbnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGlua0xpc3QubGVuZ3RoOyBqIDwgamo7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gaW5rTGlzdFtqXS54IC0gZGF0YS5yZWN0WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5ID0gZGF0YS5yZWN0WzNdIC0gaW5rTGlzdFtqXS55O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50cy5wdXNoKHggKyAnLCcgKyB5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gcG9pbnRzLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib3JkZXJXaWR0aCA9IGRhdGEuYm9yZGVyU3R5bGUud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcG9seWxpbmUgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCh0aGlzLnN2Z0VsZW1lbnROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgncG9pbnRzJywgcG9pbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLXdpZHRoJywgYm9yZGVyV2lkdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9seWxpbmUuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAndHJhbnNwYXJlbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbHlsaW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICdub25lJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLCBwb2x5bGluZSwgZGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChwb2x5bGluZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hcHBlbmQoc3ZnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElua0Fubm90YXRpb25FbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KEFubm90YXRpb25FbGVtZW50KTtcblxuICAgICAgICAgICAgICAgIHZhciBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDEwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNSZW5kZXJhYmxlID0gISEocGFyYW1ldGVycy5kYXRhLmhhc1BvcHVwIHx8IHBhcmFtZXRlcnMuZGF0YS50aXRsZSB8fCBwYXJhbWV0ZXJzLmRhdGEuY29udGVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoSGlnaGxpZ2h0QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudCwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuY2xhc3NOYW1lID0gJ2hpZ2hsaWdodEFubm90YXRpb24nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5kYXRhLmhhc1BvcHVwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgbnVsbCwgdGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBIaWdobGlnaHRBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQxMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFVuZGVybGluZUFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQxMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFVuZGVybGluZUFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFVuZGVybGluZUFubm90YXRpb25FbGVtZW50KS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICd1bmRlcmxpbmVBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVW5kZXJsaW5lQW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQxMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDEyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3F1aWdnbHlBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFNxdWlnZ2x5QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTcXVpZ2dseUFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnc3F1aWdnbHlBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3F1aWdnbHlBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQxMykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50LCBfQW5ub3RhdGlvbkVsZW1lbnQxMyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFN0cmlrZU91dEFubm90YXRpb25FbGVtZW50KS5jYWxsKHRoaXMsIHBhcmFtZXRlcnMsIGlzUmVuZGVyYWJsZSwgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICdzdHJpa2VvdXRBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaWtlT3V0QW5ub3RhdGlvbkVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0oQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQW5ub3RhdGlvbkVsZW1lbnQxNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQsIF9Bbm5vdGF0aW9uRWxlbWVudDE0KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gU3RhbXBBbm5vdGF0aW9uRWxlbWVudChwYXJhbWV0ZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzUmVuZGVyYWJsZSA9ICEhKHBhcmFtZXRlcnMuZGF0YS5oYXNQb3B1cCB8fCBwYXJhbWV0ZXJzLmRhdGEudGl0bGUgfHwgcGFyYW1ldGVycy5kYXRhLmNvbnRlbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKFN0YW1wQW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgaXNSZW5kZXJhYmxlLCB0cnVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhTdGFtcEFubm90YXRpb25FbGVtZW50LCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZW5kZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWUgPSAnc3RhbXBBbm5vdGF0aW9uJztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5oYXNQb3B1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsIG51bGwsIHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RhbXBBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9Bbm5vdGF0aW9uRWxlbWVudDE1KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudCwgX0Fubm90YXRpb25FbGVtZW50MTUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBGaWxlQXR0YWNobWVudEFubm90YXRpb25FbGVtZW50KHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2ID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgX2dldFByb3RvdHlwZU9mKEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQpLmNhbGwodGhpcywgcGFyYW1ldGVycywgdHJ1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczYkZGF0YSRmaWxlID0gX3RoaXM2LmRhdGEuZmlsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBfdGhpczYkZGF0YSRmaWxlLmZpbGVuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50ID0gX3RoaXM2JGRhdGEkZmlsZS5jb250ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5maWxlbmFtZSA9ICgwLCBfZG9tX3V0aWxzLmdldEZpbGVuYW1lRnJvbVVybCkoZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5jb250ZW50ID0gY29udGVudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczYubGlua1NlcnZpY2UuZXZlbnRCdXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM2LmxpbmtTZXJ2aWNlLmV2ZW50QnVzLmRpc3BhdGNoKCdmaWxlYXR0YWNobWVudGFubm90YXRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpczYpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAoMCwgX3V0aWwuc3RyaW5nVG9QREZTdHJpbmcpKGZpbGVuYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lOiBmaWxlbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbkVsZW1lbnQsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZSA9ICdmaWxlQXR0YWNobWVudEFubm90YXRpb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHJpZ2dlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLnN0eWxlLmhlaWdodCA9IHRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5zdHlsZS53aWR0aCA9IHRoaXMuY29udGFpbmVyLnN0eWxlLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5fZG93bmxvYWQuYmluZCh0aGlzKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuaGFzUG9wdXAgJiYgKHRoaXMuZGF0YS50aXRsZSB8fCB0aGlzLmRhdGEuY29udGVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lciwgdHJpZ2dlciwgdGhpcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKHRyaWdnZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZG93bmxvYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2Rvd25sb2FkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZG93bmxvYWRNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwud2FybikoJ0Rvd25sb2FkIGNhbm5vdCBiZSBzdGFydGVkIGR1ZSB0byB1bmF2YWlsYWJsZSBkb3dubG9hZCBtYW5hZ2VyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkTWFuYWdlci5kb3dubG9hZERhdGEodGhpcy5jb250ZW50LCB0aGlzLmZpbGVuYW1lLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmlsZUF0dGFjaG1lbnRBbm5vdGF0aW9uRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfShBbm5vdGF0aW9uRWxlbWVudCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQW5ub3RhdGlvbkxheWVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBBbm5vdGF0aW9uTGF5ZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEFubm90YXRpb25MYXllcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhBbm5vdGF0aW9uTGF5ZXIsIG51bGwsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlbmRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiByZW5kZXIocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXJhbWV0ZXJzLmFubm90YXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcGFyYW1ldGVycy5hbm5vdGF0aW9uc1tpXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gQW5ub3RhdGlvbkVsZW1lbnRGYWN0b3J5LmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllcjogcGFyYW1ldGVycy5kaXYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogcGFyYW1ldGVycy5wYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiBwYXJhbWV0ZXJzLnZpZXdwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtTZXJ2aWNlOiBwYXJhbWV0ZXJzLmxpbmtTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvd25sb2FkTWFuYWdlcjogcGFyYW1ldGVycy5kb3dubG9hZE1hbmFnZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VSZXNvdXJjZXNQYXRoOiBwYXJhbWV0ZXJzLmltYWdlUmVzb3VyY2VzUGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOiBwYXJhbWV0ZXJzLnJlbmRlckludGVyYWN0aXZlRm9ybXMgfHwgZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ZnRmFjdG9yeTogbmV3IF9kb21fdXRpbHMuRE9NU1ZHRmFjdG9yeSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNSZW5kZXJhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5kaXYuYXBwZW5kQ2hpbGQoZWxlbWVudC5yZW5kZXIoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInVwZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiB1cGRhdGUocGFyYW1ldGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXJhbWV0ZXJzLmFubm90YXRpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gcGFyYW1ldGVycy5hbm5vdGF0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gcGFyYW1ldGVycy5kaXYucXVlcnlTZWxlY3RvcignW2RhdGEtYW5ub3RhdGlvbi1pZD1cIicgKyBkYXRhLmlkICsgJ1wiXScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gJ21hdHJpeCgnICsgcGFyYW1ldGVycy52aWV3cG9ydC50cmFuc2Zvcm0uam9pbignLCcpICsgJyknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5kaXYucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBbm5vdGF0aW9uTGF5ZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuQW5ub3RhdGlvbkxheWVyID0gQW5ub3RhdGlvbkxheWVyO1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSksXG4gICAgICAgICAgICAvKiAxNjQgKi9cbiAgICAgICAgICAgIC8qKiovIChmdW5jdGlvbihtb2R1bGUsIGV4cG9ydHMsIF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18pIHtcblxuICAgICAgICAgICAgICAgIFwidXNlIHN0cmljdFwiO1xuXG5cbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBleHBvcnRzLlNWR0dyYXBoaWNzID0gdm9pZCAwO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZG9tX3V0aWxzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNTEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9pc19ub2RlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDQpKTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICB2YXIgU1ZHR3JhcGhpY3MgPSBmdW5jdGlvbiBTVkdHcmFwaGljcygpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzJyk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGV4cG9ydHMuU1ZHR3JhcGhpY3MgPSBTVkdHcmFwaGljcztcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBTVkdfREVGQVVMVFMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U3R5bGU6ICdub3JtYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJ25vcm1hbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I6ICcjMDAwMDAwJ1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBjb252ZXJ0SW1nRGF0YVRvUG5nID0gZnVuY3Rpb24gY29udmVydEltZ0RhdGFUb1BuZ0Nsb3N1cmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgUE5HX0hFQURFUiA9IG5ldyBVaW50OEFycmF5KFsweDg5LCAweDUwLCAweDRlLCAweDQ3LCAweDBkLCAweDBhLCAweDFhLCAweDBhXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgQ0hVTktfV1JBUFBFUl9TSVpFID0gMTI7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3JjVGFibGUgPSBuZXcgSW50MzJBcnJheSgyNTYpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaCA9IDA7IGggPCA4OyBoKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgJiAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gMHhlZEI4ODMyMCBeIGMgPj4gMSAmIDB4N2ZmZmZmZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gYyA+PiAxICYgMHg3ZmZmZmZmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyY1RhYmxlW2ldID0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JjMzIoZGF0YSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcmMgPSAtMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gKGNyYyBeIGRhdGFbaV0pICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSBjcmNUYWJsZVthXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JjID0gY3JjID4+PiA4IF4gYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JjIF4gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHdyaXRlUG5nQ2h1bmsodHlwZSwgYm9keSwgZGF0YSwgb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IGJvZHkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcF0gPSBsZW4gPj4gMjQgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcCArIDFdID0gbGVuID4+IDE2ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3AgKyAyXSA9IGxlbiA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3AgKyAzXSA9IGxlbiAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcCArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcF0gPSB0eXBlLmNoYXJDb2RlQXQoMCkgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcCArIDFdID0gdHlwZS5jaGFyQ29kZUF0KDEpICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3AgKyAyXSA9IHR5cGUuY2hhckNvZGVBdCgyKSAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtwICsgM10gPSB0eXBlLmNoYXJDb2RlQXQoMykgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNldChib2R5LCBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwICs9IGJvZHkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjcmMgPSBjcmMzMihkYXRhLCBvZmZzZXQgKyA0LCBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3BdID0gY3JjID4+IDI0ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3AgKyAxXSA9IGNyYyA+PiAxNiAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtwICsgMl0gPSBjcmMgPj4gOCAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtwICsgM10gPSBjcmMgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBhZGxlcjMyKGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGIgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSA9IChhICsgKGRhdGFbaV0gJiAweGZmKSkgJSA2NTUyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICsgYSkgJSA2NTUyMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYiA8PCAxNiB8IGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlZmxhdGVTeW5jKGxpdGVyYWxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX2lzX25vZGUuZGVmYXVsdCkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQobGl0ZXJhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKSA+PSA4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGxpdGVyYWxzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSBuZXcgQnVmZmVyKGxpdGVyYWxzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvdXRwdXQgPSByZXF1aXJlKCd6bGliJykuZGVmbGF0ZVN5bmMoaW5wdXQsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiA5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRwdXQgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gb3V0cHV0IDogbmV3IFVpbnQ4QXJyYXkob3V0cHV0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICcgKyBlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmbGF0ZVN5bmNVbmNvbXByZXNzZWQobGl0ZXJhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkZWZsYXRlU3luY1VuY29tcHJlc3NlZChsaXRlcmFscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZW4gPSBsaXRlcmFscy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1heEJsb2NrTGVuZ3RoID0gMHhGRkZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZWZsYXRlQmxvY2tzID0gTWF0aC5jZWlsKGxlbiAvIG1heEJsb2NrTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaWRhdCA9IG5ldyBVaW50OEFycmF5KDIgKyBsZW4gKyBkZWZsYXRlQmxvY2tzICogNSArIDQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4Nzg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4OWM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBvcyA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuID4gbWF4QmxvY2tMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkYXRbcGkrK10gPSAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0W3BpKytdID0gMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkYXRbcGkrK10gPSAweDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0LnNldChsaXRlcmFscy5zdWJhcnJheShwb3MsIHBvcyArIG1heEJsb2NrTGVuZ3RoKSwgcGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaSArPSBtYXhCbG9ja0xlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zICs9IG1heEJsb2NrTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gbWF4QmxvY2tMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IDB4MDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IGxlbiAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IGxlbiA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0W3BpKytdID0gfmxlbiAmIDB4ZmZmZiAmIDB4ZmY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9ICh+bGVuICYgMHhmZmZmKSA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0LnNldChsaXRlcmFscy5zdWJhcnJheShwb3MpLCBwaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGkgKz0gbGl0ZXJhbHMubGVuZ3RoIC0gcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhZGxlciA9IGFkbGVyMzIobGl0ZXJhbHMsIDAsIGxpdGVyYWxzLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRhdFtwaSsrXSA9IGFkbGVyID4+IDI0ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0W3BpKytdID0gYWRsZXIgPj4gMTYgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkYXRbcGkrK10gPSBhZGxlciA+PiA4ICYgMHhmZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGF0W3BpKytdID0gYWRsZXIgJiAweGZmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZGF0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbmNvZGUoaW1nRGF0YSwga2luZCwgZm9yY2VEYXRhU2NoZW1hLCBpc01hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBpbWdEYXRhLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBpbWdEYXRhLmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYml0RGVwdGgsIGNvbG9yVHlwZSwgbGluZVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gaW1nRGF0YS5kYXRhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JUeXBlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdERlcHRoID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTaXplID0gd2lkdGggKyA3ID4+IDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkltYWdlS2luZC5SR0JfMjRCUFA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclR5cGUgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0RGVwdGggPSA4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVNpemUgPSB3aWR0aCAqIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLkltYWdlS2luZC5SR0JBXzMyQlBQOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JUeXBlID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdERlcHRoID0gODtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVTaXplID0gd2lkdGggKiA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBmb3JtYXQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGl0ZXJhbHMgPSBuZXcgVWludDhBcnJheSgoMSArIGxpbmVTaXplKSAqIGhlaWdodCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnNldExpdGVyYWxzID0gMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Qnl0ZXMgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB5LCBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWxzW29mZnNldExpdGVyYWxzKytdID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbHMuc2V0KGJ5dGVzLnN1YmFycmF5KG9mZnNldEJ5dGVzLCBvZmZzZXRCeXRlcyArIGxpbmVTaXplKSwgb2Zmc2V0TGl0ZXJhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRCeXRlcyArPSBsaW5lU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0TGl0ZXJhbHMgKz0gbGluZVNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09IF91dGlsLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUCAmJiBpc01hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0TGl0ZXJhbHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0TGl0ZXJhbHMrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxpbmVTaXplOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsc1tvZmZzZXRMaXRlcmFscysrXSBePSAweEZGO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGloZHIgPSBuZXcgVWludDhBcnJheShbd2lkdGggPj4gMjQgJiAweGZmLCB3aWR0aCA+PiAxNiAmIDB4ZmYsIHdpZHRoID4+IDggJiAweGZmLCB3aWR0aCAmIDB4ZmYsIGhlaWdodCA+PiAyNCAmIDB4ZmYsIGhlaWdodCA+PiAxNiAmIDB4ZmYsIGhlaWdodCA+PiA4ICYgMHhmZiwgaGVpZ2h0ICYgMHhmZiwgYml0RGVwdGgsIGNvbG9yVHlwZSwgMHgwMCwgMHgwMCwgMHgwMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpZGF0ID0gZGVmbGF0ZVN5bmMobGl0ZXJhbHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwbmdMZW5ndGggPSBQTkdfSEVBREVSLmxlbmd0aCArIENIVU5LX1dSQVBQRVJfU0laRSAqIDMgKyBpaGRyLmxlbmd0aCArIGlkYXQubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbmV3IFVpbnQ4QXJyYXkocG5nTGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnNldChQTkdfSEVBREVSLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBQTkdfSEVBREVSLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVBuZ0NodW5rKCdJSERSJywgaWhkciwgZGF0YSwgb2Zmc2V0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gQ0hVTktfV1JBUFBFUl9TSVpFICsgaWhkci5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVQbmdDaHVuaygnSURBVEEnLCBpZGF0LCBkYXRhLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBDSFVOS19XUkFQUEVSX1NJWkUgKyBpZGF0Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZVBuZ0NodW5rKCdJRU5EJywgbmV3IFVpbnQ4QXJyYXkoMCksIGRhdGEsIG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwLCBfdXRpbC5jcmVhdGVPYmplY3RVUkwpKGRhdGEsICdpbWFnZS9wbmcnLCBmb3JjZURhdGFTY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEltZ0RhdGFUb1BuZyhpbWdEYXRhLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBraW5kID0gaW1nRGF0YS5raW5kID09PSB1bmRlZmluZWQgPyBfdXRpbC5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAgOiBpbWdEYXRhLmtpbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZShpbWdEYXRhLCBraW5kLCBmb3JjZURhdGFTY2hlbWEsIGlzTWFzayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIFNWR0V4dHJhU3RhdGUgPSBmdW5jdGlvbiBTVkdFeHRyYVN0YXRlQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNWR0V4dHJhU3RhdGUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250U2l6ZVNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRXZWlnaHQgPSBTVkdfREVGQVVMVFMuZm9udFdlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRTaXplID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb250TWF0cml4ID0gX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sZWFkaW5nID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRSZW5kZXJpbmdNb2RlID0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnggPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lWCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lWSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFyU3BhY2luZyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JkU3BhY2luZyA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50ZXh0SFNjYWxlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRleHRSaXNlID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxDb2xvciA9IFNWR19ERUZBVUxUUy5maWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2VDb2xvciA9ICcjMDAwMDAwJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxBbHBoYSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2VBbHBoYSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5saW5lV2lkdGggPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGluZUpvaW4gPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxpbmVDYXAgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pdGVyTGltaXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGFzaEFycmF5ID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXNoUGhhc2UgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDbGlwVXJsID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsaXBHcm91cCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXNrSWQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgU1ZHRXh0cmFTdGF0ZS5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvbmU6IGZ1bmN0aW9uIFNWR0V4dHJhU3RhdGVfY2xvbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q3VycmVudFBvaW50OiBmdW5jdGlvbiBTVkdFeHRyYVN0YXRlX3NldEN1cnJlbnRQb2ludCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTVkdFeHRyYVN0YXRlO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgZXhwb3J0cy5TVkdHcmFwaGljcyA9IFNWR0dyYXBoaWNzID0gZnVuY3Rpb24gU1ZHR3JhcGhpY3NDbG9zdXJlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gb3BMaXN0VG9UcmVlKG9wTGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcFRyZWUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdG1wID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wTGlzdExlbiA9IG9wTGlzdC5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IG9wTGlzdExlbjsgeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcExpc3RbeF0uZm4gPT09ICdzYXZlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BUcmVlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmbklkJzogOTIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZuJzogJ2dyb3VwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRlbXMnOiBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAucHVzaChvcFRyZWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BUcmVlID0gb3BUcmVlW29wVHJlZS5sZW5ndGggLSAxXS5pdGVtcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wTGlzdFt4XS5mbiA9PT0gJ3Jlc3RvcmUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFRyZWUgPSB0bXAucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcFRyZWUucHVzaChvcExpc3RbeF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9wVHJlZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcGYodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSB2YWx1ZS50b0ZpeGVkKDEwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IHMubGVuZ3RoIC0gMTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzW2ldICE9PSAnMCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoc1tpXSA9PT0gJzAnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBzW2ldID09PSAnLicgPyBpIDogaSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBwbShtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1bNF0gPT09IDAgJiYgbVs1XSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVsxXSA9PT0gMCAmJiBtWzJdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobVswXSA9PT0gMSAmJiBtWzNdID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NjYWxlKCcgKyBwZihtWzBdKSArICcgJyArIHBmKG1bM10pICsgJyknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1bMF0gPT09IG1bM10gJiYgbVsxXSA9PT0gLW1bMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gTWF0aC5hY29zKG1bMF0pICogMTgwIC8gTWF0aC5QSTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAncm90YXRlKCcgKyBwZihhKSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtWzBdID09PSAxICYmIG1bMV0gPT09IDAgJiYgbVsyXSA9PT0gMCAmJiBtWzNdID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RyYW5zbGF0ZSgnICsgcGYobVs0XSkgKyAnICcgKyBwZihtWzVdKSArICcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnbWF0cml4KCcgKyBwZihtWzBdKSArICcgJyArIHBmKG1bMV0pICsgJyAnICsgcGYobVsyXSkgKyAnICcgKyBwZihtWzNdKSArICcgJyArIHBmKG1bNF0pICsgJyAnICsgcGYobVs1XSkgKyAnKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFNWR0dyYXBoaWNzKGNvbW1vbk9ianMsIG9ianMsIGZvcmNlRGF0YVNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3ZnRmFjdG9yeSA9IG5ldyBfZG9tX3V0aWxzLkRPTVNWR0ZhY3RvcnkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBuZXcgU1ZHRXh0cmFTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4dHJhU3RhY2sgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbW1vbk9ianMgPSBjb21tb25PYmpzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub2JqcyA9IG9ianM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nRU9GaWxsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWJlZEZvbnRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWJlZGRlZEZvbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNzc1N0eWxlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlRGF0YVNjaGVtYSA9ICEhZm9yY2VEYXRhU2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWE1MX05TID0gJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgWExJTktfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayc7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgTElORV9DQVBfU1RZTEVTID0gWydidXR0JywgJ3JvdW5kJywgJ3NxdWFyZSddO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIExJTkVfSk9JTl9TVFlMRVMgPSBbJ21pdGVyJywgJ3JvdW5kJywgJ2JldmVsJ107XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcENvdW50ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrQ291bnQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgU1ZHR3JhcGhpY3MucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmU6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NhdmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtU3RhY2sucHVzaCh0aGlzLnRyYW5zZm9ybU1hdHJpeCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFTdGFjay5wdXNoKG9sZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudCA9IG9sZC5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZTogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcmVzdG9yZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0aGlzLnRyYW5zZm9ybVN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmV4dHJhU3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0NsaXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRncnAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2dyb3VwKGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVPcFRyZWUoaXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWREZXBlbmRlbmNpZXM6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2xvYWREZXBlbmRlbmNpZXMob3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXkgPSBvcGVyYXRvckxpc3QuZm5BcnJheTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZuQXJyYXlMZW4gPSBmbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3NBcnJheSA9IG9wZXJhdG9yTGlzdC5hcmdzQXJyYXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbkFycmF5TGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdXRpbC5PUFMuZGVwZW5kZW5jeSA9PT0gZm5BcnJheVtpXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkZXBzID0gYXJnc0FycmF5W2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IDAsIG5uID0gZGVwcy5sZW5ndGg7IG4gPCBubjsgbisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvYmogPSBkZXBzW25dO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29tbW9uID0gb2JqLnN1YnN0cmluZygwLCAyKSA9PT0gJ2dfJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByb21pc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1vbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuY29tbW9uT2Jqcy5nZXQob2JqLCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMub2Jqcy5nZXQob2JqLCByZXNvbHZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcy5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbCh0aGlzLmN1cnJlbnQuZGVwZW5kZW5jaWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfdHJhbnNmb3JtKGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRyYW5zZm9ybU1hdHJpeCA9IFthLCBiLCBjLCBkLCBlLCBmXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSBfdXRpbC5VdGlsLnRyYW5zZm9ybSh0aGlzLnRyYW5zZm9ybU1hdHJpeCwgdHJhbnNmb3JtTWF0cml4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50Z3JwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNWRzogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfZ2V0U1ZHKG9wZXJhdG9yTGlzdCwgdmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3cG9ydCA9IHZpZXdwb3J0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdmdFbGVtZW50ID0gdGhpcy5faW5pdGlhbGl6ZSh2aWV3cG9ydCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZERlcGVuZGVuY2llcyhvcGVyYXRvckxpc3QpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLnRyYW5zZm9ybU1hdHJpeCA9IF91dGlsLklERU5USVRZX01BVFJJWDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9wVHJlZSA9IF90aGlzMi5jb252ZXJ0T3BMaXN0KG9wZXJhdG9yTGlzdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5leGVjdXRlT3BUcmVlKG9wVHJlZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdmdFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRPcExpc3Q6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2NvbnZlcnRPcExpc3Qob3BlcmF0b3JMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzQXJyYXkgPSBvcGVyYXRvckxpc3QuYXJnc0FycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheSA9IG9wZXJhdG9yTGlzdC5mbkFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm5BcnJheUxlbiA9IGZuQXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgUkVWT1BTID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcExpc3QgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBvcCBpbiBfdXRpbC5PUFMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFVk9QU1tfdXRpbC5PUFNbb3BdXSA9IG9wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBmbkFycmF5TGVuOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbklkID0gZm5BcnJheVt4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm5JZCc6IGZuSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZuJzogUkVWT1BTW2ZuSWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcmdzJzogYXJnc0FycmF5W3hdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcExpc3RUb1RyZWUob3BMaXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVPcFRyZWU6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2V4ZWN1dGVPcFRyZWUob3BUcmVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcFRyZWVMZW4gPSBvcFRyZWUubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgb3BUcmVlTGVuOyB4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbiA9IG9wVHJlZVt4XS5mbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmbklkID0gb3BUcmVlW3hdLmZuSWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYXJncyA9IG9wVHJlZVt4XS5hcmdzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGZuSWQgfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuYmVnaW5UZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmRlcGVuZGVuY3k6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGVhZGluZzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nKGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMZWFkaW5nTW92ZVRleHQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0Rm9udDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb250KGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dUZXh0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNob3dTcGFjZWRUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dUZXh0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVuZFRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kVGV4dCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLm1vdmVUZXh0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVUZXh0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldENoYXJTcGFjaW5nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENoYXJTcGFjaW5nKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFdvcmRTcGFjaW5nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFdvcmRTcGFjaW5nKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldEhTY2FsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRIU2NhbGUoYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0VGV4dE1hdHJpeDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRUZXh0TWF0cml4KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSaXNlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRleHRSaXNlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFRleHRSZW5kZXJpbmdNb2RlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldExpbmVXaWR0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lV2lkdGgoYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGluZUpvaW46XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGluZUpvaW4oYXJnc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuc2V0TGluZUNhcDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lQ2FwKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldE1pdGVyTGltaXQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TWl0ZXJMaW1pdChhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRGaWxsUkdCQ29sb3I6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsbFJHQkNvbG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldFN0cm9rZVJHQkNvbG9yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0cm9rZVJHQkNvbG9yKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnNldERhc2g6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGFzaChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zZXRHU3RhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0R1N0YXRlKGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmZpbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVvRmlsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb0ZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5zdHJva2U6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZmlsbFN0cm9rZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuZW9GaWxsU3Ryb2tlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVvRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsaXA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcCgnbm9uemVybycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmVvQ2xpcDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCdldmVub2RkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50SnBlZ1hPYmplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFpbnRKcGVnWE9iamVjdChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlWE9iamVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludEltYWdlWE9iamVjdChhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChhcmdzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFpbnRJbWFnZU1hc2tYT2JqZWN0KGFyZ3NbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucGFpbnRGb3JtWE9iamVjdEVuZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VQYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlU3Ryb2tlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMuY2xvc2VGaWxsU3Ryb2tlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlRU9GaWxsU3Ryb2tlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlRU9GaWxsU3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubmV4dExpbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dExpbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy50cmFuc2Zvcm06XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10sIGFyZ3NbNF0sIGFyZ3NbNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNvbnN0cnVjdFBhdGg6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3RydWN0UGF0aChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5lbmRQYXRoOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDkyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwKG9wVHJlZVt4XS5pdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLndhcm4pKCdVbmltcGxlbWVudGVkIG9wZXJhdG9yICcgKyBmbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRXb3JkU3BhY2luZzogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LndvcmRTcGFjaW5nID0gd29yZFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRDaGFyU3BhY2luZzogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0Q2hhclNwYWNpbmcoY2hhclNwYWNpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nID0gY2hhclNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0TGluZTogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfbmV4dExpbmUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZVRleHQoMCwgdGhpcy5jdXJyZW50LmxlYWRpbmcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dE1hdHJpeDogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0VGV4dE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQudGV4dE1hdHJpeCA9IHRoaXMuY3VycmVudC5saW5lTWF0cml4ID0gW2EsIGIsIGMsIGQsIGUsIGZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOnRzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZvbnQtZmFtaWx5JywgY3VycmVudC5mb250RmFtaWx5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZm9udC1zaXplJywgcGYoY3VycmVudC5mb250U2l6ZSkgKyAncHgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneScsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2Zzp0ZXh0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luVGV4dDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfYmVnaW5UZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC55ID0gdGhpcy5jdXJyZW50LmxpbmVZID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRNYXRyaXggPSBfdXRpbC5JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5saW5lTWF0cml4ID0gX3V0aWwuSURFTlRJVFlfTUFUUklYO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQudHNwYW4gPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOnRzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50eHRFbGVtZW50ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2Zzp0ZXh0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50eHRncnAgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOmcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVUZXh0OiBmdW5jdGlvbiBTVkdHcmFwaGljc19tb3ZlVGV4dCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueCA9IHRoaXMuY3VycmVudC5saW5lWCArPSB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueSA9IHRoaXMuY3VycmVudC5saW5lWSArPSB5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Lnhjb29yZHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6dHNwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZm9udC1mYW1pbHknLCBjdXJyZW50LmZvbnRGYW1pbHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsICdmb250LXNpemUnLCBwZihjdXJyZW50LmZvbnRTaXplKSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5JywgcGYoLWN1cnJlbnQueSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1RleHQ6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3Nob3dUZXh0KGdseXBocykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnQgPSBjdXJyZW50LmZvbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb250U2l6ZSA9IGN1cnJlbnQuZm9udFNpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvbnRTaXplID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2hhclNwYWNpbmcgPSBjdXJyZW50LmNoYXJTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd29yZFNwYWNpbmcgPSBjdXJyZW50LndvcmRTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZm9udERpcmVjdGlvbiA9IGN1cnJlbnQuZm9udERpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRleHRIU2NhbGUgPSBjdXJyZW50LnRleHRIU2NhbGUgKiBmb250RGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2x5cGhzTGVuZ3RoID0gZ2x5cGhzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZlcnRpY2FsID0gZm9udC52ZXJ0aWNhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoQWR2YW5jZVNjYWxlID0gZm9udFNpemUgKiBjdXJyZW50LmZvbnRNYXRyaXhbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN3LCBzcGFjZVdpZHRoUHJvaiwgZm9udDJkZXYgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBnbHlwaHNMZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdseXBoID0gZ2x5cGhzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2x5cGggPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGZvbnREaXJlY3Rpb24gKiB3b3JkU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF91dGlsLmlzTnVtKShnbHlwaCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IC1nbHlwaCAqIGZvbnRTaXplICogMC4wMDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGdseXBoLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNoYXJhY3RlciA9IGdseXBoLmZvbnRDaGFyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNwYWNpbmcgPSAoZ2x5cGguaXNTcGFjZSA/IHdvcmRTcGFjaW5nIDogMCkgKyBjaGFyU3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaGFyV2lkdGggPSB3aWR0aCAqIHdpZHRoQWR2YW5jZVNjYWxlICsgc3BhY2luZyAqIGZvbnREaXJlY3Rpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ2x5cGguaXNJbkZvbnQgJiYgIWZvbnQubWlzc2luZ0ZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGNoYXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54Y29vcmRzLnB1c2goY3VycmVudC54ICsgeCAqIHRleHRIU2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi50ZXh0Q29udGVudCArPSBjaGFyYWN0ZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ICs9IGNoYXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJ0aWNhbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC55IC09IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54ICs9IHggKiB0ZXh0SFNjYWxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneCcsIGN1cnJlbnQueGNvb3Jkcy5tYXAocGYpLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCBwZigtY3VycmVudC55KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZvbnQtZmFtaWx5JywgY3VycmVudC5mb250RmFtaWx5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZm9udC1zaXplJywgcGYoY3VycmVudC5mb250U2l6ZSkgKyAncHgnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5mb250U3R5bGUgIT09IFNWR19ERUZBVUxUUy5mb250U3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZvbnQtc3R5bGUnLCBjdXJyZW50LmZvbnRTdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5mb250V2VpZ2h0ICE9PSBTVkdfREVGQVVMVFMuZm9udFdlaWdodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZm9udC13ZWlnaHQnLCBjdXJyZW50LmZvbnRXZWlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGxTdHJva2VNb2RlID0gY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0s7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMIHx8IGZpbGxTdHJva2VNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZmlsbENvbG9yICE9PSBTVkdfREVGQVVMVFMuZmlsbENvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsIGN1cnJlbnQuZmlsbENvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZmlsbEFscGhhIDwgMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtb3BhY2l0eScsIGN1cnJlbnQuZmlsbEFscGhhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlID09PSBfdXRpbC5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICd0cmFuc3BhcmVudCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZmlsbCcsICdub25lJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsbFN0cm9rZU1vZGUgPT09IF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSB8fCBmaWxsU3Ryb2tlTW9kZSA9PT0gX3V0aWwuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoY3VycmVudC50c3Bhbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dE1hdHJpeCA9IGN1cnJlbnQudGV4dE1hdHJpeDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC50ZXh0UmlzZSAhPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE1hdHJpeCA9IHRleHRNYXRyaXguc2xpY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRNYXRyaXhbNV0gKz0gY3VycmVudC50ZXh0UmlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgcG0odGV4dE1hdHJpeCkgKyAnIHNjYWxlKDEsIC0xKScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnR4dEVsZW1lbnQuc2V0QXR0cmlidXRlTlMoWE1MX05TLCAneG1sOnNwYWNlJywgJ3ByZXNlcnZlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQudHh0RWxlbWVudC5hcHBlbmRDaGlsZChjdXJyZW50LnRzcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50eHRncnAuYXBwZW5kQ2hpbGQoY3VycmVudC50eHRFbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGN1cnJlbnQudHh0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMZWFkaW5nTW92ZVRleHQ6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldExlYWRpbmdNb3ZlVGV4dCh4LCB5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TGVhZGluZygteSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZVRleHQoeCwgeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRGb250U3R5bGU6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2FkZEZvbnRTdHlsZShmb250T2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jc3NTdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jc3NTdHlsZSA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6c3R5bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3NzU3R5bGUuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3R5cGUnLCAndGV4dC9jc3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmcy5hcHBlbmRDaGlsZCh0aGlzLmNzc1N0eWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSAoMCwgX3V0aWwuY3JlYXRlT2JqZWN0VVJMKShmb250T2JqLmRhdGEsIGZvbnRPYmoubWltZXR5cGUsIHRoaXMuZm9yY2VEYXRhU2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jc3NTdHlsZS50ZXh0Q29udGVudCArPSAnQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBcIicgKyBmb250T2JqLmxvYWRlZE5hbWUgKyAnXCI7JyArICcgc3JjOiB1cmwoJyArIHVybCArICcpOyB9XFxuJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZvbnQ6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldEZvbnQoZGV0YWlscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZvbnRPYmogPSB0aGlzLmNvbW1vbk9ianMuZ2V0KGRldGFpbHNbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2l6ZSA9IGRldGFpbHNbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5mb250ID0gZm9udE9iajtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5lbWJlZEZvbnRzICYmIGZvbnRPYmouZGF0YSAmJiAhdGhpcy5lbWJlZGRlZEZvbnRzW2ZvbnRPYmoubG9hZGVkTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRm9udFN0eWxlKGZvbnRPYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWJlZGRlZEZvbnRzW2ZvbnRPYmoubG9hZGVkTmFtZV0gPSBmb250T2JqO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5mb250TWF0cml4ID0gZm9udE9iai5mb250TWF0cml4ID8gZm9udE9iai5mb250TWF0cml4IDogX3V0aWwuRk9OVF9JREVOVElUWV9NQVRSSVg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBib2xkID0gZm9udE9iai5ibGFjayA/IGZvbnRPYmouYm9sZCA/ICdib2xkZXInIDogJ2JvbGQnIDogZm9udE9iai5ib2xkID8gJ2JvbGQnIDogJ25vcm1hbCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGFsaWMgPSBmb250T2JqLml0YWxpYyA/ICdpdGFsaWMnIDogJ25vcm1hbCc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gLXNpemU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnREaXJlY3Rpb24gPSAtMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuZm9udERpcmVjdGlvbiA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnRTaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5mb250RmFtaWx5ID0gZm9udE9iai5sb2FkZWROYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnRXZWlnaHQgPSBib2xkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmZvbnRTdHlsZSA9IGl0YWxpYztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3BhbiA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6dHNwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneScsIHBmKC1jdXJyZW50LnkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC54Y29vcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUZXh0OiBmdW5jdGlvbiBlbmRUZXh0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSAmIF91dGlsLlRleHRSZW5kZXJpbmdNb2RlLkFERF9UT19QQVRIX0ZMQUcgJiYgY3VycmVudC50eHRFbGVtZW50ICYmIGN1cnJlbnQudHh0RWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuZWxlbWVudCA9IGN1cnJlbnQudHh0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcCgnbm9uemVybycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRQYXRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExpbmVXaWR0aDogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0TGluZVdpZHRoKHdpZHRoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5saW5lV2lkdGggPSB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TGluZUNhcDogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0TGluZUNhcChzdHlsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQubGluZUNhcCA9IExJTkVfQ0FQX1NUWUxFU1tzdHlsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRMaW5lSm9pbjogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0TGluZUpvaW4oc3R5bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmxpbmVKb2luID0gTElORV9KT0lOX1NUWUxFU1tzdHlsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNaXRlckxpbWl0OiBmdW5jdGlvbiBTVkdHcmFwaGljc19zZXRNaXRlckxpbWl0KGxpbWl0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5taXRlckxpbWl0ID0gbGltaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VBbHBoYTogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0U3Ryb2tlQWxwaGEoc3Ryb2tlQWxwaGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUFscGhhID0gc3Ryb2tlQWxwaGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTdHJva2VSR0JDb2xvcjogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0U3Ryb2tlUkdCQ29sb3IociwgZywgYikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBfdXRpbC5VdGlsLm1ha2VDc3NSZ2IociwgZywgYik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yID0gY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWxsQWxwaGE6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldEZpbGxBbHBoYShmaWxsQWxwaGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmZpbGxBbHBoYSA9IGZpbGxBbHBoYTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEZpbGxSR0JDb2xvcjogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0RmlsbFJHQkNvbG9yKHIsIGcsIGIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbG9yID0gX3V0aWwuVXRpbC5tYWtlQ3NzUmdiKHIsIGcsIGIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5maWxsQ29sb3IgPSBjb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRzcGFuID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2Zzp0c3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQueGNvb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RGFzaDogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0RGFzaChkYXNoQXJyYXksIGRhc2hQaGFzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZGFzaEFycmF5ID0gZGFzaEFycmF5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZGFzaFBoYXNlID0gZGFzaFBoYXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0UGF0aDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfY29uc3RydWN0UGF0aChvcHMsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gY3VycmVudC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGN1cnJlbnQueTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXRoID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpwYXRoJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcExlbmd0aCA9IG9wcy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSAwOyBpIDwgb3BMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChvcHNbaV0gfCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMucmVjdGFuZ2xlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoZWlnaHQgPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4dyA9IHggKyB3aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHloID0geSArIGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKCdNJywgcGYoeCksIHBmKHkpLCAnTCcsIHBmKHh3KSwgcGYoeSksICdMJywgcGYoeHcpLCBwZih5aCksICdMJywgcGYoeCksIHBmKHloKSwgJ1onKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5tb3ZlVG86XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2orK107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCgnTScsIHBmKHgpLCBwZih5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBfdXRpbC5PUFMubGluZVRvOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqKytdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goJ0wnLCBwZih4KSwgcGYoeSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG86XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBhcmdzW2ogKyA0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9IGFyZ3NbaiArIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goJ0MnLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZihhcmdzW2ogKyAyXSksIHBmKGFyZ3NbaiArIDNdKSwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmN1cnZlVG8yOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gYXJnc1tqICsgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBhcmdzW2ogKyAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKCdDJywgcGYoeCksIHBmKHkpLCBwZihhcmdzW2pdKSwgcGYoYXJnc1tqICsgMV0pLCBwZihhcmdzW2ogKyAyXSksIHBmKGFyZ3NbaiArIDNdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIF91dGlsLk9QUy5jdXJ2ZVRvMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IGFyZ3NbaiArIDJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gYXJnc1tqICsgM107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCgnQycsIHBmKGFyZ3Nbal0pLCBwZihhcmdzW2ogKyAxXSksIHBmKHgpLCBwZih5KSwgcGYoeCksIHBmKHkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgX3V0aWwuT1BTLmNsb3NlUGF0aDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKCdaJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgZC5qb2luKCcgJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCAnbm9uZScpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQoY3VycmVudC5wYXRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LmVsZW1lbnQgPSBjdXJyZW50LnBhdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuc2V0Q3VycmVudFBvaW50KHgsIHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kUGF0aDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfZW5kUGF0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBlbmRpbmdDbGlwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXBJZCA9ICdjbGlwcGF0aCcgKyBjbGlwQ291bnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBDb3VudCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcFBhdGggPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOmNsaXBQYXRoJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdpZCcsIGNsaXBJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBQYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICd0cmFuc2Zvcm0nLCBwbSh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcEVsZW1lbnQgPSBjdXJyZW50LmVsZW1lbnQuY2xvbmVOb2RlKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdDbGlwID09PSAnZXZlbm9kZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXBFbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdjbGlwLXJ1bGUnLCAnZXZlbm9kZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2NsaXAtcnVsZScsICdub256ZXJvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdDbGlwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcFBhdGguYXBwZW5kQ2hpbGQoY2xpcEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZnMuYXBwZW5kQ2hpbGQoY2xpcFBhdGgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmFjdGl2ZUNsaXBVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuY2xpcEdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXh0cmFTdGFjay5mb3JFYWNoKGZ1bmN0aW9uIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi5jbGlwR3JvdXAgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwUGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnY2xpcC1wYXRoJywgY3VycmVudC5hY3RpdmVDbGlwVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQuYWN0aXZlQ2xpcFVybCA9ICd1cmwoIycgKyBjbGlwSWQgKyAnKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGdycCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwOiBmdW5jdGlvbiBTVkdHcmFwaGljc19jbGlwKHR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQ2xpcCA9IHR5cGU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZVBhdGg6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2Nsb3NlUGF0aCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQucGF0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBjdXJyZW50LnBhdGguZ2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gJ1onO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5wYXRoLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldExlYWRpbmc6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldExlYWRpbmcobGVhZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQubGVhZGluZyA9IC1sZWFkaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJpc2U6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3NldFRleHRSaXNlKHRleHRSaXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0UmlzZSA9IHRleHRSaXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGV4dFJlbmRlcmluZ01vZGU6IGZ1bmN0aW9uIHNldFRleHRSZW5kZXJpbmdNb2RlKHRleHRSZW5kZXJpbmdNb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC50ZXh0UmVuZGVyaW5nTW9kZSA9IHRleHRSZW5kZXJpbmdNb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SFNjYWxlOiBmdW5jdGlvbiBTVkdHcmFwaGljc19zZXRIU2NhbGUoc2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LnRleHRIU2NhbGUgPSBzY2FsZSAvIDEwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEdTdGF0ZTogZnVuY3Rpb24gU1ZHR3JhcGhpY3Nfc2V0R1N0YXRlKHN0YXRlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzdGF0ZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXRlID0gc3RhdGVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IHN0YXRlWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RhdGVbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTFcnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVXaWR0aCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTEMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVDYXAodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0xKJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lSm9pbih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTUwnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE1pdGVyTGltaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhc2godmFsdWVbMF0sIHZhbHVlWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdGb250JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGb250KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdDQSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3Ryb2tlQWxwaGEodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NhJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGaWxsQWxwaGEodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnVW5pbXBsZW1lbnRlZCBncmFwaGljIHN0YXRlICcgKyBrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfZmlsbCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB0aGlzLmN1cnJlbnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgY3VycmVudC5maWxsQ29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsLW9wYWNpdHknLCBjdXJyZW50LmZpbGxBbHBoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBmdW5jdGlvbiBTVkdHcmFwaGljc19zdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gdGhpcy5jdXJyZW50O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50LmVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoY3VycmVudC5lbGVtZW50KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgJ25vbmUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2V0U3Ryb2tlQXR0cmlidXRlczogZnVuY3Rpb24gX3NldFN0cm9rZUF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3Ryb2tlJywgY3VycmVudC5zdHJva2VDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS1vcGFjaXR5JywgY3VycmVudC5zdHJva2VBbHBoYSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS1taXRlcmxpbWl0JywgcGYoY3VycmVudC5taXRlckxpbWl0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS1saW5lY2FwJywgY3VycmVudC5saW5lQ2FwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnc3Ryb2tlLWxpbmVqb2luJywgY3VycmVudC5saW5lSm9pbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3N0cm9rZS13aWR0aCcsIHBmKGN1cnJlbnQubGluZVdpZHRoKSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdzdHJva2UtZGFzaGFycmF5JywgY3VycmVudC5kYXNoQXJyYXkubWFwKHBmKS5qb2luKCcgJykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsICdzdHJva2UtZGFzaG9mZnNldCcsIHBmKGN1cnJlbnQuZGFzaFBoYXNlKSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9GaWxsOiBmdW5jdGlvbiBTVkdHcmFwaGljc19lb0ZpbGwoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtcnVsZScsICdldmVub2RkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxTdHJva2U6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Ryb2tlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW9GaWxsU3Ryb2tlOiBmdW5jdGlvbiBTVkdHcmFwaGljc19lb0ZpbGxTdHJva2UoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuZWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50LmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwtcnVsZScsICdldmVub2RkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlU3Ryb2tlOiBmdW5jdGlvbiBTVkdHcmFwaGljc19jbG9zZVN0cm9rZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlRmlsbFN0cm9rZTogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfY2xvc2VGaWxsU3Ryb2tlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUGF0aCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlRU9GaWxsU3Ryb2tlOiBmdW5jdGlvbiBjbG9zZUVPRmlsbFN0cm9rZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lb0ZpbGxTdHJva2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50U29saWRDb2xvckltYWdlTWFzazogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlY3QgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOnJlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneCcsICcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCAnMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd3aWR0aCcsICcxcHgnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgJzFweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICdmaWxsJywgY3VycmVudC5maWxsQ29sb3IpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQocmVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludEpwZWdYT2JqZWN0OiBmdW5jdGlvbiBTVkdHcmFwaGljc19wYWludEpwZWdYT2JqZWN0KG9iaklkLCB3LCBoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdPYmogPSB0aGlzLm9ianMuZ2V0KG9iaklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0VsID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzppbWFnZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhYTElOS19OUywgJ3hsaW5rOmhyZWYnLCBpbWdPYmouc3JjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3dpZHRoJywgcGYodykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneCcsICcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5JywgcGYoLWgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3RyYW5zZm9ybScsICdzY2FsZSgnICsgcGYoMSAvIHcpICsgJyAnICsgcGYoLTEgLyBoKSArICcpJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChpbWdFbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWludEltYWdlWE9iamVjdDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcGFpbnRJbWFnZVhPYmplY3Qob2JqSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGltZ0RhdGEgPSB0aGlzLm9ianMuZ2V0KG9iaklkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWltZ0RhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLCBfdXRpbC53YXJuKSgnRGVwZW5kZW50IGltYWdlIGlzblxcJ3QgcmVhZHkgeWV0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX3BhaW50SW5saW5lSW1hZ2VYT2JqZWN0KGltZ0RhdGEsIG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nU3JjID0gY29udmVydEltZ0RhdGFUb1BuZyhpbWdEYXRhLCB0aGlzLmZvcmNlRGF0YVNjaGVtYSwgISFtYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpyZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCAnMCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnd2lkdGgnLCBwZih3aWR0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudC5lbGVtZW50ID0gY2xpcHJlY3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2xpcCgnbm9uemVybycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nRWwgPSB0aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgnc3ZnOmltYWdlJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKFhMSU5LX05TLCAneGxpbms6aHJlZicsIGltZ1NyYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nRWwuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCBwZigtaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ0VsLnNldEF0dHJpYnV0ZU5TKG51bGwsICd3aWR0aCcsIHBmKHdpZHRoKSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaGVpZ2h0KSArICdweCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdFbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgJ3NjYWxlKCcgKyBwZigxIC8gd2lkdGgpICsgJyAnICsgcGYoLTEgLyBoZWlnaHQpICsgJyknKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFzaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzay5hcHBlbmRDaGlsZChpbWdFbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGltZ0VsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRJbWFnZU1hc2tYT2JqZWN0OiBmdW5jdGlvbiBTVkdHcmFwaGljc19wYWludEltYWdlTWFza1hPYmplY3QoaW1nRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IHRoaXMuY3VycmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHdpZHRoID0gaW1nRGF0YS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGltZ0RhdGEuaGVpZ2h0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsbENvbG9yID0gY3VycmVudC5maWxsQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQubWFza0lkID0gJ21hc2snICsgbWFza0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtYXNrID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzptYXNrJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2suc2V0QXR0cmlidXRlTlMobnVsbCwgJ2lkJywgY3VycmVudC5tYXNrSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVjdCA9IHRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCdzdmc6cmVjdCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd4JywgJzAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneScsICcwJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3dpZHRoJywgcGYod2lkdGgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ2ZpbGwnLCBmaWxsQ29sb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICdtYXNrJywgJ3VybCgjJyArIGN1cnJlbnQubWFza0lkICsgJyknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWZzLmFwcGVuZENoaWxkKG1hc2spO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQocmVjdCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChpbWdEYXRhLCBtYXNrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhaW50Rm9ybVhPYmplY3RCZWdpbjogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcGFpbnRGb3JtWE9iamVjdEJlZ2luKG1hdHJpeCwgYmJveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtYXRyaXgpICYmIG1hdHJpeC5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXSwgbWF0cml4WzRdLCBtYXRyaXhbNV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJib3gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IGJib3hbMl0gLSBiYm94WzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGhlaWdodCA9IGJib3hbM10gLSBiYm94WzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNsaXByZWN0ID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpyZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneCcsIGJib3hbMF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHJlY3Quc2V0QXR0cmlidXRlTlMobnVsbCwgJ3knLCBiYm94WzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaXByZWN0LnNldEF0dHJpYnV0ZU5TKG51bGwsICd3aWR0aCcsIHBmKHdpZHRoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcmVjdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnaGVpZ2h0JywgcGYoaGVpZ2h0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuZWxlbWVudCA9IGNsaXByZWN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbGlwKCdub256ZXJvJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFpbnRGb3JtWE9iamVjdEVuZDogZnVuY3Rpb24gU1ZHR3JhcGhpY3NfcGFpbnRGb3JtWE9iamVjdEVuZCgpIHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbml0aWFsaXplOiBmdW5jdGlvbiBfaW5pdGlhbGl6ZSh2aWV3cG9ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3ZnID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZSh2aWV3cG9ydC53aWR0aCwgdmlld3BvcnQuaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlZmluaXRpb25zID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpkZWZzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChkZWZpbml0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVmcyA9IGRlZmluaXRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdEdyb3VwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RHcm91cC5zZXRBdHRyaWJ1dGVOUyhudWxsLCAndHJhbnNmb3JtJywgcG0odmlld3BvcnQudHJhbnNmb3JtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChyb290R3JvdXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN2ZyA9IHJvb3RHcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN2ZztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9lbnN1cmVDbGlwR3JvdXA6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2Vuc3VyZUNsaXBHcm91cCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnQuY2xpcEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2xpcEdyb3VwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwR3JvdXAuc2V0QXR0cmlidXRlTlMobnVsbCwgJ2NsaXAtcGF0aCcsIHRoaXMuY3VycmVudC5hY3RpdmVDbGlwVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3ZnLmFwcGVuZENoaWxkKGNsaXBHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnQuY2xpcEdyb3VwID0gY2xpcEdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudC5jbGlwR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZW5zdXJlVHJhbnNmb3JtR3JvdXA6IGZ1bmN0aW9uIFNWR0dyYXBoaWNzX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudGdycCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50Z3JwID0gdGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoJ3N2ZzpnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRncnAuc2V0QXR0cmlidXRlTlMobnVsbCwgJ3RyYW5zZm9ybScsIHBtKHRoaXMudHJhbnNmb3JtTWF0cml4KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Vuc3VyZUNsaXBHcm91cCgpLmFwcGVuZENoaWxkKHRoaXMudGdycCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3ZnLmFwcGVuZENoaWxkKHRoaXMudGdycCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50Z3JwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU1ZHR3JhcGhpY3M7XG4gICAgICAgICAgICAgICAgICAgIH0oKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2NSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGTm9kZVN0cmVhbSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgICAgIHZhciBfcmVnZW5lcmF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTQ3KSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3V0aWwgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDEpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9uZXR3b3JrX3V0aWxzID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNjYpO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IHJldHVybiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHsgaWYgKHNlbGYgPT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIHNlbGY7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IF9nZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5nZXRQcm90b3R5cGVPZiA6IGZ1bmN0aW9uIF9nZXRQcm90b3R5cGVPZihvKSB7IHJldHVybiBvLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobyk7IH07IHJldHVybiBfZ2V0UHJvdG90eXBlT2Yobyk7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykgeyBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCB3cml0YWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0gfSk7IGlmIChzdXBlckNsYXNzKSBfc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2NyZWF0ZUNsYXNzKENvbnN0cnVjdG9yLCBwcm90b1Byb3BzLCBzdGF0aWNQcm9wcykgeyBpZiAocHJvdG9Qcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH1cblxuICAgICAgICAgICAgICAgIHZhciBmcyA9IHJlcXVpcmUoJ2ZzJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcblxuICAgICAgICAgICAgICAgIHZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgdXJsID0gcmVxdWlyZSgndXJsJyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgZmlsZVVyaVJlZ2V4ID0gL15maWxlOlxcL1xcL1xcL1thLXpBLVpdOlxcLy87XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBwYXJzZVVybChzb3VyY2VVcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlZFVybCA9IHVybC5wYXJzZShzb3VyY2VVcmwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZWRVcmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgcGFyc2VkVXJsLmhvc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRVcmw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoL15bYS16XTpbL1xcXFxdL2kudGVzdChzb3VyY2VVcmwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnBhcnNlKFwiZmlsZTovLy9cIi5jb25jYXQoc291cmNlVXJsKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlZFVybC5ob3N0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZWRVcmwucHJvdG9jb2wgPSAnZmlsZTonO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFVybDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGTm9kZVN0cmVhbSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGTm9kZVN0cmVhbShzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGTm9kZVN0cmVhbSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVybCA9IHBhcnNlVXJsKHNvdXJjZS51cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIdHRwID0gdGhpcy51cmwucHJvdG9jb2wgPT09ICdodHRwOicgfHwgdGhpcy51cmwucHJvdG9jb2wgPT09ICdodHRwczonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNGc1VybCA9IHRoaXMudXJsLnByb3RvY29sID09PSAnZmlsZTonO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaHR0cEhlYWRlcnMgPSB0aGlzLmlzSHR0cCAmJiBzb3VyY2UuaHR0cEhlYWRlcnMgfHwge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERk5vZGVTdHJlYW0sIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImdldEZ1bGxSZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RnVsbFJlYWRlcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAsIF91dGlsLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3QgPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcih0aGlzKSA6IG5ldyBQREZOb2RlU3RyZWFtRnVsbFJlYWRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmFuZ2VSZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmFuZ2VSZWFkZXIoc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VSZWFkZXIgPSB0aGlzLmlzRnNVcmwgPyBuZXcgUERGTm9kZVN0cmVhbUZzUmFuZ2VSZWFkZXIodGhpcywgc3RhcnQsIGVuZCkgOiBuZXcgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKHRoaXMsIHN0YXJ0LCBlbmQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyYW5nZVJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJhbmdlUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2FuY2VsQWxsUmVxdWVzdHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsQWxsUmVxdWVzdHMocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3QuY2FuY2VsKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChyZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUERGTm9kZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgZXhwb3J0cy5QREZOb2RlU3RyZWFtID0gUERGTm9kZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgIHZhciBCYXNlRnVsbFJlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gQmFzZUZ1bGxSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VGdWxsUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VybCA9IHN0cmVhbS51cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBzdHJlYW0uc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRMZW5ndGggPSBzb3VyY2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZW5hbWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHNvdXJjZS5kaXNhYmxlUmFuZ2UgfHwgZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2VDaHVua1NpemUgPSBzb3VyY2UucmFuZ2VDaHVua1NpemU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JhbmdlQ2h1bmtTaXplICYmICF0aGlzLl9kaXNhYmxlUmFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlQ2xhc3MoQmFzZUZ1bGxSZWFkZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlYWQgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmssIGJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3N0b3JlZEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNodW5rID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDEwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB0aGlzLnJlYWQoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWw6IHRoaXMuX2NvbnRlbnRMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoY2h1bmspLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjYW5jZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2Vycm9yKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc2V0UmVhZGFibGVTdHJlYW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldFJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0gPSByZWFkYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGFibGVTdHJlYW0ub24oJ3JlYWRhYmxlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYWJsZVN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkYWJsZVN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fZXJyb3IocmVhc29uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCAmJiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oJ3N0cmVhbWluZyBpcyBkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zdG9yZWRFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGFibGVTdHJlYW0uZGVzdHJveSh0aGlzLl9zdG9yZWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImhlYWRlcnNSZWFkeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZpbGVuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbnRlbnRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc1JhbmdlU3VwcG9ydGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNTdHJlYW1pbmdTdXBwb3J0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEJhc2VGdWxsUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgQmFzZVJhbmdlUmVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBCYXNlUmFuZ2VSZWFkZXIoc3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIEJhc2VSYW5nZVJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cmwgPSBzdHJlYW0udXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc291cmNlID0gc3RyZWFtLnNvdXJjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKEJhc2VSYW5nZVJlYWRlciwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwicmVhZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVhZDIgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rLCBidWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvci5kZWZhdWx0LndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0Mikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5wcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5fcmVhZGFibGVTdHJlYW0ucmVhZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGNodW5rID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHRoaXMucmVhZCgpKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZCArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IHRoaXMuX2xvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXIgPSBuZXcgVWludDhBcnJheShjaHVuaykuYnVmZmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYnVmZmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlMiwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVhZDIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0oKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJjYW5jZWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gY2FuY2VsKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3JlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcihyZWFzb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfZXJyb3JcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX2Vycm9yKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJfc2V0UmVhZGFibGVTdHJlYW1cIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gX3NldFJlYWRhYmxlU3RyZWFtKHJlYWRhYmxlU3RyZWFtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtID0gcmVhZGFibGVTdHJlYW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlU3RyZWFtLm9uKCdyZWFkYWJsZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGFibGVTdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMi5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGFibGVTdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMyLl9lcnJvcihyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3kodGhpcy5fc3RvcmVkRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc1N0cmVhbWluZ1N1cHBvcnRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfV0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQmFzZVJhbmdlUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0T3B0aW9ucyh1cmwsIGhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sOiB1cmwucHJvdG9jb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRoOiB1cmwuYXV0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q6IHVybC5ob3N0bmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQ6IHVybC5wb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogdXJsLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVyc1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZOb2RlU3RyZWFtRnVsbFJlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKF9CYXNlRnVsbFJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyLCBfQmFzZUZ1bGxSZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZOb2RlU3RyZWFtRnVsbFJlYWRlcihzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQREZOb2RlU3RyZWFtRnVsbFJlYWRlcikuY2FsbCh0aGlzLCBzdHJlYW0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVSZXNwb25zZSA9IGZ1bmN0aW9uIGhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlID09PSA0MDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvciA9IG5ldyBfdXRpbC5NaXNzaW5nUERGRXhjZXB0aW9uKFwiTWlzc2luZyBQREYgXFxcIlwiLmNvbmNhdChfdGhpczMuX3VybCwgXCJcXFwiLlwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX3N0b3JlZEVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzMy5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9zZXRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdldFJlc3BvbnNlSGVhZGVyID0gZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMy5fcmVhZGFibGVTdHJlYW0uaGVhZGVyc1tuYW1lLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmFsaWRhdGVSYW5nZVJlcXVlc3QgPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIdHRwOiBzdHJlYW0uaXNIdHRwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiBfdGhpczMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSYW5nZTogX3RoaXMzLl9kaXNhYmxlUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzID0gX3ZhbGlkYXRlUmFuZ2VSZXF1ZXN0LmFsbG93UmFuZ2VSZXF1ZXN0cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExlbmd0aCA9IF92YWxpZGF0ZVJhbmdlUmVxdWVzdC5zdWdnZXN0ZWRMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9pc1JhbmdlU3VwcG9ydGVkID0gYWxsb3dSYW5nZVJlcXVlc3RzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX2NvbnRlbnRMZW5ndGggPSBzdWdnZXN0ZWRMZW5ndGggfHwgX3RoaXMzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX2ZpbGVuYW1lID0gKDAsIF9uZXR3b3JrX3V0aWxzLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKGdldFJlc3BvbnNlSGVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9yZXF1ZXN0ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfdGhpczMuX3VybC5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX3JlcXVlc3QgPSBodHRwLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnMoX3RoaXMzLl91cmwsIHN0cmVhbS5odHRwSGVhZGVycyksIGhhbmRsZVJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX3JlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKF90aGlzMy5fdXJsLCBzdHJlYW0uaHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9yZXF1ZXN0Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9zdG9yZWRFcnJvciA9IHJlYXNvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMzLl9yZXF1ZXN0LmVuZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERk5vZGVTdHJlYW1GdWxsUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KEJhc2VGdWxsUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgIHZhciBQREZOb2RlU3RyZWFtUmFuZ2VSZWFkZXIgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChfQmFzZVJhbmdlUmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfaW5oZXJpdHMoUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyLCBfQmFzZVJhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKHN0cmVhbSwgc3RhcnQsIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGTm9kZVN0cmVhbVJhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNCA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQREZOb2RlU3RyZWFtUmFuZ2VSZWFkZXIpLmNhbGwodGhpcywgc3RyZWFtKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9odHRwSGVhZGVycyA9IHt9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gc3RyZWFtLmh0dHBIZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHN0cmVhbS5odHRwSGVhZGVyc1twcm9wZXJ0eV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9odHRwSGVhZGVyc1twcm9wZXJ0eV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczQuX2h0dHBIZWFkZXJzWydSYW5nZSddID0gXCJieXRlcz1cIi5jb25jYXQoc3RhcnQsIFwiLVwiKS5jb25jYXQoZW5kIC0gMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaGFuZGxlUmVzcG9uc2UgPSBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSA9PT0gNDA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbihcIk1pc3NpbmcgUERGIFxcXCJcIi5jb25jYXQoX3RoaXM0Ll91cmwsIFwiXFxcIi5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9zdG9yZWRFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9zZXRSZWFkYWJsZVN0cmVhbShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcmVxdWVzdCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXM0Ll91cmwucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0KGNyZWF0ZVJlcXVlc3RPcHRpb25zKF90aGlzNC5fdXJsLCBfdGhpczQuX2h0dHBIZWFkZXJzKSwgaGFuZGxlUmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcmVxdWVzdCA9IGh0dHBzLnJlcXVlc3QoY3JlYXRlUmVxdWVzdE9wdGlvbnMoX3RoaXM0Ll91cmwsIF90aGlzNC5faHR0cEhlYWRlcnMpLCBoYW5kbGVSZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9yZXF1ZXN0Lm9uKCdlcnJvcicsIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM0Ll9zdG9yZWRFcnJvciA9IHJlYXNvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNC5fcmVxdWVzdC5lbmQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZOb2RlU3RyZWFtUmFuZ2VSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oQmFzZVJhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgIHZhciBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Jhc2VGdWxsUmVhZGVyMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2luaGVyaXRzKFBERk5vZGVTdHJlYW1Gc0Z1bGxSZWFkZXIsIF9CYXNlRnVsbFJlYWRlcjIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZOb2RlU3RyZWFtRnNGdWxsUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpczU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCBfZ2V0UHJvdG90eXBlT2YoUERGTm9kZVN0cmVhbUZzRnVsbFJlYWRlcikuY2FsbCh0aGlzLCBzdHJlYW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChfdGhpczUuX3VybC5wYXRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlVXJpUmVnZXgudGVzdChfdGhpczUuX3VybC5ocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzLmxzdGF0KHBhdGgsIGZ1bmN0aW9uIChlcnJvciwgc3RhdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvci5jb2RlID09PSAnRU5PRU5UJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gbmV3IF91dGlsLk1pc3NpbmdQREZFeGNlcHRpb24oXCJNaXNzaW5nIFBERiBcXFwiXCIuY29uY2F0KHBhdGgsIFwiXFxcIi5cIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczUuX3N0b3JlZEVycm9yID0gZXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KGVycm9yKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1Ll9jb250ZW50TGVuZ3RoID0gc3RhdC5zaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNS5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXM1Ll9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERk5vZGVTdHJlYW1Gc0Z1bGxSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0oQmFzZUZ1bGxSZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgdmFyIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoX0Jhc2VSYW5nZVJlYWRlcjIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pbmhlcml0cyhQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlciwgX0Jhc2VSYW5nZVJlYWRlcjIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlcihzdHJlYW0sIHN0YXJ0LCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM2O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNiA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIF9nZXRQcm90b3R5cGVPZihQREZOb2RlU3RyZWFtRnNSYW5nZVJlYWRlcikuY2FsbCh0aGlzLCBzdHJlYW0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aCA9IGRlY29kZVVSSUNvbXBvbmVudChfdGhpczYuX3VybC5wYXRoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlVXJpUmVnZXgudGVzdChfdGhpczYuX3VybC5ocmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5yZXBsYWNlKC9eXFwvLywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzNi5fc2V0UmVhZGFibGVTdHJlYW0oZnMuY3JlYXRlUmVhZFN0cmVhbShwYXRoLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0OiBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kOiBlbmQgLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERk5vZGVTdHJlYW1Gc1JhbmdlUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KEJhc2VSYW5nZVJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2NiAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvciA9IGNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3I7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyID0gZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcjtcbiAgICAgICAgICAgICAgICBleHBvcnRzLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzID0gdmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXM7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzID0gdmFsaWRhdGVSZXNwb25zZVN0YXR1cztcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2NvbnRlbnRfZGlzcG9zaXRpb24gPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Nyk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB2YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcyhfcmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBnZXRSZXNwb25zZUhlYWRlciA9IF9yZWYuZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0h0dHAgPSBfcmVmLmlzSHR0cCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplID0gX3JlZi5yYW5nZUNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSYW5nZSA9IF9yZWYuZGlzYWJsZVJhbmdlO1xuICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KShyYW5nZUNodW5rU2l6ZSA+IDAsICdSYW5nZSBjaHVuayBzaXplIG11c3QgYmUgbGFyZ2VyIHRoYW4gemVybycpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmV0dXJuVmFsdWVzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dSYW5nZVJlcXVlc3RzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExlbmd0aDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBwYXJzZUludChnZXRSZXNwb25zZUhlYWRlcignQ29udGVudC1MZW5ndGgnKSwgMTApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWVzLnN1Z2dlc3RlZExlbmd0aCA9IGxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICBpZiAobGVuZ3RoIDw9IDIgKiByYW5nZUNodW5rU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlUmFuZ2UgfHwgIWlzSHR0cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRSZXNwb25zZUhlYWRlcignQWNjZXB0LVJhbmdlcycpICE9PSAnYnl0ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnRFbmNvZGluZyA9IGdldFJlc3BvbnNlSGVhZGVyKCdDb250ZW50LUVuY29kaW5nJykgfHwgJ2lkZW50aXR5JztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudEVuY29kaW5nICE9PSAnaWRlbnRpdHknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWVzO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWVzLmFsbG93UmFuZ2VSZXF1ZXN0cyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZXM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcihnZXRSZXNwb25zZUhlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb24nKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudERpc3Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsZW5hbWUgPSAoMCwgX2NvbnRlbnRfZGlzcG9zaXRpb24uZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKShjb250ZW50RGlzcG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoL1xcLnBkZiQvaS50ZXN0KGZpbGVuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3Ioc3RhdHVzLCB1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gNDA0IHx8IHN0YXR1cyA9PT0gMCAmJiAvXmZpbGU6Ly50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgX3V0aWwuTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgXCInICsgdXJsICsgJ1wiLicpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBfdXRpbC5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgnICsgc3RhdHVzICsgJykgd2hpbGUgcmV0cmlldmluZyBQREYgXCInICsgdXJsICsgJ1wiLicsIHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gdmFsaWRhdGVSZXNwb25zZVN0YXR1cyhzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1cyA9PT0gMjAwIHx8IHN0YXR1cyA9PT0gMjA2O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8qKiovIH0pLFxuICAgICAgICAgICAgLyogMTY3ICovXG4gICAgICAgICAgICAvKioqLyAoZnVuY3Rpb24obW9kdWxlLCBleHBvcnRzLCBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKSB7XG5cbiAgICAgICAgICAgICAgICBcInVzZSBzdHJpY3RcIjtcblxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5nZXRGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb25IZWFkZXIgPSBnZXRGaWxlbmFtZUZyb21Db250ZW50RGlzcG9zaXRpb25IZWFkZXI7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2VcIik7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEZpbGVuYW1lRnJvbUNvbnRlbnREaXNwb3NpdGlvbkhlYWRlcihjb250ZW50RGlzcG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5lZWRzRW5jb2RpbmdGaXh1cCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSB0b1BhcmFtUmVnRXhwKCdmaWxlbmFtZVxcXFwqJywgJ2knKS5leGVjKGNvbnRlbnREaXNwb3NpdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wWzFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGVuYW1lID0gcmZjMjYxNnVucXVvdGUodG1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gdW5lc2NhcGUoZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSByZmM1OTg3ZGVjb2RlKGZpbGVuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gcmZjMjA0N2RlY29kZShmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4dXBFbmNvZGluZyhmaWxlbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0bXAgPSByZmMyMjMxZ2V0cGFyYW0oY29udGVudERpc3Bvc2l0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ZpbGVuYW1lID0gcmZjMjA0N2RlY29kZSh0bXApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4dXBFbmNvZGluZyhfZmlsZW5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdG1wID0gdG9QYXJhbVJlZ0V4cCgnZmlsZW5hbWUnLCAnaScpLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodG1wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSB0bXBbMV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZmlsZW5hbWUyID0gcmZjMjYxNnVucXVvdGUodG1wKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgX2ZpbGVuYW1lMiA9IHJmYzIwNDdkZWNvZGUoX2ZpbGVuYW1lMik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZml4dXBFbmNvZGluZyhfZmlsZW5hbWUyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvUGFyYW1SZWdFeHAoYXR0cmlidXRlUGF0dGVybiwgZmxhZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKCcoPzpefDspXFxcXHMqJyArIGF0dHJpYnV0ZVBhdHRlcm4gKyAnXFxcXHMqPVxcXFxzKicgKyAnKCcgKyAnW15cIjtcXFxcc11bXjtcXFxcc10qJyArICd8JyArICdcIig/OlteXCJcXFxcXFxcXF18XFxcXFxcXFxcIj8pK1wiPycgKyAnKScsIGZsYWdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRleHRkZWNvZGUoZW5jb2RpbmcsIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5jb2RpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIS9eW1xceDAwLVxceEZGXSskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYnl0ZXMgPSBBcnJheS5mcm9tKHZhbHVlLCBmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaC5jaGFyQ29kZUF0KDApICYgMHhGRjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoYnl0ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNFbmNvZGluZ0ZpeHVwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoL151dGYtPzgkL2kudGVzdChlbmNvZGluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHNFbmNvZGluZ0ZpeHVwID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHt9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGZpeHVwRW5jb2RpbmcodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkc0VuY29kaW5nRml4dXAgJiYgL1tcXHg4MC1cXHhmZl0vLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXh0ZGVjb2RlKCd1dGYtOCcsIHZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkc0VuY29kaW5nRml4dXApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXh0ZGVjb2RlKCdpc28tODg1OS0xJywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmZjMjIzMWdldHBhcmFtKGNvbnRlbnREaXNwb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVyID0gdG9QYXJhbVJlZ0V4cCgnZmlsZW5hbWVcXFxcKigoPyEwXFxcXGQpXFxcXGQrKShcXFxcKj8pJywgJ2lnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBpdGVyLmV4ZWMoY29udGVudERpc3Bvc2l0aW9uKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX21hdGNoID0gbWF0Y2gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tYXRjaDIgPSBfc2xpY2VkVG9BcnJheShfbWF0Y2gsIDQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuID0gX21hdGNoMlsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdCA9IF9tYXRjaDJbMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBfbWF0Y2gyWzNdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbiA9IHBhcnNlSW50KG4sIDEwKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuIGluIG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlc1tuXSA9IFtxdW90LCBwYXJ0XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnRzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIG4gPSAwOyBuIDwgbWF0Y2hlcy5sZW5ndGg7ICsrbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKG4gaW4gbWF0Y2hlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tYXRjaGVzJG4gPSBfc2xpY2VkVG9BcnJheShtYXRjaGVzW25dLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVvdCA9IF9tYXRjaGVzJG5bMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnQgPSBfbWF0Y2hlcyRuWzFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHJmYzI2MTZ1bnF1b3RlKHBhcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHVuZXNjYXBlKHBhcnQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcmZjNTk4N2RlY29kZShwYXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLnB1c2gocGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJmYzI2MTZ1bnF1b3RlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnXCInKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0cyA9IHZhbHVlLnNsaWNlKDEpLnNwbGl0KCdcXFxcXCInKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1b3RpbmRleCA9IHBhcnRzW2ldLmluZGV4T2YoJ1wiJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHF1b3RpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzW2ldID0gcGFydHNbaV0uc2xpY2UoMCwgcXVvdGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzLmxlbmd0aCA9IGkgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydHNbaV0gPSBwYXJ0c1tpXS5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFydHMuam9pbignXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmZjNTk4N2RlY29kZShleHR2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuY29kaW5nZW5kID0gZXh0dmFsdWUuaW5kZXhPZignXFwnJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmNvZGluZ2VuZCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXh0dmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmNvZGluZyA9IGV4dHZhbHVlLnNsaWNlKDAsIGVuY29kaW5nZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsYW5ndmFsdWUgPSBleHR2YWx1ZS5zbGljZShlbmNvZGluZ2VuZCArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGFuZ3ZhbHVlLnJlcGxhY2UoL15bXiddKicvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dGRlY29kZShlbmNvZGluZywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmZjMjA0N2RlY29kZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5zdGFydHNXaXRoKCc9PycpIHx8IC9bXFx4MDAtXFx4MTlcXHg4MC1cXHhmZl0vLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvPVxcPyhbXFx3LV0qKVxcPyhbUXFCYl0pXFw/KCg/OlteP118XFw/KD8hPSkpKilcXD89L2csIGZ1bmN0aW9uIChfLCBjaGFyc2V0LCBlbmNvZGluZywgdGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmNvZGluZyA9PT0gJ3EnIHx8IGVuY29kaW5nID09PSAnUScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgvXy9nLCAnICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC89KFswLTlhLWZBLUZdezJ9KS9nLCBmdW5jdGlvbiAoXywgaGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChoZXgsIDE2KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dGRlY29kZShjaGFyc2V0LCB0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gYXRvYih0ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRleHRkZWNvZGUoY2hhcnNldCwgdGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2OCAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGRmV0Y2hTdHJlYW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgICAgICB2YXIgX3JlZ2VuZXJhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE0NykpO1xuXG4gICAgICAgICAgICAgICAgdmFyIF91dGlsID0gX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxKTtcblxuICAgICAgICAgICAgICAgIHZhciBfbmV0d29ya191dGlscyA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMTY2KTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlRmV0Y2hPcHRpb25zKGhlYWRlcnMsIHdpdGhDcmVkZW50aWFscywgYWJvcnRDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRDb250cm9sbGVyICYmIGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiAnY29ycycsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVkZW50aWFsczogd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ3NhbWUtb3JpZ2luJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0OiAnZm9sbG93J1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHZhciBQREZGZXRjaFN0cmVhbSA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGRmV0Y2hTdHJlYW0oc291cmNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFBERkZldGNoU3RyZWFtKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNIdHRwID0gL15odHRwcz86L2kudGVzdChzb3VyY2UudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmh0dHBIZWFkZXJzID0gdGhpcy5pc0h0dHAgJiYgc291cmNlLmh0dHBIZWFkZXJzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIF9jcmVhdGVDbGFzcyhQREZGZXRjaFN0cmVhbSwgW3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0RnVsbFJlYWRlclwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRGdWxsUmVhZGVyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG5ldyBQREZGZXRjaFN0cmVhbVJlYWRlcih0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiZ2V0UmFuZ2VSZWFkZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0UmFuZ2VSZWFkZXIoYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXIodGhpcywgYmVnaW4sIGVuZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHJlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNhbmNlbEFsbFJlcXVlc3RzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbEFsbFJlcXVlc3RzKHJlYXNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRlcnMgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXIuY2FuY2VsKHJlYXNvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERkZldGNoU3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICBleHBvcnRzLlBERkZldGNoU3RyZWFtID0gUERGRmV0Y2hTdHJlYW07XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRmV0Y2hTdHJlYW1SZWFkZXIgPVxuICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERkZldGNoU3RyZWFtUmVhZGVyKHN0cmVhbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgUERGRmV0Y2hTdHJlYW1SZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RyZWFtID0gc3RyZWFtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlYWRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVkID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWxlbmFtZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gc291cmNlLndpdGhDcmVkZW50aWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb250ZW50TGVuZ3RoID0gc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kaXNhYmxlUmFuZ2UgPSBzb3VyY2UuZGlzYWJsZVJhbmdlIHx8IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yYW5nZUNodW5rU2l6ZSAmJiAhdGhpcy5fZGlzYWJsZVJhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Rpc2FibGVSYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBBYm9ydENvbnRyb2xsZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Fib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gIXNvdXJjZS5kaXNhYmxlUmFuZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzLmFwcGVuZChwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSBzb3VyY2UudXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZldGNoKHVybCwgY3JlYXRlRmV0Y2hPcHRpb25zKHRoaXMuX2hlYWRlcnMsIHRoaXMuX3dpdGhDcmVkZW50aWFscywgdGhpcy5fYWJvcnRDb250cm9sbGVyKSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSZXNwb25zZVN0YXR1cykocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHJlc3BvbnNlLnN0YXR1cywgdXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9yZWFkZXIgPSByZXNwb25zZS5ib2R5LmdldFJlYWRlcigpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdldFJlc3BvbnNlSGVhZGVyID0gZnVuY3Rpb24gZ2V0UmVzcG9uc2VIZWFkZXIobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmhlYWRlcnMuZ2V0KG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfdmFsaWRhdGVSYW5nZVJlcXVlc3QgPSAoMCwgX25ldHdvcmtfdXRpbHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNIdHRwOiBfdGhpcy5fc3RyZWFtLmlzSHR0cCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZUNodW5rU2l6ZTogX3RoaXMuX3JhbmdlQ2h1bmtTaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVSYW5nZTogX3RoaXMuX2Rpc2FibGVSYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1JhbmdlUmVxdWVzdHMgPSBfdmFsaWRhdGVSYW5nZVJlcXVlc3QuYWxsb3dSYW5nZVJlcXVlc3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGVkTGVuZ3RoID0gX3ZhbGlkYXRlUmFuZ2VSZXF1ZXN0LnN1Z2dlc3RlZExlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5faXNSYW5nZVN1cHBvcnRlZCA9IGFsbG93UmFuZ2VSZXF1ZXN0cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX2NvbnRlbnRMZW5ndGggPSBzdWdnZXN0ZWRMZW5ndGggfHwgX3RoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLl9maWxlbmFtZSA9ICgwLCBfbmV0d29ya191dGlscy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShnZXRSZXNwb25zZUhlYWRlcik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQgJiYgX3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNhbmNlbChuZXcgX3V0aWwuQWJvcnRFeGNlcHRpb24oJ3N0cmVhbWluZyBpcyBkaXNhYmxlZCcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERkZldGNoU3RyZWFtUmVhZGVyLCBbe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJyZWFkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWFkID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9yZWYsIHZhbHVlLCBkb25lLCBidWZmZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRlci5yZWFkKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWYgPSBfY29udGV4dC5zZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9yZWYudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSBfcmVmLmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gOTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBkb25lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWQgKz0gdmFsdWUuYnl0ZUxlbmd0aDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogdGhpcy5fbG9hZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiB0aGlzLl9jb250ZW50TGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KHZhbHVlKS5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlLCB0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZWFkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2FuY2VsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Fib3J0Q29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImhlYWRlcnNSZWFkeVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImZpbGVuYW1lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9maWxlbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImNvbnRlbnRMZW5ndGhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogXCJpc1JhbmdlU3VwcG9ydGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiaXNTdHJlYW1pbmdTdXBwb3J0ZWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1dKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBERkZldGNoU3RyZWFtUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICB2YXIgUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlciA9XG4gICAgICAgICAgICAgICAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGRmV0Y2hTdHJlYW1SYW5nZVJlYWRlcihzdHJlYW0sIGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBQREZGZXRjaFN0cmVhbVJhbmdlUmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0cmVhbSA9IHN0cmVhbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNvdXJjZSA9IHN0cmVhbS5zb3VyY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fd2l0aENyZWRlbnRpYWxzID0gc291cmNlLndpdGhDcmVkZW50aWFscztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZWFkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCA9ICFzb3VyY2UuZGlzYWJsZVN0cmVhbTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgQWJvcnRDb250cm9sbGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVycyA9IG5ldyBIZWFkZXJzKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwcm9wZXJ0eSBpbiB0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5fc3RyZWFtLmh0dHBIZWFkZXJzW3Byb3BlcnR5XTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzLmFwcGVuZChwcm9wZXJ0eSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByYW5nZVN0ciA9IGJlZ2luICsgJy0nICsgKGVuZCAtIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVycy5hcHBlbmQoJ1JhbmdlJywgJ2J5dGVzPScgKyByYW5nZVN0cik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdXJsID0gc291cmNlLnVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZXRjaCh1cmwsIGNyZWF0ZUZldGNoT3B0aW9ucyh0aGlzLl9oZWFkZXJzLCB0aGlzLl93aXRoQ3JlZGVudGlhbHMsIHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4oZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKDAsIF9uZXR3b3JrX3V0aWxzLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMpKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICgwLCBfbmV0d29ya191dGlscy5jcmVhdGVSZXNwb25zZVN0YXR1c0Vycm9yKShyZXNwb25zZS5zdGF0dXMsIHVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpczIuX3JlYWRlciA9IHJlc3BvbnNlLmJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgX2NyZWF0ZUNsYXNzKFBERkZldGNoU3RyZWFtUmFuZ2VSZWFkZXIsIFt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcInJlYWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlYWQyID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcmVnZW5lcmF0b3IuZGVmYXVsdC5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfcmVmMiwgdmFsdWUsIGRvbmUsIGJ1ZmZlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmVhZGVyLnJlYWQoKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZjIgPSBfY29udGV4dDIuc2VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBfcmVmMi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IF9yZWYyLmRvbmU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGRvbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZCArPSB2YWx1ZS5ieXRlTGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVkOiB0aGlzLl9sb2FkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHJlYWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KClcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk6IFwiY2FuY2VsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGNhbmNlbChyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Fib3J0Q29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBcImlzU3RyZWFtaW5nU3VwcG9ydGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQREZGZXRjaFN0cmVhbVJhbmdlUmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9KCk7XG5cbiAgICAgICAgICAgICAgICAvKioqLyB9KSxcbiAgICAgICAgICAgIC8qIDE2OSAqL1xuICAgICAgICAgICAgLyoqKi8gKGZ1bmN0aW9uKG1vZHVsZSwgZXhwb3J0cywgX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXykge1xuXG4gICAgICAgICAgICAgICAgXCJ1c2Ugc3RyaWN0XCI7XG5cblxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGV4cG9ydHMuUERGTmV0d29ya1N0cmVhbSA9IFBERk5ldHdvcmtTdHJlYW07XG4gICAgICAgICAgICAgICAgZXhwb3J0cy5OZXR3b3JrTWFuYWdlciA9IE5ldHdvcmtNYW5hZ2VyO1xuXG4gICAgICAgICAgICAgICAgdmFyIF9yZWdlbmVyYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygxNDcpKTtcblxuICAgICAgICAgICAgICAgIHZhciBfdXRpbCA9IF9fd19leHRyYWN0aGlnaGxpZ2h0c19yZXF1aXJlX18oMSk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX25ldHdvcmtfdXRpbHMgPSBfX3dfZXh0cmFjdGhpZ2hsaWdodHNfcmVxdWlyZV9fKDE2Nik7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2dsb2JhbF9zY29wZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX193X2V4dHJhY3RoaWdobGlnaHRzX3JlcXVpcmVfXygzKSk7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgdmFyIE9LX1JFU1BPTlNFID0gMjAwO1xuICAgICAgICAgICAgICAgIHZhciBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0UgPSAyMDY7XG5cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcih1cmwsIGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBhcmdzIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzSHR0cCA9IC9eaHR0cHM/Oi9pLnRlc3QodXJsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odHRwSGVhZGVycyA9IHRoaXMuaXNIdHRwICYmIGFyZ3MuaHR0cEhlYWRlcnMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2l0aENyZWRlbnRpYWxzID0gYXJncy53aXRoQ3JlZGVudGlhbHMgfHwgZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRYaHIgPSBhcmdzLmdldFhociB8fCBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9nZXRYaHIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyWGhySWQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdSZXF1ZXN0cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkUmVxdWVzdHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldEFycmF5QnVmZmVyKHhocikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHhoci5yZXNwb25zZTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciBhcnJheSA9ICgwLCBfdXRpbC5zdHJpbmdUb0J5dGVzKShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgc3VwcG9ydHNNb3pDaHVua2VkID0gZnVuY3Rpb24gc3VwcG9ydHNNb3pDaHVua2VkQ2xvc3VyZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB4Lm9wZW4oJ0dFVCcsIF9nbG9iYWxfc2NvcGUuZGVmYXVsdC5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHgucmVzcG9uc2VUeXBlID0gJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4LnJlc3BvbnNlVHlwZSA9PT0gJ21vei1jaHVua2VkLWFycmF5YnVmZmVyJztcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSgpO1xuXG4gICAgICAgICAgICAgICAgTmV0d29ya01hbmFnZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0UmFuZ2U6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX3JlcXVlc3RSYW5nZShiZWdpbiwgZW5kLCBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhcmdzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luOiBiZWdpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQ6IGVuZFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBsaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzW3Byb3BdID0gbGlzdGVuZXJzW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RnVsbDogZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfcmVxdWVzdEZ1bGwobGlzdGVuZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KGxpc3RlbmVycyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX3JlcXVlc3QoYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IHRoaXMuZ2V0WGhyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhySWQgPSB0aGlzLmN1cnJYaHJJZCsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBlbmRpbmdSZXF1ZXN0ID0gdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhocjogeGhyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHRoaXMudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0aGlzLndpdGhDcmVkZW50aWFscztcblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcHJvcGVydHkgaW4gdGhpcy5odHRwSGVhZGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMuaHR0cEhlYWRlcnNbcHJvcGVydHldO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIocHJvcGVydHksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNIdHRwICYmICdiZWdpbicgaW4gYXJncyAmJiAnZW5kJyBpbiBhcmdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJhbmdlU3RyID0gYXJncy5iZWdpbiArICctJyArIChhcmdzLmVuZCAtIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCdSYW5nZScsICdieXRlcz0nICsgcmFuZ2VTdHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0LmV4cGVjdGVkU3RhdHVzID0gMjA2O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdC5leHBlY3RlZFN0YXR1cyA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVzZU1vekNodW5rZWRMb2FkaW5nID0gc3VwcG9ydHNNb3pDaHVua2VkICYmICEhYXJncy5vblByb2dyZXNzaXZlRGF0YTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZU1vekNodW5rZWRMb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdtb3otY2h1bmtlZC1hcnJheWJ1ZmZlcic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzc2l2ZURhdGEgPSBhcmdzLm9uUHJvZ3Jlc3NpdmVEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm1vekNodW5rZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Mub25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMsIHhocklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5vbnByb2dyZXNzID0gdGhpcy5vblByb2dyZXNzLmJpbmQodGhpcywgeGhySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQgPSBhcmdzLm9uSGVhZGVyc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lID0gYXJncy5vbkRvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdC5vbkVycm9yID0gYXJncy5vbkVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzcyA9IGFyZ3Mub25Qcm9ncmVzcztcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoci5zZW5kKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHhocklkO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBvblByb2dyZXNzOiBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9vblByb2dyZXNzKHhocklkLCBldnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwZW5kaW5nUmVxdWVzdCA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBlbmRpbmdSZXF1ZXN0Lm1vekNodW5rZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBnZXRBcnJheUJ1ZmZlcihwZW5kaW5nUmVxdWVzdC54aHIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9uUHJvZ3Jlc3MgPSBwZW5kaW5nUmVxdWVzdC5vblByb2dyZXNzO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3MoZXZ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgb25TdGF0ZUNoYW5nZTogZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfb25TdGF0ZUNoYW5nZSh4aHJJZCwgZXZ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGVuZGluZ1JlcXVlc3QgPSB0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB4aHIgPSBwZW5kaW5nUmVxdWVzdC54aHI7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA+PSAyICYmIHBlbmRpbmdSZXF1ZXN0Lm9uSGVhZGVyc1JlY2VpdmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGVuZGluZ1JlcXVlc3Qub25IZWFkZXJzUmVjZWl2ZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoeGhySWQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMCAmJiB0aGlzLmlzSHR0cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUmVxdWVzdC5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgeGhyU3RhdHVzID0geGhyLnN0YXR1cyB8fCBPS19SRVNQT05TRTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBva19yZXNwb25zZV9vbl9yYW5nZV9yZXF1ZXN0ID0geGhyU3RhdHVzID09PSBPS19SRVNQT05TRSAmJiBwZW5kaW5nUmVxdWVzdC5leHBlY3RlZFN0YXR1cyA9PT0gUEFSVElBTF9DT05URU5UX1JFU1BPTlNFO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW9rX3Jlc3BvbnNlX29uX3JhbmdlX3JlcXVlc3QgJiYgeGhyU3RhdHVzICE9PSBwZW5kaW5nUmVxdWVzdC5leHBlY3RlZFN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZW5kaW5nUmVxdWVzdC5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlbmRpbmdSZXF1ZXN0Lm9uRXJyb3IoeGhyLnN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZFJlcXVlc3RzW3hocklkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmsgPSBnZXRBcnJheUJ1ZmZlcih4aHIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeGhyU3RhdHVzID09PSBQQVJUSUFMX0NPTlRFTlRfUkVTUE9OU0UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFuZ2VIZWFkZXIgPSB4aHIuZ2V0UmVzcG9uc2VIZWFkZXIoJ0NvbnRlbnQtUmFuZ2UnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlcyA9IC9ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspLy5leGVjKHJhbmdlSGVhZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmVnaW4gPSBwYXJzZUludChtYXRjaGVzWzFdLCAxMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IGJlZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuazogY2h1bmtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGVuZGluZ1JlcXVlc3Qub25Qcm9ncmVzc2l2ZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nUmVxdWVzdC5vbkRvbmUobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25Eb25lKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rOiBjaHVua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwZW5kaW5nUmVxdWVzdC5vbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVuZGluZ1JlcXVlc3Qub25FcnJvcih4aHIuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaGFzUGVuZGluZ1JlcXVlc3RzOiBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9oYXNQZW5kaW5nUmVxdWVzdHMoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB4aHJJZCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFJlcXVlc3RYaHI6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX2dldFhocih4aHJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzU3RyZWFtaW5nUmVxdWVzdDogZnVuY3Rpb24gTmV0d29ya01hbmFnZXJfaXNTdHJlYW1pbmdSZXF1ZXN0KHhocklkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISF0aGlzLnBlbmRpbmdSZXF1ZXN0c1t4aHJJZF0ub25Qcm9ncmVzc2l2ZURhdGE7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZ1JlcXVlc3Q6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX2lzUGVuZGluZ1JlcXVlc3QoeGhySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4aHJJZCBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cztcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaXNMb2FkZWRSZXF1ZXN0OiBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9pc0xvYWRlZFJlcXVlc3QoeGhySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4aHJJZCBpbiB0aGlzLmxvYWRlZFJlcXVlc3RzO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhYm9ydEFsbFJlcXVlc3RzOiBmdW5jdGlvbiBOZXR3b3JrTWFuYWdlcl9hYm9ydEFsbFJlcXVlc3RzKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgeGhySWQgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFib3J0UmVxdWVzdCh4aHJJZCB8IDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBhYm9ydFJlcXVlc3Q6IGZ1bmN0aW9uIE5ldHdvcmtNYW5hZ2VyX2Fib3J0UmVxdWVzdCh4aHJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHhociA9IHRoaXMucGVuZGluZ1JlcXVlc3RzW3hocklkXS54aHI7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbeGhySWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbShzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc291cmNlID0gc291cmNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbmV3IE5ldHdvcmtNYW5hZ2VyKHNvdXJjZS51cmwsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBIZWFkZXJzOiBzb3VyY2UuaHR0cEhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHNvdXJjZS53aXRoQ3JlZGVudGlhbHNcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBQREZOZXR3b3JrU3RyZWFtLnByb3RvdHlwZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkOiBmdW5jdGlvbiBQREZOZXR3b3JrU3RyZWFtX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkKHJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSB0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YocmVhZGVyKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBnZXRGdWxsUmVhZGVyOiBmdW5jdGlvbiBQREZOZXR3b3JrU3RyZWFtX2dldEZ1bGxSZWFkZXIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoMCwgX3V0aWwuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBuZXcgUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyKHRoaXMuX21hbmFnZXIsIHRoaXMuX3NvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGdldFJhbmdlUmVhZGVyOiBmdW5jdGlvbiBQREZOZXR3b3JrU3RyZWFtX2dldFJhbmdlUmVhZGVyKGJlZ2luLCBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXIgPSBuZXcgUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcih0aGlzLl9tYW5hZ2VyLCBiZWdpbiwgZW5kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbkNsb3NlZCA9IHRoaXMuX29uUmFuZ2VSZXF1ZXN0UmVhZGVyQ2xvc2VkLmJpbmQodGhpcyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyZWFkZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZGVyO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxBbGxSZXF1ZXN0czogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbV9jYW5jZWxBbGxSZXF1ZXN0cyhyZWFzb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVhZGVycyA9IHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcnMuZm9yRWFjaChmdW5jdGlvbiAocmVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbChyZWFzb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyKG1hbmFnZXIsIHNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkhlYWRlcnNSZWNlaXZlZDogdGhpcy5fb25IZWFkZXJzUmVjZWl2ZWQuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3NpdmVEYXRhOiBzb3VyY2UuZGlzYWJsZVN0cmVhbSA/IG51bGwgOiB0aGlzLl9vblByb2dyZXNzaXZlRGF0YS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25Eb25lOiB0aGlzLl9vbkRvbmUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRXJyb3I6IHRoaXMuX29uRXJyb3IuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IHRoaXMuX29uUHJvZ3Jlc3MuYmluZCh0aGlzKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl91cmwgPSBzb3VyY2UudXJsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsUmVxdWVzdElkID0gbWFuYWdlci5yZXF1ZXN0RnVsbChhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eSA9ICgwLCBfdXRpbC5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gc291cmNlLmRpc2FibGVSYW5nZSB8fCBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHNvdXJjZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JhbmdlQ2h1bmtTaXplID0gc291cmNlLnJhbmdlQ2h1bmtTaXplO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fcmFuZ2VDaHVua1NpemUgJiYgIXRoaXMuX2Rpc2FibGVSYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGlzYWJsZVJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkQ2h1bmtzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RvcmVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbGVuYW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXIucHJvdG90eXBlID0ge1xuICAgICAgICAgICAgICAgICAgICBfb25IZWFkZXJzUmVjZWl2ZWQ6IGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcl9vbkhlYWRlcnNSZWNlaXZlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmdWxsUmVxdWVzdFhocklkID0gdGhpcy5fZnVsbFJlcXVlc3RJZDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZ1bGxSZXF1ZXN0WGhyID0gdGhpcy5fbWFuYWdlci5nZXRSZXF1ZXN0WGhyKGZ1bGxSZXF1ZXN0WGhySWQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZ2V0UmVzcG9uc2VIZWFkZXIgPSBmdW5jdGlvbiBnZXRSZXNwb25zZUhlYWRlcihuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bGxSZXF1ZXN0WGhyLmdldFJlc3BvbnNlSGVhZGVyKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF92YWxpZGF0ZVJhbmdlUmVxdWVzdCA9ICgwLCBfbmV0d29ya191dGlscy52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcykoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRSZXNwb25zZUhlYWRlcjogZ2V0UmVzcG9uc2VIZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzSHR0cDogdGhpcy5fbWFuYWdlci5pc0h0dHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlQ2h1bmtTaXplOiB0aGlzLl9yYW5nZUNodW5rU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZVJhbmdlOiB0aGlzLl9kaXNhYmxlUmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd1JhbmdlUmVxdWVzdHMgPSBfdmFsaWRhdGVSYW5nZVJlcXVlc3QuYWxsb3dSYW5nZVJlcXVlc3RzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZExlbmd0aCA9IF92YWxpZGF0ZVJhbmdlUmVxdWVzdC5zdWdnZXN0ZWRMZW5ndGg7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGxvd1JhbmdlUmVxdWVzdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29udGVudExlbmd0aCA9IHN1Z2dlc3RlZExlbmd0aCB8fCB0aGlzLl9jb250ZW50TGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsZW5hbWUgPSAoMCwgX25ldHdvcmtfdXRpbHMuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikoZ2V0UmVzcG9uc2VIZWFkZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ldHdvcmtNYW5hZ2VyID0gdGhpcy5fbWFuYWdlcjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5ldHdvcmtNYW5hZ2VyLmlzU3RyZWFtaW5nUmVxdWVzdChmdWxsUmVxdWVzdFhocklkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5faXNSYW5nZVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmtNYW5hZ2VyLmFib3J0UmVxdWVzdChmdWxsUmVxdWVzdFhocklkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9vblByb2dyZXNzaXZlRGF0YTogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbUZ1bGxSZXF1ZXN0UmVhZGVyX29uUHJvZ3Jlc3NpdmVEYXRhKGNodW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmVxdWVzdHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXF1ZXN0Q2FwYWJpbGl0eSA9IHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lOiBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRDaHVua3MucHVzaChjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9vbkRvbmU6IGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcl9vbkRvbmUoYXJncykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9vblByb2dyZXNzaXZlRGF0YShhcmdzLmNodW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF9vbkVycm9yOiBmdW5jdGlvbiBQREZOZXR3b3JrU3RyZWFtRnVsbFJlcXVlc3RSZWFkZXJfb25FcnJvcihzdGF0dXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cmwgPSB0aGlzLl91cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXhjZXB0aW9uID0gKDAsIF9uZXR3b3JrX3V0aWxzLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKHN0YXR1cywgdXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0b3JlZEVycm9yID0gZXhjZXB0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdChleGNlcHRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKGZ1bmN0aW9uIChyZXF1ZXN0Q2FwYWJpbGl0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5LnJlamVjdChleGNlcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRDaHVua3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX29uUHJvZ3Jlc3M6IGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcl9vblByb2dyZXNzKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUHJvZ3Jlc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZWQ6IGRhdGEubG9hZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogZGF0YS5sZW5ndGhDb21wdXRhYmxlID8gZGF0YS50b3RhbCA6IHRoaXMuX2NvbnRlbnRMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICBnZXQgZmlsZW5hbWUoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZmlsZW5hbWU7XG4gICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZDtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICBnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgZ2V0IGNvbnRlbnRMZW5ndGgoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udGVudExlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICBnZXQgaGVhZGVyc1JlYWR5KCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHkucHJvbWlzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlYWQgPSBfYXN5bmNUb0dlbmVyYXRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZ2VuZXJhdG9yLmRlZmF1bHQubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2h1bmssIHJlcXVlc3RDYXBhYmlsaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yLmRlZmF1bHQud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fc3RvcmVkRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5fc3RvcmVkRXJyb3I7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5fY2FjaGVkQ2h1bmtzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gdGhpcy5fY2FjaGVkQ2h1bmtzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSA3O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDYXBhYmlsaXR5ID0gKDAsIF91dGlsLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cy5wdXNoKHJlcXVlc3RDYXBhYmlsaXR5KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LmFicnVwdChcInJldHVyblwiLCByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZW5kXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiByZWFkKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVhZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVhZDtcbiAgICAgICAgICAgICAgICAgICAgfSgpLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1GdWxsUmVxdWVzdFJlYWRlcl9jYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QocmVhc29uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyLmFib3J0UmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIFBERk5ldHdvcmtTdHJlYW1SYW5nZVJlcXVlc3RSZWFkZXIobWFuYWdlciwgYmVnaW4sIGVuZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tYW5hZ2VyID0gbWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkRvbmU6IHRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25Qcm9ncmVzczogdGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RJZCA9IG1hbmFnZXIucmVxdWVzdFJhbmdlKGJlZ2luLCBlbmQsIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9xdWV1ZWRDaHVuayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlci5wcm90b3R5cGUgPSB7XG4gICAgICAgICAgICAgICAgICAgIF9jbG9zZTogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcl9jbG9zZSgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9uQ2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNsb3NlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgX29uRG9uZTogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcl9vbkRvbmUoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNodW5rID0gZGF0YS5jaHVuaztcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3JlcXVlc3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdENhcGFiaWxpdHkgPSB0aGlzLl9yZXF1ZXN0cy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcXVldWVkQ2h1bmsgPSBjaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZG9uZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLmZvckVhY2goZnVuY3Rpb24gKHJlcXVlc3RDYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkucmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXF1ZXN0cyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBfb25Qcm9ncmVzczogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcl9vblByb2dyZXNzKGV2dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3RyZWFtaW5nU3VwcG9ydGVkICYmIHRoaXMub25Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Qcm9ncmVzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlZDogZXZ0LmxvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgIGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICByZWFkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3JlYWQyID0gX2FzeW5jVG9HZW5lcmF0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLyojX19QVVJFX18qL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yZWdlbmVyYXRvci5kZWZhdWx0Lm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjaHVuaywgcmVxdWVzdENhcGFiaWxpdHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IuZGVmYXVsdC53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRoaXMuX3F1ZXVlZENodW5rICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSB0aGlzLl9xdWV1ZWRDaHVuaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3F1ZXVlZENodW5rID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuYWJydXB0KFwicmV0dXJuXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2h1bmssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5fZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5hYnJ1cHQoXCJyZXR1cm5cIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENhcGFiaWxpdHkgPSAoMCwgX3V0aWwuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzLnB1c2gocmVxdWVzdENhcGFiaWxpdHkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmFicnVwdChcInJldHVyblwiLCByZXF1ZXN0Q2FwYWJpbGl0eS5wcm9taXNlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJlbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgX2NhbGxlZTIsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gcmVhZCgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlYWQyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkO1xuICAgICAgICAgICAgICAgICAgICB9KCksXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbDogZnVuY3Rpb24gUERGTmV0d29ya1N0cmVhbVJhbmdlUmVxdWVzdFJlYWRlcl9jYW5jZWwocmVhc29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kb25lID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVxdWVzdHMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWVzdENhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q2FwYWJpbGl0eS5yZXNvbHZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9uZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlcXVlc3RzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9tYW5hZ2VyLmlzUGVuZGluZ1JlcXVlc3QodGhpcy5fcmVxdWVzdElkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgLyoqKi8gfSlcbiAgICAgICAgICAgIC8qKioqKiovIF0pO1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZGYuanMubWFwXG4iLCIvKiBDb3B5cmlnaHQgMjAyMCBNb3ppbGxhIEZvdW5kYXRpb25cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuKHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCJcbiAgPyB3aW5kb3dcbiAgOiB7fVxuKS5leHRyYWN0aGlnaGxpZ2h0c1dvcmtlciA9IHJlcXVpcmUoXCIuL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlci5qc1wiKTtcbiIsImltcG9ydCAqIGFzIGV4dHJhY3RoaWdobGlnaHRzIGZyb20gXCJub2RlX21vZHVsZXMvZXh0cmFjdGhpZ2hsaWdodHMtZGlzdC9idWlsZC9leHRyYWN0aGlnaGxpZ2h0c1wiO1xuaW1wb3J0ICogYXMgZXh0cmFjdGhpZ2hsaWdodHNXb3JrZXIgZnJvbSBcIm5vZGVfbW9kdWxlcy9leHRyYWN0aGlnaGxpZ2h0cy1kaXN0L2J1aWxkL2V4dHJhY3RoaWdobGlnaHRzLndvcmtlci5lbnRyeVwiO1xuXG52YXIgZmluYWxIaWdobGlnaHRzQW5ub3RhdGlvbnMgPSBuZXcgQXJyYXkoKTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUERGQW5ub3RhdGlvbnNNYW5hZ2VyIHtcblxuICAgIGFzeW5jIGZldGNoUmF3QW5ub3RhdGlvbnNGcm9tUERGKGFycmF5QnVmZmVyKSB7XG5cbiAgICAgICAgZXh0cmFjdGhpZ2hsaWdodHMuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmNIaWdobGlnaHRzID0gZXh0cmFjdGhpZ2hsaWdodHNXb3JrZXI7XG5cbiAgICAgICAgZmluYWxIaWdobGlnaHRzQW5ub3RhdGlvbnMgPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICB2YXIgU1VQUE9SVEVEX0FOTk9UUyA9IFsnVGV4dCcsICdIaWdobGlnaHQnLCAnVW5kZXJsaW5lJ107XG5cbiAgICAgICAgdmFyIGxvYWRpbmdUYXNrID0gZXh0cmFjdGhpZ2hsaWdodHMuZ2V0RG9jdW1lbnQoYXJyYXlCdWZmZXIpO1xuXG4gICAgICAgIHJldHVybiBhd2FpdCBsb2FkaW5nVGFzay5wcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAoZG9jKSB7XG4gICAgICAgICAgICAgICAgdmFyIG51bVBhZ2VzID0gZG9jLm51bVBhZ2VzO1xuXG4gICAgICAgICAgICAgICAgdmFyIGxhc3RQcm9taXNlOyAvLyB3aWxsIGJlIHVzZWQgdG8gY2hhaW4gcHJvbWlzZXNcbiAgICAgICAgICAgICAgICBsYXN0UHJvbWlzZSA9IGRvYy5nZXRNZXRhZGF0YSgpLnRoZW4oZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHZhciBsb2FkUGFnZSA9IGZ1bmN0aW9uIChwYWdlTnVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkb2MuZ2V0UGFnZShwYWdlTnVtKS50aGVuKGFzeW5jIGZ1bmN0aW9uIChwYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2NhbGUgPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydChzY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZXdwb3J0LndpZHRoO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVuZGVyQ29udGV4dCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXNDb250ZXh0OiBjb250ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdwb3J0OiB2aWV3cG9ydFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFubm90YXRpb25zID0gYXdhaXQgcGFnZS5nZXRBbm5vdGF0aW9ucygpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9ucyA9IGFubm90YXRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoYW5ubykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYW5uby5zdWJ0eXBlID09PSB1bmRlZmluZWQpIGFubm8uc3VidHlwZSA9IGFubm8udHlwZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFubm87XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChhbm5vKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTVVBQT1JURURfQU5OT1RTLmluZGV4T2YoYW5uby5zdWJ0eXBlKSA+PSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0LCBhbm5vdGF0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGFubm90YXRpb25zLm1hcChmdW5jdGlvbiAoYW5ubykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubm8ucGFnZU51bWJlciA9IHBhZ2VOdW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxIaWdobGlnaHRzQW5ub3RhdGlvbnMucHVzaChhbm5vKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIC8vIExvYWRpbmcgb2YgdGhlIGZpcnN0IHBhZ2Ugd2lsbCB3YWl0IG9uIG1ldGFkYXRhIGFuZCBzdWJzZXF1ZW50IGxvYWRpbmdzXG4gICAgICAgICAgICAgICAgLy8gd2lsbCB3YWl0IG9uIHRoZSBwcmV2aW91cyBwYWdlcy5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBudW1QYWdlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RQcm9taXNlID0gbGFzdFByb21pc2UudGhlbihsb2FkUGFnZS5iaW5kKG51bGwsIGkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhc3RQcm9taXNlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKFxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbmFsSGlnaGxpZ2h0c0Fubm90YXRpb25zO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3I6IFwiICsgZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBmbGF0dGVuQW5ub3RhdGlvbnNCeVBvc2l0aW9uKHNvcnRlZEFubm90YXRpb25zQnlQb3NpdGlvbkdyb3VwZWRCeVBhZ2U6IHt9KSB7XG4gICAgICAgIGxldCBmbGF0dGVuZWRBbm5vdGF0aW9uc0J5UG9zaXRpb24gPSBuZXcgQXJyYXkoKTtcblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gc29ydGVkQW5ub3RhdGlvbnNCeVBvc2l0aW9uR3JvdXBlZEJ5UGFnZSkge1xuICAgICAgICAgICAgZm9yKHZhciBpID0gMDsgaSA8IHNvcnRlZEFubm90YXRpb25zQnlQb3NpdGlvbkdyb3VwZWRCeVBhZ2Vba2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZsYXR0ZW5lZEFubm90YXRpb25zQnlQb3NpdGlvbi5wdXNoKHNvcnRlZEFubm90YXRpb25zQnlQb3NpdGlvbkdyb3VwZWRCeVBhZ2Vba2V5XVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmxhdHRlbmVkQW5ub3RhdGlvbnNCeVBvc2l0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBzb3J0QW5ub3RhdGlvbnNCeVBvc2l0aW9uKGdyb3VwZWRBbm5vdGF0aW9uc0J5UGFnZU1hcCkge1xuXG4gICAgICAgIHZhciBuZXdNYXAgPSB7fTtcblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gZ3JvdXBlZEFubm90YXRpb25zQnlQYWdlTWFwKSB7XG4gICAgICAgICAgICBuZXdNYXBba2V5XSA9ICBncm91cGVkQW5ub3RhdGlvbnNCeVBhZ2VNYXBba2V5XS5zb3J0KGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xuICAgICAgICAgICAgICAgIGlmKGxlZnQucXVhZFBvaW50c1swXS5kaW1zLm1pblkgPCByaWdodC5xdWFkUG9pbnRzWzBdLmRpbXMubWluWSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYobGVmdC5xdWFkUG9pbnRzWzBdLmRpbXMubWluWSA+IHJpZ2h0LnF1YWRQb2ludHNbMF0uZGltcy5taW5ZKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3TWFwO1xuICAgIH1cblxuICAgIHB1YmxpYyBncm91cEFubm90YXRpb25zQnlQYWdlKGZpbHRlcmVkQW5ub3RhdGlvbnMpIHtcblxuICAgICAgICB2YXIgZ3JvdXBCeSA9IGZ1bmN0aW9uKHhzLCBrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB4cy5yZWR1Y2UoZnVuY3Rpb24ocnYsIHgpIHtcbiAgICAgICAgICAgICAgICAocnZbeFtrZXldXSA9IHJ2W3hba2V5XV0gfHwgW10pLnB1c2goeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBncm91cEJ5KGZpbHRlcmVkQW5ub3RhdGlvbnMsICdwYWdlTnVtYmVyJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGZpbHRlclJhd0Fubm90YXRpb25zKHJhd0Fubm90YXRpb25zRnJvbVBERikge1xuICAgICAgICB2YXIgZmlsdGVyZWRBbm5vdGF0aW9ucyA9IHJhd0Fubm90YXRpb25zRnJvbVBERi5maWx0ZXIoZnVuY3Rpb24gKGFubm8pIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYW5uby5oaWdobGlnaHRlZFRleHQgPT0gJ3VuZGVmaW5lZCcgfHwgYW5uby5oaWdobGlnaHRlZFRleHQgPT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmlsdGVyZWRBbm5vdGF0aW9ucztcbiAgICB9XG5cbn0iLCJpbXBvcnQge0FwcCwgTW9kYWwsIFBsdWdpbn0gZnJvbSAnb2JzaWRpYW4nO1xyXG5cclxuaW1wb3J0IEV4dHJhY3RQREZIaWdobGlnaHRzUGx1Z2luU2V0dGluZ3MgZnJvbSBcIi4vRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW5TZXR0aW5nc1wiO1xyXG5pbXBvcnQgRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW5TZXR0aW5nc1RhYiBmcm9tIFwiLi9FeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpblNldHRpbmdzVGFiXCI7XHJcbmltcG9ydCBQREZBbm5vdGF0aW9uc01hbmFnZXIgZnJvbSBcIi4vUERGQW5ub3RhdGlvbnNNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG5cdHB1YmxpYyBzZXR0aW5nczogRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW5TZXR0aW5ncztcclxuXHRwcml2YXRlIG1vZGFsOiBQcm9ncmVzc01vZGFsO1xyXG5cclxuXHRhc3luYyBvbmxvYWQoKSB7XHJcblx0XHR0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBFeHRyYWN0UERGSGlnaGxpZ2h0c1BsdWdpblNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5hZGRSaWJib25JY29uKCdwZGYtZmlsZScsICdQREYgSGlnaGxpZ2h0cycsICgpID0+IHtcclxuXHRcdFx0dGhpcy5wcm9jZXNzUERGSGlnaGxpZ2h0cygpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRvbnVubG9hZCgpIHt9XHJcblxyXG5cdGFzeW5jIHByb2Nlc3NQREZIaWdobGlnaHRzKCkge1xyXG5cdFx0dGhpcy5tb2RhbCA9IG5ldyBQcm9ncmVzc01vZGFsKHRoaXMuYXBwKTtcclxuXHRcdC8vIHRoaXMubW9kYWwub3BlbigpO1xyXG5cclxuXHRcdGxldCBmaWxlID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcclxuXHJcblx0XHRpZiAoZmlsZSA9PT0gbnVsbCkgcmV0dXJuO1xyXG5cdFx0aWYgKGZpbGUuZXh0ZW5zaW9uICE9PSAncGRmJykgcmV0dXJuO1xyXG5cclxuXHRcdGxldCBhcnJheUJ1ZmZlciA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LnJlYWRCaW5hcnkoZmlsZSk7XHJcblx0XHRsZXQgcGRmQW5ub3RhdGlvbnNNYW5hZ2VyID0gbmV3IFBERkFubm90YXRpb25zTWFuYWdlcigpO1xyXG5cclxuXHRcdGxldCByYXdBbm5vdGF0aW9uc0Zyb21QREYgPSBhd2FpdCBwZGZBbm5vdGF0aW9uc01hbmFnZXIuZmV0Y2hSYXdBbm5vdGF0aW9uc0Zyb21QREYoYXJyYXlCdWZmZXIpO1xyXG5cdFx0bGV0IGZpbHRlcmVkQW5ub3RhdGlvbnMgPSBwZGZBbm5vdGF0aW9uc01hbmFnZXIuZmlsdGVyUmF3QW5ub3RhdGlvbnMocmF3QW5ub3RhdGlvbnNGcm9tUERGKTtcclxuXHRcdGxldCBncm91cGVkQW5ub3RhdGlvbnNCeVBhZ2VNYXAgPSBwZGZBbm5vdGF0aW9uc01hbmFnZXIuZ3JvdXBBbm5vdGF0aW9uc0J5UGFnZShmaWx0ZXJlZEFubm90YXRpb25zKTtcclxuXHRcdGxldCBzb3J0ZWRBbm5vdGF0aW9uc0J5UG9zaXRpb25Hcm91cGVkQnlQYWdlID0gcGRmQW5ub3RhdGlvbnNNYW5hZ2VyLnNvcnRBbm5vdGF0aW9uc0J5UG9zaXRpb24oZ3JvdXBlZEFubm90YXRpb25zQnlQYWdlTWFwKTtcclxuXHRcdGxldCBmbGF0dGVuZWRBbm5vdGF0aW9uc0J5UG9zaXRpb24gPSBwZGZBbm5vdGF0aW9uc01hbmFnZXIuZmxhdHRlbkFubm90YXRpb25zQnlQb3NpdGlvbihzb3J0ZWRBbm5vdGF0aW9uc0J5UG9zaXRpb25Hcm91cGVkQnlQYWdlKTtcclxuXHJcblx0XHRjb25zdCBmaW5hbE1hcmtkb3duID0gdGhpcy5nZW5lcmF0ZUZpbmFsTWFya2Rvd24oZmxhdHRlbmVkQW5ub3RhdGlvbnNCeVBvc2l0aW9uLCBmaWxlLm5hbWUpO1xyXG5cclxuXHRcdGxldCBmaWxlUGF0aCA9IGZpbGUubmFtZS5yZXBsYWNlKFwiLnBkZlwiLCBcIi5tZFwiKTtcclxuXHRcdGZpbGVQYXRoID0gXCJIaWdobGlnaHRzIGZvciBcIiArIGZpbGVQYXRoO1xyXG5cclxuXHRcdGF3YWl0IHRoaXMuc2F2ZUhpZ2hsaWdodHNUb0ZpbGUoZmlsZVBhdGgsIGZpbmFsTWFya2Rvd24pO1xyXG5cdFx0YXdhaXQgdGhpcy5hcHAud29ya3NwYWNlLm9wZW5MaW5rVGV4dChmaWxlUGF0aCwgJycsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZW5lcmF0ZUZpbmFsTWFya2Rvd24oYW5ub3RhdGlvbnMsIGZpbGVOYW1lKSB7XHJcblxyXG5cdFx0bGV0IG1kU3RyaW5nID0gXCJcIjtcclxuXHRcdGZvcihsZXQgYW5ubyBvZiBhbm5vdGF0aW9ucykge1xyXG5cclxuXHRcdFx0bGV0IHRleHQgPSBhbm5vLmhpZ2hsaWdodGVkVGV4dDtcclxuXHJcblx0XHRcdGlmKHRoaXMuc2V0dGluZ3MuaW5jbHVkZVBhZ2VOdW1iZXIpIHtcclxuXHRcdFx0XHR0ZXh0ID0gdGV4dCArIFwiIChQYWdlIFwiICsgYW5uby5wYWdlTnVtYmVyICsgXCIpXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmKHRoaXMuc2V0dGluZ3MuaW5jbHVkZUhpZ2hsaWdodENvbG9yKSB7XHJcblx0XHRcdFx0dGV4dCA9IHRleHQgKyBcIiBcIiArIHRoaXMuZ2V0Q29sb3JUYWdGb3JBbm5vdGF0aW9uKGFubm8pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZih0aGlzLnNldHRpbmdzLmNyZWF0ZUxpbmtzKSB7XHJcblx0XHRcdFx0dGV4dCA9IFwiW1tcIiArIHRleHQgKyBcIl1dXCI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRleHQgPSBcIi0gXCIgKyB0ZXh0O1xyXG5cclxuXHRcdFx0dGV4dCArPSBcIlxcblwiO1xyXG5cclxuXHRcdFx0bWRTdHJpbmcgKz0gdGV4dDtcclxuXHRcdH1cclxuXHJcblx0XHRtZFN0cmluZyArPSBgXFxuIyMgU291cmNlXFxuW1ske2ZpbGVOYW1lfV1dYDtcclxuXHJcblx0XHRyZXR1cm4gbWRTdHJpbmc7XHJcblx0fVxyXG5cclxuXHJcblx0YXN5bmMgc2F2ZUhpZ2hsaWdodHNUb0ZpbGUoZmlsZVBhdGg6IHN0cmluZywgbWRTdHJpbmc6IHN0cmluZykge1xyXG5cdFx0Y29uc3QgZmlsZUV4aXN0cyA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZXhpc3RzKGZpbGVQYXRoKTtcclxuXHRcdGlmIChmaWxlRXhpc3RzKSB7XHJcblx0XHRcdGF3YWl0IHRoaXMuYXBwZW5kSGlnaGxpZ2h0c1RvRmlsZShmaWxlUGF0aCwgbWRTdHJpbmcpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0YXdhaXQgdGhpcy5hcHAudmF1bHQuY3JlYXRlKGZpbGVQYXRoLCBtZFN0cmluZyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhc3luYyBhcHBlbmRIaWdobGlnaHRzVG9GaWxlKGZpbGVQYXRoOiBzdHJpbmcsIG5vdGU6IHN0cmluZykge1xyXG5cdFx0bGV0IGV4aXN0aW5nQ29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChmaWxlUGF0aCk7XHJcblx0XHRpZihleGlzdGluZ0NvbnRlbnQubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRleGlzdGluZ0NvbnRlbnQgPSBleGlzdGluZ0NvbnRlbnQgKyAnXFxyXFxyJztcclxuXHRcdH1cclxuXHRcdGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIud3JpdGUoZmlsZVBhdGgsIGV4aXN0aW5nQ29udGVudCArIG5vdGUpO1xyXG5cdH1cclxuXHJcblxyXG5cdGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBuZXcgRXh0cmFjdFBERkhpZ2hsaWdodHNQbHVnaW5TZXR0aW5ncygpO1xyXG5cdFx0KGFzeW5jICgpID0+IHtcclxuXHRcdFx0Y29uc3QgbG9hZGVkU2V0dGluZ3MgPSBhd2FpdCB0aGlzLmxvYWREYXRhKCk7XHJcblx0XHRcdGlmIChsb2FkZWRTZXR0aW5ncykge1xyXG5cdFx0XHRcdHRoaXMuc2V0dGluZ3MuaW5jbHVkZVBhZ2VOdW1iZXIgPSBsb2FkZWRTZXR0aW5ncy5pbmNsdWRlUGFnZU51bWJlcjtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmluY2x1ZGVIaWdobGlnaHRDb2xvciA9IGxvYWRlZFNldHRpbmdzLmluY2x1ZGVIaWdobGlnaHRDb2xvcjtcclxuXHRcdFx0XHR0aGlzLnNldHRpbmdzLmNyZWF0ZUxpbmtzID0gbG9hZGVkU2V0dGluZ3MuY3JlYXRlTGlua3M7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHRcdFx0fVxyXG5cdFx0fSkoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0Q29sb3JUYWdGb3JBbm5vdGF0aW9uKGFubm8pIHtcclxuXHRcdGNvbnN0IGNvbG9yQXJyYXkgPSBhbm5vLmNvbG9yO1xyXG5cdFx0Y29uc3QgcmVkID0gY29sb3JBcnJheVswXTtcclxuXHRcdGNvbnN0IGdyZWVuID0gY29sb3JBcnJheVsxXTtcclxuXHRcdGNvbnN0IGJsdWUgPSBjb2xvckFycmF5WzJdO1xyXG5cclxuXHRcdGlmKHJlZCA9PSAyNTAgJiYgZ3JlZW4gPT0gMjA1ICYmIGJsdWUgPT0gOTApIHtcclxuXHRcdFx0cmV0dXJuIFwi8J+foVwiO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmKHJlZCA9PSAxMjQgJiYgZ3JlZW4gPT0gMjAwICYmIGJsdWUgPT0gMTA0KSB7XHJcblx0XHRcdHJldHVybiBcIvCfn6JcIjtcclxuXHRcdH1cclxuXHJcblx0XHRpZihyZWQgPT0gMTA1ICYmIGdyZWVuID09IDE3NiAmJiBibHVlID09IDI0MSkge1xyXG5cdFx0XHRyZXR1cm4gXCLwn5S1XCI7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYocmVkID09IDI1MSAmJiBncmVlbiA9PSA5MiAmJiBibHVlID09IDEzNykge1xyXG5cdFx0XHRyZXR1cm4gXCLwn5S0XCI7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYocmVkID09IDIwMCAmJiBncmVlbiA9PSAxMzMgJiYgYmx1ZSA9PSAyMTgpIHtcclxuXHRcdFx0cmV0dXJuIFwi8J+fo1wiO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBcIlwiO1xyXG5cdH1cclxufVxyXG5cclxuY2xhc3MgUHJvZ3Jlc3NNb2RhbCBleHRlbmRzIE1vZGFsIHtcclxuXHRwdWJsaWMgZmlsZU5hbWU6IHN0cmluZztcclxuXHJcblx0Y29uc3RydWN0b3IoYXBwOiBBcHApIHtcclxuXHRcdHN1cGVyKGFwcCk7XHJcblx0fVxyXG5cclxuXHRvbk9wZW4oKSB7XHJcblx0XHRsZXQge2NvbnRlbnRFbH0gPSB0aGlzO1xyXG5cdFx0Y29udGVudEVsLmNyZWF0ZUVsKFwiaDJcIiwge3RleHQ6IFwiRXh0cmFjdCBQREYgSGlnaGxpZ2h0c1wifSk7XHJcblx0XHRjb250ZW50RWwuY3JlYXRlRWwoXCJwXCIsIHt0ZXh0OiBcIkknbSBzb3JyeSBidXQgZHVlIHRvIGFuIHVuZXhwZWN0ZWQgaW5jb21wYXRpYmlsaXR5IHdpdGggT2JzaWRpYW4gQ29yZSBQREYgaGFuZGxpbmcgYXMgb2YgdjAuMTAuOCB0aGlzIHBsdWdpbiBpcyBjdXJyZW50bHkgZGlzYWJsZWQuIEluIHRoZSBtZWFudGltZSwgeW91IGNhbiB1c2UgWm90ZXJvICsgWm90ZmlsZSB0byBleHRyYWN0IFBERiBoaWdobGlnaHRzIGFuZCBhbm5vdGF0aW9ucy4gSSdtIHNvcnJ5IGZvciB0aGUgaW5jb252ZW5pZW5jZSBhbmQgd29ya2luZyBvbiBmaXhpbmcgdGhpcyBpc3N1ZS4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucywgcGxlYXNlIGVtYWlsIG1lIGF0IGFsZXhpcy5yb25kZWF1QGdtYWlsLmNvbSEgVGhhbmsgeW91IGZvciB5b3VyIHBhdGllbmNlLCBBbGV4aXMgOilcIn0pO1xyXG5cdH1cclxuXHJcblx0b25DbG9zZSgpIHtcclxuXHRcdGxldCB7Y29udGVudEVsfSA9IHRoaXM7XHJcblx0XHRjb250ZW50RWwuZW1wdHkoKTtcclxuXHR9XHJcbn1cclxuIl0sIm5hbWVzIjpbIlNldHRpbmciLCJQbHVnaW5TZXR0aW5nVGFiIiwidGhpcyIsInVuZGVmaW5lZCIsImdsb2JhbCIsInJlcXVpcmUiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwiZXh0cmFjdGhpZ2hsaWdodHMuR2xvYmFsV29ya2VyT3B0aW9ucyIsImV4dHJhY3RoaWdobGlnaHRzLmdldERvY3VtZW50IiwiUGx1Z2luIiwiTW9kYWwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQzdDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztBQUNsRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ08sU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckgsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxNQUFNLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMs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LE1BQU0sS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxFQUFFLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDL1c7QUFDQSxnQkFBZ0IsU0FBUyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDLEVBQUU7QUFDdkk7QUFDQSxnQkFBZ0IsU0FBUyxnQkFBZ0IsR0FBRyxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsc0RBQXNELENBQUMsQ0FBQyxFQUFFO0FBQzVIO0FBQ0EsZ0JBQWdCLFNBQVMscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDemE7QUFDQSxnQkFBZ0IsU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUU7QUFDckY7QUFDQSxnQkFBZ0IsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxLQUFLLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE9B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QUN0Qyx3QkFBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNyRSx3QkFBd0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FB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LENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4TCxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUU7QUFDOUUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCx3QkFBd0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1SSxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pGLHdCQUF3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzSixxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsNkJBQTZCLEdBQUcsU0FBUyxrQ0FBa0MsQ0FBQyxDQUFDLEVBQUU7QUFDeEcsd0JBQXdCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3QkFBd0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRCx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1Rix3QkFBd0IsSUFBSSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDckQs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QVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsb0JBQW9CLE9BQU8sU0FBUyxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxRQUFRLENBQUM7QUFDekUsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdnNCO0FBQ0EsZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUMs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QixLQUFLLENBQUM7QUFDOUIsNEJBQTRCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RTtBQUNBLHdCQUF3QixLQUFLLENBQUM7QUFDOUIsNEJBQTRCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9GO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQztBQUM5Qiw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqSDtBQUNBLHdCQUF3QixLQUFLLENBQUM7QUFDOUIsNEJBQTRCLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENB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RyxDQUFDLENBQUM7QUFDcEU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxRQUFRLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxTQUFTLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEU7QUFDQSxnQkFBZ0IsSUFBSSxXQUFXLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEU7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakU7QUFDQSxnQkFBZ0IsSUFBSSxHQUFHLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQ7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEU7QUFDQSxnQkFBZ0IsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuQyxnQkFBZ0IsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQixnQkFBZ0IsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNyQyxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUM1QyxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsTUFB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Q0FBd0MsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN4RCxxQ0FBcUMsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDMUQsd0NBQXdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUNoRSx3Q0FBd0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hFLHdDQUF3QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsd0NBQXdDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNsRSx3Q0FBd0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDN0Qsd0NBQXdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN4RSx3Q0FBd0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hFLHdDQUF3QyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQzNELHFDQUFxQyxNQUFNO0FBQzNDLHdDQUF3QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLHdDQUF3QyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFFO0FBQ0Esd0NBQXdDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLElBQUksSUFBSSxTQUFTLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUU7QUFDbk8sNENBQTRDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtB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RUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsRUFBRTtBQUM1SDtBQUNBLGdCQUFnQixTQUFTLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ3phO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFO0FBQ3JGO0FBQ0EsZ0JBQWdCLFNB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QUksU0FBUyxDQUFDLHNEQUFzRCxDQUFDLENBQUMsRUFBRTtBQUM1SDtBQUNBLGdCQUFnQixTQUFTLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ3phO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFO0FBQ3JGO0FBQ0EsZ0JBQWdCLFNBQVMsT0FBTyxDQUFD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QUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxD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QUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVILG9CQUFvQixJQUFJLFlBQVksR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7QUFDL1Usb0JBQW9CLElBQUksVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3BVLG9CQUFvQixJQUFJLGVBQWUsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaGtKLG9CQUFvQixJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVB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QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNyekUsb0JBQW9CLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM3WSxvQkFBb0IsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwNUksb0JBQW9CLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6NUMsb0JBQW9CLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5eEQsb0JBQW9CLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFD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QUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLENBQUMsRUFBRSxDQUFDO0FBQ3pCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHFCQUFxQixDQUFDLEVBQUUsQ0FBQztBQUN6Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1QixxQkFBcUIsQ0FBQyxFQUFFLENBQUM7QUFDekIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0IscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3Qix3QkFBd0IsQ0FBQyxFQUFFLENBQUM7QUFDNUIscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0Isd0JBQXdCLENBQUMsRUFBRSxDQUFDO0FBQzVCLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdCLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztBQUM1QixxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsQ0FBQyxF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QyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2hNLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQztBQUNsQyxnQ0FBZ0MsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoVSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLENBQUM7QUFDbEMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOVUsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDO0FBQ2xDLGdDQUFnQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxYSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLENBQUM7QUFDbEMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvYixnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM5YSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzUSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzUSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMxUSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzSCxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLEVBQUU7QUFDbkMsZ0NBQWdDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FB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LG9CQUFvQixJQUFJLEVBQUUsQ0FBQztBQUMzQixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLENBQUM7QUFDM0Isb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsQ0FBQztBQUMzQixvQkFBb0IsSUFBSSxFQUFFLENBQUM7QUFDM0Isb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLENBQUM7QUFDM0Isb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxDQUFDO0FBQzNCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxFQUFFLENBQUM7QUFDakMsaUJBQWlCLEVBQUU7QUFDbkIsb0JBQW9CLEVBQUUsRUFBRSxNQUFNO0FBQzlCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLFVBQVUsRUFBRSxDQUFDO0FBQ2pDLGlCQUFpQixFQUFFO0FBQ25CLG9CQUFvQixFQUFFLEVBQUUsTUFBTTtBQUM5QixvQkFBb0IsSUFBSSxFQUFFLEVBQUU7QUFDNUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixVQUFVLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsRUFBRTtBQUNuQixvQkFBb0IsRUFBRSxFQUFFLE1BQU07QUFDOUIsb0JBQW9CLElBQUksRUFBRSxFQUFFO0FBQzVCLG9CQUFvQixJQUFJLEVBQUUsRUFBRTtBQUM1QixvQkFBb0IsVUFBVSxF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QUE0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUUsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFFLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUUsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzFFLDRCQUE0QixTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3BFLDRCQUE0QixTQUFTLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN4RSw0QkFBNEIsU0FBUyxDQUFDLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDekUsNEJBQTRCLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ3pFLDRCQUE0QixTQUFTLENB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O0FBQzVELDRCQUE0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hFLGdDQUFnQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzFDLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDM0YsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRixnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hHLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDaEcsZ0NBQWdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ2pFLGdDQUFnQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNsRSxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDckQsZ0NBQWdDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakQsNkJB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QUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JTLHdCQUF3QixJQUFJLGNBQWMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvUix3QkFBd0IsSUFBSSxjQUFjLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxF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QUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pSLG9CQUFvQixJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUMsU0FBUyxFQUFFLENBQUMsVUFB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QUFHLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDcEUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDN3hCO0FBQ0Esb0JBQW9CLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQ3hELHdCQUF3QixJQUFJLEVBQUUsR0FBRyxVQUFVO0FBQzNDLDRCQUE0QixFQUFFLEdBQUcsVUFBVTtBQUMzQyw0QkFBNEIsRUFBRSxHQUFHLFVBQVU7QUFDM0MsNEJBQTRCLEVBQUUsR0FBRyxVQUFVO0FBQzNDLDRCQUE0QixFQUFFLEdBQUcsVUFBVTtBQUMzQyw0QkFBNEIsRUFBRSxHQUFHLFVBQVU7QUFDM0MsNEJBQTRCLEVBQUUsR0FBRyxVQUFVO0FBQzNDLDRCQUE0QixFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0Usd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2xFLHdCQUF3QixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3BDO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELDRCQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDdkQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxHQUFHLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDN0M7QUFDQSx3QkFBd0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ3RDLDRCQUE0QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLHdCQUF3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNELHdCQUF3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUMxRCx3QkFBd0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDMUQsd0JBQXdCLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pELHdCQUF3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN6RCx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEQ7QUFDQSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEdBQUc7QUFDdkQsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELGdDQUFnQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xILGdDQUFnQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0RCxnQ0FBZ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEgsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFO0FBQ3RDLGdDQUFnQyxDQUFDLEdBQUcsRUFBRTtBQUN0QyxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUU7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFO0FBQ3RDLGdDQUFnQyxDQUFDLEdBQUcsRUFBRTtBQUN0QyxnQ0FBZ0MsQ0FBQyxHQUFHLEVBQUU7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxFQUFFO0FBQ3RDLGdDQUFnQyxFQUFFO0FBQ2xDLGdDQUFnQyxFQUFFLENBQUM7QUFDbkM7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDckQsZ0NBQWdDLEVBQUUsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkYsZ0NBQWdDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcs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LEVBQUU7QUFDdEQsd0JBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsd0JBQXdCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsQyx3QkFBd0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN2RCx3QkFBd0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6Qyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUU7QUFDbkQsd0JBQXdCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsd0JBQXdCLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0Msd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsd0JBQXdCLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsd0JBQXdCLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDNUMsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFO0FBQ3hELHdCQUF3QixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLHdCQUF3QixNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLHdCQUF3QixHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLHdCQUF3QixHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUN6RCx3QkFBd0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6Qyx3QkFBd0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRTtBQUM5RCx3QkFBd0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6Qyx3QkFBd0IsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDNzFGO0FBQ0Esb0JBQW9CLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUNqRSx3QkFBd0IsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDNUMsd0JBQXdCLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUMzRDtBQUNBLHdCQUF3QixJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3RDLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLDRCQUE0QixFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3BFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFB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LDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELGdDQUFnQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMxRCxnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxnQ0FBZ0MsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RCxnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3QyxnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxnQ0FBZ0MsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsZ0NBQWdDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekQsZ0NBQWdDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0MsZ0NBQWdDLElBQUksR0FBRyxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEMsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0MsZ0NBQWdDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDekMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEMs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QUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdmpELDRCQUE0QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMzakQsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFV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LENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQ7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNwRSx3Q0FBd0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDM0UscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDMUYsd0NBQXdDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDOUQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRTtBQUMxRSx3Q0FBd0MsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSx3Q0FBd0MsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Usd0NBQXdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLHdDQUF3QyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRSx3Q0FBd0MsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsSCx3Q0FBd0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3JFLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3hFLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZFLHdDQUF3QyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEUscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELGdDQUFnQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDbkUsb0NBQW9DLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLEtBQUssQ0FBQztBQUM3Qyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxVQUFVO0FBQzNDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtBQUNqRSxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRCxnQ0FBZ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1QyxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0QsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakQ7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUM3RCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRixvQ0FBb0MsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRTtBQUN2RSx3Q0FBd0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRSxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxvQ0FBb0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6RCxvQ0FBb0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMs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Q2hFO0FBQ0EsNEJBQTRCLEtBQUssR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9HLDRCQUE0QixLQUFLLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQzNELDRCQUE0QixLQUFLLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNqRCw0QkFBNEIsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM2pELDRCQUE0QixLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0QsNEJBQTRCLE9BQU8sS0FBSyxDQUFDO0FBQ3pDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQ2xFLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDaEQsZ0NBQWdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdEQsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGdDQUFnQyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3REO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRSxvQ0FBb0MsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxvQ0FBb0MsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxvQ0FBb0MsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxvQ0FBb0MsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoRSx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1Qyx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1Qyx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1Qyx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxZQUFZLENBQUM7QUFDNUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckM7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDcEQ7QUFDQSxnQkFBZ0IsSUFBSSxZQUFZO0FBQ2hDO0FBQ0Esb0JBQW9CLFVBQVUsZUFBZSxFQUFFO0FBQy9DLHdCQUF3QixTQUFTLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0Esd0JBQXdCLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRTtBQUNuRCw0QkFBNEIsSUFBSSxNQUFNLENBQUM7QUFDdkM7QUFDQSw0QkFBNEIsZUFBZSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoRTtBQUNBLDRCQUE0QixNQUFNLEdBQUcsMEJBQTBCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNoSCw0QkFBNEIsTUFBTSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztBQUM1RCw0QkFBNEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDbEQsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsT0FBTyxNQUFNLENBQUM7QUFDMUMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRCw0QkFBNEIsR0FBRyxFQUFFLFlBQVk7QUFDN0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFVBQVUsQ0FBQyxTQUFTLEVBQUU7QUFDbEUsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1QyxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztBQUNoRCxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0QsZ0NBQWdDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEQsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxnQ0FBZ0MsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7QUFDbkQ7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BFLG9DQUFvQyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFO0FBQ3ZELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELHFDQUFxQyxNQUFNLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDN0Qsd0NBQXdDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELHdDQUF3QyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRCx3Q0FBd0MsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0Qsd0NBQXdDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELHdDQUF3QyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRDtBQUNBLHdDQUF3QyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDOUQsNENBQTRDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ2xFLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoRSx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1Qyx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1Qyx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1Qyx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLHdDQUF3QyxDQUFDLEVBQUUsQ0FBQztBQUM1QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxZQUFZLENBQUM7QUFDNUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckM7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDcEQ7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsU0FBUyxZQUFZLEdBQUc7QUFDcEQsb0JBQW9CLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUMvRCx3QkFBd0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxNQUFNLEVBQUU7QUFDN0QsNEJBQTRCLE9BQU8sS0FBSyxDQUFDO0FBQ3pDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRSw0QkFBNEIsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3pELGdDQUFnQyxPQUFPLEtBQUssQ0FBQztBQUM3Qyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sSUFBSSxDQUFDO0FBQ3BDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLEtBQUssR0FBRyxFQUFFO0FBQ3ZDO0FBQ0Esb0JBQW9CLEtBQUssQ0FBQyxTQUFTLEdBQUc7QUFDdEMsd0JBQXdCLGtCQUFrQixFQUFFLFNBQVMsd0JBQXdCLENBQUMsUUFBUSxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUU7QUFDdkksNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDaEYsNEJBQTRCLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RELDRCQUE0QixRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvRSw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRyw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZGLDRCQUE0QixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM1RSx5QkFBeUI7QUFDekIsd0JBQXdCLGlCQUFpQixFQUFFLFNBQVMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUN4SCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRSw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsNEJBQTRCLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkYsNEJBQTRCLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzNFLHlCQUF5QjtBQUN6Qix3QkFBd0IsV0FBVyxFQUFFLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO0FBQ3BILDRCQUE0QixJQUFJLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLDRCQUE0QixRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLDRCQUE0QixRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRiw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BGLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvRCw0QkFBNEIsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRyx5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsRUFBRSxTQUFTLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFO0FBQ3JHLDRCQUE0QixJQUFJLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9FLDRCQUE0QixRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN0RCw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxlQUFlLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEYsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELDRCQUE0QixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxLQUFLLENBQUM7QUFDakMsaUJBQWlCLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGdCQUFnQixPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QztBQUNBLGdCQUFnQixJQUFJLEtBQUssR0FBRyxTQUFTLFlBQVksR0FBRztBQUNwRCxvQkFBb0IsU0FBUyxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRTtBQUMxRCx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUUsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckQsd0JBQXdCLE9BQU8sQ0FBQyxDQUFDO0FBQ2pDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO0FBQzVFLHdCQUF3QixJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4Rix3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQyx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0Esd0JBQXdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQ25FLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUM1Riw0QkFBNEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RFLDRCQUE0QixJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLDRCQUE0QixLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRTtBQUNBLDRCQUE0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLFdBQVcsRUFBRTtBQUN0RixnQ0FBZ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0UsNEJBQTRCLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLDRCQUE0QixJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDOUM7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6RCxnQ0FBZ0MsU0FBUyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDckQsZ0NBQWdDLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDL0MsZ0NBQWdDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlELGdDQUFnQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQy9DLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDakQsZ0NBQWdDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEUsNkJBQTZCLE1BQU0sSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQ3hELGdDQUFnQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BFLDZCQUE2QixNQUFNLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUN4RCxnQ0FBZ0MsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsQ0FBQyxFQUFFLENBQUM7QUFDaEMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsS0FBSyxHQUFHLEVBQUU7QUFDdkM7QUFDQSxvQkFBb0IsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFO0FBQy9ELHdCQUF3QixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUM3RCw0QkFBNEIsT0FBTyxLQUFLLENBQUM7QUFDekMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hFLDRCQUE0QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekQsZ0NBQWdDLE9BQU8sS0FBSyxDQUFDO0FBQzdDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxJQUFJLENBQUM7QUFDcEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLEtBQUssQ0FBQyxTQUFTLEdBQUc7QUFDdEMsd0JBQXdCLElBQUksRUFBRSxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRTtBQUNwRiw0QkFBNEIsT0FBTyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hGLHlCQUF5QjtBQUN6Qix3QkFBd0Isa0JBQWtCLEVBQUUsU0FBUyx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRTtBQUN2SSw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoRiw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsNEJBQTRCLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9FLDRCQUE0QixRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xHLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNGLDRCQUE0QixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM1RSx5QkFBeUI7QUFDekIsd0JBQXdCLGlCQUFpQixFQUFFLFNBQVMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRTtBQUN4SCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRSw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsNEJBQTRCLFFBQVEsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlFLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGLDRCQUE0QixPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMzRSx5QkFBeUI7QUFDekIsd0JBQXdCLFdBQVcsRUFBRSxTQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtBQUNwSCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoRiw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQsNEJBQTRCLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RSw0QkFBNEIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0YsNEJBQTRCLElBQUksR0FBRyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEYsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELDRCQUE0QixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25HLHlCQUF5QjtBQUN6Qix3QkFBd0IsVUFBVSxFQUFFLFNBQVMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUU7QUFDckcsNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0UsNEJBQTRCLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RELDRCQUE0QixRQUFRLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkUsNEJBQTRCLElBQUksR0FBRyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakYsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELDRCQUE0QixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xHLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxLQUFLLENBQUM7QUFDakMsaUJBQWlCLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGdCQUFnQixPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN0QztBQUNBLGdCQUFnQixJQUFJLGVBQWUsR0FBRyxTQUFTLHNCQUFzQixHQUFHO0FBQ3hFLG9CQUFvQixTQUFTLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSx1QkFBdUIsRUFBRTtBQUMvRix3QkFBd0IsSUFBSSxDQUFDLHVCQUF1QixHQUFHLHVCQUF1QixDQUFDO0FBQy9FLHdCQUF3QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7QUFDL0UscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLGVBQWUsQ0FBQyxTQUFTLEdBQUc7QUFDaEQsd0JBQXdCLFlBQVksRUFBRSxTQUFTLDRCQUE0QixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDNUYsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUUsNEJBQTRCLE9BQU8sSUFBSSxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQ25JLGdDQUFnQyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNFLDZCQUE2QixDQUFDLENBQUM7QUFDL0IseUJBQXlCO0FBQ3pCLHdCQUF3QixhQUFhLEVBQUUsU0FBUyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUU7QUFDakYsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7QUFDNUUsNEJBQTRCLElBQUksSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRSw0QkFBNEIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25FLDRCQUE0QixPQUFPLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNsRSx5QkFBeUI7QUFDekIscUJBQXFCLENBQUM7QUFDdEIsb0JBQW9CLE9BQU8sZUFBZSxDQUFDO0FBQzNDLGlCQUFpQixFQUFFLENBQUM7QUFDcEI7QUFDQSxnQkFBZ0IsSUFBSSxzQkFBc0IsR0FBRyxTQUFTLDZCQUE2QixHQUFHO0FBQ3RGLG9CQUFvQixJQUFJLG9CQUFvQixHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDaFE7QUFDQSxvQkFBb0IsU0FBUyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUU7QUFDeE4sd0JBQXdCLElBQUksUUFBUSxFQUFFO0FBQ3RDLDRCQUE0QixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEYsNEJBQTRCLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUM1RSx5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUMxQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxZQUFZLENBQUM7QUFDekM7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQzVDLDRCQUE0QixZQUFZLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUN2RCx5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsWUFBWSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDdkQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksWUFBWSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLENBQUMsRUFBRTtBQUN4Ryw0QkFBNEIsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbEcseUJBQXlCLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxFQUFFO0FBQzdJLDRCQUE0QixPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDN0cseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sSUFBSSxDQUFDO0FBQ3BDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO0FBQ3hJLHdCQUF3QixJQUFJLFlBQVksR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ3JGLHdCQUF3QixJQUFJLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxZQUFZLENBQUM7QUFDbkUsNEJBQTRCLENBQUMsR0FBRyxDQUFDO0FBQ2pDLDRCQUE0QixDQUFDO0FBQzdCLDRCQUE0QixDQUFDLENBQUM7QUFDOUI7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLEVBQUU7QUFDdEMsNEJBQTRCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUQ7QUFDQSw0QkFBNEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9DLGdDQUFnQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDdkMsNEJBQTRCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzFFLDRCQUE0QixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0QseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDckQsd0JBQXdCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFELHdCQUF3QixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztBQUMzRCx3QkFBd0IsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDNUQ7QUFDQSx3QkFBd0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDbkUsNEJBQTRCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQy9ELDRCQUE0QixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsNEJBQTRCLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCw0QkFBNEIsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELDRCQUE0QixRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxHQUFHLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLHdCQUF3QixJQUFJLGdCQUFnQixHQUFHLFNBQVMsSUFBSSxDQUFDLENBQUM7QUFDOUQ7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQzNDLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRCxnQ0FBZ0MsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDL0UsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQy9FLHdCQUF3QixJQUFJLE1BQU0sRUFBRSxTQUFTLENBQUM7QUFDOUM7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQzNDLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRCxnQ0FBZ0MsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RFLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2RSxnQ0FBZ0MsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdEUsNEJBQTRCLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsNEJBQTRCLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO0FBQ3JELDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDOUQsZ0NBQWdDLENBQUMsQ0FBQztBQUNsQztBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0RCxnQ0FBZ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDeEQsb0NBQW9DLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDdkUsZ0NBQWdDLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNFLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMxRSxnQ0FBZ0MsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3RFLG9DQUFvQyxPQUFPLElBQUksQ0FBQztBQUNoRCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0QixNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdEUsNEJBQTRCLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDbEY7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDMUUsZ0NBQWdDLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN0RSxvQ0FBb0MsT0FBTyxJQUFJLENBQUM7QUFDaEQsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxhQUFhLENBQUM7QUFDN0MscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0FBQzlGLHdCQUF3QixJQUFJLFFBQVEsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7QUFDekQsNEJBQTRCLENBQUMsR0FBRyxDQUFDO0FBQ2pDLDRCQUE0QixDQUFDO0FBQzdCLDRCQUE0QixDQUFDLENBQUM7QUFDOUIsd0JBQXdCLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUQ7QUFDQSx3QkFBd0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQzNDLDRCQUE0QixRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlCO0FBQ0Esd0JBQXdCLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUN2Qyw0QkFBNEIsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEUsd0JBQXdCLElBQUksZ0JBQWdCLEdBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQztBQUM5RDtBQUNBLHdCQUF3QixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUU7QUFDM0MsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JELGdDQUFnQyxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFFLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLEVBQUUsWUFBWSxDQUFDO0FBQ2pEO0FBQ0Esd0JBQXdCLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtBQUMzQyw0QkFBNEIsWUFBWSxHQUFHLGFBQWEsQ0FBQztBQUN6RCw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsZ0JBQWdCLENBQUM7QUFDN0UsZ0NBQWdDLENBQUMsQ0FBQztBQUNsQztBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0RCxnQ0FBZ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN2RSxvQ0FBb0MsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2RSxnQ0FBZ0MsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDakYsNkJBQTZCO0FBQzdCLHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0QixNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQzNGLDRCQUE0QixZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM5RSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxZQUFZLENBQUM7QUFDNUMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksWUFBWSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3hFO0FBQ0Esb0JBQW9CLFNBQVMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7QUFDNUUsd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEQ7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDMUUsNEJBQTRCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDckYseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3REO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLEVBQUU7QUFDdEksNEJBQTRCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFDNUYseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ25ELHdCQUF3QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNEO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDeEMsNEJBQTRCLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRTtBQUNoRCxnQ0FBZ0MsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUMvQyw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1RCxnQ0FBZ0MsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFO0FBQ2xILG9DQUFvQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO0FBQ3JFLG9DQUFvQyxJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hGLG9DQUFvQyxTQUFTLEdBQUcsV0FBVyxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ2hHO0FBQ0Esb0NBQW9DLElBQUksU0FBUyxHQUFHLEVBQUUsRUFBRTtBQUN4RCx3Q0FBd0MsU0FBUyxLQUFLLENBQUMsQ0FBQztBQUN4RCxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxHQUFHLEVBQUUsSUFBSSxTQUFTLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNuRyw0QkFBNEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUM5RSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BHLHdCQUF3QixJQUFJLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbkcsd0JBQXdCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsd0JBQXdCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckQsd0JBQXdCLElBQUksZUFBZSxHQUFHLENBQUMsU0FBUyxLQUFLLENBQUMsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsS0FBSyxLQUFLLENBQUM7QUFDNUgsd0JBQXdCLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQy9ELHdCQUF3QixJQUFJLFdBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDM0Usd0JBQXdCLElBQUksYUFBYSxDQUFDO0FBQzFDO0FBQ0Esd0JBQXdCLElBQUksUUFBUSxFQUFFO0FBQ3RDLDRCQUE0QixJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDaEQsZ0NBQWdDLElBQUk7QUFDcEMsb0NBQW9DLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsa0JBQWtCLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkYsaUNBQWlDLENBQUMsT0FBTyxFQUFFLEVBQUU7QUFDN0Msb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSwwQkFBMEIsR0FBRywwQ0FBMEMsQ0FBQyxDQUFDO0FBQzdILGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsYUFBYSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMvRSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxhQUFhLENBQUM7QUFDMUM7QUFDQSx3QkFBd0IsSUFBSSxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQzdDLDRCQUE0QixhQUFhLEdBQUcsY0FBYyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNqSyx5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsSUFBSSxtQkFBbUIsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0csNEJBQTRCLElBQUksWUFBWSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4Ryw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2pHLDRCQUE0QixJQUFJLGtCQUFrQixHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM5Ryw0QkFBNEIsSUFBSSxXQUFXLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZHLDRCQUE0QixJQUFJLGVBQWUsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzNGLDRCQUE0QixJQUFJLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFGLDRCQUF3QyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNwRiw0QkFBNEIsYUFBYSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLG1CQUFtQixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsY0FBcUIsQ0FBQyxDQUFDO0FBQzVPLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3pELDRCQUE0QixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMxSCx5QkFBeUIsTUFBTSxJQUFJLENBQUMsYUFBYSxJQUFJLFFBQVEsRUFBRTtBQUMvRCw0QkFBNEIsSUFBSSxlQUFlLEdBQUcsa0JBQWtCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEgsNEJBQTRCLGFBQWEsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ25LLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLENBQUMsYUFBYSxFQUFFO0FBQzVDLDRCQUE0QixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2hJLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUMzRDtBQUNBLHdCQUF3QixJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUU7QUFDNUMsNEJBQTRCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEQ7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDN0QsZ0NBQWdDLEVBQUUsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDN0QsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pDLDRCQUE0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDO0FBQ3pFLDRCQUE0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksWUFBWSxDQUFDO0FBQ3pFLDRCQUE0QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQztBQUNwRSx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRTtBQUM1RSx3QkFBd0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUUsNEJBQTRCLENBQUM7QUFDN0IsNEJBQTRCLENBQUMsQ0FBQztBQUM5QjtBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUMxRSw0QkFBNEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztBQUM5Qyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkQsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3BELHdCQUF3QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQzlDLHdCQUF3QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNuRDtBQUNBLHdCQUF3QixJQUFJLEtBQUssRUFBRTtBQUNuQyw0QkFBNEIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVDLDRCQUE0QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUMsNEJBQTRCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1Qyw0QkFBNEIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMzRCx3QkFBd0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEYscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsc0JBQXNCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUM3RSx3QkFBd0IsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtBQUM1RCw0QkFBNEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsNEJBQTRCLENBQUMsQ0FBQztBQUN0Rix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDNUQsd0JBQXdCLElBQUksR0FBRyxDQUFDO0FBQ2hDO0FBQ0Esd0JBQXdCLElBQUksV0FBVyxLQUFLLElBQUksSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO0FBQy9FLDRCQUE0QixHQUFHLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtBQUN6RCw0QkFBNEIsT0FBTyxTQUFTLGdEQUFnRCxHQUFHO0FBQy9GLGdDQUFnQyxPQUFPLElBQUksVUFBVSxFQUFFLENBQUM7QUFDeEQsNkJBQTZCLENBQUM7QUFDOUIseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7QUFDL0MsNEJBQTRCLE9BQU8sU0FBUyw4Q0FBOEMsR0FBRztBQUM3RixnQ0FBZ0MsT0FBTyxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRiw2QkFBNkIsQ0FBQztBQUM5Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUNsRCw0QkFBNEIsT0FBTyxTQUFTLGlEQUFpRCxHQUFHO0FBQ2hHLGdDQUFnQyxPQUFPLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdGLDZCQUE2QixDQUFDO0FBQzlCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ2xELDRCQUE0QixPQUFPLFNBQVMsaURBQWlELEdBQUc7QUFDaEcsZ0NBQWdDLE9BQU8sSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0QsNkJBQTZCLENBQUM7QUFDOUIseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDN0UscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLHNCQUFzQixDQUFDLFNBQVMsR0FBRztBQUN2RCx3QkFBd0IscUJBQXFCLEVBQUUsU0FBUyw0Q0FBNEMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFO0FBQy9HLDRCQUE0QixJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxFQUFFO0FBQzlFLGdDQUFnQyxPQUFPLElBQUksZUFBZSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUMvTSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxRjtBQUNBLDRCQUE0QixJQUFJLGlCQUFpQixHQUFHLFNBQVMsNEJBQTRCLEdBQUc7QUFDNUYsZ0NBQWdDLE9BQU8sSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUQsNkJBQTZCLENBQUM7QUFDOUI7QUFDQSw0QkFBNEIsT0FBTyxJQUFJLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBQzdGLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxzQkFBc0IsQ0FBQztBQUNsRCxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxzQkFBc0IsQ0FBQztBQUN4RTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0Qsb0JBQW9CLEtBQUssRUFBRSxJQUFJO0FBQy9CLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDNUM7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsSUFBSSxXQUFXLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkU7QUFDQSxnQkFBZ0IsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxFQUFFLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDL1c7QUFDQSxnQkFBZ0IsU0FBUywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDak07QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sSUFBSSxjQUFjLENBQUMsMkRBQTJELENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRTtBQUN0TDtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxHQUFHLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN047QUFDQSxnQkFBZ0IsU0FBUyxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksT0FBTyxVQUFVLEtBQUssVUFBVSxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLG9EQUFvRCxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFO0FBQ2paO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxTDtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsWUFBWSxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDeks7QUFDQSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUM3VTtBQUNBLGdCQUFnQixTQUFTLFlBQVksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksVUFBVSxFQUFFLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLFdBQVcsQ0FBQyxFQUFFO0FBQ3ZPO0FBQ0EsZ0JBQWdCLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRTtBQUM1RSxvQkFBb0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZDLG9CQUFvQixPQUFPLEdBQUcsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzFELG9CQUFvQixJQUFJLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pDLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pDLG9CQUFvQixJQUFJLFFBQVEsR0FBRyxDQUFDO0FBQ3BDLHdCQUF3QixRQUFRLENBQUM7QUFDakMsb0JBQW9CLElBQUksT0FBTyxHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELG9CQUFvQixJQUFJLFVBQVUsR0FBRyxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBQ3JEO0FBQ0Esb0JBQW9CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsd0JBQXdCLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDekUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLEtBQUssSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDcEQsd0JBQXdCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUN0RTtBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JELDRCQUE0QixRQUFRLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDL0QsNEJBQTRCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQy9ELDRCQUE0QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUMvRCw0QkFBNEIsUUFBUSxJQUFJLE9BQU8sQ0FBQztBQUNoRCx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixJQUFJLFVBQVU7QUFDOUI7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQyx3QkFBd0IsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtBQUM1RCw0QkFBNEIsZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5RDtBQUNBLDRCQUE0QixJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssVUFBVSxFQUFFO0FBQ2pFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsK0JBQStCLENBQUMsQ0FBQztBQUN4Riw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDN0MsNEJBQTRCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3JELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDbEQsNEJBQTRCLEdBQUcsRUFBRSxRQUFRO0FBQ3pDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRTtBQUNuRSxnQ0FBZ0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RSxnQ0FBZ0MsT0FBTyxHQUFHLENBQUM7QUFDM0MsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsWUFBWTtBQUM3Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtBQUN6RixnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLHVDQUF1QyxDQUFDLENBQUM7QUFDaEcsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsY0FBYztBQUMvQyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUNqSCxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLHlDQUF5QyxDQUFDLENBQUM7QUFDbEcsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsaUJBQWlCO0FBQ2xELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUNsRixnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLDRDQUE0QyxDQUFDLENBQUM7QUFDckcsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsZUFBZTtBQUNoRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsYUFBYSxDQUFDLElBQUksRUFBRTtBQUNoRSxnQ0FBZ0MsT0FBTyxLQUFLLENBQUM7QUFDN0MsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsaUJBQWlCO0FBQ2xELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtBQUM1RSxnQ0FBZ0MsT0FBTyxVQUFVLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDNUYsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsU0FBUztBQUMxQyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsT0FBTyxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQzNJLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxhQUFhLEdBQUcsY0FBYyxDQUFDO0FBQzNFLGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEQsZ0NBQWdDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNsRSxnQ0FBZ0MsSUFBSSxhQUFhLEdBQUcsY0FBYyxLQUFLLE1BQU0sSUFBSSxhQUFhLEtBQUssS0FBSyxDQUFDO0FBQ3pHO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUM3RCxvQ0FBb0MsTUFBTSxHQUFHLEtBQUssQ0FBQztBQUNuRCxpQ0FBaUMsTUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRTtBQUN6SixvQ0FBb0MsSUFBSSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUM7QUFDeEk7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pGLHdDQUF3QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLG9DQUFvQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0c7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUN4RCx3Q0FBd0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0Esd0NBQXdDLEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUU7QUFDOUUsNENBQTRDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDckUsNENBQTRDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1RSw0Q0FBNEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRiw0Q0FBNEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRiw0Q0FBNEMsT0FBTyxJQUFJLE9BQU8sQ0FBQztBQUMvRCx5Q0FBeUM7QUFDekMscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0Usd0NBQXdDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2RDtBQUNBLHdDQUF3QyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQzlFLDRDQUE0QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFO0FBQ0EsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5RSw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRix5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3hELHdDQUF3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxHQUFHLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqSCxxQ0FBcUMsTUFBTTtBQUMzQyx3Q0FBd0MsTUFBTSxHQUFHLElBQUksaUJBQWlCLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLHdDQUF3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzlGLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxNQUFNLEVBQUU7QUFDNUMsb0NBQW9DLElBQUksYUFBYSxFQUFFO0FBQ3ZELHdDQUF3QyxjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUgscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLElBQUksUUFBUSxHQUFHLENBQUM7QUFDeEQsNENBQTRDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDeEQ7QUFDQSx3Q0FBd0MsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssR0FBRyxZQUFZLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUN0Ryw0Q0FBNEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDakYsNENBQTRDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ2pGLDRDQUE0QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUNqRiw0Q0FBNEMsUUFBUSxJQUFJLE9BQU8sQ0FBQztBQUNoRSx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxvQkFBb0I7QUFDckQsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNGLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxFQUFFLENBQUM7QUFDN0IsNEJBQTRCLEdBQUcsRUFBRSxPQUFPO0FBQ3hDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUU7QUFDckYsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMzRixnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZELDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFFBQVE7QUFDekMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE1BQU0sQ0FBQyxFQUFFLEVBQUU7QUFDdkQsZ0NBQWdDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxRSxnQ0FBZ0MsSUFBSSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQztBQUNsRTtBQUNBLGdDQUFnQyxRQUFRLElBQUk7QUFDNUMsb0NBQW9DLEtBQUssY0FBYztBQUN2RCx3Q0FBd0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNwRTtBQUNBLG9DQUFvQyxLQUFLLGFBQWE7QUFDdEQsd0NBQXdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDbkU7QUFDQSxvQ0FBb0MsS0FBSyxjQUFjO0FBQ3ZELHdDQUF3QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3BFO0FBQ0Esb0NBQW9DLEtBQUssV0FBVztBQUNwRCx3Q0FBd0MsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCx3Q0FBd0MsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCx3Q0FBd0MsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsT0FBTyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVGO0FBQ0Esb0NBQW9DLEtBQUssVUFBVTtBQUNuRCx3Q0FBd0MsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCx3Q0FBd0MsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCx3Q0FBd0MsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELHdDQUF3QyxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25HO0FBQ0Esb0NBQW9DLEtBQUssV0FBVztBQUNwRCx3Q0FBd0MsSUFBSSxhQUFhLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0Esd0NBQXdDLElBQUksYUFBYSxFQUFFO0FBQzNELDRDQUE0QyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2Rix5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsT0FBTyxJQUFJLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1RTtBQUNBLG9DQUFvQyxLQUFLLFdBQVc7QUFDcEQsd0NBQXdDLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSx3Q0FBd0MsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELHdDQUF3QyxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Qsd0NBQXdDLE9BQU8sSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEc7QUFDQSxvQ0FBb0MsS0FBSyxhQUFhO0FBQ3RELHdDQUF3QyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0Qsd0NBQXdDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RCx3Q0FBd0MsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELHdDQUF3QyxPQUFPLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25HO0FBQ0Esb0NBQW9DLEtBQUssT0FBTztBQUNoRCx3Q0FBd0MsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCx3Q0FBd0MsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCx3Q0FBd0MsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELHdDQUF3QyxPQUFPLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEY7QUFDQSxvQ0FBb0M7QUFDcEMsd0NBQXdDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzlHLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxXQUFXO0FBQzVDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxTQUFTLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRTtBQUNoRSxnQ0FBZ0MsSUFBSSxHQUFHLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ25ILGdDQUFnQyxJQUFJLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDekcsZ0NBQWdDLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2pFLG9DQUFvQyxRQUFRLEVBQUUsQ0FBQyxJQUFJO0FBQ25ELHdDQUF3QyxLQUFLLFlBQVksQ0FBQztBQUMxRCx3Q0FBd0MsS0FBSyxHQUFHO0FBQ2hELDRDQUE0QyxPQUFPLGNBQWMsQ0FBQztBQUNsRTtBQUNBLHdDQUF3QyxLQUFLLFdBQVcsQ0FBQztBQUN6RCx3Q0FBd0MsS0FBSyxLQUFLO0FBQ2xELDRDQUE0QyxPQUFPLGFBQWEsQ0FBQztBQUNqRTtBQUNBLHdDQUF3QyxLQUFLLFlBQVksQ0FBQztBQUMxRCx3Q0FBd0MsS0FBSyxNQUFNO0FBQ25ELDRDQUE0QyxPQUFPLGNBQWMsQ0FBQztBQUNsRTtBQUNBLHdDQUF3QyxLQUFLLFNBQVM7QUFDdEQsNENBQTRDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdkU7QUFDQSx3Q0FBd0M7QUFDeEMsNENBQTRDLElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzlFLGdEQUFnRCxJQUFJLFdBQVcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3hGO0FBQ0EsZ0RBQWdELElBQUksSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxFQUFFO0FBQzFGLG9EQUFvRCxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6RjtBQUNBLG9EQUFvRCxJQUFJLEtBQUssRUFBRTtBQUMvRCx3REFBd0QsSUFBSSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDNUYsNERBQTRELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ3hILHlEQUF5RDtBQUN6RDtBQUNBLHdEQUF3RCxFQUFFLEdBQUcsS0FBSyxDQUFDO0FBQ25FLHdEQUF3RCxNQUFNO0FBQzlELHFEQUFxRDtBQUNyRCxpREFBaUQ7QUFDakQsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwSCxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN2RCxvQ0FBb0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDM0Usb0NBQW9DLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUM7QUFDN0Y7QUFDQSxvQ0FBb0MsUUFBUSxJQUFJO0FBQ2hELHdDQUF3QyxLQUFLLFlBQVksQ0FBQztBQUMxRCx3Q0FBd0MsS0FBSyxHQUFHO0FBQ2hELDRDQUE0QyxPQUFPLGNBQWMsQ0FBQztBQUNsRTtBQUNBLHdDQUF3QyxLQUFLLFdBQVcsQ0FBQztBQUN6RCx3Q0FBd0MsS0FBSyxLQUFLO0FBQ2xELDRDQUE0QyxPQUFPLGFBQWEsQ0FBQztBQUNqRTtBQUNBLHdDQUF3QyxLQUFLLFlBQVksQ0FBQztBQUMxRCx3Q0FBd0MsS0FBSyxNQUFNO0FBQ25ELDRDQUE0QyxPQUFPLGNBQWMsQ0FBQztBQUNsRTtBQUNBLHdDQUF3QyxLQUFLLFNBQVM7QUFDdEQsNENBQTRDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLDRDQUE0QyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN2Riw0Q0FBNEMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkYsNENBQTRDLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hFLDRDQUE0QyxPQUFPLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDaEc7QUFDQSx3Q0FBd0MsS0FBSyxRQUFRO0FBQ3JELDRDQUE0QyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSw0Q0FBNEMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkYsNENBQTRDLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3ZGLDRDQUE0QyxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3RSw0Q0FBNEMsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuRiw0Q0FBNEMsT0FBTyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2RztBQUNBLHdDQUF3QyxLQUFLLFVBQVU7QUFDdkQsNENBQTRDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEYsNENBQTRDLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDbkUsNENBQTRDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFLDRDQUE0QyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN4RTtBQUNBLDRDQUE0QyxJQUFJLEdBQUcsRUFBRTtBQUNyRCxnREFBZ0QsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQy9HLGdEQUFnRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQ25HO0FBQ0EsZ0RBQWdELElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7QUFDakYsb0RBQW9ELE9BQU8sS0FBSyxDQUFDO0FBQ2pFLGlEQUFpRDtBQUNqRDtBQUNBLGdEQUFnRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsNERBQTRELENBQUMsQ0FBQztBQUM5SCw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFO0FBQ2hFLGdEQUFnRCxPQUFPLGNBQWMsQ0FBQztBQUN0RSw2Q0FBNkMsTUFBTSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDdkUsZ0RBQWdELE9BQU8sYUFBYSxDQUFDO0FBQ3JFLDZDQUE2QyxNQUFNLElBQUksUUFBUSxLQUFLLENBQUMsRUFBRTtBQUN2RSxnREFBZ0QsT0FBTyxjQUFjLENBQUM7QUFDdEUsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxTQUFTO0FBQ3RELDRDQUE0QyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0FBQzlFO0FBQ0EsNENBQTRDLElBQUksYUFBYSxFQUFFO0FBQy9ELGdEQUFnRCxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzdILDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxPQUFPLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ2hGO0FBQ0Esd0NBQXdDLEtBQUssU0FBUyxDQUFDO0FBQ3ZELHdDQUF3QyxLQUFLLEdBQUc7QUFDaEQsNENBQTRDLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUNySCw0Q0FBNEMsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkYsNENBQTRDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEY7QUFDQSw0Q0FBNEMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUU7QUFDbkYsZ0RBQWdELE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0UsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvRjtBQUNBLHdDQUF3QyxLQUFLLFlBQVksQ0FBQztBQUMxRCx3Q0FBd0MsS0FBSyxTQUFTO0FBQ3RELDRDQUE0QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLDRDQUE0QyxRQUFRLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM3Riw0Q0FBNEMsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUN2Ryw0Q0FBNEMsSUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRyw0Q0FBNEMsT0FBTyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzFGO0FBQ0Esd0NBQXdDLEtBQUssS0FBSztBQUNsRCw0Q0FBNEMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsNENBQTRDLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3ZGLDRDQUE0QyxVQUFVLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN2Riw0Q0FBNEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNqRiw0Q0FBNEMsT0FBTyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzVGO0FBQ0Esd0NBQXdDO0FBQ3hDLDRDQUE0QyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbEkscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEgsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsaUJBQWlCO0FBQ2xELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxlQUFlLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUM5RSxnQ0FBZ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDNUQsb0NBQW9DLE9BQU8sSUFBSSxDQUFDO0FBQ2hELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUNwRSxvQ0FBb0MsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDBDQUEwQyxDQUFDLENBQUM7QUFDaEcsb0NBQW9DLE9BQU8sSUFBSSxDQUFDO0FBQ2hELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDcEYsb0NBQW9DLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUNoRix3Q0FBd0MsT0FBTyxLQUFLLENBQUM7QUFDckQscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLElBQUksQ0FBQztBQUM1Qyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7QUFDN0Usb0NBQW9DLElBQUksSUFBSSxHQUFHO0FBQy9DLHdDQUF3QyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNuRyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxHQUFHLEdBQUc7QUFDOUMsd0NBQXdDLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ2pHLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLElBQUksR0FBRztBQUMvQyx3Q0FBd0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDbkcscUNBQXFDO0FBQ3JDO0FBQ0EsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esd0JBQXdCLE9BQU8sVUFBVSxDQUFDO0FBQzFDLHFCQUFxQixFQUFFLENBQUM7QUFDeEI7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEQ7QUFDQSxnQkFBZ0IsSUFBSSxXQUFXO0FBQy9CO0FBQ0Esb0JBQW9CLFVBQVUsV0FBVyxFQUFFO0FBQzNDLHdCQUF3QixTQUFTLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzVEO0FBQ0Esd0JBQXdCLFNBQVMsV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ3JFLDRCQUE0QixJQUFJLEtBQUssQ0FBQztBQUN0QztBQUNBLDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsNEJBQTRCLEtBQUssR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDckksNEJBQTRCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQzlDLDRCQUE0QixLQUFLLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNsRCw0QkFBNEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0UsNEJBQTRCLE9BQU8sS0FBSyxDQUFDO0FBQ3pDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkQsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3pGLGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pELGdDQUFnQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNsRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxjQUFjO0FBQy9DLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ2pILGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pELGdDQUFnQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ3JELGdDQUFnQyxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLGdDQUFnQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ2pFLGdDQUFnQyxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztBQUNqRixnQ0FBZ0MsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEtBQUssT0FBTyxLQUFLLENBQUMsQ0FBQztBQUNwSCxnQ0FBZ0MsSUFBSSxHQUFHLEdBQUcsYUFBYSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDekUsZ0NBQWdDLElBQUksT0FBTyxHQUFHLGFBQWEsR0FBRyxJQUFJLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDakgsZ0NBQWdDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDN0QsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hFLGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM1RSxnQ0FBZ0MsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVELG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRSx3Q0FBd0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUM3RSxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0Esb0NBQW9DLElBQUksa0JBQWtCLEVBQUU7QUFDNUQsd0NBQXdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNFLDRDQUE0QyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdFLHlDQUF5QztBQUN6QyxxQ0FBcUMsTUFBTTtBQUMzQyx3Q0FBd0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNqRix3Q0FBd0MsR0FBRyxJQUFJLFlBQVksQ0FBQztBQUM1RCxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDcEQsb0NBQW9DLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkcsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGlCQUFpQjtBQUNsRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDbEYsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUgsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLFdBQVcsQ0FBQztBQUMzQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNsQztBQUNBLGdCQUFnQixJQUFJLFNBQVM7QUFDN0I7QUFDQSxvQkFBb0IsVUFBVSxZQUFZLEVBQUU7QUFDNUMsd0JBQXdCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDM0Q7QUFDQSx3QkFBd0IsU0FBUyxTQUFTLENBQUMsTUFBTSxFQUFFO0FBQ25ELDRCQUE0QixJQUFJLE1BQU0sQ0FBQztBQUN2QztBQUNBLDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzdEO0FBQ0EsNEJBQTRCLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUgsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ2pELDRCQUE0QixPQUFPLE1BQU0sQ0FBQztBQUMxQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2pELDRCQUE0QixHQUFHLEVBQUUsaUJBQWlCO0FBQ2xELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtBQUM1RSxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLDJDQUEyQyxDQUFDLENBQUM7QUFDcEcsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLFNBQVMsQ0FBQztBQUN6QyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNsQztBQUNBLGdCQUFnQixJQUFJLFNBQVM7QUFDN0I7QUFDQSxvQkFBb0IsVUFBVSxZQUFZLEVBQUU7QUFDNUMsd0JBQXdCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDM0Q7QUFDQSx3QkFBd0IsU0FBUyxTQUFTLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDbEUsNEJBQTRCLElBQUksTUFBTSxDQUFDO0FBQ3ZDO0FBQ0EsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDN0Q7QUFDQSw0QkFBNEIsTUFBTSxHQUFHLDBCQUEwQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzSCw0QkFBNEIsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDL0MsNEJBQTRCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3JELDRCQUE0QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQzdELDRCQUE0QixJQUFJLE1BQU0sR0FBRyxZQUFZLEdBQUcsT0FBTyxDQUFDO0FBQ2hFO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ25FLGdDQUFnQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BFO0FBQ0EsZ0NBQWdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pELDZCQUE2QixNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxFQUFFO0FBQ3BFLGdDQUFnQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDakUsb0NBQW9DLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxpQ0FBaUM7QUFDakMsNkJBQTZCLE1BQU0sSUFBSSxNQUFNLFlBQVksVUFBVSxFQUFFO0FBQ3JFLGdDQUFnQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2RCw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDMUcsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLE9BQU8sTUFBTSxDQUFDO0FBQzFDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDakQsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3pGLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNsRSxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUN0RSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGNBQWM7QUFDL0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDakgsZ0NBQWdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDckQsZ0NBQWdDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDN0QsZ0NBQWdDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzFGLGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ3pEO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEUsb0NBQW9DLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNoRixvQ0FBb0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMxRyxvQ0FBb0MsVUFBVSxJQUFJLFdBQVcsQ0FBQztBQUM5RCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsaUJBQWlCO0FBQ2xELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUNsRixnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUcsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsaUJBQWlCO0FBQ2xELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxlQUFlLENBQUMsU0FBUyxFQUFFLEdBQUcsRUFBRTtBQUM1RSxnQ0FBZ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDL0Qsb0NBQW9DLE9BQU8sSUFBSSxDQUFDO0FBQ2hELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzVELG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztBQUN4RixvQ0FBb0MsT0FBTyxJQUFJLENBQUM7QUFDaEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFDdkUsb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3pGLG9DQUFvQyxPQUFPLElBQUksQ0FBQztBQUNoRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzdGLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxTQUFTLENBQUM7QUFDekMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEM7QUFDQSxnQkFBZ0IsSUFBSSxZQUFZO0FBQ2hDO0FBQ0Esb0JBQW9CLFVBQVUsWUFBWSxFQUFFO0FBQzVDLHdCQUF3QixTQUFTLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzlEO0FBQ0Esd0JBQXdCLFNBQVMsWUFBWSxHQUFHO0FBQ2hELDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ2hFO0FBQ0EsNEJBQTRCLE9BQU8sMEJBQTBCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ILHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3pGLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdELGdDQUFnQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuRyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxjQUFjO0FBQy9DLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ2pILGdDQUFnQyxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxTQUFTO0FBQ2pELG9DQUFvQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ25EO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEUsb0NBQW9DLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3RCxvQ0FBb0MsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsQ0FBQyxJQUFJLE9BQU8sQ0FBQztBQUNqRCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsaUJBQWlCO0FBQ2xELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUNsRixnQ0FBZ0MsT0FBTyxXQUFXLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxZQUFZLENBQUM7QUFDNUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDbEM7QUFDQSxnQkFBZ0IsSUFBSSxXQUFXO0FBQy9CO0FBQ0Esb0JBQW9CLFVBQVUsWUFBWSxFQUFFO0FBQzVDLHdCQUF3QixTQUFTLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzdEO0FBQ0Esd0JBQXdCLFNBQVMsV0FBVyxHQUFHO0FBQy9DLDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsNEJBQTRCLE9BQU8sMEJBQTBCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdILHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkQsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxVQUFVLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO0FBQ3pGLGdDQUFnQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4RSxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRixnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxjQUFjO0FBQy9DLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0FBQ2pILGdDQUFnQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtBQUNqRSxvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3pHLG9DQUFvQyxPQUFPO0FBQzNDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxTQUFTO0FBQ2pELG9DQUFvQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ25EO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEUsb0NBQW9DLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRSxvQ0FBb0MsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLG9DQUFvQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakUsb0NBQW9DLENBQUMsSUFBSSxPQUFPLENBQUM7QUFDakQsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGlCQUFpQjtBQUNsRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUU7QUFDbEYsZ0NBQWdDLE9BQU8sV0FBVyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGFBQWEsQ0FBQyxJQUFJLEVBQUU7QUFDaEUsZ0NBQWdDLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNsRCw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esd0JBQXdCLE9BQU8sV0FBVyxDQUFDO0FBQzNDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsZ0JBQWdCLElBQUksWUFBWSxHQUFHLFNBQVMsbUJBQW1CLEdBQUc7QUFDbEUsb0JBQW9CLFNBQVMsWUFBWSxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7QUFDdEYsd0JBQXdCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDMUQsd0JBQXdCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzlELHdCQUF3QixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUM5RCx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDOUQsd0JBQXdCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGlCQUFpQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUNsWix3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixHQUFHLENBQUMsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLGVBQWUsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztBQUNsWix3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsR0FBRyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLG1CQUFtQixHQUFHLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLGlCQUFpQixHQUFHLENB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QUF3QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckQsd0JBQXdCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCx3QkFBd0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELHdCQUF3QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztBQUMzRSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDM0Usd0JBQXdCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQzNFLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQztBQUNyRCx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsa0JBQWtCLENBQUM7QUFDMUQsd0JBQXdCLHlCQUF5QixDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2hGLHdCQUF3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RUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEs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LENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMva0I7QUFDQSw0QkFBNEIsU0FBUyxpQkFBaUIsQ0FB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RUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8s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RUFBRTtBQUN2Qix3QkFBd0IsRUFBRSxFQUFFLFNBQVM7QUFDckMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLHdCQUF3QixhQUFhLEVBQUUsSUFBSTtBQUMzQyxxQkFBcUIsRUFBRTtBQUN2Qix3QkFBd0IsRUFBRSxFQUFFLFNBQVM7QUFDckMsd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLHdCQUF3QixhQUFhLEVBQUUsSUFBSTtBQUMzQyx3QkFBd0IsSUFBSSxFQUFFLElBQUk7QUFDbEMscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLEVBQUUsRUFBRSxZQUFZO0FBQ3hDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5Qix3QkFBd0IsVUFBVSxFQUFFLElBQUk7QUFDeEMscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLEVBQUUsRUFBRSxZQUFZO0FBQ3hDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5Qix3QkFBd0IsVUFBVSxFQUFFLElBQUk7QUFDeEMscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLEVBQUUsRUFBRSxXQUFXO0FBQ3ZDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5Qix3QkFBd0IsVUFBVSxFQUFFLElBQUk7QUFDeEMscUJBQXFCLEVBQUU7QUFDdkIsd0JBQXdCLEVBQUUsRUFBRSxXQUFXO0FBQ3ZDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5Qix3QkFBd0IsVUFBVSxFQUFFLElBQUk7QUFDeEMscUJBQXFCLEVBQUUsSUFBSSxFQUFFO0FBQzdCLHdCQUF3QixFQUFFLEVBQUUsV0FBVztBQUN2Qyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDOUIsd0JBQXdCLFVBQVUsRUFBRSxJQUFJO0FBQ3hDLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixFQUFFLEVBQUUsV0FBVztBQUN2Qyx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUFDOUIsd0JBQXdCLFVBQVUsRUFBRSxJQUFJO0FBQ3hDLHFCQUFxQixFQUFFO0FBQ3ZCLHdCQUF3QixFQUFFLEVBQUUsV0FBVztBQUN2Qyx3QkFBd0Is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QUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeDFDLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEM7QUFDQSxvQkFBb0IsU0FBUyxVQUFVLENBQUMsT0FBTyxFQUFFO0FBQ2pELHdCQUF3QixJQUFJLE1BQU0sS0FBSyxJQUFJLEVBQUU7QUFDN0MsNEJBQTRCLE1BQU0sR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDNUQsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ2hELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixVQUFVLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVFLG9CQUFvQixPQUFPLFVBQVUsQ0FBQztBQUN0QyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hEO0FBQ0EsZ0JBQWdCLElBQUksY0FBYyxHQUFHLFNBQVMscUJBQXFCLEdBQUc7QUFDdEUsb0JBQW9CLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFF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RyxPQUFPLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3ZHLGdCQUFnQixJQUFJLGVBQWUsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDbnhFLGdCQUFnQixPQUFPLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztBQUMxRCxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2o0RSxnQkFBZ0IsT0FBTyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7QUFDdEQsZ0JBQWdCLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLENBQUMsQ0FBQztBQUNoekMsZ0JBQWdCLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0Qsb0JBQW9CLEtBQUssRUFBRSxJQUFJO0FBQy9CLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ2xELGdCQUFnQixPQUFPLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzNMLGdCQUFnQixJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGlCQUFpQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDbnVGLGdCQUFnQixPQUFPLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN4RCxnQkFBZ0IsSUFBSSxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUscUJBQXFCLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDdHVGLGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN6MUUsZ0JBQWdCLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1RCxnQkFBZ0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDanlELGdCQUFnQixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUQsZ0JBQWdCLElBQUksZUFBZSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUM3MUUsZ0JBQWdCLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFELGdCQUFnQixJQUFJLGlCQUFpQixHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbDlFLGdCQUFnQixPQUFPLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7QUFDOUQsZ0JBQWdCLElBQUksb0JBQW9CLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxdUQsZ0JBQWdCLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRTtBQUNBLGdCQUFnQixTQUFTLFdBQVcsQ0FBQyxZQUFZLEVBQUU7QUFDbkQsb0JBQW9CLFFBQVEsWUFB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LENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFB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LENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9D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LENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFD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R0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxTQUFT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TSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekQsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEQsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4RCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pFLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMseUJBQXlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6RCxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsMkJBQTJCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUQsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JELG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEQsb0JBQW9CLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzRCxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxN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O0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxvQkFBb0IsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsMkJBQTJCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlELG9CQUFvQixDQUFDLENBQUMsNEJBQTRCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNELG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEQsb0JBQW9CLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5RCxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsOEJBQThCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Qsb0JBQW9CLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6RCxvQkFBb0IsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMscUNBQXFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEUsb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsb0JBQW9CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckQsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5RCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDeEQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2xELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3pDLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEQsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsbUJBQW1CLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxRCxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JELG9CQUFvQixDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwRCxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3BELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNsRCxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ25ELG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzFDLG9CQUFvQixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNuRCxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzlDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9DLG9CQUFvQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNoRCxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFH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TSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzdDLG9CQUFvQixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3hDLG9CQUFvQixDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDbEQsb0JBQW9CLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEQsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxvQkFB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QUFNLENBQUM7QUFDL0Msb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNyQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN0QyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxvQkFBb0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMxQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM1QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUM3QyxvQkFBb0IsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RELG9CQUFvQixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMs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QW9CLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDMUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDckMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDN0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDOUMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDekMsb0JBQW9CLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDNUMsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENB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LENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3JDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQ3RDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsTUFB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b0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDOUIsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDcEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMsb0JBQW9CLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEMs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QUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQixvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNqQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsaUNBQWlDLEdBQUcsaUNBQWlDLENBQUM7QUFDOUY7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBQzlFO0FBQ0EsZ0JBQWdCLElBQUkscUJBQXFCLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7QUFDckcsZ0JBQWdCLElBQUksb0JBQW9CLEdBQUcscUJBQXFCLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDOUUsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDdEMsb0JBQW9CLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FB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QXFCLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDL0Usb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMs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QUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQ2pELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDBCQUEwQixDQUFDO0FBQzdELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsMEJBQTBCLENBQUM7QUFDN0Qsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRywwQkFBMEIsQ0FBQztBQUM3RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLDRDQUE0QyxDQUFDO0FBQy9FLG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsc0NBQXNDLENBQUM7QUFDekUsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDM0Msb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFjLENBQUM7QUFDakQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLG9CQUFvQixDQUFDO0FBQ3ZELG9CQUFvQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsb0JBQW9CLENBQUM7QUFDdkQsb0JBQW9CLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztBQUN2RCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUMzQyxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUNqRCxvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLGNB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QUFRLENBQUM7QUFDakQsNENBQTRDLEtBQUssRUFBRTtBQUNuRCxnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELGFBQWEsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BGLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0RBQWdELENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRixnREFBZ0QsTUFBTTtBQUN0RDtBQUNBLDRDQUE0QyxLQUFLLEVBQUU7QUFDbkQsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdEQUFnRCxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLGdEQUFnRCxFQUFFLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN2RSxnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnREFBZ0QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRixnREFBZ0QsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzVELGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0EsNENBQTRDLEtBQUssRUFBRTtBQUNuRCxnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0RBQWdELENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyRixnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnREFBZ0QsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0EsNENBQTRDLEtBQUssRUFBRTtBQUNuRCxnREFBZ0QsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUMxRCxvREFBb0QsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMzRCxnREFBZ0QsRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkUsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZFLGdEQUFnRCxFQUFFLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSxnREFBZ0QsRUFBRSxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDeEUsZ0RBQWdELENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFD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QUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVILHdC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RUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RFLHdDQUF3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVFLHdDQUF3QyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsRSx3Q0FBd0MsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNoRSxnQ0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNoRSxnQ0FBZ0MsSUFBSSxRQUFRLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakUsZ0NBQWdDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RHLGdDQUFnQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQUN0RyxnQ0FBZ0MsUUFBUSxDQUFD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Q0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Msb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQztBQUN0QyxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELG9DQUFvQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLENBQUM7QUFDdEMsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDO0FBQ3RDLG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Msb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxNQUFNO0FBQzFDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNsRCw0QkFBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeFosNEJBQTRCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ2xELDRCQUE0QixNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Wiw0QkFBNEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDbEQsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFaLDRCQUE0QixFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNuRCw0QkFBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FB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LENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLENBQUM7QUFDdEMsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDL0Msb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDakQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQztBQUN0QyxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3JELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDO0FBQ3RDLG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDckQsb0NBQW9DLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDbkQsb0NBQW9DLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQy9DLG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9DQUFvQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuRCxvQ0FBb0MsTUFBTTtBQUMxQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDOUMsZ0NBQWdDLElBQUksRUFBRSxPQUFPO0FBQzdDLGdDQUFnQyxNQUFNLEVBQUUsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQzFELGdDQUFnQyxNQUFNLEVBQUUsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDO0FBQzFELDZCQUE2QixDQUFDLENBQUM7QUFDL0IseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFDaEQsd0JBQXdCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELDRCQUE0QixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsNEJBQTRCLElBQUksR0FBRyxJQUFJO0FBQ3ZDLDRCQUE0QixJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3hDO0FBQ0Esd0JBQXdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzlFLDRCQUE0QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCxnQ0FBZ0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsNEJBQTRCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkQsNEJBQTRCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkQsNEJBQTRCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkQsNEJBQTRCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQzVDLHdCQUF3QixJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztBQUN6Qyx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNqRCx3QkFBd0IsSUFBSSxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRTtBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVFLDRCQUE0QixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0MsNEJBQTRCLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RCw0QkFBNEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztBQUNuRCx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNqRCx3QkFBd0IsSUFBSSxZQUFZLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RTtBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVFLDRCQUE0QixJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUMsNEJBQTRCLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRCw0QkFBNEIsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JELDRCQUE0QixZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO0FBQ25ELHdCQUF3QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ25EO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RFLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ25ELGdDQUFnQyxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU07QUFDbEQsZ0NBQWdDLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQ25EO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBRTtBQUNqRix3QkFBd0IsSUFBSSxDQUFDLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUNoRSw0QkFBNEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUMsQ0FBQztBQUNyRix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDN0Msd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNuRSx3QkFBd0IsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7QUFDOUMsd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxRCx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUQsd0JBQXdCLEVBQUUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzdGLHdCQUF3QixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNyQyx3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDL0csd0JBQXdCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekQsd0JBQXdCLElBQUksRUFBRSxHQUFHLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFGLHdCQUF3QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN6Qyx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekMsd0JBQXdCLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQzFDLHdCQUF3QixJQUFJLGFBQWEsR0FBRztBQUM1Qyw0QkFBNEIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztBQUM1RSw0QkFBNEIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQztBQUMxRSw0QkFBNEIsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDO0FBQ2hFLDRCQUE0QixNQUFNLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDM0QsNEJBQTRCLE9BQU8sRUFBRSxFQUFFO0FBQ3ZDLDRCQUE0QixVQUFVLEVBQUUsRUFBRTtBQUMxQyw0QkFBNEIsUUFBUSxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVE7QUFDMUQseUJBQXlCLENBQUM7QUFDMUIsd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ2pGLHdCQUF3QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDOUM7QUFDQSx3QkFBd0IsUUFBUSxJQUFJLENBQUMsV0FBVztBQUNoRCw0QkFBNEIsS0FBSyxXQUFXLENBQUMsY0FBYztBQUMzRCxnQ0FBZ0Msa0JBQWtCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2pFLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0EsNEJBQTRCLEtBQUssV0FBVyxDQUFDLGlCQUFpQjtBQUM5RCxnQ0FBZ0MsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwRjtBQUNBLGdDQUFnQyxJQUFJLGNBQWMsR0FBRyxDQUFDLEVBQUU7QUFDeEQsb0NBQW9DLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDMUYsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLGtCQUFrQixDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDakYsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxXQUFXLENBQUMsZ0JBQWdCO0FBQzdELGdDQUFnQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsZ0NBQWdDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDakQsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxXQUFXLENBQUMsaUJBQWlCO0FBQzlELGdDQUFnQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsZ0NBQWdDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDakQsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEI7QUFDNUIsZ0NBQWdDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO0FBQ2pGLGdDQUFnQyxNQUFNO0FBQ3RDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFNBQVMsRUFBRTtBQUN2Qyw0QkFBNEIsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25GLGdDQUFnQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0Msd0JBQXdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsR0FBRztBQUNyQyx3QkFBd0IsS0FBSyxFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQ3JELDRCQUE0QixPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzVKLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxJQUFJLENBQUM7QUFDaEMsaUJBQWlCLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGdCQUFnQixRQUFRLENBQUMsS0FBSyxHQUFHLFNBQVMsWUFBWSxHQUFHO0FBQ3pELG9CQUFvQixTQUFTLEtBQUssR0FBRztBQUNyQyx3QkFBd0IsSUFBSSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUM7QUFDOUMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLEtBQUssQ0FBQyxTQUFTLEdBQUc7QUFDdEMsd0JBQXdCLEtBQUssRUFBRSxTQUFTLFdBQVcsR0FBRztBQUN0RCw0QkFBNEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsT0FBTyxLQUFLLENBQUM7QUFDakMsaUJBQWlCLEVBQUUsQ0FBQztBQUNwQjtBQUNBLGdCQUFnQixTQUFTLGtCQUFrQixDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQ3RFLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pEO0FBQ0Esb0JBQW9CLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMvRTtBQUNBLG9CQUFvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELG9CQUFvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xELG9CQUFvQixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFELG9CQUFvQixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzVEO0FBQ0Esb0JBQW9CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDNUUsd0JBQXdCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDJDQUEyQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNwSCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsT0FBTyxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDcEgsaUJBQWlCO0FBQ2pCO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsbUJBQW1CLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRTtBQUc5RTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3RCxvQkFBb0IsS0FBSyxFQUFFLElBQUk7QUFDL0IsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEM7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNuNkMsZ0JBQWdCLElBQUksV0FBVyxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcmxEO0FBQ0EsZ0JBQWdCLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNsQyxvQkFBb0IsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pDLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixTQUFTLE1BQU0sQ0FBQyxDQUFDLEVBQUU7QUFDbkMsb0JBQW9CLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6QyxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDeEQsb0JBQW9CLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEUsd0JBQXdCLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUM5Qyw0QkFBNEIsT0FBTyxDQUFDLENBQUM7QUFDckMseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixPQUFPLENBQUMsQ0FBQztBQUM3QixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsU0FBUyxTQUFTLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO0FBQzNELG9CQUFvQixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RELHdCQUF3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsU0FBUyxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7QUFDeEQsb0JBQW9CLEtBQUssSUFBSSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDdEUsd0JBQXdCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QyxxQkFBcUI7QUFDckIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLFNBQVMsY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO0FBQzlELG9CQUFvQixPQUFPO0FBQzNCLHdCQUF3QixHQUFHLEVBQUUsR0FBRztBQUNoQyx3QkFBd0IsR0FBRyxFQUFFLFFBQVEsR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLO0FBQ3JFLHFCQUFxQixDQUFDO0FBQ3RCLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDL0IsZ0JBQWdCLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMvQjtBQUNBLGdCQUFnQixTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRTtBQUN6RCxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLG9CQUFvQixJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQy9DO0FBQ0Esb0JBQW9CLElBQUksU0FBUyxLQUFLLENBQUMsSUFBSSxRQUFRLEVBQUU7QUFDckQsd0JBQXdCLE9BQU8sY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDcEUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO0FBQzdDLG9CQUFvQixLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztBQUM3QyxvQkFBb0IsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLG9CQUFvQixJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7QUFDOUI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQsd0JBQXdCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELHdCQUF3QixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELHdCQUF3QixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDM0M7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO0FBQ2hELDRCQUE0QixRQUFRLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNELHlCQUF5QixNQUFNLElBQUksTUFBTSxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO0FBQzdFLDRCQUE0QixRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHlCQUF5QixNQUFNLElBQUksTUFBTSxJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFO0FBQzdFLDRCQUE0QixRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNwRTtBQUNBLDRCQUE0QixJQUFJLENBQUMsUUFBUSxFQUFFO0FBQzNDLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVHLDZCQUE2QjtBQUM3Qix5QkFBeUIsTUFBTSxJQUFJLE1BQU0sSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sRUFBRTtBQUM3RSw0QkFBNEIsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM1Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLEtBQUssR0FBRyxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksUUFBUSxLQUFLLElBQUksRUFBRTtBQUN4Riw0QkFBNEIsT0FBTyxFQUFFLENBQUM7QUFDdEMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7QUFDNUMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksT0FBTyxLQUFLLENBQUMsRUFBRTtBQUN2Qyx3QkFBd0IsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNyQyx3QkFBd0IsT0FBTyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLFVBQVUsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUMzQyx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsU0FBUyxHQUFHLEdBQUcsRUFBRTtBQUN2RCw0QkFBNEIsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN6Qyw0QkFBNEIsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMzQyx5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMxQyw0QkFBNEIsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwQztBQUNBLG9CQUFvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCx3QkFBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUMvQyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDMUQsb0JBQW9CLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNoQyxvQkFBb0IsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2xDLG9CQUFvQixJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDdkM7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQsd0JBQXdCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRTtBQUNoRCw0QkFBNEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztBQUNoRCx5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDbkMsb0JBQW9CLElBQUksQ0FBQyxDQUFDO0FBQzFCO0FBQ0Esb0JBQW9CLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3BELHdCQUF3QixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0Esd0JBQXdCLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN4Qyw0QkFBNEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsS0FBSyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUN2RSx5QkFBeUIsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3pFLDRCQUE0QixRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQsd0JBQXdCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3hDLDRCQUE0QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3hELHdCQUF3QixJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDakcsNEJBQTRCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDNUMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUNwSSw0QkFBNEIsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEQseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCx3QkFBd0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQy9DLDRCQUE0QixJQUFJLENBQUMsQ0FBQztBQUNsQztBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDekQsZ0NBQWdDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN2RCxvQ0FBb0MsTUFBTTtBQUMxQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ2hFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDdkQsb0NBQW9DLE1BQU07QUFDMUMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQsd0JBQXdCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ2xGLDRCQUE0QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzVDLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUNuQztBQUNBLG9CQUFvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCx3QkFBd0IsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUNBLHdCQUF3QixJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDeEMsNEJBQTRCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEtBQUssR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDckUseUJBQXlCLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDM0QsNEJBQTRCLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFDekMseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCx3QkFBd0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQy9DLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEUsNEJBQTRCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUM3QztBQUNBLDRCQUE0QixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDdkMsZ0NBQWdDLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3RELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDNUM7QUFDQSw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFNBQVMsRUFBRTtBQUNyRCxnQ0FBZ0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtBQUNoRCxnQ0FBZ0MsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUM3Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLEtBQUssR0FBRyxFQUFFO0FBQy9DLGdDQUFnQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQzVDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7QUFDbEQsZ0NBQWdDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqRSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDeEMseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNwRCx3QkFBd0IsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQy9DLDRCQUE0QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pDLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDcEQsd0JBQXdCLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckM7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDL0MsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUMzQyxnQ0FBZ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyw2QkFBNkIsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNqRSxnQ0FBZ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyw2QkFBNkI7QUFDN0IseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDdkUsZ0NBQWdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0MsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUMsb0JBQW9CLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUM1QyxvQkFBb0IsSUFBSSxLQUFLLENBQUM7QUFDOUI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDakUsd0JBQXdCLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUM7QUFDQSx3QkFBd0IsSUFBSSxZQUFZLEdBQUcsS0FBSyxFQUFFO0FBQ2xELDRCQUE0QixZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ2pELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLGNBQWMsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3BFLDRCQUE0QixjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQ25ELHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsS0FBSyxLQUFLLEdBQUcsWUFBWSxFQUFFLEtBQUssSUFBSSxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUU7QUFDakYsd0JBQXdCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZDO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3JFLDRCQUE0QixJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUU7QUFDbkQsZ0NBQWdDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtBQUNoRCxvQ0FBb0MsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkUsb0NBQW9DLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvQyxpQ0FBaUM7QUFDakMsNkJBQTZCLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ2xELGdDQUFnQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO0FBQ3hDLDRCQUE0QixhQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdkUseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoRSx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFDO0FBQ0Esd0JBQXdCLElBQUksRUFBRSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFO0FBQ3RELDRCQUE0QixLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFDLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsT0FBTyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNqRSxpQkFBaUI7QUFDakI7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBRzlFO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdELG9CQUFvQixLQUFLLEVBQUUsSUFBSTtBQUMvQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsZ0JBQWdCLElBQUksS0FBSyxHQUFHLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsZ0JBQWdCLElBQUksVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQy9FLG9CQUFvQixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLG9CQUFvQixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLG9CQUFvQixDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbkQsb0JBQW9CLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyxvQkFBb0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ25GLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMscUJBQXFCLENBQUMsQ0FBQztBQUN2QixvQkFBb0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMscUJBQXFCLEVBQUUsVUFBVSxDQUFDLEVBQUU7QUFDeEYsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDckMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4QyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ3ZCLG9CQUFvQixDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUMvRix3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsb0JBQW9CLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzNGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMscUJBQXFCLENBQUMsQ0FBQztBQUN2QixvQkFBb0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ2hGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3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WUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3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LE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsb0JBQW9CLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRTtBQUNwRix3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6Qyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNyQyx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM5Qyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN2Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMzQyx3QkFBd0IsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM1Qyx3QkFBd0IsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMvQyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsb0JBQW9CLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQzFGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNsRCx3QkFBd0IsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUM3Qyx3QkFBd0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxQyx3QkFBd0IsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2xELHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pELHdCQUF3QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDbEQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMscUJBQXFCLENBQUMsQ0FBQztBQUN2QixvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzNDLHdCQUF3QixDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hELHdCQUF3QixDQUFDLENBQUMsYUFBYSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQy9DLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzdDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixDQUFDLENBQUMsWUFBWSxDQUFDLEdB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M0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdEMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDekMsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDN0Msd0JBQXdCLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDNUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDdkMsd0JBQXdCLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDMUMsd0JBQXdCLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEQsd0JBQXdCLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDL0Msd0JBQXdCLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDeEMscUJBQXFCLENBQUMsQ0FBQztBQUN2QixvQkFBb0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxFQUFFO0FBQ3RGLHdCQUF3QixDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3RDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLHdCQUF3QixDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxD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SUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9HO0FBQ0EsZ0JBQWdCLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQy9XO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMs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QUcsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0MscUJBQXFCLENBQUM7QUFDdEI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQ3JFLHdCQUF3QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFH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Q0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hMLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLHFCQUFxQixDQUFDLENBQUMsRUFBRTtBQUM5RSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELHdCQUF3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVJLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxTQUFTLHFCQUFxQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakYsd0JBQXdCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNKLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyw2QkFBNkIsR0FBRyxTQUFTLGtDQUFrQyxDQUFDLENBQUMsRUFBRTtBQUN4Ryx3QkFBd0IsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hELHdCQUF3QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVGLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNyRCx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDckQsd0JBQXdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsa0JBQWtCLENBQUMsSUFBSSxFQUFFO0FBQzNFLHdCQUF3QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMvQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQy9DLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsQ0FBQztBQUNqQyxxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDM0Usd0JBQXdCLFNBQVMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDL0MsNEJBQTRCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdGLDRCQUE0QixRQUFRLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQzdGLDRCQUE0QixNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLHdCQUF3QixLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMxRCx3QkFBd0IsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUQ7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFJLDRCQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELDRCQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0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SSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNyRCxvQkFBb0IsT0FBTyxTQUFTLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLFFBQVEsQ0FBQztBQUN6RSxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsSUFBSSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2c0I7QUFDQSxnQkFBZ0IsU0FB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QzdEO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQztBQUM5Qiw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdFO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQztBQUM5Qiw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Y7QUFDQSx3QkFBd0IsS0FBSyxDQUFDO0FBQzlCLDRCQUE0QixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pIO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQztBQUM5Qiw0QkFBNEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FB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UyxDQUFDO0FBQ3hFLHdDQUF3QyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ3hELHFDQUFxQyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUMxRCx3Q0FBd0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2hFLHdDQUF3QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDaEUsd0NBQXdDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RSx3Q0FBd0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQ2xFLHdDQUF3QyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUM3RCx3Q0FBd0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3hFLHdDQUF3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7QUFDeEUsd0NBQXdDLEtBQUssR0FBRyxVQUFVLENBQUM7QUFDM0QscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEUsd0NBQXdDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDMUU7QUFDQSx3Q0FBd0MsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssSUFBSSxJQUFJLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLEdBQUcsRUFBRTtBQUNuTyw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BFLDRDQUE0QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEUsNENBQTRDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUM1RSw0Q0FBNEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzVFLDRDQUE0QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDNUU7QUFDQSw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3RCx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsS0FBSyxHQUFHLGVBQWUsQ0FBQztBQUNoRSx3Q0FBd0MsU0FBUztBQUNqRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLGdCQUFnQjtBQUNyRCxvQ0FBb0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFJakU7QUFDQSx3Q0FBd0MsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNyRSw0Q0FBNEMsS0FBSyxHQUFHLFdBQVcsQ0FBQztBQUNoRSx5Q0FBeUMsTUFBTTtBQUMvQyw0Q0FBNEMsS0FBSyxHQUFHLDBCQUEwQixDQUFDO0FBQy9FLHlDQUF5QztBQUN6QyxxQ0FBcUMsTUFBTTtBQUMzQyx3Q0FBd0MsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtBQUNyRSw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3BFLDRDQUE0QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDcEUsNENBQTRDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUM1RSw0Q0FBNEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzVFLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxLQUFLLEdBQUcsZUFBZSxDQUFDO0FBQ2hFLHdDQUF3QyxTQUFTO0FBQ2pELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssdUJBQXVCO0FBQzVELG9DQUFvQyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDbkQsd0NBQXdDLEtBQUssR0FBRyx3QkFBd0IsQ0FBQztBQUN6RSxxQ0FBcUMsTUFBTTtBQUUzQyx3Q0FBd0MsS0FBSyxHQUFHLDBCQUEwQixDQUFDO0FBQzNFLHdDQUF3QyxTQUFTO0FBQ2pELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssd0JBQXdCO0FBQzdELG9DQUFvQyxLQUFLLEdBQUcsMEJBQTBCLENBQUM7QUFDdkU7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBRW5ELHdDQUF3QyxTQUFTO0FBQ2pELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssMEJBQTBCO0FBQy9ELG9DQUFvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNqRSx3Q0FBd0MsS0FBSyxHQUFHLFdBQVcsQ0FBQztBQUM1RCx3Q0FBd0MsU0FBUztBQUNqRCxxQ0FFcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLFdBQVc7QUFDaEQsb0NBQW9DLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNuRCx3Q0FBd0MsSUFBSSxNQUFNLEVBQUU7QUFFcEQsNENBQTRDLE1BQU0sSUFBSSxLQUFLLENBQUM7QUFDNUQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEQ7QUFDQSx3Q0FBd0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEYsNENBQTRDLElBQUksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRDtBQUNBLDRDQUE0QyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFO0FBRTNGLGdEQUFnRCxTQUFTO0FBQ3pELDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxJQUFJLEVBQUUsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7QUFDdkYsZ0RBQWdELElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3BFLGdEQUFnRCxTQUFTO0FBQ3pELDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxJQUFJLEtBQUssR0FBRyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUU7QUFDQSw0Q0FBNEMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtBQUN6RSxnREFBZ0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7QUFDeEUsNkNBQTZDLE1BQU07QUFDbkQsZ0RBQWdELElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDO0FBQ3hFLDZDQUE2QztBQUM3Qyx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNwRCxxQ0FBcUMsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUMvRyx3Q0FBd0MsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDaEUsd0NBQXdDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEQsd0NBQXdDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDdkQsd0NBQXdDLFNBQVM7QUFDakQscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDcEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxXQUFXO0FBQ2hELG9DQUFvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUN4Ryx3Q0FBd0MsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO0FBQ3RJLDRDQUE0QyxLQUFLLEdBQUcsZUFBZSxDQUFDO0FBQ3BFLHlDQUF5QyxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7QUFDeEUsNENBQTRDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztBQUMxRSx5Q0FBeUMsTUFBTTtBQUMvQyw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4Riw0Q0FBNEMsTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUN4RCw0Q0FBNEMsS0FBSyxHQUFHLHFCQUFxQixDQUFDO0FBQzFFLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxTQUFTO0FBQ2pELHFDQUFxQyxNQUFNLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FFbEQsTUFBTTtBQUMzQyx3Q0FBd0MsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNwRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLE1BQU0sQ0FBQztBQUM1QyxnQ0FBZ0MsS0FBSyxVQUFVO0FBQy9DLG9DQUFvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDbkUsd0NBQXdDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEYsd0NBQXdDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEQsd0NBQXdDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDdkQ7QUFDQSx3Q0FBd0MsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFO0FBQzFFLDRDQUE0QyxNQUFNLElBQUksQ0FBQztBQUN2RCx5Q0FBeUM7QUFDekMscUNBQXFDLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDL0csd0NBQXdDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDcEYsd0NBQXdDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEQsd0NBQXdDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztBQUN0RTtBQUNBLHdDQUF3QyxJQUFJLGFBQWEsRUFBRTtBQUMzRCw0Q0FBNEMsTUFBTSxJQUFJLENBQUM7QUFDdkQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLFNBQVM7QUFDakQscUNBQXFDLE1BQU0sSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN2Rix3Q0FBd0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3ZELDRDQUE0QyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQy9ELHlDQUF5QyxNQUFNLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUM5RCw0Q0FBNEMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNoRSx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNwRCxxQ0FBcUMsTUFBTSxDQUVOO0FBQ3JDO0FBQ0Esb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxNQUFNO0FBQzNDLG9DQUFvQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekQsd0NBQXdDLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDcEQscUNBQXFDLE1BQU0sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksYUFBYSxFQUFFO0FBQ2hJLHdDQUF3QyxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7QUFDM0QsNENBQTRDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDNUU7QUFDQSw0Q0FBNEMsSUFBSSxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNqRixnREFBZ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZFLDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ3hELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLGFBQWEsRUFBRTtBQUMzRCw0Q0FBNEMsTUFBTSxJQUFJLENBQUM7QUFDdkQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztBQUN0RSx3Q0FBd0MsU0FBUztBQUNqRCxxQ0FBcUMsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBRWxELE1BQU07QUFDM0Msd0NBQXdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0QscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxxQkFBcUI7QUFJMUQ7QUFDQSxvQ0FBb0MsS0FBSyxHQUFHLGVBQWUsQ0FBQztBQUM1RDtBQUNBLG9DQUFvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUNqRSx3Q0FBd0MsU0FBUztBQUNqRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTTtBQUMxQztBQUNBLGdDQUFnQyxLQUFLLGVBQWU7QUFDcEQsb0NBQW9DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFJNUg7QUFDQSx3Q0FBd0MsSUFBSSxHQUFHLENBQUM7QUFDaEQ7QUFDQSx3Q0FBd0MsSUFBSSxHQUFHLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7QUFDaEcsNENBQTRDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDekQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtBQUM3RCw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3RDtBQUNBLDRDQUE0QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN6RSxnREFBZ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDcEUsNkNBQTZDO0FBQzdDLHlDQUF5QyxNQUFNLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDOUYsNENBQTRDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLHlDQUF5QyxNQUFNLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtBQUNuRSw0Q0FBNEMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3pLLGdEQUFnRCxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6RSw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEUseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDcEQ7QUFDQSx3Q0FBd0MsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3ZELDRDQUE0QyxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztBQUM5RCw0Q0FBNEMsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUM1RCx5Q0FBeUMsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDOUQsNENBQTRDLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ2pFLDRDQUE0QyxLQUFLLEdBQUcsVUFBVSxDQUFDO0FBQy9ELHlDQUF5QztBQUN6QyxxQ0FBcUMsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQ3ZGLHdDQUF3QyxNQUFNLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssT0FBTztBQUM1QyxvQ0FBb0MsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3JFLHdDQUF3QyxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUM3RCx3Q0FBd0MsS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUMzRCxxQ0FBcUMsTUFBTSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDcEcsd0NBQXdDLElBQUksQ0FBQyxNQUFNLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxVQUFVO0FBQy9DLG9DQUFvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDN0Ysd0NBQXdDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0FBQzVELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxNQUFNO0FBQzFDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixNQUFNLEVBQUUsQ0FBQztBQUNyQyx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsS0FBSyxHQUFHO0FBQ3JDLHdCQUF3QixJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDOUMsd0JBQXdCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUM5Qyx3QkFBd0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDeEMsd0JBQXdCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQ3hDLHdCQUF3QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUN4Qyx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDekMsd0JBQXdCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUNoRCx3QkFBd0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDakQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFDN0Msd0JBQXdCLElBQUksSUFBSSxLQUFLLFNBQVMsSUFBSSxFQUFFLElBQUksWUFBWSxJQUFJLENBQUMsRUFBRTtBQUMzRSw0QkFBNEIsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzFELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN4Qyx3QkFBd0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6Qyx3QkFBd0IsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyw4QkFBOEIsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwRix3QkFBd0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLFNBQVMsR0FBRztBQUNyQyx3QkFBd0IsUUFBUSxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQ3RELDRCQUE0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDN0MseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxHQUFHO0FBQ25DLDRCQUE0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDakQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztBQUNqRCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQy9DO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLEVBQUU7QUFDbEYsZ0NBQWdDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUN6SCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQ3pKLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDeEMsNEJBQTRCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0MsNEJBQTRCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ3BELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFFBQVEsR0FBRztBQUN2Qyw0QkFBNEIsT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUN0RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzVDLDRCQUE0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDakQsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDMUUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxHQUFHO0FBQ25DLDRCQUE0QixPQUFPLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ2xILHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7QUFDeEMsNEJBQTRCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDdEUsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM1RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLEdBQUc7QUFDdkMsNEJBQTRCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztBQUM5Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQzVDLDRCQUE0QixJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3RFLGdDQUFnQyxPQUFPO0FBQ3ZDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDaEUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxHQUFHO0FBQ25DLDRCQUE0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDOUMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN4Qyw0QkFBNEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN0RSxnQ0FBZ0MsT0FBTztBQUN2Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFFBQVEsR0FBRztBQUN2Qyw0QkFBNEIsT0FBTyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQzNILHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUU7QUFDNUMsNEJBQTRCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDdEUsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzVDLDRCQUE0QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQztBQUMzRSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLEdBQUc7QUFDckMsNEJBQTRCLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0cseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtBQUMxQyw0QkFBNEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN0RSxnQ0FBZ0MsT0FBTztBQUN2Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7QUFDOUM7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ2xELGdDQUFnQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzdELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLElBQUksR0FBRztBQUNuQyw0QkFBNEIsT0FBTyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN0SCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3hDLDRCQUE0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDakQsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBQ2pEO0FBQ0EsNEJBQTRCLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUNsRCxnQ0FBZ0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNoRSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLEdBQUc7QUFDckMsNEJBQTRCLElBQUksSUFBSSxDQUFDO0FBQ3JDO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbEUsZ0NBQWdDLE9BQU8sRUFBRSxDQUFDO0FBQzFDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixRQUFRLElBQUksQ0FBQyxPQUFPO0FBQ2hELGdDQUFnQyxLQUFLLE1BQU0sQ0FBQztBQUM1QyxnQ0FBZ0MsS0FBSyxNQUFNLENBQUM7QUFDNUMsZ0NBQWdDLEtBQUssWUFBWSxDQUFDO0FBQ2xELGdDQUFnQyxLQUFLLFFBQVE7QUFDN0Msb0NBQW9DLE9BQU8sTUFBTSxDQUFDO0FBQ2xEO0FBQ0EsZ0NBQWdDLEtBQUssTUFBTTtBQUMzQyxvQ0FBb0MsSUFBSTtBQUN4Qyx3Q0FBd0MsT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQztBQUMzRixxQ0FBcUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFO0FBQ2xEO0FBQ0Esb0NBQW9DLE9BQU8sTUFBTSxDQUFDO0FBQ2xELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUM3QztBQUNBLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLGdDQUFnQyxPQUFPLEVBQUUsQ0FBQztBQUMxQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsT0FBTyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDL0QseUJBQXlCO0FBQ3pCO0FBQ0EscUJBQXFCLENBQUM7QUFDdEIsb0JBQW9CLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3ZDLGlCQUFpQixHQUFHLENBQUM7QUFDckI7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBRzlFO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdELG9CQUFvQixLQUFLLEVBQUUsSUFBSTtBQUMvQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNsRCxnQkFBZ0IsT0FBTyxDQUFDLDBCQUEwQixHQUFHLDBCQUEwQixDQUFDO0FBQ2hGLGdCQUFnQixPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN0TDtBQUNBLGdCQUFnQixJQUFJLFlBQVksR0FBRyxzQkFBc0IsQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hHO0FBQ0EsZ0JBQWdCLElBQUksS0FBSyxHQUFHLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsZ0JBQWdCLElBQUksVUFBVSxHQUFHLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RFO0FBQ0EsZ0JBQWdCLElBQUksWUFBWSxHQUFHLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFO0FBQ0EsZ0JBQWdCLElBQUksa0JBQWtCLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUU7QUFDQSxnQkFBZ0IsSUFBSSxPQUFPLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkU7QUFDQSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsc0JBQXNCLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRjtBQUNBLGdCQUFnQixJQUFJLGVBQWUsR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRTtBQUNBLGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsZ0JBQWdCLElBQUksU0FBUyxHQUFHLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsZ0JBQWdCLElBQUksaUJBQWlCLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0U7QUFDQSxnQkFBZ0IsSUFBSSxNQUFNLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEU7QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9HO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDelI7QUFDQSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyWjtBQUNBLGdCQUFnQixTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUkscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUMsRUFBRTtBQUN2STtBQUNBLGdCQUFnQixTQUFTLGdCQUFnQixHQUFHLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDLEVBQUU7QUFDNUg7QUFDQSxnQkFBZ0IsU0FBUyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRTtBQUN6YTtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRTtBQUNyRjtBQUNBLGdCQUFnQixTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxFQUFFO0FBQ3JJO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLEdBQUcsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLGlEQUFpRCxDQUFDLENBQUMsRUFBRTtBQUN6SDtBQUNBLGdCQUFnQixTQUFTLGdCQUFnQixDQUFDLElBQUksRUFBRSxFQUFFLElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLG9CQUFvQixFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ2xMO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRTtBQUN0TDtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsWUFBWSxXQUFXLENBQUMsRUFBRSxFQUFFLE1BQU0sSUFBSSxTQUFTLENBQUMsbUNBQW1DLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDeks7QUFDQSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsVUFBVSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUM3VTtBQUNBLGdCQUFnQixTQUFTLFlBQVksQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksVUFBVSxFQUFFLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxPQUFPLFdBQVcsQ0FBQyxFQUFFO0FBQ3ZPO0FBQ0EsZ0JBQWdCLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQy9XO0FBQ0EsZ0JBQWdCLElBQUksd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBQ3JELGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUM3QyxnQkFBZ0IsSUFBSSxpQkFBaUIsQ0FBQztBQUN0QyxnQkFBZ0IsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUM7QUFDakQsZ0JBQWdCO0FBQ2hCLG9CQUFvQixJQUFJLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUNqRDtBQUNBLG9CQUFvQixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsRUFBRTtBQUN2RCx3QkFBd0IsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQ2hEO0FBQ0Esd0JBQXdCLElBQUksT0FBT0MsZUFBTyxDQUFDLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDbkUsNEJBQTRCQSxlQUFPLENBQUMsTUFBTSxHQUFHQyxVQUFzQixDQUFDO0FBQ3BFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDaEQscUJBQXFCLE1BQU0sSUFBSSxPQUFPRCxlQUFPLEtBQUssV0FBVyxJQUFJLE9BQU9BLGVBQU8sQ0FBQyxNQUFNLEtBQUssVUFBVSxFQUFFO0FBQ3ZHLHdCQUF3QixnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDaEQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7QUFDN0Usd0JBQXdCLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsMERBQTBELENBQUMsQ0FBQztBQUN4SCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxzQkFBc0IsR0FBRyxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztBQUNwRyxvQkFBb0IscUJBQXFCLEdBQUcsZ0JBQWdCLEdBQUcsWUFBWTtBQUMzRSx3QkFBd0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDdEUsNEJBQTRCQSxlQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxZQUFZO0FBQzNELGdDQUFnQyxJQUFJO0FBQ3BDLG9DQUFvQyxJQUFJLE1BQU0sQ0FBQztBQUMvQyxvQ0FBb0MsTUFBTSxHQUFHRSx3QkFBd0MsQ0FBQztBQUN0RixvQ0FBb0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBQ3pFLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzdDLG9DQUFvQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0MsaUNBQWlDO0FBQ2pDLDZCQUE2QixFQUFFLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO0FBQ2xFLHlCQUF5QixDQUFDLENBQUM7QUFDM0IscUJBQXFCLEdBQUcsc0JBQXNCLEdBQUcsWUFBWTtBQUM3RCx3QkFBd0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDdEUsNEJBQTRCLFNBQVMsQ0FBQyxDQUFDLHVEQUF1RCxDQUFDLEVBQUUsVUFBVSxNQUFNLEVBQUU7QUFDbkgsZ0NBQWdDLElBQUk7QUFDcEMsb0NBQW9DLE9BQU8sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUN6RSxpQ0FBaUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUM3QyxvQ0FBb0MsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN2Qyx5QkFBeUIsQ0FBQyxDQUFDO0FBQzNCLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUM3QjtBQUNBLG9CQUFvQixJQUFJLENBQUMsaUJBQWlCLElBQUksQ0FBQyxPQUFPLFFBQVEsS0FBSyxXQUFXLEdBQUcsV0FBVyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxRQUFRLElBQUksZUFBZSxJQUFJLFFBQVEsRUFBRTtBQUMvSix3QkFBd0IsSUFBSSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsYUFBYSxJQUFJLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO0FBQzdHO0FBQ0Esd0JBQXdCLElBQUkseUJBQXlCLEVBQUU7QUFDdkQsNEJBQTRCLGlCQUFpQixHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM5SCx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQixnQkFBZ0IsSUFBSSxzQkFBc0IsQ0FBQztBQUMzQztBQUNBLGdCQUFnQixTQUFTLDBCQUEwQixDQUFDLHVCQUF1QixFQUFFO0FBQzdFLG9CQUFvQixzQkFBc0IsR0FBRyx1QkFBdUIsQ0FBQztBQUNyRSxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsU0FBUyxXQUFXLENBQUMsR0FBRyxFQUFFO0FBQzFDLG9CQUFvQixJQUFJLElBQUksR0FBRyxJQUFJLHNCQUFzQixFQUFFLENBQUM7QUFDNUQsb0JBQW9CLElBQUksTUFBTSxDQUFDO0FBQy9CO0FBQ0Esb0JBQW9CLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO0FBQ2pELHdCQUF3QixNQUFNLEdBQUc7QUFDakMsNEJBQTRCLEdBQUcsRUFBRSxHQUFHO0FBQ3BDLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQixNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxFQUFFO0FBQzlELHdCQUF3QixNQUFNLEdBQUc7QUFDakMsNEJBQTRCLElBQUksRUFBRSxHQUFHO0FBQ3JDLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQixNQUFNLElBQUksR0FBRyxZQUFZLHFCQUFxQixFQUFFO0FBQ3JFLHdCQUF3QixNQUFNLEdBQUc7QUFDakMsNEJBQTRCLEtBQUssRUFBRSxHQUFHO0FBQ3RDLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQixNQUFNO0FBQzNCLHdCQUF3QixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDdkQsNEJBQTRCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLEdBQUcsc0RBQXNELENBQUMsQ0FBQztBQUMzSSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRTtBQUNqRSw0QkFBNEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO0FBQzNHLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixNQUFNLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JELG9CQUFvQixJQUFJLGNBQWMsR0FBRyxJQUFJO0FBQzdDLHdCQUF3QixNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3RDO0FBQ0Esb0JBQW9CLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFO0FBQzVDLHdCQUF3QixJQUFJLEdBQUcsS0FBSyxLQUFLLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO0FBQzVFLDRCQUE0QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNGLDRCQUE0QixTQUFTO0FBQ3JDLHlCQUF5QixNQUFNLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRTtBQUNwRCw0QkFBNEIsY0FBYyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCw0QkFBNEIsU0FBUztBQUNyQyx5QkFBeUIsTUFBTSxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7QUFDckQsNEJBQTRCLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsNEJBQTRCLFNBQVM7QUFDckMseUJBQXlCLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLFVBQVUsQ0FBQyxFQUFFO0FBQzNGLDRCQUE0QixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkQ7QUFDQSw0QkFBNEIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7QUFDOUQsZ0NBQWdDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDakYsNkJBQTZCLE1BQU0sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxJQUFJLFFBQVEsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQ3ZILGdDQUFnQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkUsNkJBQTZCLE1BQU0sSUFBSSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUU7QUFDM0UsZ0NBQWdDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN2RSw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsR0FBRyxpREFBaUQsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hLLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixTQUFTO0FBQ3JDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixNQUFNLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLElBQUksd0JBQXdCLENBQUM7QUFDOUYsb0JBQW9CLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLElBQUksVUFBVSxDQUFDLG9CQUFvQixDQUFDO0FBQzNHLG9CQUFvQixNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDO0FBQ3ZFLG9CQUFvQixNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDO0FBQzNELG9CQUFvQixJQUFJLHdCQUF3QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDNUY7QUFDQSxvQkFBb0IsSUFBSSxNQUFNLENBQUMseUJBQXlCLEtBQUssU0FBUyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFO0FBQ2hKLHdCQUF3QixNQUFNLENBQUMseUJBQXlCLEdBQUcsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMseUJBQXlCLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQztBQUNuSyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFO0FBQ2hFLHdCQUF3QixNQUFNLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLE9BQU8sTUFBTSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7QUFDckUsd0JBQXdCLE1BQU0sQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQ3RELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLE9BQU8sTUFBTSxDQUFDLGVBQWUsS0FBSyxTQUFTLEVBQUU7QUFDckUsd0JBQXdCLE1BQU0sQ0FBQyxlQUFlLEdBQUcsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsZUFBZSxJQUFJLEtBQUssQ0FBQztBQUNwSCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxZQUFZLEtBQUssU0FBUyxFQUFFO0FBQ2xFLHdCQUF3QixNQUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUNwRCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxhQUFhLEtBQUssU0FBUyxFQUFFO0FBQ25FLHdCQUF3QixNQUFNLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztBQUNyRCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7QUFDdEUsd0JBQXdCLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7QUFDeEQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLElBQUksT0FBTyxNQUFNLENBQUMsc0JBQXNCLEtBQUssU0FBUyxFQUFFO0FBQzVFLHdCQUF3QixNQUFNLENBQUMsc0JBQXNCLEdBQUcsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFDO0FBQ2xJLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbkU7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQyx3QkFBd0IsSUFBSSxZQUFZLEdBQUc7QUFDM0MsNEJBQTRCLG9CQUFvQixFQUFFLE1BQU0sQ0FBQyxvQkFBb0I7QUFDN0UsNEJBQTRCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztBQUN2RCw0QkFBNEIsSUFBSSxFQUFFLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVO0FBQ2hGLHlCQUF5QixDQUFDO0FBQzFCLHdCQUF3QixNQUFNLEdBQUcsWUFBWSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3BILHdCQUF3QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM5QyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMzQyxvQkFBb0IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsWUFBWTtBQUNwRCx3QkFBd0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQzVDLDRCQUE0QixNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDL0QseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLFFBQVEsRUFBRTtBQUM5Ryw0QkFBNEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ2hELGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDbkUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksYUFBYSxDQUFDO0FBQzlDO0FBQ0EsNEJBQTRCLElBQUksY0FBYyxFQUFFO0FBQ2hELGdDQUFnQyxhQUFhLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQztBQUM3RixvQ0FBb0MsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ3pELG9DQUFvQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7QUFDbkUsb0NBQW9DLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtBQUNyRSxvQ0FBb0MsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO0FBQ3ZFLGlDQUFpQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ25ELDZCQUE2QixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO0FBQ3JELGdDQUFnQyxhQUFhLEdBQUcsc0JBQXNCLENBQUM7QUFDdkUsb0NBQW9DLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztBQUNuRCxvQ0FBb0MsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO0FBQ3pELG9DQUFvQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7QUFDbkUsb0NBQW9DLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtBQUMzRSxvQ0FBb0MsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO0FBQ3pFLG9DQUFvQyxZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7QUFDckUsb0NBQW9DLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtBQUN2RSxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGNBQWMsR0FBRyxJQUFJLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuSCw0QkFBNEIsY0FBYyxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztBQUM5Riw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0csNEJBQTRCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQ3hELDRCQUE0QixjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRCx5QkFBeUIsQ0FBQyxDQUFDO0FBQzNCLHFCQUFxQixDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEQsb0JBQW9CLE9BQU8sSUFBSSxDQUFDO0FBQ2hDLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLEtBQUssRUFBRTtBQUN0RixvQkFBb0IsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO0FBQzFDLHdCQUF3QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLHFCQUFxQixFQUFFO0FBQy9DLHdCQUF3QixNQUFNLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztBQUNyRSx3QkFBd0IsTUFBTSxDQUFDLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxXQUFXLENBQUM7QUFDL0UscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFO0FBQ2xGLHdCQUF3QixLQUFLLEVBQUUsS0FBSztBQUNwQyx3QkFBd0IsVUFBVSxFQUFFLFNBQVM7QUFDN0Msd0JBQXdCLE1BQU0sRUFBRTtBQUNoQyw0QkFBNEIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0FBQzdDLDRCQUE0QixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7QUFDM0MsNEJBQTRCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtBQUNyRCw0QkFBNEIsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtBQUNyRSw0QkFBNEIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO0FBQ2pFLDRCQUE0QixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07QUFDakQseUJBQXlCO0FBQ3pCLHdCQUF3QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7QUFDekQsd0JBQXdCLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtBQUMvRCx3QkFBd0Isc0JBQXNCLEVBQUUsTUFBTSxDQUFDLHNCQUFzQjtBQUM3RSx3QkFBd0Isb0JBQW9CLEVBQUUsTUFBTSxDQUFDLG9CQUFvQjtBQUN6RSx3QkFBd0IsVUFBVSxFQUFFLE1BQU0sQ0FBQyxVQUFVO0FBQ3JELHdCQUF3Qix5QkFBeUIsRUFBRSxNQUFNLENBQUMseUJBQXlCO0FBQ25GLHdCQUF3QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7QUFDekQsd0JBQXdCLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZTtBQUMvRCxxQkFBcUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLFFBQVEsRUFBRTtBQUNoRCx3QkFBd0IsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO0FBQzlDLDRCQUE0QixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUFDcEUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sUUFBUSxDQUFDO0FBQ3hDLHFCQUFxQixDQUFDLENBQUM7QUFDdkIsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksc0JBQXNCLEdBQUcsU0FBUyw2QkFBNkIsR0FBRztBQUN0RixvQkFBb0IsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQzNDO0FBQ0Esb0JBQW9CLElBQUksc0JBQXNCO0FBQzlDO0FBQ0Esd0JBQXdCLFlBQVk7QUFDcEMsNEJBQTRCLFNBQVMsc0JBQXNCLEdBQUc7QUFDOUQsZ0NBQWdDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUM5RTtBQUNBLGdDQUFnQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDeEYsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZELGdDQUFnQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztBQUNwRCxnQ0FBZ0MsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsY0FBYyxFQUFFLENBQUM7QUFDcEUsZ0NBQWdDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZELGdDQUFnQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2RCxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkQsZ0NBQWdDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7QUFDakUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0FBQ2xFLGdDQUFnQyxHQUFHLEVBQUUsU0FBUztBQUM5QyxnQ0FBZ0MsS0FBSyxFQUFFLFNBQVMsT0FBTyxHQUFHO0FBQzFELG9DQUFvQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDckQ7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUQsb0NBQW9DLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlILG9DQUFvQyxPQUFPLGtCQUFrQixDQUFDLElBQUksQ0FBQyxZQUFZO0FBQy9FLHdDQUF3QyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUNoRTtBQUNBLHdDQUF3QyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7QUFDM0QsNENBQTRDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEU7QUFDQSw0Q0FBNEMsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDakUseUNBQXlDO0FBQ3pDLHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsaUNBQWlDO0FBQ2pDLDZCQUE2QixFQUFFO0FBQy9CLGdDQUFnQyxHQUFHLEVBQUUsTUFBTTtBQUMzQyxnQ0FBZ0MsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUU7QUFDOUUsb0NBQW9DLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxzQ0FBc0MsR0FBRyxtQ0FBbUMsQ0FBQyxDQUFDO0FBQ3hJLG9DQUFvQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVGLGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRTtBQUMvQixnQ0FBZ0MsR0FBRyxFQUFFLFNBQVM7QUFDOUMsZ0NBQWdDLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNwRCxvQ0FBb0MsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQztBQUNwRSxpQ0FBaUM7QUFDakMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO0FBQ2hDO0FBQ0EsNEJBQTRCLE9BQU8sc0JBQXNCLENBQUM7QUFDMUQseUJBQXlCLEVBQUUsQ0FBQztBQUM1QjtBQUNBLG9CQUFvQixPQUFPLHNCQUFzQixDQUFDO0FBQ2xELGlCQUFpQixFQUFFLENBQUM7QUFDcEI7QUFDQSxnQkFBZ0IsSUFBSSxxQkFBcUI7QUFDekM7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQyx3QkFBd0IsU0FBUyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFO0FBQzVFLDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7QUFDekU7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDakQsNEJBQTRCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUN0RCw0QkFBNEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztBQUN6RCw0QkFBNEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEVBQUUsQ0FBQztBQUNoRSw0QkFBNEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDekYseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQzdELDRCQUE0QixHQUFHLEVBQUUsa0JBQWtCO0FBQ25ELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUU7QUFDdkUsZ0NBQWdDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3BFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLHFCQUFxQjtBQUN0RCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsbUJBQW1CLENBQUMsUUFBUSxFQUFFO0FBQzFFLGdDQUFnQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLDRCQUE0QjtBQUM3RCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsMEJBQTBCLENBQUMsUUFBUSxFQUFFO0FBQ2pGLGdDQUFnQyxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGFBQWE7QUFDOUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO0FBQ3RFLGdDQUFnQyxJQUFJLHlCQUF5QixHQUFHLElBQUksQ0FBQztBQUNyRSxnQ0FBZ0MsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUM7QUFDOUQsZ0NBQWdDLElBQUksY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUMvRDtBQUNBLGdDQUFnQyxJQUFJO0FBQ3BDLG9DQUFvQyxLQUFLLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUseUJBQXlCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLHlCQUF5QixHQUFHLElBQUksRUFBRTtBQUMzTSx3Q0FBd0MsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNuRSx3Q0FBd0MsUUFBUSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMvRCxxQ0FBcUM7QUFDckMsaUNBQWlDLENBQUMsT0FBTyxHQUFHLEVBQUU7QUFDOUMsb0NBQW9DLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUM3RCxvQ0FBb0MsY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUN6RCxpQ0FBaUMsU0FBUztBQUMxQyxvQ0FBb0MsSUFBSTtBQUN4Qyx3Q0FBd0MsSUFBSSxDQUFDLHlCQUF5QixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3BHLDRDQUE0QyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDL0QseUNBQXlDO0FBQ3pDLHFDQUFxQyxTQUFTO0FBQzlDLHdDQUF3QyxJQUFJLGlCQUFpQixFQUFFO0FBQy9ELDRDQUE0QyxNQUFNLGNBQWMsQ0FBQztBQUNqRSx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0I7QUFDakQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUU7QUFDbkUsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsRDtBQUNBLGdDQUFnQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZO0FBQy9FLG9DQUFvQyxJQUFJLDBCQUEwQixHQUFHLElBQUksQ0FBQztBQUMxRSxvQ0FBb0MsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDbkUsb0NBQW9DLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUNwRTtBQUNBLG9DQUFvQyxJQUFJO0FBQ3hDLHdDQUF3QyxLQUFLLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSwwQkFBMEIsR0FBRyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsMEJBQTBCLEdBQUcsSUFBSSxFQUFFO0FBQzFOLDRDQUE0QyxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQ3hFLDRDQUE0QyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0QseUNBQXlDO0FBQ3pDLHFDQUFxQyxDQUFDLE9BQU8sR0FBRyxFQUFFO0FBQ2xELHdDQUF3QyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDbEUsd0NBQXdDLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDOUQscUNBQXFDLFNBQVM7QUFDOUMsd0NBQXdDLElBQUk7QUFDNUMsNENBQTRDLElBQUksQ0FBQywwQkFBMEIsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtBQUMxRyxnREFBZ0QsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3BFLDZDQUE2QztBQUM3Qyx5Q0FBeUMsU0FBUztBQUNsRCw0Q0FBNEMsSUFBSSxrQkFBa0IsRUFBRTtBQUNwRSxnREFBZ0QsTUFBTSxlQUFlLENBQUM7QUFDdEUsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSx1QkFBdUI7QUFDeEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLHFCQUFxQixDQUFDLEtBQUssRUFBRTtBQUN6RSxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ2xEO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDL0Usb0NBQW9DLElBQUksMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQzFFLG9DQUFvQyxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQztBQUNuRSxvQ0FBb0MsSUFBSSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3BFO0FBQ0Esb0NBQW9DLElBQUk7QUFDeEMsd0NBQXdDLEtBQUssSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLDBCQUEwQixHQUFHLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSwwQkFBMEIsR0FBRyxJQUFJLEVBQUU7QUFDak8sNENBQTRDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7QUFDeEUsNENBQTRDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RCx5Q0FBeUM7QUFDekMscUNBQXFDLENBQUMsT0FBTyxHQUFHLEVBQUU7QUFDbEQsd0NBQXdDLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNsRSx3Q0FBd0MsZUFBZSxHQUFHLEdBQUcsQ0FBQztBQUM5RCxxQ0FBcUMsU0FBUztBQUM5Qyx3Q0FBd0MsSUFBSTtBQUM1Qyw0Q0FBNEMsSUFBSSxDQUFDLDBCQUEwQixJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO0FBQzFHLGdEQUFnRCxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDcEUsNkNBQTZDO0FBQzdDLHlDQUF5QyxTQUFTO0FBQ2xELDRDQUE0QyxJQUFJLGtCQUFrQixFQUFFO0FBQ3BFLGdEQUFnRCxNQUFNLGVBQWUsQ0FBQztBQUN0RSw2Q0FBNkM7QUFDN0MseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGdCQUFnQjtBQUNqRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsY0FBYyxHQUFHO0FBQzdELGdDQUFnQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDaEUsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsa0JBQWtCO0FBQ25ELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO0FBQ3pFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsd0RBQXdELENBQUMsQ0FBQztBQUNqSCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxPQUFPO0FBQ3hDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxLQUFLLEdBQUcsRUFBRTtBQUN0RCx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxxQkFBcUIsQ0FBQztBQUNyRCxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztBQUN0RTtBQUNBLGdCQUFnQixJQUFJLGdCQUFnQjtBQUNwQztBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFO0FBQ25GLDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDcEU7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDM0QsNEJBQTRCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0FBQ3BELDRCQUE0QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUN4RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDeEQsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsVUFBVSxFQUFFO0FBQ2hFLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGNBQWM7QUFDL0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDOUQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekUsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsaUJBQWlCO0FBQ2xELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxlQUFlLEdBQUc7QUFDOUQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUUsQ0FBQztBQUN6RSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0I7QUFDakQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGNBQWMsQ0FBQyxFQUFFLEVBQUU7QUFDL0QsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUUsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsZUFBZTtBQUNoRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsYUFBYSxHQUFHO0FBQzVELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDdkUsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsYUFBYTtBQUM5Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsV0FBVyxHQUFHO0FBQzFELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDckUsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsMEJBQTBCO0FBQzNELDRCQUE0QixLQUFLLEVBQUUsU0FBUyx3QkFBd0IsR0FBRztBQUN2RSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFLENBQUM7QUFDbEYsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsZ0JBQWdCO0FBQ2pELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxjQUFjLEdBQUc7QUFDN0QsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztBQUN4RSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxlQUFlO0FBQ2hELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxhQUFhLEdBQUc7QUFDNUQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUN2RSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxVQUFVLEdBQUc7QUFDekQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNwRSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0I7QUFDakQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGNBQWMsR0FBRztBQUM3RCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3hFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGFBQWE7QUFDOUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFdBQVcsR0FBRztBQUMxRCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3JFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFNBQVM7QUFDMUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE9BQU8sR0FBRztBQUN0RCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2pFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGlCQUFpQjtBQUNsRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsZUFBZSxHQUFHO0FBQzlELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDO0FBQ3RGLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFVBQVU7QUFDM0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFFBQVEsR0FBRztBQUN2RCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ2xFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFNBQVM7QUFDMUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE9BQU8sR0FBRztBQUN0RCxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUMvRCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLEdBQUc7QUFDdEQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsRSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxVQUFVO0FBQzNDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7QUFDOUQsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsYUFBYTtBQUM5Qyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO0FBQ2pFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztBQUNyRSw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esd0JBQXdCLE9BQU8sZ0JBQWdCLENBQUM7QUFDaEQscUJBQXFCLEVBQUUsQ0FBQztBQUN4QjtBQUNBLGdCQUFnQixPQUFPLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFDNUQ7QUFDQSxnQkFBZ0IsSUFBSSxZQUFZO0FBQ2hDO0FBQ0Esb0JBQW9CLFlBQVk7QUFDaEMsd0JBQXdCLFNBQVMsWUFBWSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFO0FBQzlFLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkg7QUFDQSw0QkFBNEIsZUFBZSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztBQUNoRTtBQUNBLDRCQUE0QixJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUN2RCw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDdEQsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQ3hELDRCQUE0QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDO0FBQzFHLDRCQUE0QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNsRCw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0FBQ25FLDRCQUE0QixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7QUFDekQsNEJBQTRCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7QUFDNUQsNEJBQTRCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQ3hELDRCQUE0QixJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEUsNEJBQTRCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ25ELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsWUFBWSxFQUFFLENBQUM7QUFDcEQsNEJBQTRCLEdBQUcsRUFBRSxhQUFhO0FBQzlDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxXQUFXLEdBQUc7QUFDMUQsZ0NBQWdDLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDakgsb0NBQW9DLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUN0RCxvQ0FBb0MsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRO0FBQ2pFLG9DQUFvQyxRQUFRLEdBQUcsYUFBYSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBYTtBQUNyRyxvQ0FBb0MsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRO0FBQ2pFLG9DQUFvQyxRQUFRLEdBQUcsYUFBYSxLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxhQUFhLENBQUM7QUFDaEc7QUFDQSxnQ0FBZ0MsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7QUFDOUYsb0NBQW9DLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSxnREFBZ0QsQ0FBQyxDQUFDO0FBQzVHLG9DQUFvQyxLQUFLLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELG9DQUFvQyxRQUFRLEdBQUcsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdHLG9DQUFvQyxRQUFRLEdBQUcsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDeEcsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sSUFBSSxVQUFVLENBQUMsWUFBWSxDQUFDO0FBQ25FLG9DQUFvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDdEQsb0NBQW9DLEtBQUssRUFBRSxLQUFLO0FBQ2hELG9DQUFvQyxRQUFRLEVBQUUsUUFBUTtBQUN0RCxvQ0FBb0MsUUFBUSxFQUFFLFFBQVE7QUFDdEQsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0I7QUFDakQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGNBQWMsR0FBRztBQUM3RCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUNsSCxvQ0FBb0MsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNO0FBQy9ELG9DQUFvQyxNQUFNLEdBQUcsWUFBWSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxZQUFZLENBQUM7QUFDM0Y7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssTUFBTSxFQUFFO0FBQ25HLG9DQUFvQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNySCxvQ0FBb0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLE1BQU0sQ0FBQztBQUNwRSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7QUFDL0QsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsUUFBUTtBQUN6Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUU7QUFDdkUsZ0NBQWdDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNsRDtBQUNBLGdDQUFnQyxJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYTtBQUN2RSxvQ0FBb0MsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRO0FBQzdELG9DQUFvQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU07QUFDL0Qsb0NBQW9DLE1BQU0sR0FBRyxZQUFZLEtBQUssS0FBSyxDQUFDLEdBQUcsU0FBUyxHQUFHLFlBQVk7QUFDL0Ysb0NBQW9DLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxXQUFXO0FBQ3pFLG9DQUFvQyxXQUFXLEdBQUcsaUJBQWlCLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLGlCQUFpQjtBQUMxRyxvQ0FBb0MscUJBQXFCLEdBQUcsS0FBSyxDQUFDLHNCQUFzQjtBQUN4RixvQ0FBb0Msc0JBQXNCLEdBQUcscUJBQXFCLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLHFCQUFxQjtBQUM3SCxvQ0FBb0MsZUFBZSxHQUFHLEtBQUssQ0FBQyxTQUFTO0FBQ3JFLG9DQUFvQyxTQUFTLEdBQUcsZUFBZSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxlQUFlO0FBQ25HLG9DQUFvQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsVUFBVTtBQUN2RSxvQ0FBb0MsVUFBVSxHQUFHLGdCQUFnQixLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxnQkFBZ0I7QUFDdEcsb0NBQW9DLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxhQUFhO0FBQzdFLG9DQUFvQyxhQUFhLEdBQUcsbUJBQW1CLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLG1CQUFtQjtBQUMvRyxvQ0FBb0MsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLFVBQVU7QUFDdkUsb0NBQW9DLFVBQVUsR0FBRyxnQkFBZ0IsS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7QUFDdkcsZ0NBQWdDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDeEQsZ0NBQWdDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdEQsZ0NBQWdDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQzVELGdDQUFnQyxJQUFJLGVBQWUsR0FBRyxNQUFNLEtBQUssT0FBTyxHQUFHLE9BQU8sR0FBRyxTQUFTLENBQUM7QUFDL0YsZ0NBQWdDLElBQUkscUJBQXFCLEdBQUcsYUFBYSxJQUFJLElBQUksVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDL0csZ0NBQWdDLElBQUksWUFBWSxHQUFHLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQztBQUMzRSxvQ0FBb0MsTUFBTSxFQUFFLFdBQVc7QUFDdkQsaUNBQWlDLENBQUMsQ0FBQztBQUNuQztBQUNBLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRTtBQUN6RSxvQ0FBb0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdGLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3JGO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUU7QUFDekUsb0NBQW9DLFdBQVcsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7QUFDN0Usb0NBQW9DLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQzlHLG9DQUFvQyxXQUFXLENBQUMsWUFBWSxHQUFHO0FBQy9ELHdDQUF3QyxPQUFPLEVBQUUsRUFBRTtBQUNuRCx3Q0FBd0MsU0FBUyxFQUFFLEVBQUU7QUFDckQsd0NBQXdDLFNBQVMsRUFBRSxLQUFLO0FBQ3hELHFDQUFxQyxDQUFDO0FBQ3RDLG9DQUFvQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQy9EO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtBQUM3Rix3Q0FBd0MsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQztBQUN0RSx3Q0FBd0MsTUFBTSxFQUFFLGVBQWU7QUFDL0Qsd0NBQXdDLHNCQUFzQixFQUFFLHNCQUFzQixLQUFLLElBQUk7QUFDL0YscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxRQUFRLEdBQUcsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFO0FBQ3hFLG9DQUFvQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2hHO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRCx3Q0FBd0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdFLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtBQUNuRSx3Q0FBd0MsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDckUscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUN6RDtBQUNBLG9DQUFvQyxJQUFJLEtBQUssRUFBRTtBQUMvQyx3Q0FBd0Msa0JBQWtCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRixxQ0FBcUMsTUFBTTtBQUMzQyx3Q0FBd0Msa0JBQWtCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ2hGLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQy9ELG9DQUFvQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzdELGlDQUFpQyxDQUFDO0FBQ2xDO0FBQ0EsZ0NBQWdDLElBQUksa0JBQWtCLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQztBQUNoRixvQ0FBb0MsUUFBUSxFQUFFLFFBQVE7QUFDdEQsb0NBQW9DLE1BQU0sRUFBRTtBQUM1Qyx3Q0FBd0MsYUFBYSxFQUFFLGFBQWE7QUFDcEUsd0NBQXdDLFFBQVEsRUFBRSxRQUFRO0FBQzFELHdDQUF3QyxTQUFTLEVBQUUsU0FBUztBQUM1RCx3Q0FBd0MsVUFBVSxFQUFFLFVBQVU7QUFDOUQsd0NBQXdDLFVBQVUsRUFBRSxVQUFVO0FBQzlELHFDQUFxQztBQUNyQyxvQ0FBb0MsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ25ELG9DQUFvQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDL0Qsb0NBQW9DLFlBQVksRUFBRSxXQUFXLENBQUMsWUFBWTtBQUMxRSxvQ0FBb0MsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0FBQy9ELG9DQUFvQyxhQUFhLEVBQUUscUJBQXFCO0FBQ3hFLG9DQUFvQyxZQUFZLEVBQUUsWUFBWTtBQUM5RCxvQ0FBb0Msd0JBQXdCLEVBQUUsZUFBZSxLQUFLLE9BQU87QUFDekYsb0NBQW9DLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTztBQUN4RCxvQ0FBb0MsV0FBVztBQUMvQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFO0FBQzlELG9DQUFvQyxXQUFXLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztBQUNqRSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUNqRixnQ0FBZ0MsSUFBSSxVQUFVLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0FBQ3pFLGdDQUFnQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLFlBQVksRUFBRTtBQUN4RyxvQ0FBb0MsSUFBSSxNQUFNLENBQUMsY0FBYyxFQUFFO0FBQy9ELHdDQUF3QyxRQUFRLEVBQUUsQ0FBQztBQUNuRCx3Q0FBd0MsT0FBTztBQUMvQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM1RCxvQ0FBb0Msa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDeEYsb0NBQW9DLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDN0UsaUNBQWlDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkQsZ0NBQWdDLE9BQU8sVUFBVSxDQUFDO0FBQ2xELDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGlCQUFpQjtBQUNsRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsZUFBZSxHQUFHO0FBQzlELGdDQUFnQyxTQUFTLG1CQUFtQixHQUFHO0FBQy9ELG9DQUFvQyxJQUFJLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFO0FBQzVFLHdDQUF3QyxXQUFXLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMzRyx3Q0FBd0MsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDNUY7QUFDQSx3Q0FBd0MsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3BELDRDQUE0QyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakYseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxlQUFlLEdBQUcsUUFBUSxDQUFDO0FBQy9EO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFO0FBQ3pFLG9DQUFvQyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0YsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDckYsZ0NBQWdDLElBQUksVUFBVSxDQUFDO0FBQy9DO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLENBQUMsb0JBQW9CLEVBQUU7QUFDdkUsb0NBQW9DLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDcEQsb0NBQW9DLFVBQVUsQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUN6RixvQ0FBb0MsV0FBVyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUM3RSxvQ0FBb0MsV0FBVyxDQUFDLG9CQUFvQixHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDNUcsb0NBQW9DLFdBQVcsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0FBQ2pFLG9DQUFvQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3RSxvQ0FBb0MsV0FBVyxDQUFDLFlBQVksR0FBRztBQUMvRCx3Q0FBd0MsT0FBTyxFQUFFLEVBQUU7QUFDbkQsd0NBQXdDLFNBQVMsRUFBRSxFQUFFO0FBQ3JELHdDQUF3QyxTQUFTLEVBQUUsS0FBSztBQUN4RCxxQ0FBcUMsQ0FBQztBQUN0QztBQUNBLG9DQUFvQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNyRTtBQUNBLG9DQUFvQyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7QUFDN0Ysd0NBQXdDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztBQUNqRSx3Q0FBd0MsTUFBTSxFQUFFLGVBQWU7QUFDL0QscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxXQUFXLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDO0FBQ2hGLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLG1CQUFtQjtBQUNwRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsaUJBQWlCLEdBQUc7QUFDaEUsZ0NBQWdDLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDbEgsb0NBQW9DLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxtQkFBbUI7QUFDckYsb0NBQW9DLG1CQUFtQixHQUFHLHFCQUFxQixLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxxQkFBcUI7QUFDMUgsb0NBQW9DLHFCQUFxQixHQUFHLEtBQUssQ0FBQyx1QkFBdUI7QUFDekYsb0NBQW9DLHVCQUF1QixHQUFHLHFCQUFxQixLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxxQkFBcUIsQ0FBQztBQUMvSDtBQUNBLGdDQUFnQyxJQUFJLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUNsRSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLEVBQUU7QUFDdkcsb0NBQW9DLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUM7QUFDbEUsb0NBQW9DLG1CQUFtQixFQUFFLG1CQUFtQixLQUFLLElBQUk7QUFDckYsb0NBQW9DLGdCQUFnQixFQUFFLHVCQUF1QixLQUFLLElBQUk7QUFDdEYsaUNBQWlDLEVBQUU7QUFDbkMsb0NBQW9DLGFBQWEsRUFBRSx1QkFBdUI7QUFDMUUsb0NBQW9DLElBQUksRUFBRSxTQUFTLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDckUsd0NBQXdDLE9BQU8sV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDeEUscUNBQXFDO0FBQ3JDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsZ0JBQWdCO0FBQ2pELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxjQUFjLEdBQUc7QUFDN0QsZ0NBQWdDLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwSCxnQ0FBZ0MsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BGLGdDQUFnQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUM5RSxvQ0FBb0MsU0FBUyxJQUFJLEdBQUc7QUFDcEQsd0NBQXdDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLEVBQUU7QUFDNUUsNENBQTRDLElBQUksa0JBQWtCLENBQUM7QUFDbkU7QUFDQSw0Q0FBNEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUs7QUFDbkUsZ0RBQWdELElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2xFO0FBQ0EsNENBQTRDLElBQUksSUFBSSxFQUFFO0FBQ3RELGdEQUFnRCxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDckUsZ0RBQWdELE9BQU87QUFDdkQsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUY7QUFDQSw0Q0FBNEMsQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcko7QUFDQSw0Q0FBNEMsSUFBSSxFQUFFLENBQUM7QUFDbkQseUNBQXlDLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksTUFBTSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM1RSxvQ0FBb0MsSUFBSSxXQUFXLEdBQUc7QUFDdEQsd0NBQXdDLEtBQUssRUFBRSxFQUFFO0FBQ2pELHdDQUF3QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDbkUscUNBQXFDLENBQUM7QUFDdEMsb0NBQW9DLElBQUksRUFBRSxDQUFDO0FBQzNDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsVUFBVTtBQUMzQyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsUUFBUSxHQUFHO0FBQ3ZELGdDQUFnQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUN0RCxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNqRixnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hELGdDQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDekYsb0NBQW9DLElBQUksTUFBTSxLQUFLLFFBQVEsRUFBRTtBQUM3RCx3Q0FBd0MsT0FBTztBQUMvQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRixvQ0FBb0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxVQUFVLEVBQUU7QUFDMUYsd0NBQXdDLElBQUksZUFBZSxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0FBQ2xILHdDQUF3QyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3JFLHdDQUF3QyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDNUQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUNsRCxnQ0FBZ0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUMvRCxnQ0FBZ0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFDNUQsZ0NBQWdDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLEdBQUc7QUFDdEQsZ0NBQWdDLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzSCxnQ0FBZ0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDM0Q7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3RCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxhQUFhO0FBQzlDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxXQUFXLEdBQUc7QUFDMUQsZ0NBQWdDLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzSDtBQUNBLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDbEgsb0NBQW9DLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEYsb0NBQW9DLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQztBQUNySCxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsRUFBRTtBQUMxQyxvQ0FBb0MsT0FBTztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQ3pGLG9DQUFvQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckUsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbEQsZ0NBQWdDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7QUFDL0Q7QUFDQSxnQ0FBZ0MsSUFBSSxVQUFVLElBQUksSUFBSSxDQUFDLE1BQU0sWUFBWSxVQUFVLENBQUMsU0FBUyxFQUFFO0FBQy9GLG9DQUFvQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzdFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztBQUM1RCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxrQkFBa0I7QUFDbkQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGdCQUFnQixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUU7QUFDbkYsZ0NBQWdDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUU7QUFDQSxnQ0FBZ0MsSUFBSSxXQUFXLENBQUMsc0JBQXNCLEVBQUU7QUFDeEUsb0NBQW9DLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0YsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGtCQUFrQjtBQUNuRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsTUFBTSxFQUFFO0FBQ3hGLGdDQUFnQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzVFO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1RixvQ0FBb0MsV0FBVyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hHLG9DQUFvQyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUcsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLFdBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztBQUNqRztBQUNBLGdDQUFnQyxLQUFLLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDNUYsb0NBQW9DLFdBQVcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUN0RixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7QUFDakUsb0NBQW9DLFdBQVcsQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFDOUU7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3ZELGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDMUQsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsUUFBUTtBQUN6Qyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQzdELDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLEtBQUs7QUFDdEMsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQztBQUMxRCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxVQUFVO0FBQzNDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDL0QsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsTUFBTTtBQUN2Qyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0FBQzNELDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLE9BQU87QUFDeEMsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsTUFBTSxZQUFZLFVBQVUsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDeEcsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLFlBQVksQ0FBQztBQUM1QyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0FBQ3BEO0FBQ0EsZ0JBQWdCLElBQUksWUFBWTtBQUNoQztBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLFlBQVksR0FBRztBQUNoRCw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2pIO0FBQ0EsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDaEU7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDakQsNEJBQTRCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ2hELDRCQUE0QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUNwRCw0QkFBNEIsR0FBRyxFQUFFLGFBQWE7QUFDOUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFO0FBQ3hFLGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEQ7QUFDQSxnQ0FBZ0MsU0FBUyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQzNELG9DQUFvQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtBQUN2Rix3Q0FBd0MsT0FBTyxLQUFLLENBQUM7QUFDckQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUMzRCx3Q0FBd0MsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLE1BQU0sRUFBRSxNQUFNLENBQUM7QUFDdkQ7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxLQUFLLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsRUFBRTtBQUNyRyx3Q0FBd0MsSUFBSSxZQUFZLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbkc7QUFDQSx3Q0FBd0MsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO0FBQzlELDRDQUE0QyxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQzNELHlDQUF5QyxNQUFNLElBQUksWUFBWSxFQUFFO0FBQ2pFLDRDQUE0QyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN2SCx5Q0FBeUMsTUFBTTtBQUMvQyw0Q0FBNEMsTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsRix5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEUsd0NBQXdDLE9BQU8sTUFBTSxDQUFDO0FBQ3RELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQzVFLG9DQUFvQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM5RDtBQUNBLG9DQUFvQyxLQUFLLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRTtBQUN6RCx3Q0FBd0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3pELDRDQUE0QyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ3REO0FBQ0Esd0NBQXdDLE9BQU8sRUFBRSxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ2hHLDRDQUE0QyxDQUFDLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RSx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsSUFBSSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVyxJQUFJLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxVQUFVLEVBQUU7QUFDbkgsNENBQTRDLFNBQVM7QUFDckQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzNFLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxPQUFPLE1BQU0sQ0FBQztBQUNsRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDbEQsb0NBQW9DLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsUUFBUSxFQUFFO0FBQ2hGLHdDQUF3QyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUM1RCw0Q0FBNEMsSUFBSSxFQUFFLEdBQUc7QUFDckQseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QztBQUNBLG9DQUFvQyxPQUFPO0FBQzNDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzNELGdDQUFnQyxJQUFJLENBQUMsR0FBRztBQUN4QyxvQ0FBb0MsSUFBSSxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDekQsaUNBQWlDLENBQUM7QUFDbEM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWTtBQUNoRSxvQ0FBb0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxRQUFRLEVBQUU7QUFDbEYsd0NBQXdDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9ELHFDQUFxQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsa0JBQWtCO0FBQ25ELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQzdFLGdDQUFnQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvRCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxxQkFBcUI7QUFDdEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDaEYsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxXQUFXO0FBQzVDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxTQUFTLEdBQUc7QUFDeEQsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3JELDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxZQUFZLENBQUM7QUFDNUMscUJBQXFCLEVBQUUsQ0FBQztBQUN4QjtBQUNBLGdCQUFnQixPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwRDtBQUNBLGdCQUFnQixJQUFJLFNBQVMsR0FBRyxTQUFTLGdCQUFnQixHQUFHO0FBQzVELG9CQUFvQixJQUFJLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3ZELG9CQUFvQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztBQUM3QyxvQkFBb0IsSUFBSSwrQkFBK0IsQ0FBQztBQUN4RDtBQUNBLG9CQUFvQixTQUFTLGFBQWEsR0FBRztBQUM3Qyx3QkFBd0IsSUFBSSxlQUFlLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFO0FBQzNFLDRCQUE0QixPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7QUFDakYseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksT0FBTyxpQkFBaUIsS0FBSyxXQUFXLEVBQUU7QUFDdEUsNEJBQTRCLE9BQU8saUJBQWlCLENBQUM7QUFDckQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE1BQU0sSUFBSSxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztBQUN6RixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxpQ0FBaUMsR0FBRztBQUNqRSx3QkFBd0IsSUFBSTtBQUM1Qiw0QkFBNEIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7QUFDL0QsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDLHVCQUF1QixJQUFJLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxvQkFBb0IsQ0FBQztBQUM3SCw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsT0FBTyxFQUFFLEVBQUUsRUFBRTtBQUN2QztBQUNBLHdCQUF3QixPQUFPLElBQUksQ0FBQztBQUNwQyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxxQkFBcUIsR0FBRztBQUNyRCx3QkFBd0IsSUFBSSwrQkFBK0IsRUFBRTtBQUM3RCw0QkFBNEIsT0FBTywrQkFBK0IsQ0FBQyxPQUFPLENBQUM7QUFDM0UseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLCtCQUErQixHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDL0Ysd0JBQXdCLElBQUksd0JBQXdCLEdBQUcsaUNBQWlDLEVBQUUsQ0FBQztBQUMzRjtBQUNBLHdCQUF3QixJQUFJLHdCQUF3QixFQUFFO0FBQ3RELDRCQUE0QiwrQkFBK0IsQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUM5Riw0QkFBNEIsT0FBTywrQkFBK0IsQ0FBQyxPQUFPLENBQUM7QUFDM0UseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxHQUFHLHFCQUFxQixJQUFJLFlBQVk7QUFDMUUsNEJBQTRCLE9BQU8sSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDaEcsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDLHVCQUF1QixDQUFDLG9CQUFvQixDQUFDO0FBQzNGLDZCQUE2QixDQUFDLENBQUM7QUFDL0IseUJBQXlCLENBQUM7QUFDMUI7QUFDQSx3QkFBd0IsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLCtCQUErQixDQUFDLE9BQU8sRUFBRSwrQkFBK0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN2SCx3QkFBd0IsT0FBTywrQkFBK0IsQ0FBQyxPQUFPLENBQUM7QUFDdkUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFNBQVMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFO0FBQ25ELHdCQUF3QixJQUFJLE9BQU8sR0FBRyxrQkFBa0IsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3hFLHdCQUF3QixPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLFNBQVM7QUFDakM7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQyw0QkFBNEIsU0FBUyxTQUFTLEdBQUc7QUFDakQsZ0NBQWdDLElBQUksS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUU7QUFDbEgsb0NBQW9DLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSTtBQUMzRCxvQ0FBb0MsSUFBSSxHQUFHLFVBQVUsS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcsVUFBVTtBQUNwRixvQ0FBb0MsVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJO0FBQzNELG9DQUFvQyxJQUFJLEdBQUcsVUFBVSxLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxVQUFVO0FBQ3BGLG9DQUFvQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsb0JBQW9CO0FBQ3RGLG9DQUFvQyxvQkFBb0IsR0FBRyxxQkFBcUIsS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcscUJBQXFCO0FBQzFILG9DQUFvQyxlQUFlLEdBQUcsS0FBSyxDQUFDLFNBQVM7QUFDckUsb0NBQW9DLFNBQVMsR0FBRyxlQUFlLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxlQUFlLENBQUM7QUFDOUg7QUFDQSxnQ0FBZ0MsZUFBZSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqRTtBQUNBLGdDQUFnQyxJQUFJLElBQUksSUFBSSxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3RFLG9DQUFvQyxNQUFNLElBQUksS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7QUFDbkcsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ2pELGdDQUFnQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN2RCxnQ0FBZ0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixLQUFLLEtBQUssQ0FBQztBQUMzRixnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDM0QsZ0NBQWdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQzdGLGdDQUFnQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUNsRCxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkQsZ0NBQWdDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQzVEO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxFQUFFO0FBQzFDLG9DQUFvQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRTtBQUNBLG9DQUFvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkU7QUFDQSxvQ0FBb0MsT0FBTztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ25ELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDckQsZ0NBQWdDLEdBQUcsRUFBRSxxQkFBcUI7QUFDMUQsZ0NBQWdDLEtBQUssRUFBRSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRTtBQUMxRSxvQ0FBb0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDdEQsb0NBQW9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN2SDtBQUNBLG9DQUFvQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztBQUNyRjtBQUNBLG9DQUFvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDcEUsaUNBQWlDO0FBQ2pDLDZCQUE2QixFQUFFO0FBQy9CLGdDQUFnQyxHQUFHLEVBQUUsYUFBYTtBQUNsRCxnQ0FBZ0MsS0FBSyxFQUFFLFNBQVMsV0FBVyxHQUFHO0FBQzlELG9DQUFvQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEQ7QUFDQSxvQ0FBb0MsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLGlDQUFpQyxFQUFFLEVBQUU7QUFDcEksd0NBQXdDLElBQUksU0FBUyxHQUFHLGFBQWEsRUFBRSxDQUFDO0FBQ3hFO0FBQ0Esd0NBQXdDLElBQUk7QUFDNUMsNENBQTRDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQzNHLGdEQUFnRCxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0gsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLElBQUksTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQy9FLDRDQUE0QyxJQUFJLGNBQWMsR0FBRyxJQUFJLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9IO0FBQ0EsNENBQTRDLElBQUksY0FBYyxHQUFHLFNBQVMsY0FBYyxHQUFHO0FBQzNGLGdEQUFnRCxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ25HLGdEQUFnRCxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDekUsZ0RBQWdELE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuRTtBQUNBLGdEQUFnRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7QUFDdEUsb0RBQW9ELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQ3RILGlEQUFpRCxNQUFNO0FBQ3ZELG9EQUFvRCxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUM5RSxpREFBaUQ7QUFDakQsNkNBQTZDLENBQUM7QUFDOUM7QUFDQSw0Q0FBNEMsSUFBSSxhQUFhLEdBQUcsU0FBUyxhQUFhLEdBQUc7QUFDekYsZ0RBQWdELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQ3hFLG9EQUFvRCxjQUFjLEVBQUUsQ0FBQztBQUNyRSxpREFBaUQ7QUFDakQsNkNBQTZDLENBQUM7QUFDOUM7QUFDQSw0Q0FBNEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUM1Riw0Q0FBNEMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLEVBQUU7QUFDdEYsZ0RBQWdELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDbkc7QUFDQSxnREFBZ0QsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFO0FBQ3RFLG9EQUFvRCxjQUFjLEVBQUUsQ0FBQztBQUNyRSxvREFBb0QsT0FBTztBQUMzRCxpREFBaUQ7QUFDakQ7QUFDQSxnREFBZ0QsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO0FBQ3BGLG9EQUFvRCxNQUFNLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUM1RixvREFBb0QsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDMUUsb0RBQW9ELE1BQU0sQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQy9FO0FBQ0Esb0RBQW9ELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7QUFDaEYsd0RBQXdELE1BQU0sQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7QUFDNUYscURBQXFEO0FBQ3JEO0FBQ0Esb0RBQW9ELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0RjtBQUNBLG9EQUFvRCxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUNyRix3REFBd0QsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO0FBQ25GLHFEQUFxRCxDQUFDLENBQUM7QUFDdkQsaURBQWlELE1BQU07QUFDdkQsb0RBQW9ELE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQzlFO0FBQ0Esb0RBQW9ELGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM3RSxvREFBb0QsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3ZFLGlEQUFpRDtBQUNqRCw2Q0FBNkMsQ0FBQyxDQUFDO0FBQy9DLDRDQUE0QyxjQUFjLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksRUFBRTtBQUN2RixnREFBZ0QsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNuRztBQUNBLGdEQUFnRCxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7QUFDdEUsb0RBQW9ELGNBQWMsRUFBRSxDQUFDO0FBQ3JFLG9EQUFvRCxPQUFPO0FBQzNELGlEQUFpRDtBQUNqRDtBQUNBLGdEQUFnRCxJQUFJO0FBQ3BELG9EQUFvRCxRQUFRLEVBQUUsQ0FBQztBQUMvRCxpREFBaUQsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUM1RCxvREFBb0QsTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDOUUsaURBQWlEO0FBQ2pELDZDQUE2QyxDQUFDLENBQUM7QUFDL0M7QUFDQSw0Q0FBNEMsSUFBSSxRQUFRLEdBQUcsU0FBUyxRQUFRLEdBQUc7QUFDL0UsZ0RBQWdELElBQUksT0FBTyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RIO0FBQ0EsZ0RBQWdELElBQUk7QUFDcEQsb0RBQW9ELGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzNHLGlEQUFpRCxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQzdELG9EQUFvRCxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDeEcsb0RBQW9ELE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkUsb0RBQW9ELGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pGLGlEQUFpRDtBQUNqRCw2Q0FBNkMsQ0FBQztBQUM5QztBQUNBLDRDQUE0QyxRQUFRLEVBQUUsQ0FBQztBQUN2RCw0Q0FBNEMsT0FBTztBQUNuRCx5Q0FBeUMsQ0FBQyxPQUFPLENBQUMsRUFBRTtBQUNwRCw0Q0FBNEMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLCtCQUErQixDQUFDLENBQUM7QUFDN0YseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUM1RCxpQ0FBaUM7QUFDakMsNkJBQTZCLEVBQUU7QUFDL0IsZ0NBQWdDLEdBQUcsRUFBRSxrQkFBa0I7QUFDdkQsZ0NBQWdDLEtBQUssRUFBRSxTQUFTLGdCQUFnQixHQUFHO0FBQ25FLG9DQUFvQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDdEQ7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFO0FBQzNELHdDQUF3QyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUseUJBQXlCLENBQUMsQ0FBQztBQUNuRix3Q0FBd0MsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLG9CQUFvQixFQUFFO0FBQ2pHLHdDQUF3QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUU7QUFDOUQsNENBQTRDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO0FBQzlHO0FBQ0EsNENBQTRDLE9BQU87QUFDbkQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLElBQUksSUFBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7QUFDdEUsd0NBQXdDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzVELHdDQUF3QyxJQUFJLEVBQUUsR0FBRyxNQUFNLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztBQUM3RSx3Q0FBd0MsSUFBSSxhQUFhLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUgsd0NBQXdDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEYsd0NBQXdDLElBQUksY0FBYyxHQUFHLElBQUksZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNILHdDQUF3QyxNQUFNLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztBQUNoRjtBQUNBLHdDQUF3QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDMUUscUNBQXFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDL0Qsd0NBQXdDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JKLHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsaUNBQWlDO0FBQ2pDLDZCQUE2QixFQUFFO0FBQy9CLGdDQUFnQyxHQUFHLEVBQUUsU0FBUztBQUM5QyxnQ0FBZ0MsS0FBSyxFQUFFLFNBQVMsT0FBTyxHQUFHO0FBQzFELG9DQUFvQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUMxRDtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDekQsd0NBQXdDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDcEU7QUFDQSx3Q0FBd0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDL0QscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RFLG9DQUFvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUN0RDtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7QUFDOUQsd0NBQXdDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkU7QUFDQSx3Q0FBd0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDcEUscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRTtBQUMvQixnQ0FBZ0MsR0FBRyxFQUFFLFNBQVM7QUFDOUMsZ0NBQWdDLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNwRCxvQ0FBb0MsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0FBQ3pFLGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRTtBQUMvQixnQ0FBZ0MsR0FBRyxFQUFFLE1BQU07QUFDM0MsZ0NBQWdDLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNwRCxvQ0FBb0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ3RELGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRTtBQUMvQixnQ0FBZ0MsR0FBRyxFQUFFLGdCQUFnQjtBQUNyRCxnQ0FBZ0MsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3BELG9DQUFvQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7QUFDaEUsaUNBQWlDO0FBQ2pDLDZCQUE2QixDQUFDLEVBQUUsQ0FBQztBQUNqQyxnQ0FBZ0MsR0FBRyxFQUFFLFVBQVU7QUFDL0MsZ0NBQWdDLEtBQUssRUFBRSxTQUFTLFFBQVEsQ0FBQyxNQUFNLEVBQUU7QUFDakUsb0NBQW9DLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO0FBQ2pFLHdDQUF3QyxNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7QUFDMUcscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDekUsd0NBQXdDLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0UscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDakUsaUNBQWlDO0FBQ2pDLDZCQUE2QixFQUFFO0FBQy9CLGdDQUFnQyxHQUFHLEVBQUUsY0FBYztBQUNuRCxnQ0FBZ0MsS0FBSyxFQUFFLFNBQVMsWUFBWSxHQUFHO0FBQy9ELG9DQUFvQyxPQUFPLGFBQWEsRUFBRSxDQUFDO0FBQzNELGlDQUFpQztBQUNqQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7QUFDaEM7QUFDQSw0QkFBNEIsT0FBTyxTQUFTLENBQUM7QUFDN0MseUJBQXlCLEVBQUUsQ0FBQztBQUM1QjtBQUNBLG9CQUFvQixPQUFPLFNBQVMsQ0FBQztBQUNyQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzlDO0FBQ0EsZ0JBQWdCLElBQUksZUFBZTtBQUNuQztBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLGVBQWUsQ0FBQyxjQUFjLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUU7QUFDckcsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFDbkU7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDakUsNEJBQTRCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7QUFDL0QsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxZQUFZLENBQUMsVUFBVSxDQUFDO0FBQzFFLGdDQUFnQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUs7QUFDeEQsZ0NBQWdDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQzNGLDZCQUE2QixDQUFDLENBQUM7QUFDL0IsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ2xELDRCQUE0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUM7QUFDbEYsZ0NBQWdDLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztBQUN2RCxnQ0FBZ0MsWUFBWSxFQUFFLE1BQU0sQ0FBQyxVQUFVO0FBQy9ELDZCQUE2QixDQUFDLENBQUM7QUFDL0IsNEJBQTRCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0FBQzFELDRCQUE0QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBQzVELDRCQUE0QixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztBQUNoRSw0QkFBNEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDcEQsNEJBQTRCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ3RELDRCQUE0QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNoRCw0QkFBNEIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7QUFDbkQsNEJBQTRCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQy9GLDRCQUE0QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUN2RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ3ZELDRCQUE0QixHQUFHLEVBQUUsU0FBUztBQUMxQyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsT0FBTyxHQUFHO0FBQ3RELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDbEQ7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDNUQsb0NBQW9DLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztBQUMxRSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEQsZ0NBQWdDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQzlGO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO0FBQzlELG9DQUFvQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGlEQUFpRCxDQUFDLENBQUMsQ0FBQztBQUNsSSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2hELGdDQUFnQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksRUFBRTtBQUN2RSxvQ0FBb0MsSUFBSSxJQUFJLEVBQUU7QUFDOUMsd0NBQXdDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDckUscUNBQXFDO0FBQ3JDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsZ0NBQWdDLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0FBQ3BELGdDQUFnQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztBQUN2RCxnQ0FBZ0MsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hHLGdDQUFnQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3hELGdDQUFnQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO0FBQ3JFLG9DQUFvQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzlEO0FBQ0Esb0NBQW9DLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUMvRCx3Q0FBd0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ2xGLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7QUFDL0Qsd0NBQXdDLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDeEU7QUFDQSx3Q0FBd0MsTUFBTSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDckUscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN2RSxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEUsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztBQUN0RSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxxQkFBcUI7QUFDdEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLG1CQUFtQixHQUFHO0FBQ2xFLGdDQUFnQyxJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYztBQUN4RSxvQ0FBb0MsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDbkUsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNyRixvQ0FBb0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQ3REO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0Usb0NBQW9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUMzRjtBQUNBLG9DQUFvQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUNqRix3Q0FBd0MsTUFBTSxDQUFDLGFBQWEsR0FBRztBQUMvRCw0Q0FBNEMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNO0FBQzlELDRDQUE0QyxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7QUFDNUQseUNBQXlDLENBQUM7QUFDMUMscUNBQXFDLENBQUM7QUFDdEM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZO0FBQzlELHdDQUF3QyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRTtBQUN4Riw0Q0FBNEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUs7QUFDbkUsZ0RBQWdELElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2xFO0FBQ0EsNENBQTRDLElBQUksSUFBSSxFQUFFO0FBQ3RELGdEQUFnRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0QsZ0RBQWdELE9BQU87QUFDdkQsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRiw0Q0FBNEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVGLHlDQUF5QyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQ25FLDRDQUE0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELHlDQUF5QyxDQUFDLENBQUM7QUFDM0MscUNBQXFDLENBQUM7QUFDdEM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLE1BQU0sRUFBRTtBQUN0RSx3Q0FBd0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUUscUNBQXFDLENBQUM7QUFDdEMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsb0JBQW9CLEVBQUUsVUFBVSxJQUFJLEVBQUU7QUFDeEYsb0NBQW9DLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2RDtBQUNBLG9DQUFvQyxJQUFJLGlCQUFpQixHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDakcsb0NBQW9DLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDdEUsb0NBQW9DLFVBQVUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDN0Usd0NBQXdDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUU7QUFDOUcsNENBQTRDLElBQUksT0FBTyxDQUFDLGFBQWEsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQ2pHLGdEQUFnRCxXQUFXLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM5Riw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUNuRixnREFBZ0QsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQzVFLG9EQUFvRCxXQUFXLENBQUMsVUFBVSxDQUFDO0FBQzNFLHdEQUF3RCxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU07QUFDMUUsd0RBQXdELEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztBQUN4RSxxREFBcUQsQ0FBQyxDQUFDO0FBQ3ZELGlEQUFpRDtBQUNqRCw2Q0FBNkMsQ0FBQztBQUM5Qyx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsaUJBQWlCLENBQUMsT0FBTyxDQUFDO0FBQ2xFLDRDQUE0QyxvQkFBb0IsRUFBRSxVQUFVLENBQUMsb0JBQW9CO0FBQ2pHLDRDQUE0QyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsZ0JBQWdCO0FBQ3pGLDRDQUE0QyxhQUFhLEVBQUUsVUFBVSxDQUFDLGFBQWE7QUFDbkYseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUMsRUFBRSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqRSxvQ0FBb0MsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7QUFDckUsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxJQUFJLEVBQUUsSUFBSSxFQUFFO0FBQzFGLG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzNFO0FBQ0Esb0NBQW9DLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9HO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxNQUFNLEdBQUcsWUFBWTtBQUM5RCx3Q0FBd0MsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRTtBQUNqRiw0Q0FBNEMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUs7QUFDbkUsZ0RBQWdELElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQ2xFO0FBQ0EsNENBQTRDLElBQUksSUFBSSxFQUFFO0FBQ3RELGdEQUFnRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDN0QsZ0RBQWdELE9BQU87QUFDdkQsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRiw0Q0FBNEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVGLHlDQUF5QyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQ25FLDRDQUE0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELHlDQUF5QyxDQUFDLENBQUM7QUFDM0MscUNBQXFDLENBQUM7QUFDdEM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLE1BQU0sRUFBRTtBQUN0RSx3Q0FBd0MsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRSxxQ0FBcUMsQ0FBQztBQUN0QyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxnQ0FBZ0MsY0FBYyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxLQUFLLEVBQUU7QUFDN0Usb0NBQW9DLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDaEUsb0NBQW9DLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNyRSxvQ0FBb0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDeEc7QUFDQSxvQ0FBb0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3RGLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLGdDQUFnQyxjQUFjLENBQUMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsU0FBUyxFQUFFO0FBQzFGLG9DQUFvQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDdkQ7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDcEc7QUFDQSxvQ0FBb0MsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFO0FBQ2hFLHdDQUF3QyxJQUFJLGNBQWMsR0FBRyxTQUFTLGNBQWMsQ0FBQyxRQUFRLEVBQUU7QUFDL0YsNENBQTRDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7QUFDaEYsZ0RBQWdELFFBQVEsRUFBRSxRQUFRO0FBQ2xFLDZDQUE2QyxDQUFDLENBQUM7QUFDL0MseUNBQXlDLENBQUM7QUFDMUM7QUFDQSx3Q0FBd0MsSUFBSTtBQUM1Qyw0Q0FBNEMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25HLHlDQUF5QyxDQUFDLE9BQU8sRUFBRSxFQUFFO0FBQ3JELDRDQUE0QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLHlDQUF5QztBQUN6QyxxQ0FBcUMsTUFBTTtBQUMzQyx3Q0FBd0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3hJLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUM7QUFDNUUsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsbUJBQW1CLEVBQUUsVUFBVSxTQUFTLEVBQUU7QUFDNUYsb0NBQW9DLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDbkksaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsU0FBUyxFQUFFO0FBQ3JGLG9DQUFvQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNySCxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxnQ0FBZ0MsY0FBYyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxTQUFTLEVBQUU7QUFDckYsb0NBQW9DLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3JILGlDQUFpQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLGdDQUFnQyxjQUFjLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLFVBQVUsU0FBUyxFQUFFO0FBQzdGLG9DQUFvQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9JLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLGdDQUFnQyxjQUFjLENBQUMsRUFBRSxDQUFDLGNBQWMsRUFBRSxVQUFVLFNBQVMsRUFBRTtBQUN2RixvQ0FBb0MsV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUMxSSxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxnQ0FBZ0MsY0FBYyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsVUFBVSxJQUFJLEVBQUU7QUFDaEYsb0NBQW9DLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUNoRSx3Q0FBd0MsV0FBVyxDQUFDLFVBQVUsQ0FBQztBQUMvRCw0Q0FBNEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0FBQy9ELDRDQUE0QyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDOUQseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5RSxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxnQ0FBZ0MsY0FBYyxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLElBQUksRUFBRTtBQUNyRixvQ0FBb0MsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ3hELHdDQUF3QyxPQUFPO0FBQy9DLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5RTtBQUNBLG9DQUFvQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN4RTtBQUNBLG9DQUFvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUYsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxJQUFJLEVBQUU7QUFDckYsb0NBQW9DLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN4RCx3Q0FBd0MsT0FBTztBQUMvQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUU7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFGLGlDQUFpQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLGdDQUFnQyxjQUFjLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxVQUFVLElBQUksRUFBRTtBQUMvRSxvQ0FBb0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3ZEO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN4RCx3Q0FBd0MsT0FBTztBQUMvQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDdkUsd0NBQXdDLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3JELHdDQUF3QyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2RCx3Q0FBd0MsWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRTtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2pFLHdDQUF3QyxPQUFPO0FBQy9DLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxRQUFRLElBQUk7QUFDaEQsd0NBQXdDLEtBQUssTUFBTTtBQUNuRCw0Q0FBNEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN0RTtBQUNBLDRDQUE0QyxJQUFJLE9BQU8sSUFBSSxZQUFZLEVBQUU7QUFDekUsZ0RBQWdELElBQUksYUFBYSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7QUFDdkYsZ0RBQWdELElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUNySCxnREFBZ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzNGLGdEQUFnRCxNQUFNO0FBQ3RELDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDcEU7QUFDQSw0Q0FBNEMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtBQUNySixnREFBZ0QsWUFBWSxHQUFHO0FBQy9ELG9EQUFvRCxZQUFZLEVBQUUsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUNuRyx3REFBd0QsYUFBYSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BILHFEQUFxRDtBQUNyRCxpREFBaUQsQ0FBQztBQUNsRCw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxZQUFZLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRTtBQUNyRyxnREFBZ0QsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0FBQ3ZGLGdEQUFnRCxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWU7QUFDdkYsZ0RBQWdELFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtBQUNqRixnREFBZ0Qsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDM0csZ0RBQWdELFlBQVksRUFBRSxZQUFZO0FBQzFFLDZDQUE2QyxDQUFDLENBQUM7QUFDL0MsNENBQTRDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO0FBQ3hGLGdEQUFnRCxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckYsNkNBQTZDLEVBQUUsVUFBVSxNQUFNLEVBQUU7QUFDakUsZ0RBQWdELGNBQWMsQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFO0FBQy9GLG9EQUFvRCxFQUFFLEVBQUUsRUFBRTtBQUMxRCxpREFBaUQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZO0FBQ3ZFLG9EQUFvRCxPQUFPLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekYsaURBQWlELENBQUMsQ0FBQztBQUNuRCw2Q0FBNkMsQ0FBQyxDQUFDO0FBQy9DLDRDQUE0QyxNQUFNO0FBQ2xEO0FBQ0Esd0NBQXdDLEtBQUssVUFBVTtBQUN2RCw0Q0FBNEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3RGLDRDQUE0QyxNQUFNO0FBQ2xEO0FBQ0Esd0NBQXdDO0FBQ3hDLDRDQUE0QyxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVHLHFDQUFxQztBQUNyQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxnQ0FBZ0MsY0FBYyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsVUFBVSxJQUFJLEVBQUU7QUFDekUsb0NBQW9DLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN4RCx3Q0FBd0MsT0FBTztBQUMvQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxNQUFNLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7QUFDeEUsd0NBQXdDLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RELHdDQUF3QyxTQUFTLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUM3RCx3Q0FBd0MsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEQsd0NBQXdDLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQ7QUFDQSxvQ0FBb0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM5RTtBQUNBLG9DQUFvQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hFLHdDQUF3QyxPQUFPO0FBQy9DLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxRQUFRLElBQUk7QUFDaEQsd0NBQXdDLEtBQUssWUFBWTtBQUN6RCw0Q0FBNEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDMUYsZ0RBQWdELElBQUksR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7QUFDdEU7QUFDQSxnREFBZ0QsR0FBRyxDQUFDLE1BQU0sR0FBRyxZQUFZO0FBQ3pFLG9EQUFvRCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakUsaURBQWlELENBQUM7QUFDbEQ7QUFDQSxnREFBZ0QsR0FBRyxDQUFDLE9BQU8sR0FBRyxZQUFZO0FBQzFFLG9EQUFvRCxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO0FBQ3pHLGlEQUFpRCxDQUFDO0FBQ2xEO0FBQ0EsZ0RBQWdELEdBQUcsQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDO0FBQ3BFLDZDQUE2QyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFO0FBQ25FLGdEQUFnRCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEYsNkNBQTZDLENBQUMsQ0FBQztBQUMvQztBQUNBLHdDQUF3QyxLQUFLLE9BQU87QUFDcEQsNENBQTRDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRiw0Q0FBNEMsSUFBSSx1QkFBdUIsR0FBRyxPQUFPLENBQUM7QUFDbEY7QUFDQSw0Q0FBNEMsSUFBSSxTQUFTLElBQUksTUFBTSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsRUFBRTtBQUNySSxnREFBZ0QsU0FBUyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztBQUNwRiw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsTUFBTTtBQUNsRDtBQUNBLHdDQUF3QztBQUN4Qyw0Q0FBNEMsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRyxxQ0FBcUM7QUFDckMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFVBQVUsSUFBSSxFQUFFO0FBQ2pGLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDeEQsd0NBQXdDLE9BQU87QUFDL0MscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRTtBQUNoRSx3Q0FBd0MsV0FBVyxDQUFDLFVBQVUsQ0FBQztBQUMvRCw0Q0FBNEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO0FBQy9ELDRDQUE0QyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDN0QseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLFVBQVUsSUFBSSxFQUFFO0FBQy9FLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDeEQsd0NBQXdDLE9BQU87QUFDL0MscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRixvQ0FBb0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckY7QUFDQSxvQ0FBb0MsSUFBSSxXQUFXLENBQUMsc0JBQXNCLEVBQUU7QUFDNUUsd0NBQXdDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlGLHFDQUFxQyxNQUFNO0FBQzNDLHdDQUF3QyxNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRSxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFO0FBQ2xFLHdDQUF3QyxXQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDbEY7QUFDQSx3Q0FBd0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pHLDRDQUE0QyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDN0YseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6QyxnQ0FBZ0MsY0FBYyxDQUFDLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUcsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFVBQVUsSUFBSSxFQUFFO0FBQ2hGLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDeEQsd0NBQXdDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7QUFDakcscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksT0FBTyxRQUFRLEtBQUssV0FBVyxFQUFFO0FBQ3pFLHdDQUF3QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN4RSx3Q0FBd0MsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDNUQsd0NBQXdDLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxvQ0FBb0MsSUFBSSxVQUFVLEtBQUssQ0FBQyxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7QUFDOUUsd0NBQXdDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLENBQUM7QUFDN0gscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ2xGLHdDQUF3QyxJQUFJLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO0FBQzlEO0FBQ0Esd0NBQXdDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsWUFBWTtBQUNqRSw0Q0FBNEMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQztBQUNsRSw0Q0FBNEMsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUNwRSw0Q0FBNEMsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUN0RSw0Q0FBNEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUN0RSw0Q0FBNEMsSUFBSSxHQUFHLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLENBQUM7QUFDL0YsNENBQTRDLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0YsNENBQTRDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3BFLDRDQUE0QyxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN0RSw0Q0FBNEMsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRiw0Q0FBNEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLDRDQUE0QyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyRztBQUNBLDRDQUE0QyxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7QUFDbEUsZ0RBQWdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdkcsb0RBQW9ELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckUsb0RBQW9ELEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RSxvREFBb0QsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdFLGlEQUFpRDtBQUNqRCw2Q0FBNkMsTUFBTSxJQUFJLFVBQVUsS0FBSyxDQUFDLEVBQUU7QUFDekUsZ0RBQWdELEtBQUssSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFO0FBQzVHLG9EQUFvRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hFLGlEQUFpRDtBQUNqRCw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsT0FBTyxDQUFDO0FBQ3BELGdEQUFnRCxJQUFJLEVBQUUsR0FBRztBQUN6RCxnREFBZ0QsS0FBSyxFQUFFLEtBQUs7QUFDNUQsZ0RBQWdELE1BQU0sRUFBRSxNQUFNO0FBQzlELDZDQUE2QyxDQUFDLENBQUM7QUFDL0MseUNBQXlDLENBQUM7QUFDMUM7QUFDQSx3Q0FBd0MsR0FBRyxDQUFDLE9BQU8sR0FBRyxZQUFZO0FBQ2xFLDRDQUE0QyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLHlDQUF5QyxDQUFDO0FBQzFDO0FBQ0Esd0NBQXdDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQzNELHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsaUNBQWlDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDekMsZ0NBQWdDLGNBQWMsQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxJQUFJLEVBQUU7QUFDdEYsb0NBQW9DLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtBQUN4RCx3Q0FBd0MsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUNqRyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO0FBQ3hFLHdDQUF3QyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDdkQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6Qyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSx1QkFBdUI7QUFDeEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLHFCQUFxQixDQUFDLE1BQU0sRUFBRTtBQUMxRSxnQ0FBZ0MsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztBQUNqRTtBQUNBLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDcEQsb0NBQW9DLE9BQU87QUFDM0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsRUFBRTtBQUMzRSxvQ0FBb0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNyRixpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsU0FBUztBQUMxQyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsT0FBTyxHQUFHO0FBQ3RELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1Riw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsVUFBVSxFQUFFO0FBQ2hFLGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkQ7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxJQUFJLENBQUMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtBQUNwSCxvQ0FBb0MsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUM3RixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxTQUFTLEdBQUcsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUMvRDtBQUNBLGdDQUFnQyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO0FBQ3BFLG9DQUFvQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRTtBQUM3RixvQ0FBb0MsU0FBUyxFQUFFLFNBQVM7QUFDeEQsaUNBQWlDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxRQUFRLEVBQUU7QUFDNUQsb0NBQW9DLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtBQUMzRCx3Q0FBd0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQy9FLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RILG9DQUFvQyxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4RSxvQ0FBb0MsT0FBTyxJQUFJLENBQUM7QUFDaEQsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyxnQ0FBZ0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDdkUsZ0NBQWdDLE9BQU8sT0FBTyxDQUFDO0FBQy9DLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGNBQWM7QUFDL0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFlBQVksQ0FBQyxHQUFHLEVBQUU7QUFDOUQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFO0FBQzNGLG9DQUFvQyxHQUFHLEVBQUUsR0FBRztBQUM1QyxpQ0FBaUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLE1BQU0sRUFBRTtBQUMzRCxvQ0FBb0MsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDN0UsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0I7QUFDakQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGNBQWMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQzlFLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFO0FBQzdGLG9DQUFvQyxTQUFTLEVBQUUsU0FBUztBQUN4RCxvQ0FBb0MsTUFBTSxFQUFFLE1BQU07QUFDbEQsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxpQkFBaUI7QUFDbEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGVBQWUsR0FBRztBQUM5RCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNwRyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0I7QUFDakQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGNBQWMsQ0FBQyxFQUFFLEVBQUU7QUFDL0QsZ0NBQWdDLElBQUksT0FBTyxFQUFFLEtBQUssUUFBUSxFQUFFO0FBQzVELG9DQUFvQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFO0FBQzdGLG9DQUFvQyxFQUFFLEVBQUUsRUFBRTtBQUMxQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGFBQWEsR0FBRztBQUM1RCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEcsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsYUFBYTtBQUM5Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsV0FBVyxHQUFHO0FBQzFELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoRyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSwwQkFBMEI7QUFDM0QsNEJBQTRCLEtBQUssRUFBRSxTQUFTLHdCQUF3QixHQUFHO0FBQ3ZFLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdHLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGdCQUFnQjtBQUNqRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsY0FBYyxHQUFHO0FBQzdELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25HLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGFBQWEsR0FBRztBQUM1RCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEcsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsWUFBWTtBQUM3Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQ3pELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMvRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxnQkFBZ0I7QUFDakQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGNBQWMsR0FBRztBQUM3RCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNuRyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxhQUFhO0FBQzlDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxXQUFXLEdBQUc7QUFDMUQsZ0NBQWdDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUNuRDtBQUNBLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxPQUFPLEVBQUU7QUFDeEgsb0NBQW9DLE9BQU87QUFDM0Msd0NBQXdDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3hELHdDQUF3QyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO0FBQ3hHLHdDQUF3QywwQkFBMEIsRUFBRSxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUk7QUFDN0gscUNBQXFDLENBQUM7QUFDdEMsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxVQUFVO0FBQzNDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxRQUFRLEdBQUc7QUFDdkQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzdGLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGNBQWM7QUFDL0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFlBQVksR0FBRztBQUMzRCxnQ0FBZ0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25EO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWTtBQUN0RyxvQ0FBb0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEcsd0NBQXdDLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEU7QUFDQSx3Q0FBd0MsSUFBSSxJQUFJLEVBQUU7QUFDbEQsNENBQTRDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzRCx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0Q7QUFDQSxvQ0FBb0MsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUMvRCxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUMxRCxnQ0FBZ0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRTtBQUNoRixvQ0FBb0MsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLGdCQUFnQjtBQUM3RSxvQ0FBb0Msc0JBQXNCLEVBQUUsTUFBTSxDQUFDLHNCQUFzQjtBQUN6RixvQ0FBb0MsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlO0FBQzNFLG9DQUFvQyx5QkFBeUIsRUFBRSxNQUFNLENBQUMseUJBQXlCO0FBQy9GLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLGVBQWUsQ0FBQztBQUMvQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLElBQUksVUFBVTtBQUM5QjtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLFVBQVUsR0FBRztBQUM5Qyw0QkFBNEIsZUFBZSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM5RDtBQUNBLDRCQUE0QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0QseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNsRCw0QkFBNEIsR0FBRyxFQUFFLFlBQVk7QUFDN0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFVBQVUsQ0FBQyxLQUFLLEVBQUU7QUFDOUQsZ0NBQWdDLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN2RCxvQ0FBb0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUc7QUFDM0Qsb0NBQW9DLFVBQVUsRUFBRSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRztBQUNwRixvQ0FBb0MsSUFBSSxFQUFFLElBQUk7QUFDOUMsb0NBQW9DLFFBQVEsRUFBRSxLQUFLO0FBQ25ELGlDQUFpQyxDQUFDO0FBQ2xDLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLEtBQUs7QUFDdEMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLEdBQUcsQ0FBQyxLQUFLLEVBQUU7QUFDdkQsZ0NBQWdDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN4SDtBQUNBLGdDQUFnQyxJQUFJLFFBQVEsRUFBRTtBQUM5QyxvQ0FBb0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM3RjtBQUNBLG9DQUFvQyxPQUFPLElBQUksQ0FBQztBQUNoRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RDtBQUNBLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRTtBQUMzRCxvQ0FBb0MsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckgsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztBQUNoRCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxLQUFLO0FBQ3RDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFO0FBQ3ZELGdDQUFnQyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzVELGdDQUFnQyxPQUFPLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztBQUNsRSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtBQUNqRSxnQ0FBZ0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRTtBQUNBLGdDQUFnQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNwRCxnQ0FBZ0MsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDaEQsZ0NBQWdDLEdBQUcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzdELDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLE9BQU87QUFDeEMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBRztBQUNwRCxnQ0FBZ0MsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pFLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxVQUFVLENBQUM7QUFDMUMscUJBQXFCLEVBQUUsQ0FBQztBQUN4QjtBQUNBLGdCQUFnQixJQUFJLFVBQVU7QUFDOUI7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQyx3QkFBd0IsU0FBUyxVQUFVLENBQUMsa0JBQWtCLEVBQUU7QUFDaEUsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDOUQ7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDO0FBQzFFLDRCQUE0QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUNuRCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQ2xELDRCQUE0QixHQUFHLEVBQUUsUUFBUTtBQUN6Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsTUFBTSxHQUFHO0FBQ3JELGdDQUFnQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDbEUsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsTUFBTTtBQUN2Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUU7QUFDMUUsZ0NBQWdDLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRSwyREFBMkQsQ0FBQyxDQUFDO0FBQ25ILGdDQUFnQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hGLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFNBQVM7QUFDMUMsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztBQUNuRiw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esd0JBQXdCLE9BQU8sVUFBVSxDQUFDO0FBQzFDLHFCQUFxQixFQUFFLENBQUM7QUFDeEI7QUFDQSxnQkFBZ0IsSUFBSSxrQkFBa0IsR0FBRyxTQUFTLHlCQUF5QixHQUFHO0FBQzlFLG9CQUFvQixJQUFJLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDMUQ7QUFDQSxvQkFBb0IsSUFBSSxrQkFBa0I7QUFDMUM7QUFDQSx3QkFBd0IsWUFBWTtBQUNwQyw0QkFBNEIsU0FBUyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUU7QUFDaEUsZ0NBQWdDLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRO0FBQzlELG9DQUFvQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU07QUFDMUQsb0NBQW9DLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSTtBQUN0RCxvQ0FBb0MsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVO0FBQ2xFLG9DQUFvQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVk7QUFDdEUsb0NBQW9DLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVTtBQUNsRSxvQ0FBb0MsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhO0FBQ3hFLG9DQUFvQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVk7QUFDdEUsb0NBQW9DLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyx3QkFBd0I7QUFDM0Ysb0NBQW9DLHdCQUF3QixHQUFHLHFCQUFxQixLQUFLLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxxQkFBcUI7QUFDL0gsb0NBQW9DLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTTtBQUNqRSxvQ0FBb0MsTUFBTSxHQUFHLGFBQWEsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsYUFBYTtBQUM3RixvQ0FBb0MsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDckU7QUFDQSxnQ0FBZ0MsZUFBZSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3pELGdDQUFnQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyRCxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakQsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzdELGdDQUFnQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUM1RCxnQ0FBZ0MsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDakUsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzdELGdDQUFnQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUNuRSxnQ0FBZ0MsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDakUsZ0NBQWdDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0FBQ3RELGdDQUFnQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUNyRCxnQ0FBZ0MsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUNsRSxnQ0FBZ0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDM0QsZ0NBQWdDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyx3QkFBd0IsS0FBSyxJQUFJLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxDQUFDO0FBQ3BJLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN2RCxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQ3ZGLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pFLGdDQUFnQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hGLGdDQUFnQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEYsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEUsZ0NBQWdDLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7QUFDM0UsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQy9ELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixZQUFZLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUM5RCxnQ0FBZ0MsR0FBRyxFQUFFLG9CQUFvQjtBQUN6RCxnQ0FBZ0MsS0FBSyxFQUFFLFNBQVMsa0JBQWtCLEdBQUc7QUFDckUsb0NBQW9DLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNqSTtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDeEQsd0NBQXdDLE9BQU87QUFDL0MscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0RCx3Q0FBd0MsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO0FBQ2pGLDRDQUE0QyxNQUFNLElBQUksS0FBSyxDQUFDLGtFQUFrRSxHQUFHLDBEQUEwRCxHQUFHLHlCQUF5QixDQUFDLENBQUM7QUFDek4seUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUUscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUU7QUFDOUksd0NBQXdDLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEgsd0NBQXdDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM3RSx3Q0FBd0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3ZHLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTTtBQUNsRSx3Q0FBd0MsYUFBYSxHQUFHLFlBQVksQ0FBQyxhQUFhO0FBQ2xGLHdDQUF3QyxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQVE7QUFDeEUsd0NBQXdDLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUztBQUMxRSx3Q0FBd0MsVUFBVSxHQUFHLFlBQVksQ0FBQyxVQUFVO0FBQzVFLHdDQUF3QyxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsQ0FBQztBQUM3RSxvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMxTCxvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDMUQsd0NBQXdDLFNBQVMsRUFBRSxTQUFTO0FBQzVELHdDQUF3QyxRQUFRLEVBQUUsUUFBUTtBQUMxRCx3Q0FBd0MsWUFBWSxFQUFFLFlBQVk7QUFDbEUsd0NBQXdDLFVBQVUsRUFBRSxVQUFVO0FBQzlELHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsb0NBQW9DLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzdELG9DQUFvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztBQUM5RDtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUNwRSx3Q0FBd0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7QUFDckUscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRTtBQUMvQixnQ0FBZ0MsR0FBRyxFQUFFLFFBQVE7QUFDN0MsZ0NBQWdDLEtBQUssRUFBRSxTQUFTLE1BQU0sR0FBRztBQUN6RCxvQ0FBb0MsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pILG9DQUFvQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztBQUN6RCxvQ0FBb0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDMUQ7QUFDQSxvQ0FBb0MsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2xELHdDQUF3QyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzlELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDdEQsd0NBQXdDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDL0UscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksVUFBVSxDQUFDLDJCQUEyQixDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUN2SyxpQ0FBaUM7QUFDakMsNkJBQTZCLEVBQUU7QUFDL0IsZ0NBQWdDLEdBQUcsRUFBRSxxQkFBcUI7QUFDMUQsZ0NBQWdDLEtBQUssRUFBRSxTQUFTLG1CQUFtQixHQUFHO0FBQ3RFLG9DQUFvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUM3RCx3Q0FBd0MsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUN6RSw0Q0FBNEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7QUFDN0YseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLE9BQU87QUFDL0MscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0RCx3Q0FBd0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0YscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUN0RCx3Q0FBd0MsT0FBTztBQUMvQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3JELGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRTtBQUMvQixnQ0FBZ0MsR0FBRyxFQUFFLFdBQVc7QUFDaEQsZ0NBQWdDLEtBQUssRUFBRSxTQUFTLFNBQVMsR0FBRztBQUM1RCxvQ0FBb0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDeEQ7QUFDQSxvQ0FBb0MsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQ3hELHdDQUF3QyxPQUFPO0FBQy9DLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQzlELHdDQUF3QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN0RixxQ0FBcUMsTUFBTTtBQUMzQyx3Q0FBd0MsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQzdELHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakMsNkJBQTZCLEVBQUU7QUFDL0IsZ0NBQWdDLEdBQUcsRUFBRSxlQUFlO0FBQ3BELGdDQUFnQyxLQUFLLEVBQUUsU0FBUyxhQUFhLEdBQUc7QUFDaEUsb0NBQW9DLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQztBQUN2RDtBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtBQUN4RSx3Q0FBd0MsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFlBQVk7QUFDakYsNENBQTRDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNyRyx5Q0FBeUMsQ0FBQyxDQUFDO0FBQzNDLHFDQUFxQyxNQUFNO0FBQzNDLHdDQUF3QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDZCQUE2QixFQUFFO0FBQy9CLGdDQUFnQyxHQUFHLEVBQUUsT0FBTztBQUM1QyxnQ0FBZ0MsS0FBSyxFQUFFLFlBQVk7QUFDbkQsb0NBQW9DLElBQUksTUFBTSxHQUFHLGlCQUFpQjtBQUNsRTtBQUNBLHdDQUF3QyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLE9BQU8sR0FBRztBQUNyRiw0Q0FBNEMsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLFFBQVEsQ0FBQyxRQUFRLEVBQUU7QUFDekcsZ0RBQWdELE9BQU8sQ0FBQyxFQUFFO0FBQzFELG9EQUFvRCxRQUFRLFFBQVEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUk7QUFDekYsd0RBQXdELEtBQUssQ0FBQztBQUM5RCw0REFBNEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDakYsZ0VBQWdFLFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2xGLGdFQUFnRSxNQUFNO0FBQ3RFLDZEQUE2RDtBQUM3RDtBQUNBLDREQUE0RCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0Y7QUFDQSx3REFBd0QsS0FBSyxDQUFDO0FBQzlELDREQUE0RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzVMO0FBQ0EsNERBQTRELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFDN0gsZ0VBQWdFLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ3JGO0FBQ0EsZ0VBQWdFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUU7QUFDakcsb0VBQW9FLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDMUY7QUFDQSxvRUFBb0UsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO0FBQ3RGLHdFQUF3RSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9HLHFFQUFxRTtBQUNyRTtBQUNBLG9FQUFvRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDcEYsaUVBQWlFO0FBQ2pFLDZEQUE2RDtBQUM3RDtBQUNBLHdEQUF3RCxLQUFLLENBQUMsQ0FBQztBQUMvRCx3REFBd0QsS0FBSyxLQUFLO0FBQ2xFLDREQUE0RCxPQUFPLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuRixxREFBcUQ7QUFDckQsaURBQWlEO0FBQ2pELDZDQUE2QyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM5RCx5Q0FBeUMsQ0FBQyxDQUFDLENBQUM7QUFDNUM7QUFDQSxvQ0FBb0MsU0FBUyxLQUFLLEdBQUc7QUFDckQsd0NBQXdDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDN0UscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sS0FBSyxDQUFDO0FBQ2pELGlDQUFpQyxFQUFFO0FBQ25DLDZCQUE2QixDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLDRCQUE0QixPQUFPLGtCQUFrQixDQUFDO0FBQ3RELHlCQUF5QixFQUFFLENBQUM7QUFDNUI7QUFDQSxvQkFBb0IsT0FBTyxrQkFBa0IsQ0FBQztBQUM5QyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLElBQUksT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUN4QyxnQkFBZ0IsT0FBTyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDMUMsZ0JBQWdCLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUN2QyxnQkFBZ0IsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDdEM7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBRzlFO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLEVBQUUsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMvVztBQUNBLGdCQUFnQixJQUFJLENBQUMsR0FBRyxZQUFZO0FBQ3BDLG9CQUFvQixPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFdBQVcsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDcEgsaUJBQWlCLEVBQUUsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztBQUNqRDtBQUNBLGdCQUFnQixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsa0JBQWtCLElBQUksTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxSCxnQkFBZ0IsSUFBSSxVQUFVLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQztBQUNwRSxnQkFBZ0IsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztBQUNqRCxnQkFBZ0IsTUFBTSxDQUFDLE9BQU8sR0FBRywrQkFBK0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RTtBQUNBLGdCQUFnQixJQUFJLFVBQVUsRUFBRTtBQUNoQyxvQkFBb0IsQ0FBQyxDQUFDLGtCQUFrQixHQUFHLFVBQVUsQ0FBQztBQUN0RCxpQkFBaUIsTUFBTTtBQUN2QixvQkFBb0IsSUFBSTtBQUN4Qix3QkFBd0IsT0FBTyxDQUFDLENBQUMsa0JBQWtCLENBQUM7QUFDcEQscUJBQXFCLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDaEMsd0JBQXdCLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxTQUFTLENBQUM7QUFDekQscUJBQXFCO0FBQ3JCLGlCQUFpQjtBQUNqQjtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUUsMkNBQTJDLENBQUMsU0FBUyxNQUFNLEVBQUU7QUFDN0Q7QUFDQSxvQkFBb0IsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxFQUFFLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDblg7QUFDQSxvQkFBb0IsQ0FBQyxVQUFVLE1BQU0sRUFBRTtBQUV2QztBQUNBLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO0FBQ2xELHdCQUF3QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDO0FBQ3ZELHdCQUF3QixJQUFJSixXQUFTLENBQUM7QUFDdEMsd0JBQXdCLElBQUksT0FBTyxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsR0FBRyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2pGLHdCQUF3QixJQUFJLGNBQWMsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQztBQUM5RSx3QkFBd0IsSUFBSSxtQkFBbUIsR0FBRyxPQUFPLENBQUMsYUFBYSxJQUFJLGlCQUFpQixDQUFDO0FBQzdGLHdCQUF3QixJQUFJLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxXQUFXLElBQUksZUFBZSxDQUFDO0FBQ3ZGLHdCQUF3QixJQUFJLFFBQVEsR0FBRyxFQUFzQixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQzNGLHdCQUF3QixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUM7QUFDaEU7QUFDQSx3QkFBd0IsSUFBSSxPQUFPLEVBQUU7QUFDckMsNEJBQTRCLElBQUksUUFBUSxFQUFFO0FBQzFDLGdDQUFnQyxNQUFNLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN6RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsT0FBTztBQUNuQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsR0FBRyxRQUFRLEdBQUcsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDN0Y7QUFDQSx3QkFBd0IsU0FBUyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQzNFLDRCQUE0QixJQUFJLGNBQWMsR0FBRyxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsWUFBWSxTQUFTLEdBQUcsT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUN6SCw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDcEYsNEJBQTRCLElBQUksT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUN6RSw0QkFBNEIsU0FBUyxDQUFDLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pGLDRCQUE0QixPQUFPLFNBQVMsQ0FBQztBQUM3Qyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDNUM7QUFDQSx3QkFBd0IsU0FBUyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7QUFDeEQsNEJBQTRCLElBQUk7QUFDaEMsZ0NBQWdDLE9BQU87QUFDdkMsb0NBQW9DLElBQUksRUFBRSxRQUFRO0FBQ2xELG9DQUFvQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzFELGlDQUFpQyxDQUFDO0FBQ2xDLDZCQUE2QixDQUFDLE9BQU8sR0FBRyxFQUFFO0FBQzFDLGdDQUFnQyxPQUFPO0FBQ3ZDLG9DQUFvQyxJQUFJLEVBQUUsT0FBTztBQUNqRCxvQ0FBb0MsR0FBRyxFQUFFLEdBQUc7QUFDNUMsaUNBQWlDLENBQUM7QUFDbEMsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDO0FBQ3RFLHdCQUF3QixJQUFJLHNCQUFzQixHQUFHLGdCQUFnQixDQUFDO0FBQ3RFLHdCQUF3QixJQUFJLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQUM1RCx3QkFBd0IsSUFBSSxpQkFBaUIsR0FBRyxXQUFXLENBQUM7QUFDNUQsd0JBQXdCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQ2xEO0FBQ0Esd0JBQXdCLFNBQVMsU0FBUyxHQUFHLEVBQUU7QUFDL0M7QUFDQSx3QkFBd0IsU0FBUyxpQkFBaUIsR0FBRyxFQUFFO0FBQ3ZEO0FBQ0Esd0JBQXdCLFNBQVMsMEJBQTBCLEdBQUcsRUFBRTtBQUNoRTtBQUNBLHdCQUF3QixJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztBQUNuRDtBQUNBLHdCQUF3QixpQkFBaUIsQ0FBQyxjQUFjLENBQUMsR0FBRyxZQUFZO0FBQ3hFLDRCQUE0QixPQUFPLElBQUksQ0FBQztBQUN4Qyx5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDO0FBQzdELHdCQUF3QixJQUFJLHVCQUF1QixHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakc7QUFDQSx3QkFBd0IsSUFBSSx1QkFBdUIsSUFBSSx1QkFBdUIsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxjQUFjLENBQUMsRUFBRTtBQUMvSSw0QkFBNEIsaUJBQWlCLEdBQUcsdUJBQXVCLENBQUM7QUFDeEUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksRUFBRSxHQUFHLDBCQUEwQixDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMvSCx3QkFBd0IsaUJBQWlCLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxXQUFXLEdBQUcsMEJBQTBCLENBQUM7QUFDbEcsd0JBQXdCLDBCQUEwQixDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztBQUNuRix3QkFBd0IsMEJBQTBCLENBQUMsaUJBQWlCLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUM7QUFDNUg7QUFDQSx3QkFBd0IsU0FBUyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUU7QUFDbEUsNEJBQTRCLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDbEYsZ0NBQWdDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFVLEdBQUcsRUFBRTtBQUNuRSxvQ0FBb0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNyRSxpQ0FBaUMsQ0FBQztBQUNsQyw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsbUJBQW1CLEdBQUcsVUFBVSxNQUFNLEVBQUU7QUFDeEUsNEJBQTRCLElBQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQzFGLDRCQUE0QixPQUFPLElBQUksR0FBRyxJQUFJLEtBQUssaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLE1BQU0sbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0FBQ3hJLHlCQUF5QixDQUFDO0FBQzFCO0FBQ0Esd0JBQXdCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUU7QUFDekQsNEJBQTRCLElBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN2RCxnQ0FBZ0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztBQUMxRiw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsTUFBTSxDQUFDLFNBQVMsR0FBRywwQkFBMEIsQ0FBQztBQUM5RTtBQUNBLGdDQUFnQyxJQUFJLEVBQUUsaUJBQWlCLElBQUksTUFBTSxDQUFDLEVBQUU7QUFDcEUsb0NBQW9DLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLG1CQUFtQixDQUFDO0FBQ3BGLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLDRCQUE0QixPQUFPLE1BQU0sQ0FBQztBQUMxQyx5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxFQUFFO0FBQ3ZELDRCQUE0QixPQUFPO0FBQ25DLGdDQUFnQyxPQUFPLEVBQUUsR0FBRztBQUM1Qyw2QkFBNkIsQ0FBQztBQUM5Qix5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixTQUFTLGFBQWEsQ0FBQyxTQUFTLEVBQUU7QUFDMUQsNEJBQTRCLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRTtBQUMxRSxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekY7QUFDQSxnQ0FBZ0MsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUM3RCxvQ0FBb0MsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RCxpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUM1RCxvQ0FBb0MsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUM3RDtBQUNBLG9DQUFvQyxJQUFJLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUFFO0FBQy9HLHdDQUF3QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssRUFBRTtBQUNwRyw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ25GLHlDQUF5QyxFQUFFLFVBQVUsR0FBRyxFQUFFO0FBQzFELDRDQUE0QyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbEYseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLFNBQVMsRUFBRTtBQUM1Rix3Q0FBd0MsTUFBTSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDakUsd0NBQXdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RCxxQ0FBcUMsRUFBRSxVQUFVLEtBQUssRUFBRTtBQUN4RCx3Q0FBd0MsT0FBTyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkYscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksZUFBZSxDQUFDO0FBQ2hEO0FBQ0EsNEJBQTRCLFNBQVMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDMUQsZ0NBQWdDLFNBQVMsMEJBQTBCLEdBQUc7QUFDdEUsb0NBQW9DLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ2xGLHdDQUF3QyxNQUFNLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDN0UscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxlQUFlLEdBQUcsZUFBZSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsMEJBQTBCLENBQUMsR0FBRywwQkFBMEIsRUFBRSxDQUFDO0FBQ3ZMLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNuRCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IscUJBQXFCLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0Esd0JBQXdCLGFBQWEsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsR0FBRyxZQUFZO0FBQ25GLDRCQUE0QixPQUFPLElBQUksQ0FBQztBQUN4Qyx5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixPQUFPLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUM5RDtBQUNBLHdCQUF3QixPQUFPLENBQUMsS0FBSyxHQUFHLFVBQVUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZGLDRCQUE0QixJQUFJLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNwRyw0QkFBNEIsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxNQUFNLEVBQUU7QUFDcEgsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoRiw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QixDQUFDO0FBQzFCO0FBQ0Esd0JBQXdCLFNBQVMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDMUUsNEJBQTRCLElBQUksS0FBSyxHQUFHLHNCQUFzQixDQUFDO0FBQy9ELDRCQUE0QixPQUFPLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7QUFDaEUsZ0NBQWdDLElBQUksS0FBSyxLQUFLLGlCQUFpQixFQUFFO0FBQ2pFLG9DQUFvQyxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixDQUFDLENBQUM7QUFDcEYsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksS0FBSyxLQUFLLGlCQUFpQixFQUFFO0FBQ2pFLG9DQUFvQyxJQUFJLE1BQU0sS0FBSyxPQUFPLEVBQUU7QUFDNUQsd0NBQXdDLE1BQU0sR0FBRyxDQUFDO0FBQ2xELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxPQUFPLFVBQVUsRUFBRSxDQUFDO0FBQ3hELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN4RCxnQ0FBZ0MsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDbEQ7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLEVBQUU7QUFDN0Msb0NBQW9DLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7QUFDcEU7QUFDQSxvQ0FBb0MsSUFBSSxRQUFRLEVBQUU7QUFDbEQsd0NBQXdDLElBQUksY0FBYyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNwRztBQUNBLHdDQUF3QyxJQUFJLGNBQWMsRUFBRTtBQUM1RCw0Q0FBNEMsSUFBSSxjQUFjLEtBQUssZ0JBQWdCLEVBQUUsU0FBUztBQUM5Riw0Q0FBNEMsT0FBTyxjQUFjLENBQUM7QUFDbEUseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO0FBQ25FLHdDQUF3QyxPQUFPLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUNuRixxQ0FBcUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssT0FBTyxFQUFFO0FBQzNFLHdDQUF3QyxJQUFJLEtBQUssS0FBSyxzQkFBc0IsRUFBRTtBQUM5RSw0Q0FBNEMsS0FBSyxHQUFHLGlCQUFpQixDQUFDO0FBQ3RFLDRDQUE0QyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDOUQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0UscUNBQXFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRTtBQUM1RSx3Q0FBd0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlFLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxLQUFLLEdBQUcsaUJBQWlCLENBQUM7QUFDOUQsb0NBQW9DLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2xGO0FBQ0Esb0NBQW9DLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDbEUsd0NBQXdDLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxHQUFHLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDO0FBQzFHO0FBQ0Esd0NBQXdDLElBQUksTUFBTSxDQUFDLEdBQUcsS0FBSyxnQkFBZ0IsRUFBRTtBQUM3RSw0Q0FBNEMsU0FBUztBQUNyRCx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsT0FBTztBQUMvQyw0Q0FBNEMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxHQUFHO0FBQzdELDRDQUE0QyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7QUFDOUQseUNBQXlDLENBQUM7QUFDMUMscUNBQXFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUN4RSx3Q0FBd0MsS0FBSyxHQUFHLGlCQUFpQixDQUFDO0FBQ2xFLHdDQUF3QyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUNqRSx3Q0FBd0MsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ2pFLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakMsNkJBQTZCLENBQUM7QUFDOUIseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFNBQVMsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRTtBQUN4RSw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0U7QUFDQSw0QkFBNEIsSUFBSSxNQUFNLEtBQUtBLFdBQVMsRUFBRTtBQUN0RCxnQ0FBZ0MsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDeEQ7QUFDQSxnQ0FBZ0MsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtBQUNoRSxvQ0FBb0MsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtBQUNsRSx3Q0FBd0MsT0FBTyxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUM7QUFDbEUsd0NBQXdDLE9BQU8sQ0FBQyxHQUFHLEdBQUdBLFdBQVMsQ0FBQztBQUNoRSx3Q0FBd0MsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9FO0FBQ0Esd0NBQXdDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxPQUFPLEVBQUU7QUFDeEUsNENBQTRDLE9BQU8sZ0JBQWdCLENBQUM7QUFDcEUseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxPQUFPLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUM3RCxvQ0FBb0MsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0FBQ2xILGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFGO0FBQ0EsNEJBQTRCLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDekQsZ0NBQWdDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3pELGdDQUFnQyxPQUFPLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDekQsZ0NBQWdDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3hELGdDQUFnQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ2xEO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDdkMsZ0NBQWdDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3pELGdDQUFnQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksU0FBUyxDQUFDLGtDQUFrQyxDQUFDLENBQUM7QUFDaEcsZ0NBQWdDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3hELGdDQUFnQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDM0MsZ0NBQWdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztBQUMxRSxnQ0FBZ0MsT0FBTyxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0FBQ2hFO0FBQ0EsZ0NBQWdDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUU7QUFDakUsb0NBQW9DLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQzVELG9DQUFvQyxPQUFPLENBQUMsR0FBRyxHQUFHQSxXQUFTLENBQUM7QUFDNUQsaUNBQWlDO0FBQ2pDLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxPQUFPLElBQUksQ0FBQztBQUM1Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEQsNEJBQTRCLE9BQU8sZ0JBQWdCLENBQUM7QUFDcEQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xELHdCQUF3QixFQUFFLENBQUMsaUJBQWlCLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDNUQ7QUFDQSx3QkFBd0IsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLFlBQVk7QUFDekQsNEJBQTRCLE9BQU8sSUFBSSxDQUFDO0FBQ3hDLHlCQUF5QixDQUFDO0FBQzFCO0FBQ0Esd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLEdBQUcsWUFBWTtBQUNsRCw0QkFBNEIsT0FBTyxvQkFBb0IsQ0FBQztBQUN4RCx5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixTQUFTLFlBQVksQ0FBQyxJQUFJLEVBQUU7QUFDcEQsNEJBQTRCLElBQUksS0FBSyxHQUFHO0FBQ3hDLGdDQUFnQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUMvQyw2QkFBNkIsQ0FBQztBQUM5QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDM0MsZ0NBQWdDLEtBQUssQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7QUFDM0MsZ0NBQWdDLEtBQUssQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELGdDQUFnQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFNBQVMsYUFBYSxDQUFDLEtBQUssRUFBRTtBQUN0RCw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7QUFDaEUsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO0FBQ25ELDRCQUE0QixPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDOUMsNEJBQTRCLEtBQUssQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO0FBQ3RELHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixTQUFTLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDdEQsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQztBQUMvQyxnQ0FBZ0MsTUFBTSxFQUFFLE1BQU07QUFDOUMsNkJBQTZCLENBQUMsQ0FBQztBQUMvQiw0QkFBNEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEUsNEJBQTRCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0MseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsVUFBVSxNQUFNLEVBQUU7QUFDekQsNEJBQTRCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQztBQUNBLDRCQUE0QixLQUFLLElBQUksR0FBRyxJQUFJLE1BQU0sRUFBRTtBQUNwRCxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLDRCQUE0QixPQUFPLFNBQVMsSUFBSSxHQUFHO0FBQ25ELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDcEQsb0NBQW9DLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUN6RDtBQUNBLG9DQUFvQyxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUU7QUFDdkQsd0NBQXdDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3pELHdDQUF3QyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUMxRCx3Q0FBd0MsT0FBTyxJQUFJLENBQUM7QUFDcEQscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqRCxnQ0FBZ0MsT0FBTyxJQUFJLENBQUM7QUFDNUMsNkJBQTZCLENBQUM7QUFDOUIseUJBQXlCLENBQUM7QUFDMUI7QUFDQSx3QkFBd0IsU0FBUyxNQUFNLENBQUMsUUFBUSxFQUFFO0FBQ2xELDRCQUE0QixJQUFJLFFBQVEsRUFBRTtBQUMxQyxnQ0FBZ0MsSUFBSSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzlFO0FBQ0EsZ0NBQWdDLElBQUksY0FBYyxFQUFFO0FBQ3BELG9DQUFvQyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksT0FBTyxRQUFRLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRTtBQUN6RSxvQ0FBb0MsT0FBTyxRQUFRLENBQUM7QUFDcEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO0FBQzdELG9DQUFvQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsd0NBQXdDLElBQUksR0FBRyxTQUFTLElBQUksR0FBRztBQUMvRCw0Q0FBNEMsT0FBTyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFO0FBQzFFLGdEQUFnRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFO0FBQzlFLG9EQUFvRCxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxvREFBb0QsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7QUFDdEUsb0RBQW9ELE9BQU8sSUFBSSxDQUFDO0FBQ2hFLGlEQUFpRDtBQUNqRCw2Q0FBNkM7QUFDN0M7QUFDQSw0Q0FBNEMsSUFBSSxDQUFDLEtBQUssR0FBR0EsV0FBUyxDQUFDO0FBQ25FLDRDQUE0QyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM3RCw0Q0FBNEMsT0FBTyxJQUFJLENBQUM7QUFDeEQseUNBQXlDLENBQUM7QUFDMUM7QUFDQSxvQ0FBb0MsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM1RCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLE9BQU87QUFDbkMsZ0NBQWdDLElBQUksRUFBRSxVQUFVO0FBQ2hELDZCQUE2QixDQUFDO0FBQzlCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNoRDtBQUNBLHdCQUF3QixTQUFTLFVBQVUsR0FBRztBQUM5Qyw0QkFBNEIsT0FBTztBQUNuQyxnQ0FBZ0MsS0FBSyxFQUFFQSxXQUFTO0FBQ2hELGdDQUFnQyxJQUFJLEVBQUUsSUFBSTtBQUMxQyw2QkFBNkIsQ0FBQztBQUM5Qix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTyxDQUFDLFNBQVMsR0FBRztBQUM1Qyw0QkFBNEIsV0FBVyxFQUFFLE9BQU87QUFDaEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxhQUFhLEVBQUU7QUFDakUsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUM5QyxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHQSxXQUFTLENBQUM7QUFDbkUsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ2xELGdDQUFnQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUNyRCxnQ0FBZ0MsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckQsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLEdBQUdBLFdBQVMsQ0FBQztBQUNyRCxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDdkU7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUNwRCxvQ0FBb0MsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7QUFDM0Qsd0NBQXdDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDekgsNENBQTRDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBR0EsV0FBUyxDQUFDO0FBQ25FLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qiw0QkFBNEIsSUFBSSxFQUFFLFNBQVMsSUFBSSxHQUFHO0FBQ2xELGdDQUFnQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqRCxnQ0FBZ0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxnQ0FBZ0MsSUFBSSxVQUFVLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQztBQUN0RTtBQUNBLGdDQUFnQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFO0FBQ2pFLG9DQUFvQyxNQUFNLFVBQVUsQ0FBQyxHQUFHLENBQUM7QUFDekQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztBQUNqRCw2QkFBNkI7QUFDN0IsNEJBQTRCLGlCQUFpQixFQUFFLFNBQVMsaUJBQWlCLENBQUMsU0FBUyxFQUFFO0FBQ3JGLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDL0Msb0NBQW9DLE1BQU0sU0FBUyxDQUFDO0FBQ3BELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDbkQ7QUFDQSxnQ0FBZ0MsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRTtBQUM3RCxvQ0FBb0MsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDMUQsb0NBQW9DLE1BQU0sQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDO0FBQzNELG9DQUFvQyxPQUFPLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN2RDtBQUNBLG9DQUFvQyxJQUFJLE1BQU0sRUFBRTtBQUNoRCx3Q0FBd0MsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDaEUsd0NBQXdDLE9BQU8sQ0FBQyxHQUFHLEdBQUdBLFdBQVMsQ0FBQztBQUNoRSxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3BELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RGLG9DQUFvQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FLG9DQUFvQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ2xFO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7QUFDakUsd0NBQXdDLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtBQUNuRSx3Q0FBd0MsSUFBSSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDdEYsd0NBQXdDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQzFGO0FBQ0Esd0NBQXdDLElBQUksUUFBUSxJQUFJLFVBQVUsRUFBRTtBQUNwRSw0Q0FBNEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDNUUsZ0RBQWdELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEYsNkNBQTZDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDckYsZ0RBQWdELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRiw2Q0FBNkM7QUFDN0MseUNBQXlDLE1BQU0sSUFBSSxRQUFRLEVBQUU7QUFDN0QsNENBQTRDLElBQUksSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQzVFLGdEQUFnRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3BGLDZDQUE2QztBQUM3Qyx5Q0FBeUMsTUFBTSxJQUFJLFVBQVUsRUFBRTtBQUMvRCw0Q0FBNEMsSUFBSSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDOUUsZ0RBQWdELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNoRiw2Q0FBNkM7QUFDN0MseUNBQXlDLE1BQU07QUFDL0MsNENBQTRDLE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztBQUN0Ryx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IsNEJBQTRCLE1BQU0sRUFBRSxTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFO0FBQy9ELGdDQUFnQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RGLG9DQUFvQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBRTtBQUN2SSx3Q0FBd0MsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ2pFLHdDQUF3QyxNQUFNO0FBQzlDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxZQUFZLEtBQUssSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLEtBQUssVUFBVSxDQUFDLElBQUksWUFBWSxDQUFDLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLFlBQVksQ0FBQyxVQUFVLEVBQUU7QUFDL0osb0NBQW9DLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDeEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksTUFBTSxHQUFHLFlBQVksR0FBRyxZQUFZLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUN6RixnQ0FBZ0MsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkQsZ0NBQWdDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ2pEO0FBQ0EsZ0NBQWdDLElBQUksWUFBWSxFQUFFO0FBQ2xELG9DQUFvQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6RCxvQ0FBb0MsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDO0FBQ3hFLG9DQUFvQyxPQUFPLGdCQUFnQixDQUFDO0FBQzVELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0QsNkJBQTZCO0FBQzdCLDRCQUE0QixRQUFRLEVBQUUsU0FBUyxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUMxRSxnQ0FBZ0MsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUM3RCxvQ0FBb0MsTUFBTSxNQUFNLENBQUMsR0FBRyxDQUFDO0FBQ3JELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO0FBQzNGLG9DQUFvQyxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDM0QsaUNBQWlDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRTtBQUNyRSxvQ0FBb0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDdEUsb0NBQW9DLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQzNELG9DQUFvQyxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN0RCxpQ0FBaUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLFFBQVEsRUFBRTtBQUNqRixvQ0FBb0MsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7QUFDekQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sZ0JBQWdCLENBQUM7QUFDeEQsNkJBQTZCO0FBQzdCLDRCQUE0QixNQUFNLEVBQUUsU0FBUyxNQUFNLENBQUMsVUFBVSxFQUFFO0FBQ2hFLGdDQUFnQyxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQ3RGLG9DQUFvQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25FO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDekUsd0NBQXdDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEYsd0NBQXdDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RCx3Q0FBd0MsT0FBTyxnQkFBZ0IsQ0FBQztBQUNoRSxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qiw0QkFBNEIsT0FBTyxFQUFFLFNBQVMsTUFBTSxDQUFDLE1BQU0sRUFBRTtBQUM3RCxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUN0RixvQ0FBb0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRTtBQUNBLG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxFQUFFO0FBQ2pFLHdDQUF3QyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ3RFO0FBQ0Esd0NBQXdDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7QUFDckUsNENBQTRDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDcEUsNENBQTRDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNqRSx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsT0FBTyxNQUFNLENBQUM7QUFDdEQscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDekUsNkJBQTZCO0FBQzdCLDRCQUE0QixhQUFhLEVBQUUsU0FBUyxhQUFhLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUU7QUFDakcsZ0NBQWdDLElBQUksQ0FBQyxRQUFRLEdBQUc7QUFDaEQsb0NBQW9DLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDO0FBQzlELG9DQUFvQyxVQUFVLEVBQUUsVUFBVTtBQUMxRCxvQ0FBb0MsT0FBTyxFQUFFLE9BQU87QUFDcEQsaUNBQWlDLENBQUM7QUFDbEM7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtBQUM1RCxvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsR0FBR0EsV0FBUyxDQUFDO0FBQ3pELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLGdCQUFnQixDQUFDO0FBQ3hELDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQztBQUMxQixxQkFBcUIsQ0FBQyxZQUFZO0FBQ2xDLHdCQUF3QixPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLFdBQVcsR0FBRyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLFFBQVEsSUFBSSxJQUFJLENBQUM7QUFDeEgscUJBQXFCLEVBQUUsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELGdEQUFnRCxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBQztBQUMxRztBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixNQUFNLENBQUMsT0FBTyxHQUFHLFVBQVUsTUFBTSxFQUFFO0FBQ25ELG9CQUFvQixJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRTtBQUNqRCx3QkFBd0IsTUFBTSxDQUFDLFNBQVMsR0FBRyxZQUFZLEVBQUUsQ0FBQztBQUMxRDtBQUNBLHdCQUF3QixNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDbkUsd0JBQXdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRTtBQUNoRSw0QkFBNEIsVUFBVSxFQUFFLElBQUk7QUFDNUMsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hELDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDO0FBQzNCLHdCQUF3QixNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDNUQsNEJBQTRCLFVBQVUsRUFBRSxJQUFJO0FBQzVDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNoRCw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQztBQUMzQix3QkFBd0IsTUFBTSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDbkQscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLE9BQU8sTUFBTSxDQUFDO0FBQ2xDLGlCQUFpQixDQUFDO0FBQ2xCO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsbUJBQW1CLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRTtBQUc5RTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3RCxvQkFBb0IsS0FBSyxFQUFFLElBQUk7QUFDL0IsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsT0FBTyxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDO0FBQzlELGdCQUFnQixPQUFPLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUM7QUFDaEUsZ0JBQWdCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2hELGdCQUFnQixPQUFPLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsb0JBQW9CLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQywyQkFBMkIsR0FBRyxPQUFPLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ25RO0FBQ0EsZ0JBQWdCLElBQUksS0FBSyxHQUFHLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxZQUFZLFdBQVcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtBQUN6SztBQUNBLGdCQUFnQixTQUFTLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxVQUFVLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQzdVO0FBQ0EsZ0JBQWdCLFNBQVMsWUFBWSxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLEVBQUUsSUFBSSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksV0FBVyxFQUFFLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLE9BQU8sV0FBVyxDQUFDLEVBQUU7QUFDdk87QUFDQSxnQkFBZ0IsSUFBSSxnQkFBZ0IsR0FBRyw4QkFBOEIsQ0FBQztBQUN0RSxnQkFBZ0IsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO0FBQzVELGdCQUFnQixJQUFJLE1BQU0sR0FBRyw0QkFBNEIsQ0FBQztBQUMxRDtBQUNBLGdCQUFnQixJQUFJLGdCQUFnQjtBQUNwQztBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLGdCQUFnQixHQUFHO0FBQ3BELDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDcEUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0FBQ3hELDRCQUE0QixHQUFHLEVBQUUsUUFBUTtBQUN6Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7QUFDbEUsZ0NBQWdDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQy9ELG9DQUFvQyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDM0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEUsZ0NBQWdDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JELGdDQUFnQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2RCxnQ0FBZ0MsT0FBTztBQUN2QyxvQ0FBb0MsTUFBTSxFQUFFLE1BQU07QUFDbEQsb0NBQW9DLE9BQU8sRUFBRSxPQUFPO0FBQ3BELGlDQUFpQyxDQUFDO0FBQ2xDLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLE9BQU87QUFDeEMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ25GLGdDQUFnQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQzlELG9DQUFvQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7QUFDL0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQy9ELG9DQUFvQyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUFDM0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3RFLGdDQUFnQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN4RSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7QUFDdEUsZ0NBQWdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7QUFDOUQsb0NBQW9DLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUMvRSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDbEUsZ0NBQWdDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLGdDQUFnQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQy9ELGdDQUFnQyxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxnQkFBZ0IsQ0FBQztBQUNoRCxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQUM1RDtBQUNBLGdCQUFnQixJQUFJLG9CQUFvQjtBQUN4QztBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLG9CQUFvQixDQUFDLElBQUksRUFBRTtBQUM1RCw0QkFBNEIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU87QUFDM0QsZ0NBQWdDLE9BQU8sR0FBRyxZQUFZLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLFlBQVk7QUFDdkYsZ0NBQWdDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxZQUFZO0FBQ3JFLGdDQUFnQyxZQUFZLEdBQUcsaUJBQWlCLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLGlCQUFpQixDQUFDO0FBQ3hHO0FBQ0EsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztBQUN4RTtBQUNBLDRCQUE0QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUNuRCw0QkFBNEIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDN0QseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFlBQVksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQzVELDRCQUE0QixHQUFHLEVBQUUsT0FBTztBQUN4Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRTtBQUN6RCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pEO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEQ7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDbkQsb0NBQW9DLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw4REFBOEQsR0FBRyw2REFBNkQsQ0FBQyxDQUFDLENBQUM7QUFDck0saUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDM0Msb0NBQW9DLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUM7QUFDckcsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQzlFLG9DQUFvQyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxLQUFLLENBQUMsWUFBWSxHQUFHLFFBQVEsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUMxRyxvQ0FBb0MsSUFBSSxPQUFPLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUN2RSxvQ0FBb0MsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25FO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRTtBQUM1RCx3Q0FBd0MsT0FBTyxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUM7QUFDN0UscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxZQUFZO0FBQzdFLHdDQUF3QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTtBQUN4Riw0Q0FBNEMsT0FBTztBQUNuRCx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUM1Riw0Q0FBNEMsSUFBSSxJQUFJLENBQUM7QUFDckQ7QUFDQSw0Q0FBNEMsSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7QUFDeEYsZ0RBQWdELElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEYsNkNBQTZDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtBQUNwRyxnREFBZ0QsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdEcsNkNBQTZDO0FBQzdDO0FBQ0EsNENBQTRDLElBQUksSUFBSSxFQUFFO0FBQ3RELGdEQUFnRCxPQUFPLENBQUM7QUFDeEQsb0RBQW9ELFFBQVEsRUFBRSxJQUFJO0FBQ2xFLG9EQUFvRCxlQUFlLEVBQUUsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJO0FBQzNKLGlEQUFpRCxDQUFDLENBQUM7QUFDbkQsZ0RBQWdELE9BQU87QUFDdkQsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLElBQUksS0FBSyxDQUFDLFlBQVksR0FBRyxTQUFTLEdBQUcsRUFBRSxDQUFDLEdBQUcsV0FBVyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDekkscUNBQXFDLENBQUM7QUFDdEM7QUFDQSxvQ0FBb0MsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxvQkFBb0IsQ0FBQztBQUNwRCxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztBQUNwRTtBQUNBLGdCQUFnQixJQUFJLGFBQWE7QUFDakM7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQyx3QkFBd0IsU0FBUyxhQUFhLEdBQUc7QUFDakQsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDakUseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLFlBQVksQ0FBQyxhQUFhLEVBQUUsQ0FBQztBQUNyRCw0QkFBNEIsR0FBRyxFQUFFLFFBQVE7QUFDekMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFO0FBQ2xFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSyxHQUFHLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLHdCQUF3QixDQUFDLENBQUM7QUFDckcsZ0NBQWdDLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3RGLGdDQUFnQyxHQUFHLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuRSxnQ0FBZ0MsR0FBRyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hFLGdDQUFnQyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDMUUsZ0NBQWdDLEdBQUcsQ0FBQyxZQUFZLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEYsZ0NBQWdDLEdBQUcsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxLQUFLLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzNGLGdDQUFnQyxPQUFPLEdBQUcsQ0FBQztBQUMzQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxlQUFlO0FBQ2hELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFO0FBQ2hFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLDBCQUEwQixDQUFDLENBQUM7QUFDeEcsZ0NBQWdDLE9BQU8sUUFBUSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUUsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLGFBQWEsQ0FBQztBQUM3QyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3REO0FBQ0EsZ0JBQWdCLElBQUksWUFBWTtBQUNoQztBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLFlBQVksQ0FBQyxLQUFLLEVBQUU7QUFDckQsNEJBQTRCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPO0FBQ3ZELGdDQUFnQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUs7QUFDbkQsZ0NBQWdDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUTtBQUN6RCxnQ0FBZ0MsYUFBYSxHQUFHLEtBQUssQ0FBQyxPQUFPO0FBQzdELGdDQUFnQyxPQUFPLEdBQUcsYUFBYSxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxhQUFhO0FBQ3RGLGdDQUFnQyxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU87QUFDN0QsZ0NBQWdDLE9BQU8sR0FBRyxhQUFhLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLGFBQWE7QUFDdEYsZ0NBQWdDLGNBQWMsR0FBRyxLQUFLLENBQUMsUUFBUTtBQUMvRCxnQ0FBZ0MsUUFBUSxHQUFHLGNBQWMsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsY0FBYyxDQUFDO0FBQzlGO0FBQ0EsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDaEU7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDbkQsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUNyRCw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDbkQsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLDRCQUE0QixJQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQztBQUNuRSw0QkFBNEIsUUFBUSxHQUFHLFFBQVEsR0FBRyxHQUFHLENBQUM7QUFDdEQsNEJBQTRCLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ2hGO0FBQ0EsNEJBQTRCLFFBQVEsUUFBUTtBQUM1QyxnQ0FBZ0MsS0FBSyxHQUFHO0FBQ3hDLG9DQUFvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEQsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEQsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEQsb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0MsS0FBSyxFQUFFO0FBQ3ZDLG9DQUFvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELG9DQUFvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELG9DQUFvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELG9DQUFvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ2hELG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssR0FBRztBQUN4QyxvQ0FBb0MsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoRCxvQ0FBb0MsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pELG9DQUFvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEQsb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0M7QUFDaEMsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEQsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEQsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEQsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsTUFBTTtBQUMxQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxRQUFRLEVBQUU7QUFDMUMsZ0NBQWdDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUNuRCxnQ0FBZ0MsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQ25ELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGFBQWEsRUFBRSxhQUFhLENBQUM7QUFDN0QsNEJBQTRCLElBQUksS0FBSyxFQUFFLE1BQU0sQ0FBQztBQUM5QztBQUNBLDRCQUE0QixJQUFJLE9BQU8sS0FBSyxDQUFDLEVBQUU7QUFDL0MsZ0NBQWdDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ2pHLGdDQUFnQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUNqRyxnQ0FBZ0MsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNsRixnQ0FBZ0MsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNuRiw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDakcsZ0NBQWdDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ2pHLGdDQUFnQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ2xGLGdDQUFnQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQ25GLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsT0FBTyxHQUFHLEtBQUssRUFBRSxPQUFPLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLLEVBQUUsT0FBTyxHQUFHLEtBQUssRUFBRSxhQUFhLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEVBQUUsYUFBYSxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDaFEsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNqRCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BELDRCQUE0QixHQUFHLEVBQUUsT0FBTztBQUN4Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsS0FBSyxHQUFHO0FBQ3BELGdDQUFnQyxJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO0FBQ2xILG9DQUFvQyxXQUFXLEdBQUcsS0FBSyxDQUFDLEtBQUs7QUFDN0Qsb0NBQW9DLEtBQUssR0FBRyxXQUFXLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXO0FBQzdGLG9DQUFvQyxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVE7QUFDbkUsb0NBQW9DLFFBQVEsR0FBRyxjQUFjLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxjQUFjO0FBQ3pHLG9DQUFvQyxjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVE7QUFDbkUsb0NBQW9DLFFBQVEsR0FBRyxjQUFjLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLGNBQWMsQ0FBQztBQUNsRztBQUNBLGdDQUFnQyxPQUFPLElBQUksWUFBWSxDQUFDO0FBQ3hELG9DQUFvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDakUsb0NBQW9DLEtBQUssRUFBRSxLQUFLO0FBQ2hELG9DQUFvQyxRQUFRLEVBQUUsUUFBUTtBQUN0RCxvQ0FBb0MsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO0FBQ3pELG9DQUFvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87QUFDekQsb0NBQW9DLFFBQVEsRUFBRSxRQUFRO0FBQ3RELGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsd0JBQXdCO0FBQ3pELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pFLGdDQUFnQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN6Riw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSw0QkFBNEI7QUFDN0QsNEJBQTRCLEtBQUssRUFBRSxTQUFTLDBCQUEwQixDQUFDLElBQUksRUFBRTtBQUM3RSxnQ0FBZ0MsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0EsZ0NBQWdDLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2RztBQUNBLGdDQUFnQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsbUJBQW1CO0FBQ3BELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3BFLGdDQUFnQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hHLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxZQUFZLENBQUM7QUFDNUMscUJBQXFCLEVBQUUsQ0FBQztBQUN4QjtBQUNBLGdCQUFnQixPQUFPLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUNwRDtBQUNBLGdCQUFnQixJQUFJLDJCQUEyQixHQUFHLFNBQVMsMkJBQTJCLEdBQUc7QUFDekYsb0JBQW9CLFNBQVMsMkJBQTJCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNwRSx3QkFBd0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7QUFDM0Msd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQiwyQkFBMkIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUN4RSxvQkFBb0IsMkJBQTJCLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyw2QkFBNkIsQ0FBQztBQUMvRixvQkFBb0IsMkJBQTJCLENBQUMsV0FBVyxHQUFHLDJCQUEyQixDQUFDO0FBQzFGLG9CQUFvQixPQUFPLDJCQUEyQixDQUFDO0FBQ3ZELGlCQUFpQixFQUFFLENBQUM7QUFDcEI7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLDJCQUEyQixHQUFHLDJCQUEyQixDQUFDO0FBQ2xGLGdCQUFnQixJQUFJLFVBQVUsR0FBRztBQUNqQyxvQkFBb0IsSUFBSSxFQUFFLENBQUM7QUFDM0Isb0JBQW9CLElBQUksRUFBRSxDQUFDO0FBQzNCLG9CQUFvQixLQUFLLEVBQUUsQ0FBQztBQUM1QixvQkFBb0IsTUFBTSxFQUFFLENBQUM7QUFDN0Isb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0FBQzFCLGlCQUFpQixDQUFDO0FBQ2xCLGdCQUFnQixPQUFPLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNoRCxnQkFBZ0IsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyRjtBQUNBLGdCQUFnQixTQUFTLGlCQUFpQixDQUFDLElBQUksRUFBRTtBQUNqRCxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUN0Ryx3QkFBd0IsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHO0FBQ3ZDLHdCQUF3QixNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU07QUFDN0Msd0JBQXdCLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0FBQ3hDO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdGO0FBQ0Esb0JBQW9CLElBQUksR0FBRyxFQUFFO0FBQzdCLHdCQUF3QixJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDekUsd0JBQXdCLElBQUksV0FBVyxHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQztBQUN2Ryx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUN2RSx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxPQUFPLEdBQUcsS0FBSyxRQUFRLEdBQUcsR0FBRyxHQUFHLGdCQUFnQixDQUFDO0FBQ3BGLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7QUFDakQsb0JBQW9CLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEQsb0JBQW9CLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsb0JBQW9CLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekcsb0JBQW9CLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0UsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLElBQUksU0FBUztBQUM3QjtBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLFNBQVMsR0FBRztBQUM3Qyw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ2xIO0FBQ0EsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDN0Q7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ3BELDRCQUE0QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzVDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDakQsNEJBQTRCLEdBQUcsRUFBRSxNQUFNO0FBQ3ZDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ3ZELGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNuRCxvQ0FBb0MsT0FBTztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMxRCxvQ0FBb0MsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLCtCQUErQixHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVGLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoRSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQzFELGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUNuRCxvQ0FBb0MsT0FBTztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDN0Qsb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxpQ0FBaUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM5RixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDaEQsb0NBQW9DLE1BQU0sRUFBRSxJQUFJO0FBQ2hELG9DQUFvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDL0Qsb0NBQW9DLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ3JELGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMxRCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxVQUFVO0FBQzNDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxRQUFRLEdBQUc7QUFDdkQsZ0NBQWdDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDdkQsZ0NBQWdDLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDNUMsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDaEQ7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNoRixvQ0FBb0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hFO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLEVBQUU7QUFDL0Qsd0NBQXdDLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzlELHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNyRixvQ0FBb0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELG9DQUFvQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDekUsb0NBQW9DLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNqSCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxHQUFHLENBQUM7QUFDM0MsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLFNBQVMsQ0FBQztBQUN6QyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQzlDO0FBQ0EsZ0JBQWdCLElBQUksY0FBYztBQUNsQztBQUNBLG9CQUFvQixZQUFZO0FBQ2hDLHdCQUF3QixTQUFTLGNBQWMsR0FBRztBQUNsRCw0QkFBNEIsZUFBZSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztBQUNsRTtBQUNBLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsbUNBQW1DLENBQUMsQ0FBQztBQUN4Rix5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUM1RCw0QkFBNEIsR0FBRyxFQUFFLE1BQU07QUFDdkMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUN6RCx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFNBQVM7QUFDMUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM1RCx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFVBQVU7QUFDM0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFFBQVEsR0FBRztBQUN2RCxnQ0FBZ0MsT0FBTyxFQUFFLENBQUM7QUFDMUMsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLGNBQWMsQ0FBQztBQUM5QyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hEO0FBQ0EsZ0JBQWdCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN6QyxvQkFBb0IsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDbEUsd0JBQXdCLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdEUsd0JBQXdCLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBQ3pDLHdCQUF3QixNQUFNLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUNoRDtBQUNBLHdCQUF3QixNQUFNLENBQUMsT0FBTyxHQUFHLFlBQVk7QUFDckQsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1Rix5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEYscUJBQXFCLENBQUMsQ0FBQztBQUN2QixpQkFBaUI7QUFDakI7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBRzlFO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdELG9CQUFvQixLQUFLLEVBQUUsSUFBSTtBQUMvQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDckU7QUFDQSxnQkFBZ0IsSUFBSSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRztBQUNBLGdCQUFnQixJQUFJLEtBQUssR0FBRywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRDtBQUNBLGdCQUFnQixTQUFTLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUU7QUFDL0c7QUFDQSxnQkFBZ0IsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRSxFQUFFLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxHQUFHLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssTUFBTSxJQUFJLEdBQUcsS0FBSyxNQUFNLENBQUMsU0FBUyxHQUFHLFFBQVEsR0FBRyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDL1c7QUFDQSxnQkFBZ0IsU0FBUywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxJQUFJLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxVQUFVLENBQUMsRUFBRSxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDak07QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsRUFBRSxFQUFFLE1BQU0sSUFBSSxjQUFjLENBQUMsMkRBQTJELENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRTtBQUN0TDtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxHQUFHLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDN047QUFDQSxnQkFBZ0IsU0FBUyxTQUFTLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksT0FBTyxVQUFVLEtBQUssVUFBVSxJQUFJLFVBQVUsS0FBSyxJQUFJLEVBQUUsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLG9EQUFvRCxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFO0FBQ2paO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxlQUFlLEdBQUcsTUFBTSxDQUFDLGNBQWMsSUFBSSxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxTDtBQUNBLGdCQUFnQixTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEtBQUssRUFBRSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3pSO0FBQ0EsZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUMsRUFBRSxFQUFFLEVBQUUsT0FBTyxZQUFZLEVBQUUsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFVBQVUsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDclo7QUFDQSxnQkFBZ0IsU0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLFlBQVksV0FBVyxDQUFDLEVBQUUsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3pLO0FBQ0EsZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDN1U7QUFDQSxnQkFBZ0IsU0FBUyxZQUFZLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUMsRUFBRTtBQUN2TztBQUNBLGdCQUFnQixJQUFJLGNBQWM7QUFDbEM7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQyx3QkFBd0IsU0FBUyxjQUFjLENBQUMsSUFBSSxFQUFFO0FBQ3RELDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSztBQUNsRCxnQ0FBZ0Msb0JBQW9CLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0FBQ2pGO0FBQ0EsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDbEU7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGNBQWMsRUFBRTtBQUNyRSxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLG1DQUFtQyxDQUFDLENBQUM7QUFDNUYsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7QUFDOUUsNEJBQTRCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0FBQ3RELDRCQUE0QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUNyRCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3RELDRCQUE0QixHQUFHLEVBQUUsbUJBQW1CO0FBQ3BELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUU7QUFDOUUsZ0NBQWdDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzFFLGdDQUFnQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNuRSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxZQUFZO0FBQzdDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxVQUFVLENBQUMsSUFBSSxFQUFFO0FBQzdELGdDQUFnQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ3JFO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDbkQsb0NBQW9DLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDdkcsb0NBQW9DLFlBQVksQ0FBQyxFQUFFLEdBQUcsbUNBQW1DLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RyxvQ0FBb0MsUUFBUSxDQUFDLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDdkgsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7QUFDcEUsZ0NBQWdDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEYsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsT0FBTztBQUN4Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsS0FBSyxHQUFHO0FBQ3BELGdDQUFnQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxVQUFVLGNBQWMsRUFBRTtBQUN2RixvQ0FBb0MsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDMUUsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyxnQ0FBZ0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hFO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUN2RCxvQ0FBb0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUMvRCxvQ0FBb0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDN0QsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLE1BQU07QUFDdkMsNEJBQTRCLEtBQUssRUFBRSxZQUFZO0FBQy9DLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxpQkFBaUI7QUFDN0Q7QUFDQSxvQ0FBb0MsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3JGLHdDQUF3QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDekQ7QUFDQSx3Q0FBd0MsSUFBSSxjQUFjLEVBQUUsSUFBSSxDQUFDO0FBQ2pFLHdDQUF3QyxPQUFPLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsUUFBUSxDQUFDLFFBQVEsRUFBRTtBQUNyRyw0Q0FBNEMsT0FBTyxDQUFDLEVBQUU7QUFDdEQsZ0RBQWdELFFBQVEsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSTtBQUNyRixvREFBb0QsS0FBSyxDQUFDO0FBQzFELHdEQUF3RCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7QUFDbEcsNERBQTRELFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlFLDREQUE0RCxNQUFNO0FBQ2xFLHlEQUF5RDtBQUN6RDtBQUNBLHdEQUF3RCxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekY7QUFDQSxvREFBb0QsS0FBSyxDQUFDO0FBQzFELHdEQUF3RCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztBQUM3RTtBQUNBLHdEQUF3RCxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO0FBQzdGLDREQUE0RCxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMvRSw0REFBNEQsTUFBTTtBQUNsRSx5REFBeUQ7QUFDekQ7QUFDQSx3REFBd0QsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQ3JHO0FBQ0Esd0RBQXdELElBQUksQ0FBQyxjQUFjLEVBQUU7QUFDN0UsNERBQTRELFFBQVEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQy9FLDREQUE0RCxNQUFNO0FBQ2xFLHlEQUF5RDtBQUN6RDtBQUNBLHdEQUF3RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDL0Ysd0RBQXdELFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLHdEQUF3RCxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMzRSx3REFBd0QsT0FBTyxjQUFjLENBQUMsTUFBTSxDQUFDO0FBQ3JGO0FBQ0Esb0RBQW9ELEtBQUssRUFBRTtBQUMzRCx3REFBd0QsUUFBUSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7QUFDM0Usd0RBQXdELE1BQU07QUFDOUQ7QUFDQSxvREFBb0QsS0FBSyxFQUFFO0FBQzNELHdEQUF3RCxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMzRSx3REFBd0QsUUFBUSxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Y7QUFDQSx3REFBd0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ25GLDREQUE0RCxTQUFTLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUk7QUFDdEcseURBQXlELENBQUMsQ0FBQztBQUMzRDtBQUNBLHdEQUF3RCxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqSyx3REFBd0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDcEYsd0RBQXdELE1BQU0sUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUMxRTtBQUNBLG9EQUFvRCxLQUFLLEVBQUU7QUFDM0Qsd0RBQXdELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6RjtBQUNBLG9EQUFvRCxLQUFLLEVBQUU7QUFDM0Qsd0RBQXdELElBQUksR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUN6RjtBQUNBLHdEQUF3RCxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQ25FLDREQUE0RCxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMvRSw0REFBNEQsTUFBTTtBQUNsRSx5REFBeUQ7QUFDekQ7QUFDQSx3REFBd0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5RTtBQUNBLHdEQUF3RCxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFO0FBQzlGLDREQUE0RCxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMvRSw0REFBNEQsTUFBTTtBQUNsRSx5REFBeUQ7QUFDekQ7QUFDQSx3REFBd0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pGO0FBQ0Esb0RBQW9ELEtBQUssRUFBRTtBQUMzRCx3REFBd0QsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU8sRUFBRTtBQUN4SCw0REFBNEQsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQy9HO0FBQ0EsNERBQTRELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakgseURBQXlELENBQUMsQ0FBQyxDQUFDO0FBQzVEO0FBQ0Esb0RBQW9ELEtBQUssRUFBRSxDQUFDO0FBQzVELG9EQUFvRCxLQUFLLEtBQUs7QUFDOUQsd0RBQXdELE9BQU8sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9FLGlEQUFpRDtBQUNqRCw2Q0FBNkM7QUFDN0MseUNBQXlDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxxQ0FBcUMsQ0FBQyxDQUFDLENBQUM7QUFDeEM7QUFDQSxnQ0FBZ0MsU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ2xELG9DQUFvQyxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLElBQUksQ0FBQztBQUM1Qyw2QkFBNkIsRUFBRTtBQUMvQix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLHVCQUF1QjtBQUN4RCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMscUJBQXFCLENBQUMsUUFBUSxFQUFFO0FBQzVFLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsMENBQTBDLENBQUMsQ0FBQztBQUNuRyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSx1QkFBdUI7QUFDeEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLHFCQUFxQixDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9GLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsMENBQTBDLENBQUMsQ0FBQztBQUNuRyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSwyQkFBMkI7QUFDNUQsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLDhDQUE4QyxDQUFDLENBQUM7QUFDdkcsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsNEJBQTRCO0FBQzdELDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLElBQUksS0FBSyxDQUFDLFdBQVcsRUFBRSwrQ0FBK0MsQ0FBQyxDQUFDO0FBQ3hHLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDM0YsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLGNBQWMsQ0FBQztBQUM5QyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLElBQUksVUFBVSxDQUFDO0FBQy9CLGdCQUFnQixPQUFPLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztBQUNoRCxnQkFBZ0I7QUFDaEIsb0JBQW9CLE9BQU8sQ0FBQyxVQUFVLEdBQUcsVUFBVTtBQUNuRDtBQUNBLHdCQUF3QixVQUFVLGVBQWUsRUFBRTtBQUNuRCw0QkFBNEIsU0FBUyxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQzFFO0FBQ0EsNEJBQTRCLFNBQVMsaUJBQWlCLENBQUMsS0FBSyxFQUFFO0FBQzlELGdDQUFnQyxJQUFJLE1BQU0sQ0FBQztBQUMzQztBQUNBLGdDQUFnQyxlQUFlLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDekU7QUFDQSxnQ0FBZ0MsTUFBTSxHQUFHLDBCQUEwQixDQUFDLElBQUksRUFBRSxlQUFlLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEksZ0NBQWdDLE1BQU0sQ0FBQyxjQUFjLEdBQUc7QUFDeEQsb0NBQW9DLFFBQVEsRUFBRSxFQUFFO0FBQ2hELG9DQUFvQyxhQUFhLEVBQUUsQ0FBQztBQUNwRCxpQ0FBaUMsQ0FBQztBQUNsQyxnQ0FBZ0MsTUFBTSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDMUQsZ0NBQWdDLE9BQU8sTUFBTSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixZQUFZLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUM3RCxnQ0FBZ0MsR0FBRyxFQUFFLHVCQUF1QjtBQUM1RCxnQ0FBZ0MsS0FBSyxFQUFFLFNBQVMscUJBQXFCLENBQUMsUUFBUSxFQUFFO0FBQ2hGLG9DQUFvQyxTQUFTLGVBQWUsR0FBRztBQUMvRCx3Q0FBd0MsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO0FBQ3RILHdDQUF3QyxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUM1RDtBQUNBLHdDQUF3QyxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRTtBQUN4Ryw0Q0FBNEMsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4Riw0Q0FBNEMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakYseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQ3RFLG9DQUFvQyxJQUFJLE9BQU8sR0FBRztBQUNsRCx3Q0FBd0MsRUFBRSxFQUFFLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDN0csd0NBQXdDLElBQUksRUFBRSxLQUFLO0FBQ25ELHdDQUF3QyxRQUFRLEVBQUUsZUFBZTtBQUNqRSx3Q0FBd0MsUUFBUSxFQUFFLFFBQVE7QUFDMUQscUNBQXFDLENBQUM7QUFDdEMsb0NBQW9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLG9DQUFvQyxPQUFPLE9BQU8sQ0FBQztBQUNuRCxpQ0FBaUM7QUFDakMsNkJBQTZCLEVBQUU7QUFDL0IsZ0NBQWdDLEdBQUcsRUFBRSx1QkFBdUI7QUFDNUQsZ0NBQWdDLEtBQUssRUFBRSxTQUFTLHFCQUFxQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQzdGLG9DQUFvQyxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO0FBQ2pFLHdDQUF3QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3pMLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7QUFDckYsd0NBQXdDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzVFLHdDQUF3QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNsRix3Q0FBd0MsT0FBTyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN4RSxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQzlDLG9DQUFvQyxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xGLG9DQUFvQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNyRCxvQ0FBb0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDdEQsb0NBQW9DLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEUsb0NBQW9DLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuRDtBQUNBLG9DQUFvQyxTQUFTLFdBQVcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO0FBQ3pFLHdDQUF3QyxNQUFNLEVBQUUsQ0FBQztBQUNqRDtBQUNBLHdDQUF3QyxJQUFJLE1BQU0sR0FBRyxFQUFFLEVBQUU7QUFDekQsNENBQTRDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSw4QkFBOEIsQ0FBQyxDQUFDO0FBQzVGLDRDQUE0QyxRQUFRLEVBQUUsQ0FBQztBQUN2RCw0Q0FBNEMsT0FBTztBQUNuRCx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsR0FBRyxDQUFDLElBQUksR0FBRyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ2xFLHdDQUF3QyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDakUsd0NBQXdDLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckY7QUFDQSx3Q0FBd0MsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuRSw0Q0FBNEMsUUFBUSxFQUFFLENBQUM7QUFDdkQsNENBQTRDLE9BQU87QUFDbkQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUMzRixxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7QUFDL0csb0NBQW9DLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDbEUsb0NBQW9DLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUM3RCxvQ0FBb0MsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDckgsb0NBQW9DLElBQUksbUJBQW1CLEdBQUcsRUFBRSxDQUFDO0FBQ2pFLG9DQUFvQyxJQUFJLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDaEUsb0NBQW9DLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUNwRjtBQUNBLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNoRyx3Q0FBd0MsUUFBUSxHQUFHLFFBQVEsR0FBRyxVQUFVLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEcscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUU7QUFDbkUsd0NBQXdDLFFBQVEsR0FBRyxRQUFRLEdBQUcsVUFBVSxHQUFHLEtBQUssQ0FBQyxjQUFjLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNoSCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JILG9DQUFvQyxJQUFJLEdBQUcsR0FBRyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3hHLG9DQUFvQyxJQUFJLElBQUksR0FBRyw0QkFBNEIsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0gsb0NBQW9DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUQsb0NBQW9DLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuRDtBQUNBLG9DQUFvQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRix3Q0FBd0MsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDeEUscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDL0Qsb0NBQW9DLElBQUksR0FBRyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUUsb0NBQW9DLEdBQUcsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLHFCQUFxQixHQUFHLDRCQUE0QixHQUFHLDBDQUEwQyxDQUFDLENBQUM7QUFDaks7QUFDQSxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUU7QUFDaEYsd0NBQXdDLElBQUksSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEYsd0NBQXdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ2hFLHdDQUF3QyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsd0NBQXdDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25FLG9DQUFvQyxXQUFXLENBQUMsY0FBYyxFQUFFLFlBQVk7QUFDNUUsd0NBQXdDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZFLHdDQUF3QyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDM0QscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUM7QUFDakMsNkJBQTZCLEVBQUU7QUFDL0IsZ0NBQWdDLEdBQUcsRUFBRSwyQkFBMkI7QUFDaEUsZ0NBQWdDLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNwRCxvQ0FBb0MsSUFBSSxTQUFTLEdBQUcsT0FBTyxRQUFRLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3hHO0FBQ0Esb0NBQW9DLElBQUksU0FBUyxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsRUFBRTtBQUN2Rix3Q0FBd0MsSUFBSSxDQUFDLEdBQUcsa0NBQWtDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3RztBQUNBLHdDQUF3QyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQzVELDRDQUE0QyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQzlELHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzNHLGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRTtBQUMvQixnQ0FBZ0MsR0FBRyxFQUFFLDRCQUE0QjtBQUNqRSxnQ0FBZ0MsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3BELG9DQUFvQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDMUQ7QUFDQSxvQ0FBb0MsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLEVBQUU7QUFDMUUsd0NBQXdDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDekQscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLElBQUksQ0FBQyxHQUFHLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDN0c7QUFDQSx3Q0FBd0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCw0Q0FBNEMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUM3RCx5Q0FBeUM7QUFDekMscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSw0QkFBNEIsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1RyxpQ0FBaUM7QUFDakMsNkJBQTZCLEVBQUU7QUFDL0IsZ0NBQWdDLEdBQUcsRUFBRSxlQUFlO0FBQ3BELGdDQUFnQyxHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDcEQsb0NBQW9DLElBQUksZUFBZSxHQUFHLFNBQVMsZUFBZSxHQUFHO0FBQ3JGLHdDQUF3QyxPQUFPLElBQUksQ0FBQyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsR0FBRyxzRUFBc0UsQ0FBQyxDQUFDO0FBQ3puRCxxQ0FBcUMsQ0FBQztBQUN0QztBQUNBLG9DQUFvQyxPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7QUFDdkcsaUNBQWlDO0FBQ2pDLDZCQUE2QixDQUFDLENBQUMsQ0FBQztBQUNoQztBQUNBLDRCQUE0QixPQUFPLGlCQUFpQixDQUFDO0FBQ3JELHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQzFDLGlCQUFpQjtBQUNqQixnQkFBZ0IsSUFBSSxxQkFBcUIsR0FBRztBQUM1QyxvQkFBb0IsSUFBSSxLQUFLLEdBQUc7QUFDaEMsd0JBQXdCLE9BQU8sSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQztBQUM5RixxQkFBcUI7QUFDckI7QUFDQSxpQkFBaUIsQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLGNBQWM7QUFDbEM7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQyx3QkFBd0IsU0FBUyxjQUFjLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRTtBQUN2RSw0QkFBNEIsSUFBSSxxQkFBcUIsR0FBRyxLQUFLLENBQUMsZUFBZTtBQUM3RSxnQ0FBZ0MsZUFBZSxHQUFHLHFCQUFxQixLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxxQkFBcUI7QUFDakgsZ0NBQWdDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxlQUFlO0FBQzdFLGdDQUFnQyxlQUFlLEdBQUcscUJBQXFCLEtBQUssS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLHFCQUFxQjtBQUNsSCxnQ0FBZ0Msa0JBQWtCLEdBQUcsS0FBSyxDQUFDLFlBQVk7QUFDdkUsZ0NBQWdDLFlBQVksR0FBRyxrQkFBa0IsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsa0JBQWtCO0FBQ3pHLGdDQUFnQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsb0JBQW9CO0FBQ2xGLGdDQUFnQyxvQkFBb0IsR0FBRyxxQkFBcUIsS0FBSyxLQUFLLENBQUMsR0FBRyxJQUFJLEdBQUcscUJBQXFCO0FBQ3RILGdDQUFnQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsWUFBWTtBQUN2RSxnQ0FBZ0MsWUFBWSxHQUFHLGtCQUFrQixLQUFLLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxrQkFBa0IsQ0FBQztBQUN6RztBQUNBLDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ2xFO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0RTtBQUNBLDRCQUE0QixLQUFLLElBQUksQ0FBQyxJQUFJLGNBQWMsRUFBRTtBQUMxRCxnQ0FBZ0MsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLEtBQUssS0FBSyxDQUFDO0FBQzdFLDRCQUE0QixJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsS0FBSyxJQUFJLENBQUM7QUFDNUUsNEJBQTRCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxLQUFLLElBQUksQ0FBQztBQUN0RSw0QkFBNEIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLG9CQUFvQixDQUFDO0FBQzlFLDRCQUE0QixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztBQUM3RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ3RELDRCQUE0QixHQUFHLEVBQUUsc0JBQXNCO0FBQ3ZELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxvQkFBb0IsR0FBRztBQUNuRSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtBQUN4RSxvQ0FBb0MsT0FBTyxJQUFJLENBQUM7QUFDaEQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksY0FBYyxHQUFHLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRztBQUNBLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDdkQsb0NBQW9DLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLGNBQWMsQ0FBQztBQUN0RCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxvQkFBb0I7QUFDckQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGtCQUFrQixHQUFHO0FBQ2pFLGdDQUFnQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO0FBQ3hFLG9DQUFvQyxPQUFPLElBQUksQ0FBQztBQUNoRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxFQUFFLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQy9GLGdDQUFnQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNqSCxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsNEJBQTRCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM1SDtBQUNBLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDdkQsb0NBQW9DLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM5RSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUM7QUFDNUMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsa0JBQWtCO0FBQ25ELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO0FBQzlFLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ2xGLG9DQUFvQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxFQUFFLE9BQU8sQ0FBQztBQUNsRDtBQUNBLGdDQUFnQyxJQUFJO0FBQ3BDLG9DQUFvQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM1RixpQ0FBaUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtBQUM3QyxvQ0FBb0MsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDNUQsd0NBQXdDLE1BQU0sRUFBRSxDQUFDO0FBQ2pELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtBQUNwRSx3Q0FBd0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDO0FBQ25FLDRDQUE0QyxTQUFTLEVBQUUsS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUk7QUFDdEYseUNBQXlDLENBQUMsQ0FBQztBQUMzQyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLDJDQUEyQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNuSCxvQ0FBb0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7QUFDbEcsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7QUFDekYsb0NBQW9DLElBQUksSUFBSTtBQUM1Qyx3Q0FBd0MsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNoRDtBQUNBLG9DQUFvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25GLHdDQUF3QyxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFEO0FBQ0Esd0NBQXdDLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7QUFDeEUsNENBQTRDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRSx5Q0FBeUMsTUFBTTtBQUMvQyw0Q0FBNEMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0RCx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsRUFBRSxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDO0FBQ3ZGLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRTtBQUMzRixvQ0FBb0MsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUN4Rix3Q0FBd0MsT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMzRDtBQUNBLHdDQUF3QyxJQUFJLE9BQU8sQ0FBQyxHQUFHLEtBQUssT0FBTyxFQUFFO0FBQ3JFLDRDQUE0QyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekUseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUUscUNBQXFDO0FBQ3JDLGlDQUFpQyxDQUFDO0FBQ2xDLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7QUFDNUI7QUFDQSx3QkFBd0IsT0FBTyxjQUFjLENBQUM7QUFDOUMscUJBQXFCLEVBQUUsQ0FBQztBQUN4QjtBQUNBLGdCQUFnQixPQUFPLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUN4RDtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsZ0JBQWdCO0FBQ2hCLG9CQUFvQixJQUFJLFFBQVEsR0FBRywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RTtBQUNBLG9CQUFvQixJQUFJLFNBQVMsR0FBRyxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7QUFDbEcsb0JBQW9CLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekQsb0JBQW9CLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUQ7QUFDQSxvQkFBb0IsQ0FBQyxTQUFTLGtCQUFrQixHQUFHO0FBQ25ELHdCQUF3QixJQUFJLElBQUksSUFBSSxXQUFXLEVBQUU7QUFDakQsNEJBQTRCLG1CQUFtQixDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUM5RSx5QkFBeUI7QUFDekIscUJBQXFCLEdBQUcsQ0FBQztBQUN6QjtBQUNBLG9CQUFvQixDQUFDLFNBQVMscUJBQXFCLEdBQUc7QUFDdEQsd0JBQXdCLElBQUksUUFBUSxFQUFFLEVBQUU7QUFDeEMsNEJBQTRCLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDdkUsNEJBQTRCLG1CQUFtQixDQUFDLHlCQUF5QixHQUFHLE1BQU0sQ0FBQztBQUNuRix5QkFBeUI7QUFDekIscUJBQXFCLEdBQUcsQ0FBQztBQUN6QixpQkFBaUI7QUFDakIsZ0JBQWdCLE9BQU8sQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDcEY7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBRzlFO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdELG9CQUFvQixLQUFLLEVBQUUsSUFBSTtBQUMvQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ2hEO0FBQ0EsZ0JBQWdCLElBQUksS0FBSyxHQUFHLCtCQUErQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9EO0FBQ0EsZ0JBQWdCLElBQUksZUFBZSxHQUFHLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNFO0FBQ0EsZ0JBQWdCLElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN2QyxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBQ3hDLGdCQUFnQixJQUFJLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDMUMsZ0JBQWdCLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBRTVDLGdCQUFnQixJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQztBQUMvQyxnQkFBZ0IsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDM0MsZ0JBQWdCLElBQUksb0JBQW9CLEdBQUc7QUFDM0Msb0JBQW9CLElBQUksS0FBSyxHQUFHO0FBQ2hDLHdCQUF3QixPQUFPLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsSUFBSSxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUM3RyxxQkFBcUI7QUFDckI7QUFDQSxpQkFBaUIsQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixTQUFTLDBCQUEwQixDQUFDLEdBQUcsRUFBRTtBQUN6RCxvQkFBb0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRTtBQUNsRCx3QkFBd0IsR0FBRyxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQ3JELHdCQUF3QixHQUFHLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUMzRCx3QkFBd0IsR0FBRyxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQ3pELHdCQUF3QixHQUFHLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7QUFDdkQsd0JBQXdCLEdBQUcsQ0FBQyxrQkFBa0IsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0FBQy9ELHdCQUF3QixHQUFHLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUMvRCx3QkFBd0IsR0FBRyxDQUFDLHFCQUFxQixHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUM7QUFDckUsd0JBQXdCLEdBQUcsQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFGLHdCQUF3QixHQUFHLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztBQUNqRCx3QkFBd0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLEVBQUU7QUFDMUUsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLG1CQUFtQixHQUFHO0FBQ2hFLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUM3RCw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQztBQUMzQix3QkFBd0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLEVBQUU7QUFDakYsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLDBCQUEwQixHQUFHO0FBQ3ZFLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDOUQsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxvQ0FBb0MsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsb0NBQW9DLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUQsZ0NBQWdDLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxRCxnQ0FBZ0MsT0FBTyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3RJLDZCQUE2QjtBQUM3Qix5QkFBeUIsQ0FBQyxDQUFDO0FBQzNCO0FBQ0Esd0JBQXdCLEdBQUcsQ0FBQyxJQUFJLEdBQUcsU0FBUyxPQUFPLEdBQUc7QUFDdEQsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUM1RDtBQUNBLDRCQUE0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMzRDtBQUNBLDRCQUE0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEU7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0FBQ2pELHlCQUF5QixDQUFDO0FBQzFCO0FBQ0Esd0JBQXdCLEdBQUcsQ0FBQyxPQUFPLEdBQUcsU0FBUyxVQUFVLEdBQUc7QUFDNUQsNEJBQTRCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEU7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLEVBQUU7QUFDdEMsZ0NBQWdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDN0Q7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDeEQsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDO0FBQzFCO0FBQ0Esd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNwRSw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQzFELDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RCw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQ7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRCx5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixHQUFHLENBQUMsS0FBSyxHQUFHLFNBQVMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDNUQsNEJBQTRCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztBQUMxRCw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzVDLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM1Qyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDNUM7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEQseUJBQXlCLENBQUM7QUFDMUI7QUFDQSx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsR0FBRyxTQUFTLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoRiw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQzFELDRCQUE0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDak07QUFDQSw0QkFBNEIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckUseUJBQXlCLENBQUM7QUFDMUI7QUFDQSx3QkFBd0IsR0FBRyxDQUFDLFlBQVksR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN0Riw0QkFBNEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RTtBQUNBLDRCQUE0QixHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RSx5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixHQUFHLENBQUMsTUFBTSxHQUFHLFNBQVMsU0FBUyxDQUFDLEtBQUssRUFBRTtBQUMvRCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzRCw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0FBQzFELDRCQUE0QixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvTTtBQUNBLDRCQUE0QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hELHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsSUFBSSxjQUFjLEdBQUcsU0FBUyxxQkFBcUIsR0FBRztBQUN0RSxvQkFBb0IsU0FBUyxjQUFjLENBQUMsYUFBYSxFQUFFO0FBQzNELHdCQUF3QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUMzRCx3QkFBd0IsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixjQUFjLENBQUMsU0FBUyxHQUFHO0FBQy9DLHdCQUF3QixTQUFTLEVBQUUsU0FBUyx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUU7QUFDeEcsNEJBQTRCLElBQUksV0FBVyxDQUFDO0FBQzVDO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDOUQsZ0NBQWdDLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzdELGdDQUFnQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JGLGdDQUFnQyxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25GLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZGLGdDQUFnQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUM3RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxjQUFjLEVBQUU7QUFDaEQsZ0NBQWdDLDBCQUEwQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoRiw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsT0FBTyxXQUFXLENBQUM7QUFDL0MseUJBQXlCO0FBQ3pCLHdCQUF3QixLQUFLLEVBQUUsU0FBUyxLQUFLLEdBQUc7QUFDaEQsNEJBQTRCLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUN2RCxnQ0FBZ0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqRSxnQ0FBZ0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDeEUsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHFCQUFxQixDQUFDO0FBQ3RCLG9CQUFvQixPQUFPLGNBQWMsQ0FBQztBQUMxQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUMsT0FBTyxFQUFFO0FBQ3BELG9CQUFvQixJQUFJLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUN0RCxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUs7QUFDN0Msd0JBQXdCLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ2hELG9CQUFvQixJQUFJLENBQUM7QUFDekIsd0JBQXdCLENBQUM7QUFDekIsd0JBQXdCLEVBQUU7QUFDMUIsd0JBQXdCLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLG9CQUFvQixJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsb0JBQW9CLElBQUksV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RyxvQkFBb0IsSUFBSSxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsd0JBQXdCLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQzdDLG9CQUFvQixJQUFJLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBQ2hFLHdCQUF3QixHQUFHLEdBQUcsQ0FBQztBQUMvQix3QkFBd0IsRUFBRSxDQUFDO0FBQzNCO0FBQ0Esb0JBQW9CLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hFLHdCQUF3QixJQUFJLElBQUksR0FBRyxHQUFHO0FBQ3RDLDRCQUE0QixJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDO0FBQ0Esd0JBQXdCLE9BQU8sSUFBSSxHQUFHLENBQUMsRUFBRTtBQUN6Qyw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hFLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQ3ZDLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esb0JBQW9CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtBQUN6Qyx3QkFBd0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0Qyx3QkFBd0IsRUFBRSxLQUFLLENBQUM7QUFDaEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hELHdCQUF3QixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQ3pELDRCQUE0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDMUQsNEJBQTRCLEVBQUUsS0FBSyxDQUFDO0FBQ3BDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztBQUM5QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3pDLHdCQUF3QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLHdCQUF3QixFQUFFLEtBQUssQ0FBQztBQUNoQyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDakQsd0JBQXdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDO0FBQzNDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUN4QztBQUNBLHdCQUF3QixJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQ2hFLDRCQUE0QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0QsNEJBQTRCLEVBQUUsS0FBSyxDQUFDO0FBQ3BDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZGO0FBQ0Esd0JBQXdCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3BELDRCQUE0QixHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RztBQUNBLDRCQUE0QixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNsRCxnQ0FBZ0MsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUsZ0NBQWdDLEVBQUUsS0FBSyxDQUFDO0FBQ3hDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixHQUFHLEVBQUUsQ0FBQztBQUNsQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNoRSw0QkFBNEIsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvRCw0QkFBNEIsRUFBRSxLQUFLLENBQUM7QUFDcEMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksS0FBSyxHQUFHLHNCQUFzQixFQUFFO0FBQzVELDRCQUE0QixPQUFPLElBQUksQ0FBQztBQUN4Qyx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLEdBQUcsR0FBRyxRQUFRLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2xELG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNwQztBQUNBLG9CQUFvQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekMsd0JBQXdCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMsd0JBQXdCLEVBQUUsS0FBSyxDQUFDO0FBQ2hDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCx3QkFBd0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUN6RCw0QkFBNEIsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvRCw0QkFBNEIsRUFBRSxLQUFLLENBQUM7QUFDcEMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQzlCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDekMsd0JBQXdCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLHdCQUF3QixFQUFFLEtBQUssQ0FBQztBQUNoQyxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxLQUFLLEdBQUcsc0JBQXNCLEVBQUU7QUFDeEQsd0JBQXdCLE9BQU8sSUFBSSxDQUFDO0FBQ3BDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEYsb0JBQW9CLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUN0QztBQUNBLG9CQUFvQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0Qsd0JBQXdCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0Msd0JBQXdCLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDNUM7QUFDQSx3QkFBd0IsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3RELDRCQUE0QixDQUFDLEVBQUUsQ0FBQztBQUNoQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3ZDLDRCQUE0QixTQUFTO0FBQ3JDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDckQsd0JBQXdCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDNUMsNEJBQTRCLEVBQUUsR0FBRyxDQUFDO0FBQ2xDLDRCQUE0QixFQUFFLENBQUM7QUFDL0I7QUFDQSx3QkFBd0IsR0FBRztBQUMzQiw0QkFBNEIsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25EO0FBQ0EsNEJBQTRCLEdBQUc7QUFDL0IsZ0NBQWdDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDMUMsNkJBQTZCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDakQ7QUFDQSw0QkFBNEIsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQztBQUNBLDRCQUE0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUN2RCxnQ0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUMxQyxnQ0FBZ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5Qyw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3RCxnQ0FBZ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUNuRSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDcEQsNEJBQTRCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCw0QkFBNEIsRUFBRSxLQUFLLENBQUM7QUFDcEMseUJBQXlCLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtBQUMzQztBQUNBLHdCQUF3QixRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlDLHdCQUF3QixFQUFFLENBQUMsQ0FBQztBQUM1QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsSUFBSSxXQUFXLEdBQUcsU0FBUyxXQUFXLENBQUMsQ0FBQyxFQUFFO0FBQzlELHdCQUF3QixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakMsd0JBQXdCLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUN4RCx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNoRCx3QkFBd0IsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ3RDO0FBQ0Esd0JBQXdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0UsNEJBQTRCLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCw0QkFBNEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQ7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzNFLGdDQUFnQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakMsd0JBQXdCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUN0Qyx3QkFBd0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ3BDLHFCQUFxQixDQUFDO0FBQ3RCO0FBQ0Esb0JBQW9CLE9BQU8sV0FBVyxDQUFDO0FBQ3ZDLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLFNBQVMsdUJBQXVCLEdBQUc7QUFDMUUsb0JBQW9CLFNBQVMsZ0JBQWdCLEdBQUc7QUFDaEQsd0JBQXdCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQ2xELHdCQUF3QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDL0Msd0JBQXdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztBQUNoRSx3QkFBd0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFDakQsd0JBQXdCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixDQUFDO0FBQ3JFLHdCQUF3QixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUN6Qyx3QkFBd0IsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbkMsd0JBQXdCLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25DLHdCQUF3QixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUN2Qyx3QkFBd0IsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDdkMsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLHdCQUF3QixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUM3Qyx3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDNUMsd0JBQXdCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO0FBQzlFLHdCQUF3QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7QUFDbkQsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQ3JELHdCQUF3QixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUNqRCx3QkFBd0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFDM0Msd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLHdCQUF3QixJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUMzQyx3QkFBd0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDaEQsd0JBQXdCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBQ25ELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixnQkFBZ0IsQ0FBQyxTQUFTLEdBQUc7QUFDakQsd0JBQXdCLEtBQUssRUFBRSxTQUFTLHNCQUFzQixHQUFHO0FBQ2pFLDRCQUE0QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQseUJBQXlCO0FBQ3pCLHdCQUF3QixlQUFlLEVBQUUsU0FBUyxnQ0FBZ0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3pGLDRCQUE0QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2Qyw0QkFBNEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkMseUJBQXlCO0FBQ3pCLHFCQUFxQixDQUFDO0FBQ3RCLG9CQUFvQixPQUFPLGdCQUFnQixDQUFDO0FBQzVDLGlCQUFpQixFQUFFLENBQUM7QUFDcEI7QUFDQSxnQkFBZ0IsSUFBSSxjQUFjLEdBQUcsU0FBUyxxQkFBcUIsR0FBRztBQUN0RSxvQkFBb0IsSUFBSSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzVDLG9CQUFvQixJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDN0M7QUFDQSxvQkFBb0IsU0FBUyxjQUFjLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFO0FBQy9ILHdCQUF3QixJQUFJLENBQUMsR0FBRyxHQUFHLFNBQVMsQ0FBQztBQUM3Qyx3QkFBd0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDOUQsd0JBQXdCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzdDLHdCQUF3QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUNoRCx3QkFBd0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXdCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3hDLHdCQUF3QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDckQsd0JBQXdCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3pDLHdCQUF3QixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztBQUMzRCx3QkFBd0IsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7QUFDekQsd0JBQXdCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3JELHdCQUF3QixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztBQUM3Qyx3QkFBd0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFDcEQsd0JBQXdCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ2xELHdCQUF3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0FBQ3JELHdCQUF3QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDN0Msd0JBQXdCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQzlDLHdCQUF3QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUM5Qyx3QkFBd0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckYsd0JBQXdCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQ3ZEO0FBQ0Esd0JBQXdCLElBQUksU0FBUyxFQUFFO0FBQ3ZDLDRCQUE0QiwwQkFBMEIsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNsRSx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztBQUMvRCxxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFO0FBQzlELHdCQUF3QixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxPQUFPLFlBQVksU0FBUyxFQUFFO0FBQzlGLDRCQUE0QixHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUQsNEJBQTRCLE9BQU87QUFDbkMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNO0FBQ25ELDRCQUE0QixLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNsRCx3QkFBd0IsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLEdBQUcsaUJBQWlCLENBQUM7QUFDNUUsd0JBQXdCLElBQUksVUFBVSxHQUFHLENBQUMsTUFBTSxHQUFHLGtCQUFrQixJQUFJLGlCQUFpQixDQUFDO0FBQzNGLHdCQUF3QixJQUFJLFdBQVcsR0FBRyxrQkFBa0IsS0FBSyxDQUFDLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDakcsd0JBQXdCLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDekYsd0JBQXdCLElBQUksTUFBTSxHQUFHLENBQUM7QUFDdEMsNEJBQTRCLE9BQU8sQ0FBQztBQUNwQyx3QkFBd0IsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztBQUNyRCx3QkFBd0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsQ0FBQztBQUNwRTtBQUNBLHdCQUF3QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUU7QUFDN0UsNEJBQTRCLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDM0QsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDL0YsNEJBQTRCLElBQUksZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUNqRSw0QkFBNEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0QsNEJBQTRCLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUNuRCw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDN0Y7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUQsZ0NBQWdDLGVBQWUsR0FBRyxDQUFDLEdBQUcsVUFBVSxHQUFHLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDO0FBQzFHLGdDQUFnQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQzVDO0FBQ0EsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsZUFBZSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3RFLG9DQUFvQyxJQUFJLE9BQU8sR0FBRyxTQUFTLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLG9DQUFvQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUMsb0NBQW9DLElBQUksSUFBSSxHQUFHLE9BQU8sR0FBRyxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9GLG9DQUFvQyxJQUFJLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakUsb0NBQW9DLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNqRCxvQ0FBb0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0Esb0NBQW9DLE9BQU8sQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ3JFLHdDQUF3QyxPQUFPLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDaEUsd0NBQXdDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUMxRix3Q0FBd0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLEVBQUUsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pGLHdDQUF3QyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekYsd0NBQXdDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6Rix3Q0FBd0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3hGLHdDQUF3QyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDeEYsd0NBQXdDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN4Rix3Q0FBd0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3hGLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDMUQsd0NBQXdDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTtBQUN4RCw0Q0FBNEMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLDRDQUE0QyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3ZELHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDM0Ysd0NBQXdDLElBQUksS0FBSyxDQUFDLENBQUM7QUFDbkQscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLE9BQU8sR0FBRyxnQkFBZ0IsRUFBRTtBQUNuRSxvQ0FBb0MsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxHQUFHLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7QUFDekYsNkJBQTZCO0FBQzdCLHlCQUF5QixNQUFNLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRTtBQUNoRiw0QkFBNEIsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQyw0QkFBNEIsZ0JBQWdCLEdBQUcsS0FBSyxHQUFHLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUM3RTtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3RCxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQzFGLGdDQUFnQyxNQUFNLElBQUksZ0JBQWdCLENBQUM7QUFDM0QsZ0NBQWdDLEdBQUcsQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyRSxnQ0FBZ0MsQ0FBQyxJQUFJLGlCQUFpQixDQUFDO0FBQ3ZELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsR0FBRyxXQUFXLEVBQUU7QUFDakQsZ0NBQWdDLGdCQUFnQixHQUFHLEtBQUssR0FBRyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7QUFDbEYsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUMxRixnQ0FBZ0MsR0FBRyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLDZCQUE2QjtBQUM3Qix5QkFBeUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUU7QUFDL0UsNEJBQTRCLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQztBQUNoRSw0QkFBNEIsZ0JBQWdCLEdBQUcsS0FBSyxHQUFHLGVBQWUsQ0FBQztBQUN2RTtBQUNBLDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5RCxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksVUFBVSxFQUFFO0FBQ3JELG9DQUFvQyxlQUFlLEdBQUcsa0JBQWtCLENBQUM7QUFDekUsb0NBQW9DLGdCQUFnQixHQUFHLEtBQUssR0FBRyxlQUFlLENBQUM7QUFDL0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDNUM7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLEdBQUc7QUFDakUsb0NBQW9DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ3BFLG9DQUFvQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUNwRSxvQ0FBb0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDcEUsb0NBQW9DLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUMxRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsR0FBRyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3pGLDZCQUE2QjtBQUM3Qix5QkFBeUIsTUFBTTtBQUMvQiw0QkFBNEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckYseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDOUQsd0JBQXdCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNO0FBQ25ELDRCQUE0QixLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNsRCx3QkFBd0IsSUFBSSxrQkFBa0IsR0FBRyxNQUFNLEdBQUcsaUJBQWlCLENBQUM7QUFDNUUsd0JBQXdCLElBQUksVUFBVSxHQUFHLENBQUMsTUFBTSxHQUFHLGtCQUFrQixJQUFJLGlCQUFpQixDQUFDO0FBQzNGLHdCQUF3QixJQUFJLFdBQVcsR0FBRyxrQkFBa0IsS0FBSyxDQUFDLEdBQUcsVUFBVSxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDakcsd0JBQXdCLElBQUksWUFBWSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDekYsd0JBQXdCLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUN2Qyx3QkFBd0IsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQztBQUNyRDtBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzlELDRCQUE0QixJQUFJLGVBQWUsR0FBRyxDQUFDLEdBQUcsVUFBVSxHQUFHLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDO0FBQzFHLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7QUFDNUM7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0RSxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzdDO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEUsb0NBQW9DLElBQUksQ0FBQyxJQUFJLEVBQUU7QUFDL0Msd0NBQXdDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ2pFLHdDQUF3QyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ25ELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzFFLG9DQUFvQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ2pELG9DQUFvQyxJQUFJLEtBQUssQ0FBQyxDQUFDO0FBQy9DLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ3JGLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxZQUFZLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRTtBQUM5RCx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZMO0FBQ0Esd0JBQXdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0UsNEJBQTRCLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RDtBQUNBLDRCQUE0QixJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDbkUsZ0NBQWdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDeEUsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLFNBQVMsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO0FBQ2pFLDRCQUE0QixPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0FBQ3pFLDRCQUE0QixPQUFPLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUM7QUFDOUUseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtBQUNwRCx3QkFBd0IsR0FBRyxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDcEQsd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ2xELHdCQUF3QixHQUFHLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztBQUNqRCx3QkFBd0IsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDNUMsd0JBQXdCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLHdCQUF3QixHQUFHLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUM3Qyx3QkFBd0IsR0FBRyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7QUFDL0Msd0JBQXdCLEdBQUcsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQzVDLHdCQUF3QixHQUFHLENBQUMsd0JBQXdCLEdBQUcsYUFBYSxDQUFDO0FBQ3JFLHdCQUF3QixHQUFHLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO0FBQ3JEO0FBQ0Esd0JBQXdCLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxTQUFTLEVBQUU7QUFDM0QsNEJBQTRCLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDaEQsNEJBQTRCLEdBQUcsQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ25ELHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDckUsd0JBQXdCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDbEQ7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQzVELDRCQUE0QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQ7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQzdDLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNsRCxnQ0FBZ0MsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDbEQsZ0NBQWdDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2xELDZCQUE2QixNQUFNLElBQUksS0FBSyxHQUFHLEdBQUcsRUFBRTtBQUNwRCxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztBQUN6RCxnQ0FBZ0MsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN2RixnQ0FBZ0MsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN2RixnQ0FBZ0MsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUN2Riw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFO0FBQ2pGLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3JELHdCQUF3QixJQUFJLEtBQUssR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQzVDO0FBQ0Esd0JBQXdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM1RCw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0YsNEJBQTRCLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDNUUseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFO0FBQ3RGLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3JEO0FBQ0Esd0JBQXdCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUM1RCw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDeEcsNEJBQTRCLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzFILHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUU7QUFDbkgsd0JBQXdCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDckQsd0JBQXdCLElBQUksRUFBRSxHQUFHLFdBQVcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELHdCQUF3QixJQUFJLEVBQUUsR0FBRyxXQUFXLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvRCx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsV0FBVyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0Qsd0JBQXdCLElBQUksU0FBUyxDQUFDO0FBQ3RDO0FBQ0Esd0JBQXdCLElBQUksT0FBTyxLQUFLLFlBQVksRUFBRTtBQUN0RCw0QkFBNEIsU0FBUyxHQUFHLHNCQUFzQixDQUFDO0FBQy9ELHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0QixTQUFTLEdBQUcsaUJBQWlCLENBQUM7QUFDMUQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksaUJBQWlCLEdBQUcsT0FBTyxDQUFDO0FBQ3hELHdCQUF3QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDL0Y7QUFDQSx3QkFBd0IsS0FBSyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLE1BQU0sRUFBRSxHQUFHLElBQUksU0FBUyxFQUFFO0FBQzFFLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDaEYsNEJBQTRCLElBQUksUUFBUSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDNUYsNEJBQTRCLElBQUksU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDOUY7QUFDQSw0QkFBNEIsSUFBSSxXQUFXLEVBQUU7QUFDN0MsZ0NBQWdDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNoRiw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNsRiw0QkFBNEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BFLHlCQUF5QjtBQUN6QixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsU0FBUyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFO0FBQzlFLHdCQUF3QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQ2hELHdCQUF3QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0FBQ3BELHdCQUF3QixHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pHLHdCQUF3QixJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztBQUM5RDtBQUNBLHdCQUF3QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFO0FBQzFFLDRCQUE0QixJQUFJLFFBQVEsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO0FBQ3JFLGdDQUFnQyxLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU07QUFDdEQsZ0NBQWdDLElBQUksRUFBRSxJQUFJO0FBQzFDLGdDQUFnQyxVQUFVLEVBQUU7QUFDNUMsb0NBQW9DLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztBQUMxRCxvQ0FBb0MsUUFBUSxFQUFFLFFBQVE7QUFDdEQsaUNBQWlDO0FBQ2pDLDZCQUE2QixDQUFDLENBQUM7QUFDL0IsNEJBQTRCLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRCw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEYsNEJBQTRCLE9BQU87QUFDbkMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNwSSx3QkFBd0IsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xELHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixJQUFJLGVBQWUsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdEUsb0JBQW9CLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3ZFLG9CQUFvQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFDekMsb0JBQW9CLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNyQyxvQkFBb0IsY0FBYyxDQUFDLFNBQVMsR0FBRztBQUMvQyx3QkFBd0IsWUFBWSxFQUFFLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRTtBQUNsRSw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVM7QUFDMUQsZ0NBQWdDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUTtBQUN4RCxnQ0FBZ0MsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFlBQVk7QUFDckUsZ0NBQWdDLFlBQVksR0FBRyxpQkFBaUIsS0FBSyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsaUJBQWlCO0FBQ3ZHLGdDQUFnQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVU7QUFDakUsZ0NBQWdDLFVBQVUsR0FBRyxlQUFlLEtBQUssS0FBSyxDQUFDLEdBQUcsSUFBSSxHQUFHLGVBQWUsQ0FBQztBQUNqRyw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0FBQzlELDRCQUE0QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDaEUsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFVBQVUsSUFBSSxvQkFBb0IsQ0FBQztBQUNwRiw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkUsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0M7QUFDQSw0QkFBNEIsSUFBSSxZQUFZLEVBQUU7QUFDOUMsZ0NBQWdDLElBQUksaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDMUgsZ0NBQWdDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUM3RCxnQ0FBZ0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztBQUNsRixnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUM7QUFDckUsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDaEQsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMxRyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1Qyw0QkFBNEIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsNEJBQTRCLElBQUksU0FBUyxFQUFFO0FBQzNDLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM5RSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ25GLDRCQUE0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdEY7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNwRjtBQUNBLDRCQUE0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDakQsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDOUQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsbUJBQW1CLEVBQUUsU0FBUyxrQ0FBa0MsQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFO0FBQ3JKLDRCQUE0QixJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO0FBQ25FLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO0FBQy9ELDRCQUE0QixJQUFJLENBQUMsR0FBRyxpQkFBaUIsSUFBSSxDQUFDLENBQUM7QUFDM0QsNEJBQTRCLElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDaEU7QUFDQSw0QkFBNEIsSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFO0FBQ3BELGdDQUFnQyxPQUFPLENBQUMsQ0FBQztBQUN6Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxlQUFlLEdBQUcsWUFBWSxHQUFHLENBQUMsR0FBRyxlQUFlLElBQUksT0FBTyxnQkFBZ0IsS0FBSyxVQUFVLENBQUM7QUFDL0gsNEJBQTRCLElBQUksT0FBTyxHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUM1Riw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzdELDRCQUE0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLElBQUksQ0FBQztBQUNyQztBQUNBLDRCQUE0QixPQUFPLElBQUksRUFBRTtBQUN6QyxnQ0FBZ0MsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsY0FBYyxFQUFFO0FBQzNGLG9DQUFvQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3pFLG9DQUFvQyxPQUFPLENBQUMsQ0FBQztBQUM3QyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRDtBQUNBLGdDQUFnQyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtBQUNuRSxvQ0FBb0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsaUNBQWlDLE1BQU07QUFDdkMsb0NBQW9DLElBQUksSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RDtBQUNBLG9DQUFvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25GLHdDQUF3QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Qsd0NBQXdDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUNoRyx3Q0FBd0MsSUFBSSxRQUFRLEdBQUcsTUFBTSxHQUFHLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDbEY7QUFDQSx3Q0FBd0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDckUsNENBQTRDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDckYsNENBQTRDLE9BQU8sQ0FBQyxDQUFDO0FBQ3JELHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLENBQUMsRUFBRSxDQUFDO0FBQ3BDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxLQUFLLFlBQVksRUFBRTtBQUN4RCxvQ0FBb0MsT0FBTyxDQUFDLENBQUM7QUFDN0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksZUFBZSxJQUFJLEVBQUUsS0FBSyxHQUFHLGVBQWUsRUFBRTtBQUNsRixvQ0FBb0MsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFO0FBQzlELHdDQUF3QyxnQkFBZ0IsRUFBRSxDQUFDO0FBQzNELHdDQUF3QyxPQUFPLENBQUMsQ0FBQztBQUNqRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM5QyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsVUFBVSxFQUFFLFNBQVMseUJBQXlCLEdBQUc7QUFDekUsNEJBQTRCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssSUFBSSxFQUFFO0FBQ25FLGdDQUFnQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDckQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0M7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7QUFDeEQsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUM3RCxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNoRCxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RSxnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqRixnQ0FBZ0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNuRCxnQ0FBZ0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUM5RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN4RCw0QkFBNEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN0RDtBQUNBLDRCQUE0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDakQsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDNUQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsWUFBWSxFQUFFLFNBQVMsMkJBQTJCLENBQUMsS0FBSyxFQUFFO0FBQ2xGLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDM0QsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztBQUN2RCx5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsRUFBRSxTQUFTLHlCQUF5QixDQUFDLEtBQUssRUFBRTtBQUM5RSw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RFLHlCQUF5QjtBQUN6Qix3QkFBd0IsV0FBVyxFQUFFLFNBQVMsMEJBQTBCLENBQUMsS0FBSyxFQUFFO0FBQ2hGLDRCQUE0QixJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RSx5QkFBeUI7QUFDekIsd0JBQXdCLGFBQWEsRUFBRSxTQUFTLDRCQUE0QixDQUFDLEtBQUssRUFBRTtBQUNwRiw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0FBQ3hELHlCQUF5QjtBQUN6Qix3QkFBd0IsT0FBTyxFQUFFLFNBQVMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRTtBQUN2Riw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMvQztBQUNBLDRCQUE0QixJQUFJLEdBQUcsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFO0FBQy9ELGdDQUFnQyxHQUFHLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNELGdDQUFnQyxHQUFHLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUMvRCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHdCQUF3QixrQkFBa0IsRUFBRSxTQUFTLGlDQUFpQyxDQUFDLE1BQU0sRUFBRSxFQUFFO0FBQ2pHLHdCQUF3QixXQUFXLEVBQUUsU0FBUywwQkFBMEIsQ0FBQyxRQUFRLEVBQUUsRUFBRTtBQUNyRix3QkFBd0IsU0FBUyxFQUFFLFNBQVMsd0JBQXdCLENBQUMsTUFBTSxFQUFFO0FBQzdFLDRCQUE0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzdFLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQsZ0NBQWdDLElBQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JEO0FBQ0EsZ0NBQWdDLFFBQVEsR0FBRztBQUMzQyxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pFLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssSUFBSTtBQUM3Qyx3Q0FBd0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRCx3Q0FBd0MsTUFBTTtBQUM5QztBQUNBLG9DQUFvQyxLQUFLLElBQUk7QUFDN0Msd0NBQXdDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEUsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2xFLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssR0FBRztBQUM1Qyx3Q0FBd0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdkUsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hFLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssTUFBTTtBQUMvQyx3Q0FBd0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekUsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJO0FBQzdDLHdDQUF3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsd0NBQXdDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSx3Q0FBd0MsTUFBTTtBQUM5QztBQUNBLG9DQUFvQyxLQUFLLElBQUk7QUFDN0Msd0NBQXdDLElBQUksQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBQ2xGLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssT0FBTztBQUNoRCx3Q0FBd0MsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUN0RSw0Q0FBNEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDcEssZ0RBQWdELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3pFLDZDQUE2QyxNQUFNO0FBQ25ELGdEQUFnRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDckUsNkNBQTZDO0FBQzdDLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDakc7QUFDQSx3Q0FBd0MsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUN0RSw0Q0FBNEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQ25FLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztBQUM5RCx3Q0FBd0MsTUFBTTtBQUM5QyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsZUFBZSxFQUFFLFNBQVMsOEJBQThCLEdBQUc7QUFDbkYsNEJBQTRCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3ZFLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN0RSw0QkFBNEIsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDeEUsNEJBQTRCLElBQUksT0FBTyxHQUFHLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzNFLDRCQUE0QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0SCw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN0RCw0QkFBNEIsSUFBSSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsbUJBQW1CLENBQUM7QUFDbEYsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUM7QUFDakUsNEJBQTRCLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMzRiw0QkFBNEIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0YsNEJBQTRCLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2pGLDRCQUE0QixXQUFXLENBQUMscUJBQXFCLEdBQUcsUUFBUSxDQUFDLDBCQUEwQixDQUFDO0FBQ3BHLDRCQUE0QixZQUFZLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQy9ELDRCQUE0QixJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUNoRCw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRiw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0QsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5Qyx5QkFBeUI7QUFDekIsd0JBQXdCLGlCQUFpQixFQUFFLFNBQVMsNEJBQTRCLEdBQUc7QUFDbkYsNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDcEQsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5Qyw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdELDRCQUE0QixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzFHLDRCQUE0QixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLDRCQUE0QixZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM3RCw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO0FBQ25FO0FBQ0EsNEJBQTRCLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3BKO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQy9FLDRCQUE0QixRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRSw0QkFBNEIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEcsNEJBQTRCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQyx5QkFBeUI7QUFDekIsd0JBQXdCLGdCQUFnQixFQUFFLFNBQVMsNEJBQTRCLEdBQUc7QUFDbEYsNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO0FBQ3ZFLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3RELDRCQUE0QixJQUFJLENBQUMsR0FBRyxHQUFHLFFBQVEsQ0FBQztBQUNoRCw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDN0QsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5Qyx5QkFBeUI7QUFDekIsd0JBQXdCLGFBQWEsRUFBRSxTQUFTLDRCQUE0QixHQUFHO0FBQy9FLDRCQUE0QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQ3BELDRCQUE0QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7QUFDOUMsNEJBQTRCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3RCw0QkFBNEIsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUMxRyw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMvQyw0QkFBNEIsWUFBWSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0Q7QUFDQSw0QkFBNEIsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDcEo7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDL0UseUJBQXlCO0FBQ3pCLHdCQUF3QixJQUFJLEVBQUUsU0FBUyxtQkFBbUIsR0FBRztBQUM3RCw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM1Qyw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUNuRCw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdEQsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3ZELDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDL0QseUJBQXlCO0FBQ3pCLHdCQUF3QixPQUFPLEVBQUUsU0FBUyxzQkFBc0IsR0FBRztBQUNuRSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtBQUM3RCxnQ0FBZ0MsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDeEQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEtBQUssSUFBSSxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO0FBQzdMLGdDQUFnQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDckQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzlELGdDQUFnQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDckUsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkQsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3hELGdDQUFnQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ3ZFLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLFNBQVMsRUFBRSxTQUFTLHdCQUF3QixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3ZGLDRCQUE0QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLDRCQUE0QixJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQ25FLHlCQUF5QjtBQUN6Qix3QkFBd0IsYUFBYSxFQUFFLFNBQVMsNEJBQTRCLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtBQUN4Riw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMvQyw0QkFBNEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN2RCw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDN0MsZ0NBQWdDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzlDO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRixnQ0FBZ0MsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUNsRCxvQ0FBb0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7QUFDNUQsd0NBQXdDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELHdDQUF3QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM5RCx3Q0FBd0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0Q7QUFDQSx3Q0FBd0MsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pELDRDQUE0QyxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7QUFDL0UseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLElBQUksTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMxRCw0Q0FBNEMsTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0FBQ2hGLHlDQUF5QztBQUN6QztBQUNBLHdDQUF3QyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQzNELHdDQUF3QyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQzVELHdDQUF3QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUQsd0NBQXdDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvRCx3Q0FBd0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLHdDQUF3QyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0Qsd0NBQXdDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5RCx3Q0FBd0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM3RCx3Q0FBd0MsTUFBTTtBQUM5QztBQUNBLG9DQUFvQyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUN6RCx3Q0FBd0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RELHdDQUF3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEQsd0NBQXdDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pELHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO0FBQ3pELHdDQUF3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEQsd0NBQXdDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RCx3Q0FBd0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekQsd0NBQXdDLE1BQU07QUFDOUM7QUFDQSxvQ0FBb0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU87QUFDMUQsd0NBQXdDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELHdDQUF3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCx3Q0FBd0MsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hILHdDQUF3QyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRO0FBQzNELHdDQUF3QyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEgsd0NBQXdDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELHdDQUF3QyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RCx3Q0FBd0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQyx3Q0FBd0MsTUFBTTtBQUM5QztBQUNBLG9DQUFvQyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUMzRCx3Q0FBd0MsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsd0NBQXdDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hELHdDQUF3QyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVGLHdDQUF3QyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQy9DLHdDQUF3QyxNQUFNO0FBQzlDO0FBQ0Esb0NBQW9DLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTO0FBQzVELHdDQUF3QyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDeEQsd0NBQXdDLE1BQU07QUFDOUMsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxRCx5QkFBeUI7QUFDekIsd0JBQXdCLFNBQVMsRUFBRSxTQUFTLHdCQUF3QixHQUFHO0FBQ3ZFLDRCQUE0QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQ2pELHlCQUF5QjtBQUN6Qix3QkFBd0IsTUFBTSxFQUFFLFNBQVMscUJBQXFCLENBQUMsV0FBVyxFQUFFO0FBQzVFLDRCQUE0QixXQUFXLEdBQUcsT0FBTyxXQUFXLEtBQUssV0FBVyxHQUFHLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDbEcsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0MsNEJBQTRCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3ZFLDRCQUE0QixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1SCw0QkFBNEIsR0FBRyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUN2RTtBQUNBLDRCQUE0QixJQUFJLFdBQVcsSUFBSSxXQUFXLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQ3JILGdDQUFnQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsZ0NBQWdDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEYsZ0NBQWdDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUM3QyxnQ0FBZ0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlDLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDN0MsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksV0FBVyxFQUFFO0FBQzdDLGdDQUFnQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDbkQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEdBQUcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDckUseUJBQXlCO0FBQ3pCLHdCQUF3QixXQUFXLEVBQUUsU0FBUywwQkFBMEIsR0FBRztBQUMzRSw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzdDLDRCQUE0QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDMUMseUJBQXlCO0FBQ3pCLHdCQUF3QixJQUFJLEVBQUUsU0FBUyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU7QUFDeEUsNEJBQTRCLFdBQVcsR0FBRyxPQUFPLFdBQVcsS0FBSyxXQUFXLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQztBQUNsRyw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMvQyw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDbkUsNEJBQTRCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3pFLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDcEQ7QUFDQSw0QkFBNEIsSUFBSSxhQUFhLEVBQUU7QUFDL0MsZ0NBQWdDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQztBQUNBLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7QUFDeEQsb0NBQW9DLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDcEYsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEYsZ0NBQWdDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDbkQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtBQUNwRCxnQ0FBZ0MsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwRCxnQ0FBZ0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDM0QsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxXQUFXLEVBQUU7QUFDN0MsZ0NBQWdDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxXQUFXLEVBQUU7QUFDN0MsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNuRCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHdCQUF3QixNQUFNLEVBQUUsU0FBUyxxQkFBcUIsR0FBRztBQUNqRSw0QkFBNEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDdEQsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4Qyx5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsRUFBRSxTQUFTLHlCQUF5QixHQUFHO0FBQ3pFLDRCQUE0QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdDLDRCQUE0QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDL0MseUJBQXlCO0FBQ3pCLHdCQUF3QixZQUFZLEVBQUUsU0FBUywyQkFBMkIsR0FBRztBQUM3RSw0QkFBNEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDdEQsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5Qyx5QkFBeUI7QUFDekIsd0JBQXdCLGVBQWUsRUFBRSxTQUFTLDhCQUE4QixHQUFHO0FBQ25GLDRCQUE0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDN0MsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5Qyx5QkFBeUI7QUFDekIsd0JBQXdCLGlCQUFpQixFQUFFLFNBQVMsZ0NBQWdDLEdBQUc7QUFDdkYsNEJBQTRCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0FBQ3RELDRCQUE0QixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDN0MsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5Qyx5QkFBeUI7QUFDekIsd0JBQXdCLE9BQU8sRUFBRSxTQUFTLHNCQUFzQixHQUFHO0FBQ25FLDRCQUE0QixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7QUFDL0MseUJBQXlCO0FBQ3pCLHdCQUF3QixJQUFJLEVBQUUsU0FBUyxtQkFBbUIsR0FBRztBQUM3RCw0QkFBNEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDM0QseUJBQXlCO0FBQ3pCLHdCQUF3QixNQUFNLEVBQUUsU0FBUyxxQkFBcUIsR0FBRztBQUNqRSw0QkFBNEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7QUFDdkQseUJBQXlCO0FBQ3pCLHdCQUF3QixTQUFTLEVBQUUsU0FBUyx3QkFBd0IsR0FBRztBQUN2RSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztBQUM1RSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBQzdELDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDcEUsNEJBQTRCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNwRSx5QkFBeUI7QUFDekIsd0JBQXdCLE9BQU8sRUFBRSxTQUFTLHNCQUFzQixHQUFHO0FBQ25FLDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDOUQsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0M7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO0FBQ3JELGdDQUFnQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDaEQsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2Qyw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0FBQzVDO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ25FLGdDQUFnQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsZ0NBQWdDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDNUUsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUQsZ0NBQWdDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNuRSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzFDLDRCQUE0QixHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDdkMsNEJBQTRCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUM1Qyw0QkFBNEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7QUFDekQseUJBQXlCO0FBQ3pCLHdCQUF3QixjQUFjLEVBQUUsU0FBUyw2QkFBNkIsQ0FBQyxPQUFPLEVBQUU7QUFDeEYsNEJBQTRCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQztBQUMvRCx5QkFBeUI7QUFDekIsd0JBQXdCLGNBQWMsRUFBRSxTQUFTLDZCQUE2QixDQUFDLE9BQU8sRUFBRTtBQUN4Riw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO0FBQy9ELHlCQUF5QjtBQUN6Qix3QkFBd0IsU0FBUyxFQUFFLFNBQVMsd0JBQXdCLENBQUMsS0FBSyxFQUFFO0FBQzVFLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ2xFLHlCQUF5QjtBQUN6Qix3QkFBd0IsVUFBVSxFQUFFLFNBQVMseUJBQXlCLENBQUMsT0FBTyxFQUFFO0FBQ2hGLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUM1RCx5QkFBeUI7QUFDekIsd0JBQXdCLE9BQU8sRUFBRSxTQUFTLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUU7QUFDcEYsNEJBQTRCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzNFLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3ZEO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDMUMsZ0NBQWdDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDNUYsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQztBQUN0SDtBQUNBLDRCQUE0QixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzVGLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEdBQUcsV0FBVyxDQUFDLENBQUM7QUFDL0YsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRTtBQUMxQyxnQ0FBZ0MsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO0FBQzdDLGdDQUFnQyxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzNELDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztBQUMxRCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO0FBQ3hELDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDekQ7QUFDQSw0QkFBNEIsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO0FBQ3JELGdDQUFnQyxPQUFPO0FBQ3ZDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLFlBQVksQ0FBQztBQUMxRSw0QkFBNEIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0FBQ2hHLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDOUUsNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDbEcsNEJBQTRCLElBQUksZUFBZSxHQUFHLElBQUksR0FBRyxhQUFhLEdBQUcsYUFBYSxHQUFHLElBQUksR0FBRyxhQUFhLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQztBQUNySSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsSUFBSSxHQUFHLGVBQWUsQ0FBQztBQUNoRiw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNySSx5QkFBeUI7QUFDekIsd0JBQXdCLG9CQUFvQixFQUFFLFNBQVMsbUNBQW1DLENBQUMsSUFBSSxFQUFFO0FBQ2pHLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztBQUNsRSx5QkFBeUI7QUFDekIsd0JBQXdCLFdBQVcsRUFBRSxTQUFTLDBCQUEwQixDQUFDLElBQUksRUFBRTtBQUMvRSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pELHlCQUF5QjtBQUN6Qix3QkFBd0IsUUFBUSxFQUFFLFNBQVMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUN6RSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3JFLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7QUFDckUseUJBQXlCO0FBQ3pCLHdCQUF3QixrQkFBa0IsRUFBRSxTQUFTLGlDQUFpQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDN0YsNEJBQTRCLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRCw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEQseUJBQXlCO0FBQ3pCLHdCQUF3QixhQUFhLEVBQUUsU0FBUyw0QkFBNEIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMvRiw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDcEUsNEJBQTRCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNwRSx5QkFBeUI7QUFDekIsd0JBQXdCLFFBQVEsRUFBRSxTQUFTLHVCQUF1QixHQUFHO0FBQ3JFLDRCQUE0QixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixZQUFZLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUU7QUFDNUc7QUFDQSw0QkFBNEIsSUFBSSxjQUFjLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ2hFLGdDQUFnQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLGdDQUFnQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLGdDQUFnQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELDZCQUE2QixDQUFDO0FBQzlCLDRCQUE0QixJQUFJLGVBQWUsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDakUsZ0NBQWdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsZ0NBQWdDLE9BQU8sRUFBRSxDQUFDO0FBQzFDLDZCQUE2QixDQUFDO0FBQzlCLDRCQUE0QixJQUFJLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUUsNEJBQTRCLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDeEYsNEJBQTRCLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0QsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ3pELDRCQUE0QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSw0QkFBNEIsT0FBTyxJQUFJLENBQUM7QUFDeEMseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSx3QkFBd0IsWUFBWSxFQUFFLFNBQVMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRTtBQUN6Riw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekUsZ0NBQWdDLElBQUksS0FBSyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxnQ0FBZ0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEtBQUssS0FBSyxDQUFDLE9BQU8sSUFBSSxXQUFXLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUM7QUFDcEgsb0NBQW9DLFNBQVM7QUFDN0M7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2xGLG9DQUFvQyxJQUFJLGNBQWMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDekUsd0NBQXdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsd0NBQXdDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEYsd0NBQXdDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEQscUNBQXFDLENBQUM7QUFDdEM7QUFDQSxvQ0FBb0MsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxvQ0FBb0MsSUFBSSxJQUFJLEdBQUcsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDMUYsb0NBQW9DLElBQUksZUFBZSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3RHLG9DQUFvQyxJQUFJLElBQUksR0FBRyxjQUFjLENBQUMsZUFBZSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3pGLG9DQUFvQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRztBQUMvRCx3Q0FBd0MsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3Q0FBd0MsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3Q0FBd0MsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSx3Q0FBd0MsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxxQ0FBcUMsQ0FBQztBQUN0QyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLFdBQVcsRUFBRSxTQUFTLGlCQUFpQixDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDOUUsNEJBQTRCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksV0FBVyxDQUFDO0FBQ2hILGdDQUFnQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzFDO0FBQ0EsNEJBQTRCLEdBQUcsT0FBTyxLQUFLLENBQUMsVUFBVSxJQUFJLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ2pGO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM5RSxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDckU7QUFDQTtBQUNBLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLEtBQUssQ0FBQyxJQUFJO0FBQzVHLG9DQUFvQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQ25GLG9DQUFvQyxPQUFPLENBQUMsQ0FBQztBQUM3QyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLDRCQUE0QixPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixhQUFhLEVBQUUsU0FBUywyQkFBMkIsRUFBRSxLQUFLLEVBQUU7QUFDcEYsNEJBQTRCLElBQUksUUFBUSxFQUFFLEVBQUUsQ0FBQztBQUM3Qyw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1RSxnQ0FBZ0MsRUFBRSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsZ0NBQWdDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDakUsb0NBQW9DLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDbEQsb0NBQW9DLE1BQU07QUFDMUMsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3Qiw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRTtBQUNBO0FBQ0EsNEJBQTRCLE9BQU8sUUFBUSxDQUFDO0FBQzVDLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0Esd0JBQXdCLFlBQVksRUFBRSxTQUFTLDBCQUEwQixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUU7QUFDakgsNEJBQTRCLElBQUksSUFBSSxHQUFHLENBQUM7QUFDeEMsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQSw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLEdBQUc7QUFDckQsZ0NBQWdDLFFBQVEsR0FBRyxFQUFFO0FBQzdDLGdDQUFnQyxRQUFRLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQztBQUNuRSw0QkFBNEIsR0FBRyxTQUFTLEdBQUcsU0FBUyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0YsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkQ7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLDRCQUE0QixRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuRCw0QkFBNEIsUUFBUSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDekQsNEJBQTRCLFFBQVEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUMvQyxnQ0FBZ0MsS0FBSyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7QUFDbEQsZ0NBQWdDLEtBQUssQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3RELGdDQUFnQyxLQUFLLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNqRCxnQ0FBZ0MsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLDZCQUE2QjtBQUM3Qiw0QkFBNEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDckQ7QUFDQSxnQ0FBZ0MsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RixnQ0FBZ0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDL0QsZ0NBQWdDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQy9ELGdDQUFnQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzRCw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMxRSxnQ0FBZ0MsYUFBYSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQzlGO0FBQ0EsZ0NBQWdDLElBQUksT0FBTyxJQUFJLGFBQWEsRUFBRSxPQUFPO0FBQ3JFO0FBQ0EsZ0NBQWdDLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BFLGdDQUFnQyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxhQUFhLElBQUksT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxXQUFXO0FBQ3BJLG9DQUFvQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMseUJBQXlCLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRTtBQUNoSCxvQ0FBb0MsR0FBRyxRQUFRLENBQUMsT0FBTztBQUN2RCx3Q0FBd0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDeEcsb0NBQW9DLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdGLG9DQUFvQyxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSxvQ0FBb0MsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDL0c7QUFDQSxvQ0FBb0MsU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUM5RSxvQ0FBb0MsYUFBYSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2xHLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3BJLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxVQUFVLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUU7QUFDakksb0NBQW9DLFFBQVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsVUFBVSxFQUFFO0FBQzFGO0FBQ0Esb0NBQW9DLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pFO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHO0FBQ3ZGLHdDQUF3QyxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSztBQUNwRix3Q0FBd0MsU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHO0FBQ3BFLHdDQUF3QyxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakksb0NBQW9DLEdBQUcsQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDbEUsd0NBQXdDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ2xFLHdDQUF3QyxRQUFRLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztBQUNqRSx3Q0FBd0MsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbkUscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLE9BQU87QUFDNUMscUNBQXFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSztBQUM5Rix5Q0FBeUMsU0FBUyxFQUFFLEdBQUcsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtBQUNoSTtBQUNBLG9DQUFvQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDN0Y7QUFDQSxvQ0FBb0MsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUM7QUFDcEUsb0NBQW9DLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ25FLG9DQUFvQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvRCxvQ0FBb0MsR0FBRyxTQUFTLEdBQUcsR0FBRyxFQUFFO0FBQ3hELHdDQUF3QyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQ3ZHLHdDQUF3QyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3pELHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxPQUFPLEtBQUssS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQ3BILG9DQUFvQyxRQUFRLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUNuRTtBQUNBLG9DQUFvQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RTtBQUNBLG9DQUFvQyxJQUFJLFlBQVksR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0FBQzlGLG9DQUFvQyxHQUFHLFlBQVksQ0FBQyxHQUFHLEVBQUUsT0FBTztBQUNoRTtBQUNBO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzFELHdDQUF3QyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN2Rix3Q0FBd0MsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTztBQUMxRSxxQ0FBcUM7QUFDckMsb0NBQW9DLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDbkcsb0NBQW9DLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckQ7QUFDQTtBQUNBLG9DQUFvQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7QUFDN0Ysb0NBQW9DLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO0FBQ3BFLG9DQUFvQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMvRCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixTQUFTLEVBQUUsU0FBUyxTQUFTLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUU7QUFDekYsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0MsNEJBQTRCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDdkQsNEJBQTRCLElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDcEQsNEJBQTRCLElBQUksaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQzlFLDRCQUE0QixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDcEYsNEJBQTRCLElBQUksY0FBYyxHQUFHLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztBQUM5Ryw0QkFBNEIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ2xILDRCQUE0QixJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUM7QUFDL0UsNEJBQTRCLElBQUksU0FBUyxDQUFDO0FBQzFDO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxjQUFjLElBQUksV0FBVyxFQUFFO0FBQ3ZGLGdDQUFnQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDOUYsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxXQUFXLEVBQUU7QUFDckUsZ0NBQWdDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQyxnQ0FBZ0MsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEQsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNoRCxnQ0FBZ0MsU0FBUyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RDtBQUNBLGdDQUFnQyxJQUFJLGdCQUFnQixFQUFFO0FBQ3RELG9DQUFvQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNsRixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRTtBQUMvSSxvQ0FBb0MsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQy9DLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO0FBQ2pKLG9DQUFvQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7QUFDakQsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5Qyw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksSUFBSSxjQUFjLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRTtBQUMvSSxvQ0FBb0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO0FBQ2pKLG9DQUFvQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEUsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGNBQWMsRUFBRTtBQUNoRCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixLQUFLLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNsRyxnQ0FBZ0MsS0FBSyxDQUFDLElBQUksQ0FBQztBQUMzQyxvQ0FBb0MsU0FBUyxFQUFFLEdBQUcsQ0FBQyxtQkFBbUI7QUFDdEUsb0NBQW9DLENBQUMsRUFBRSxDQUFDO0FBQ3hDLG9DQUFvQyxDQUFDLEVBQUUsQ0FBQztBQUN4QyxvQ0FBb0MsUUFBUSxFQUFFLFFBQVE7QUFDdEQsb0NBQW9DLFNBQVMsRUFBRSxTQUFTO0FBQ3hELGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLHVCQUF1QixHQUFHO0FBQ3RELDRCQUE0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ2hGLDRCQUE0QixHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5Qyw0QkFBNEIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3JELDRCQUE0QixJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzRSw0QkFBNEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBQ2hEO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDckUsZ0NBQWdDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFO0FBQ2xFLG9DQUFvQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ25ELG9DQUFvQyxNQUFNO0FBQzFDLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsT0FBTyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9GLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixRQUFRLEVBQUUsU0FBUyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUU7QUFDM0U7QUFDQSw0QkFBNEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztBQUN2RCw0QkFBNEIsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNwRDtBQUNBLDRCQUE0QixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDbEQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUM1RDtBQUNBLDRCQUE0QixJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDaEQsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0MsNEJBQTRCLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7QUFDdEUsNEJBQTRCLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbEUsNEJBQTRCLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDbEUsNEJBQTRCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztBQUNwRyw0QkFBNEIsSUFBSSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0RSw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7QUFDaEYsNEJBQTRCLElBQUksWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7QUFDN0QsNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7QUFDekQsNEJBQTRCLElBQUksVUFBVSxHQUFHLFFBQVEsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDL0QsNEJBQTRCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7QUFDdkUsNEJBQTRCLElBQUksaUJBQWlCLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckYsNEJBQTRCLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDN0osNEJBQTRCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2Qyw0QkFBNEIsSUFBSSxnQkFBZ0IsQ0FBQztBQUNqRDtBQUNBLDRCQUE0QixJQUFJLEVBQUUsRUFBRSxjQUFjLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNsRTtBQUNBO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtBQUNyRCxnQ0FBZ0MsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNDLGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDdEYsZ0NBQWdDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztBQUMzRSxnQ0FBZ0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlDLGdDQUFnQyxHQUFHLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQztBQUN4RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6RSw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ25GO0FBQ0EsNEJBQTRCLFFBQVEsR0FBRyxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hFO0FBQ0EsNEJBQTRCLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqRSxnQ0FBZ0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxnQ0FBZ0MsT0FBTyxFQUFFLENBQUM7QUFDMUMsNkJBQTZCLENBQUM7QUFDOUI7QUFDQTtBQUNBLDRCQUE0QixFQUFFLEdBQUcsZUFBZSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzNFO0FBQ0E7QUFDQSw0QkFBNEIsY0FBYyxHQUFHLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDdEU7QUFDQSw0QkFBNEIsSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFO0FBQ25ELGdDQUFnQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUM5RCw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQztBQUNoRTtBQUNBLDRCQUE0QixJQUFJLEtBQUssS0FBSyxDQUFDLElBQUksU0FBUyxLQUFLLENBQUMsRUFBRTtBQUNoRSxnQ0FBZ0MsSUFBSSxjQUFjLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQztBQUMxSDtBQUNBLGdDQUFnQyxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFO0FBQ2pKLG9DQUFvQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDO0FBQzNFLG9DQUFvQyxTQUFTLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsZ0JBQWdCLENBQUM7QUFDOUYsaUNBQWlDO0FBQ2pDLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxTQUFTLElBQUksS0FBSyxDQUFDO0FBQ25ELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGFBQWEsS0FBSyxHQUFHLEVBQUU7QUFDdkQsZ0NBQWdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3hFLGdDQUFnQyxTQUFTLElBQUksYUFBYSxDQUFDO0FBQzNELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixHQUFHLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztBQUN0RCw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ2xDO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9ELGdDQUFnQyxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEQ7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQUU7QUFDN0Qsb0NBQW9DLENBQUMsSUFBSSxVQUFVLEdBQUcsS0FBSyxHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDOUUsb0NBQW9DLFNBQVM7QUFDN0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQztBQUMxRCxnQ0FBZ0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDO0FBQzlGLGdDQUFnQyxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQy9ELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO0FBQzFELGdDQUFnQyxJQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQztBQUNuRixnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUN4RDtBQUNBLGdDQUFnQyxJQUFJLFFBQVEsRUFBRTtBQUM5QyxvQ0FBb0MsSUFBSSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUN4RCxvQ0FBb0MsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksZUFBZSxDQUFDO0FBQy9FLG9DQUFvQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUNsRixvQ0FBb0MsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLGlCQUFpQixDQUFDO0FBQ2pFLG9DQUFvQyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO0FBQ3hFLG9DQUFvQyxLQUFLLEdBQUcsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMxRSxvQ0FBb0MsT0FBTyxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUM7QUFDakUsb0NBQW9DLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksYUFBYSxDQUFDO0FBQ3ZFLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxPQUFPLEdBQUcsQ0FBQyxHQUFHLGFBQWEsQ0FBQztBQUNoRSxvQ0FBb0MsT0FBTyxHQUFHLENBQUMsQ0FBQztBQUNoRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDakUsb0NBQW9DLElBQUksYUFBYSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQzNIO0FBQ0Esb0NBQW9DLElBQUksS0FBSyxHQUFHLGFBQWEsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUU7QUFDL0Ysd0NBQXdDLElBQUksZUFBZSxHQUFHLEtBQUssR0FBRyxhQUFhLENBQUM7QUFDcEYsd0NBQXdDLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDN0Qsd0NBQXdDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNuRCx3Q0FBd0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEUsd0NBQXdDLE9BQU8sSUFBSSxlQUFlLENBQUM7QUFDbkUscUNBQXFDLE1BQU0sSUFBSSxLQUFLLEtBQUssYUFBYSxFQUFFO0FBQ3hFLHdDQUF3QyxPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxJQUFJLElBQUksR0FBRyxRQUFRLEdBQUcsYUFBYSxDQUFDO0FBQzdHLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ3REO0FBQ0Esb0NBQW9DLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUksb0NBQW9DLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3hELG9DQUFvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdEYsd0NBQXdDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEUsd0NBQXdDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ3JGO0FBQ0Esd0NBQXdDLEdBQUcsSUFBSSxJQUFJLENBQUMsRUFBRTtBQUN0RCw0Q0FBNEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUNqRyx5Q0FBeUM7QUFDekM7QUFDQSx3Q0FBd0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDL0YscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN4RSxvQ0FBb0MsSUFBSSxjQUFjLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDbkUsd0NBQXdDLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNsRixxQ0FBcUMsTUFBTTtBQUMzQyx3Q0FBd0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RHO0FBQ0Esd0NBQXdDLElBQUksTUFBTSxFQUFFO0FBQ3BELDRDQUE0QyxhQUFhLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQztBQUN0Ryw0Q0FBNEMsYUFBYSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUM7QUFDdEcsNENBQTRDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDNUgseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxTQUFTLEdBQUcsS0FBSyxHQUFHLGlCQUFpQixHQUFHLE9BQU8sR0FBRyxhQUFhLENBQUM7QUFDcEcsZ0NBQWdDLENBQUMsSUFBSSxTQUFTLENBQUM7QUFDL0M7QUFDQSxnQ0FBZ0MsSUFBSSxhQUFhLEVBQUU7QUFDbkQsb0NBQW9DLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsRCxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksUUFBUSxFQUFFO0FBQzFDLGdDQUFnQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDNUQsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUM1RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzFDLHlCQUF5QjtBQUN6Qix3QkFBd0IsYUFBYSxFQUFFLFNBQVMsNEJBQTRCLENBQUMsTUFBTSxFQUFFO0FBQ3JGLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO0FBQ3ZELDRCQUE0QixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO0FBQ3BELDRCQUE0QixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQzVELDRCQUE0QixJQUFJLGFBQWEsR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RFLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRSw0QkFBNEIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNsRSw0QkFBNEIsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUNsRSw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7QUFDaEYsNEJBQTRCLElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDO0FBQzlGLDRCQUE0QixJQUFJLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzdELDRCQUE0QixJQUFJLGVBQWUsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEtBQUssS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQztBQUNsSCw0QkFBNEIsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUM7QUFDL0QsNEJBQTRCLElBQUksRUFBRSxFQUFFLGNBQWMsRUFBRSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ2xFO0FBQ0EsNEJBQTRCLElBQUksZUFBZSxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7QUFDbkUsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7QUFDbkUsNEJBQTRCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN2Qyw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6RSw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRTtBQUNBLDRCQUE0QixRQUFRLEdBQUcsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RTtBQUNBO0FBQ0EsNEJBQTRCLElBQUksZUFBZSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNqRSxnQ0FBZ0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxnQ0FBZ0MsT0FBTyxFQUFFLENBQUM7QUFDMUMsNkJBQTZCLENBQUM7QUFDOUI7QUFDQSw0QkFBNEIsRUFBRSxHQUFHLGVBQWUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzRTtBQUNBO0FBQ0EsNEJBQTRCLGNBQWMsR0FBRyxDQUFDLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3RFO0FBQ0EsNEJBQTRCLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ2pFO0FBQ0EsNEJBQTRCLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFO0FBQy9ELGdDQUFnQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xEO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO0FBQzdELG9DQUFvQyxhQUFhLEdBQUcsVUFBVSxHQUFHLEtBQUssR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3pGLG9DQUFvQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDekUsb0NBQW9DLE9BQU8sQ0FBQyxDQUFDLElBQUksYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUM1RSxvQ0FBb0MsU0FBUztBQUM3QyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDO0FBQzlGLGdDQUFnQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ25HO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxZQUFZLEVBQUU7QUFDbkQsb0NBQW9DLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7QUFDL0gsb0NBQW9DLFNBQVM7QUFDN0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO0FBQzdELGdDQUFnQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUMsZ0NBQWdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzlELGdDQUFnQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDckUsZ0NBQWdDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN2RSxnQ0FBZ0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9DO0FBQ0EsZ0NBQWdDLElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyRSxvQ0FBb0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxvQ0FBb0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxvQ0FBb0MsT0FBTyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNwRCxpQ0FBaUMsQ0FBQztBQUNsQztBQUNBLGdDQUFnQyxJQUFJLFdBQVcsR0FBRyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQy9GO0FBQ0EsZ0NBQWdDLEtBQUssR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLE9BQU8sQ0FBQztBQUM1RSxnQ0FBZ0MsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsZ0NBQWdDLE9BQU8sQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUNoRTtBQUNBLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDdEQ7QUFDQSxvQ0FBb0MsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDNUgsb0NBQW9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0Rix3Q0FBd0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RSx3Q0FBd0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkYsd0NBQXdDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzdGLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzFDLDRCQUE0QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztBQUN4RCx5QkFBeUI7QUFDekIsd0JBQXdCLFlBQVksRUFBRSxTQUFTLDJCQUEyQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTtBQUM3Rix3QkFBd0IscUJBQXFCLEVBQUUsU0FBUyxvQ0FBb0MsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtBQUNqSSw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hDLDRCQUE0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MseUJBQXlCO0FBQ3pCLHdCQUF3QixpQkFBaUIsRUFBRSxTQUFTLGdDQUFnQyxDQUFDLEVBQUUsRUFBRTtBQUN6Riw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQzdDO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxDQUFDO0FBQ3hDO0FBQ0EsNEJBQTRCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLGVBQWUsRUFBRTtBQUMzRCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELGdDQUFnQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0csZ0NBQWdDLElBQUkscUJBQXFCLEdBQUc7QUFDNUQsb0NBQW9DLG9CQUFvQixFQUFFLFNBQVMsb0JBQW9CLENBQUMsR0FBRyxFQUFFO0FBQzdGLHdDQUF3QyxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDOUkscUNBQXFDO0FBQ3JDLGlDQUFpQyxDQUFDO0FBQ2xDLGdDQUFnQyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUN2SSw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsT0FBTyxHQUFHLElBQUksZUFBZSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzNGLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixPQUFPLE9BQU8sQ0FBQztBQUMzQyx5QkFBeUI7QUFDekIsd0JBQXdCLGVBQWUsRUFBRSxTQUFTLDhCQUE4QixHQUFHO0FBQ25GLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekYseUJBQXlCO0FBQ3pCLHdCQUF3QixhQUFhLEVBQUUsU0FBUyw0QkFBNEIsR0FBRztBQUMvRSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZGLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDNUQseUJBQXlCO0FBQ3pCLHdCQUF3QixpQkFBaUIsRUFBRSxTQUFTLGdDQUFnQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQzlGLDRCQUE0QixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUN6RCw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0FBQzdELHlCQUF5QjtBQUN6Qix3QkFBd0IsZUFBZSxFQUFFLFNBQVMsOEJBQThCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDMUYsNEJBQTRCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdkU7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZELDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFDM0QsNEJBQTRCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztBQUM3RCx5QkFBeUI7QUFDekIsd0JBQXdCLFdBQVcsRUFBRSxTQUFTLDBCQUEwQixDQUFDLFNBQVMsRUFBRTtBQUNwRiw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMvQyw0QkFBNEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ3hDLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRyw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEYsNEJBQTRCLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztBQUNyRTtBQUNBLDRCQUE0QixJQUFJLEdBQUcsRUFBRTtBQUNyQyxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztBQUN4RCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUN6RCxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMzRDtBQUNBLGdDQUFnQyxJQUFJLGNBQWMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDcEUsb0NBQW9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsb0NBQW9DLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsb0NBQW9DLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDcEQsaUNBQWlDLENBQUM7QUFDbEM7QUFDQSxnQ0FBZ0MsSUFBSSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsZ0NBQWdDLElBQUksRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRTtBQUNBLGdDQUFnQyxJQUFJLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekU7QUFDQSxnQ0FBZ0MsSUFBSSxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzlFO0FBQ0EsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUUsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDNUUsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLHlCQUF5QjtBQUN6Qix3QkFBd0IsZ0JBQWdCLEVBQUUsU0FBUywrQkFBK0IsR0FBRztBQUNyRiw0QkFBNEIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDdkYseUJBQXlCO0FBQ3pCLHdCQUF3QixjQUFjLEVBQUUsU0FBUyw2QkFBNkIsR0FBRztBQUNqRiw0QkFBNEIsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLGdDQUFnQyxDQUFDLENBQUM7QUFDckYseUJBQXlCO0FBQ3pCLHdCQUF3QixxQkFBcUIsRUFBRSxTQUFTLG9DQUFvQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUU7QUFDM0csNEJBQTRCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4Qyw0QkFBNEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDN0U7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzlFLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDbkUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztBQUM5RTtBQUNBLDRCQUE0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BGO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxFQUFFO0FBQ3RDLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvRSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0MsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsbUJBQW1CLEVBQUUsU0FBUyxrQ0FBa0MsR0FBRztBQUMzRiw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLDRCQUE0QixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMvRTtBQUNBLDRCQUE0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3BGLHlCQUF5QjtBQUN6Qix3QkFBd0IsVUFBVSxFQUFFLFNBQVMseUJBQXlCLENBQUMsS0FBSyxFQUFFO0FBQzlFLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEMsNEJBQTRCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDdEQ7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDakQsZ0NBQWdDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO0FBQ3RGLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7QUFDaEQsZ0NBQWdDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO0FBQ2xGLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztBQUNsRjtBQUNBLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDOUMsZ0NBQWdDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckYsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO0FBQzdDLGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7QUFDN0UsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUMzSDtBQUNBLDRCQUE0QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6Ryw0QkFBNEIsTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hFLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFGLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxDQUFDO0FBQzFDLGdDQUFnQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzNDO0FBQ0EsNEJBQTRCLElBQUksVUFBVSxHQUFHLGNBQWMsRUFBRTtBQUM3RCxnQ0FBZ0MsTUFBTSxHQUFHLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDckUsZ0NBQWdDLFVBQVUsR0FBRyxjQUFjLENBQUM7QUFDNUQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksV0FBVyxHQUFHLGNBQWMsRUFBRTtBQUM5RCxnQ0FBZ0MsTUFBTSxHQUFHLFdBQVcsR0FBRyxjQUFjLENBQUM7QUFDdEUsZ0NBQWdDLFdBQVcsR0FBRyxjQUFjLENBQUM7QUFDN0QsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3RFO0FBQ0EsNEJBQTRCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRTtBQUM3QyxnQ0FBZ0MsT0FBTyxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9FLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN0SCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQztBQUNqRSw0QkFBNEIsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUNuRSw0QkFBNEIsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25FLDRCQUE0QixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNqRjtBQUNBLDRCQUE0QixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7QUFDN0MsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO0FBQ3JELG9DQUFvQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU07QUFDaEUsb0NBQW9DLE9BQU8sRUFBRSxRQUFRO0FBQ3JELG9DQUFvQyxPQUFPLEVBQUUsT0FBTztBQUNwRCxvQ0FBb0MsT0FBTyxFQUFFLE9BQU87QUFDcEQsb0NBQW9DLE1BQU0sRUFBRSxNQUFNO0FBQ2xELG9DQUFvQyxNQUFNLEVBQUUsTUFBTTtBQUNsRCxvQ0FBb0MsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTztBQUNoRSxvQ0FBb0MsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUTtBQUNsRSxvQ0FBb0MsV0FBVyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUk7QUFDaEYsb0NBQW9DLHFCQUFxQixFQUFFLElBQUk7QUFDL0QsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkIsTUFBTTtBQUNuQyxnQ0FBZ0MsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFFLGdDQUFnQyxVQUFVLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN2RSxnQ0FBZ0MsVUFBVSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakUsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLFlBQVksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDL0QsNEJBQTRCLElBQUksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDO0FBQ2hELDRCQUE0QixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFGLDRCQUE0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM3RCw0QkFBNEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzlDLDRCQUE0QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDNUQseUJBQXlCO0FBQ3pCLHdCQUF3QixRQUFRLEVBQUUsU0FBUyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUU7QUFDMUUsNEJBQTRCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM5Qyw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNwRCw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzdEO0FBQ0EsNEJBQTRCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsS0FBSyxTQUFTLEVBQUU7QUFDOUUsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO0FBQ3ZFLDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztBQUMxRSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0FBQzdDLGdDQUFnQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDdkUsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFFLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDM0MseUJBQXlCO0FBQ3pCLHdCQUF3QixnQkFBZ0IsRUFBRSxTQUFTLCtCQUErQixHQUFHO0FBQ3JGLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEM7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO0FBQ3BELGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDMUYsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsY0FBYyxFQUFFLFNBQVMsNkJBQTZCLEdBQUc7QUFDakYsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekIsd0JBQXdCLGVBQWUsRUFBRSxTQUFTLDhCQUE4QixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFO0FBQzFHLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEMsNEJBQTRCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4RCw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7QUFDbEU7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFFLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlELGdDQUFnQyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9ELGdDQUFnQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvRSxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzVDLGdDQUFnQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDL0MsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNsRSw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9ELHlCQUF5QjtBQUN6Qix3QkFBd0IsYUFBYSxFQUFFLFNBQVMsNEJBQTRCLEdBQUc7QUFDL0UsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekIsd0JBQXdCLGdCQUFnQixFQUFFLFNBQVMsK0JBQStCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDaEcsNEJBQTRCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hFO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxRQUFRLEVBQUU7QUFDM0MsZ0NBQWdDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3BGLGdDQUFnQyxPQUFPO0FBQ3ZDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDeEMsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0MsNEJBQTRCLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRCw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN4RztBQUNBLDRCQUE0QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDakQsZ0NBQWdDLElBQUksZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0FBQ3RGLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGdDQUFnQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztBQUM1RCxvQ0FBb0MsS0FBSyxFQUFFLEtBQUs7QUFDaEQsb0NBQW9DLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3JELG9DQUFvQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwRCxvQ0FBb0MsS0FBSyxFQUFFLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDbEUsb0NBQW9DLE1BQU0sRUFBRSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ25FLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQyx5QkFBeUI7QUFDekIsd0JBQXdCLHFCQUFxQixFQUFFLFNBQVMsb0NBQW9DLENBQUMsR0FBRyxFQUFFO0FBQ2xHLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSztBQUNqRCxnQ0FBZ0MsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7QUFDcEQsNEJBQTRCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0FBQ25FLDRCQUE0QixJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUN6RSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztBQUM3RDtBQUNBLDRCQUE0QixJQUE0QixLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7QUFDL0YsZ0NBQWdDLElBQUksS0FBSyxJQUFJLG1CQUFtQixJQUFJLE1BQU0sSUFBSSxtQkFBbUIsRUFBRTtBQUNuRyxvQ0FBb0MsS0FBSyxDQUFDLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQztBQUN2RSx3Q0FBd0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO0FBQ3RELHdDQUF3QyxLQUFLLEVBQUUsS0FBSztBQUNwRCx3Q0FBd0MsTUFBTSxFQUFFLE1BQU07QUFDdEQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsS0FBSyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDMUQsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ3pELGdDQUFnQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BELGdDQUFnQyxPQUFPO0FBQ3ZDLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hHLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO0FBQzdELDRCQUE0QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsNEJBQTRCLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3RCw0QkFBNEIsT0FBTyxDQUFDLHdCQUF3QixHQUFHLFdBQVcsQ0FBQztBQUMzRSw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2hILDRCQUE0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLDRCQUE0QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUMsNEJBQTRCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDNUUseUJBQXlCO0FBQ3pCLHdCQUF3QiwyQkFBMkIsRUFBRSxTQUFTLDBDQUEwQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtBQUM3SSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN0RCw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4RCw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7QUFDbkUsNEJBQTRCLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQ3pFLDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hHLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDO0FBQzdELDRCQUE0QixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsNEJBQTRCLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsT0FBTyxDQUFDLHdCQUF3QixHQUFHLFdBQVcsQ0FBQztBQUMzRSw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsR0FBRyxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2hILDRCQUE0QixPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2xFLDRCQUE0QixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDOUMsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0M7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQ25GLGdDQUFnQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEcsZ0NBQWdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRyxnQ0FBZ0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLDBCQUEwQixFQUFFLFNBQVMseUNBQXlDLENBQUMsTUFBTSxFQUFFO0FBQy9HLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUNuRSw0QkFBNEIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7QUFDekU7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3RSxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELGdDQUFnQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSztBQUN2RCxvQ0FBb0MsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUQsZ0NBQWdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDNUcsZ0NBQWdDLElBQUksT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7QUFDakUsZ0NBQWdDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMvQyxnQ0FBZ0Msa0JBQWtCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQ25FLGdDQUFnQyxPQUFPLENBQUMsd0JBQXdCLEdBQUcsV0FBVyxDQUFDO0FBQy9FLGdDQUFnQyxPQUFPLENBQUMsU0FBUyxHQUFHLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDcEgsZ0NBQWdDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdEUsZ0NBQWdDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsRCxnQ0FBZ0MsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0FBQzNDLGdDQUFnQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFFLGdDQUFnQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELGdDQUFnQyxHQUFHLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbkcsZ0NBQWdDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5Qyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHdCQUF3QixpQkFBaUIsRUFBRSxTQUFTLGdDQUFnQyxDQUFDLEtBQUssRUFBRTtBQUM1Riw0QkFBNEIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDL0Q7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRTtBQUMxQyxnQ0FBZ0MsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGtDQUFrQyxDQUFDLENBQUM7QUFDcEYsZ0NBQWdDLE9BQU87QUFDdkMsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsRSx5QkFBeUI7QUFDekIsd0JBQXdCLHVCQUF1QixFQUFFLFNBQVMsc0NBQXNDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO0FBQ25JLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRDtBQUNBLDRCQUE0QixJQUFJLENBQUMsT0FBTyxFQUFFO0FBQzFDLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztBQUNwRixnQ0FBZ0MsT0FBTztBQUN2Qyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN0RCw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4RCw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3pDO0FBQ0EsNEJBQTRCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNuRixnQ0FBZ0MsR0FBRyxDQUFDLElBQUksQ0FBQztBQUN6QyxvQ0FBb0MsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLG9DQUFvQyxDQUFDLEVBQUUsQ0FBQztBQUN4QyxvQ0FBb0MsQ0FBQyxFQUFFLENBQUM7QUFDeEMsb0NBQW9DLENBQUMsRUFBRSxLQUFLO0FBQzVDLG9DQUFvQyxDQUFDLEVBQUUsTUFBTTtBQUM3QyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzVFLHlCQUF5QjtBQUN6Qix3QkFBd0IsdUJBQXVCLEVBQUUsU0FBUyxzQ0FBc0MsQ0FBQyxPQUFPLEVBQUU7QUFDMUcsNEJBQTRCLElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDdEQsNEJBQTRCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDeEQsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0MsNEJBQTRCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUN4Qyw0QkFBNEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBQzlELDRCQUE0QixJQUFJLGdCQUFnQixHQUFHLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQztBQUNsRiw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGdDQUFnQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsNEJBQTRCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRiw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0FBQ3ZELGdDQUFnQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsNEJBQTRCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNwRiw0QkFBNEIsSUFBSSxVQUFVLEVBQUUsU0FBUyxDQUFDO0FBQ3REO0FBQ0EsNEJBQTRCLElBQUksT0FBTyxXQUFXLEtBQUssVUFBVSxJQUFJLE9BQU8sWUFBWSxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQ3RILGdDQUFnQyxVQUFVLEdBQUcsT0FBTyxDQUFDO0FBQ3JELDZCQUE2QixNQUFNO0FBQ25DLGdDQUFnQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4RyxnQ0FBZ0MsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUMvRCxnQ0FBZ0Msa0JBQWtCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3BFLGdDQUFnQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUM5RCw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxVQUFVLEdBQUcsS0FBSztBQUNsRCxnQ0FBZ0MsV0FBVyxHQUFHLE1BQU0sQ0FBQztBQUNyRCw0QkFBNEIsSUFBSSxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQzFEO0FBQ0EsNEJBQTRCLE9BQU8sVUFBVSxHQUFHLENBQUMsSUFBSSxVQUFVLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxDQUFDLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtBQUMzRyxnQ0FBZ0MsSUFBSSxRQUFRLEdBQUcsVUFBVTtBQUN6RCxvQ0FBb0MsU0FBUyxHQUFHLFdBQVcsQ0FBQztBQUM1RDtBQUNBLGdDQUFnQyxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtBQUN0RSxvQ0FBb0MsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLG9DQUFvQyxVQUFVLElBQUksVUFBVSxHQUFHLFFBQVEsQ0FBQztBQUN4RSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxXQUFXLEdBQUcsQ0FBQyxJQUFJLFdBQVcsR0FBRyxDQUFDLEVBQUU7QUFDeEUsb0NBQW9DLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMzRSxvQ0FBb0MsV0FBVyxJQUFJLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDM0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQzVHLGdDQUFnQyxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUMzRCxnQ0FBZ0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM1RSxnQ0FBZ0MsTUFBTSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZILGdDQUFnQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUM5RCxnQ0FBZ0MsVUFBVSxHQUFHLFFBQVEsQ0FBQztBQUN0RCxnQ0FBZ0MsV0FBVyxHQUFHLFNBQVMsQ0FBQztBQUN4RCxnQ0FBZ0MsV0FBVyxHQUFHLFdBQVcsS0FBSyxXQUFXLEdBQUcsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUN0Ryw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEg7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pELGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDbEYsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBQzVELG9DQUFvQyxPQUFPLEVBQUUsT0FBTztBQUNwRCxvQ0FBb0MsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDckQsb0NBQW9DLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BELG9DQUFvQyxLQUFLLEVBQUUsS0FBSyxHQUFHLGdCQUFnQixDQUFDLENBQUMsQ0FBQztBQUN0RSxvQ0FBb0MsTUFBTSxFQUFFLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7QUFDeEUsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzNDLHlCQUF5QjtBQUN6Qix3QkFBd0IsNEJBQTRCLEVBQUUsU0FBUywyQ0FBMkMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO0FBQ3pILDRCQUE0QixJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQy9DLDRCQUE0QixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2xELDRCQUE0QixJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9GLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBQzNELDRCQUE0QixrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEU7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRSxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25ELGdDQUFnQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDM0MsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDMUUsZ0NBQWdDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakg7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3JELG9DQUFvQyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUYsb0NBQW9DLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO0FBQ2hFLHdDQUF3QyxPQUFPLEVBQUUsT0FBTztBQUN4RCx3Q0FBd0MsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7QUFDekQsd0NBQXdDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3hELHdDQUF3QyxLQUFLLEVBQUUsQ0FBQztBQUNoRCx3Q0FBd0MsTUFBTSxFQUFFLENBQUM7QUFDakQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzlDLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLHdCQUF3QixFQUFFLFNBQVMsdUNBQXVDLEdBQUc7QUFDckcsNEJBQTRCLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFELHlCQUF5QjtBQUN6Qix3QkFBd0IsWUFBWSxFQUFFLFNBQVMsMkJBQTJCLEdBQUc7QUFDN0UsNEJBQTRCLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3JGLHlCQUF5QjtBQUN6Qix3QkFBd0IsU0FBUyxFQUFFLFNBQVMsd0JBQXdCLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDNUUsd0JBQXdCLGNBQWMsRUFBRSxTQUFTLDZCQUE2QixDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsRUFBRTtBQUNsRyx3QkFBd0Isa0JBQWtCLEVBQUUsU0FBUyxpQ0FBaUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUM5Rix3QkFBd0IsdUJBQXVCLEVBQUUsU0FBUyxzQ0FBc0MsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUU7QUFDcEgsd0JBQXdCLGdCQUFnQixFQUFFLFNBQVMsK0JBQStCLEdBQUcsRUFBRTtBQUN2Rix3QkFBd0IsV0FBVyxFQUFFLFNBQVMsMEJBQTBCLEdBQUcsRUFBRTtBQUM3RSx3QkFBd0IsU0FBUyxFQUFFLFNBQVMsd0JBQXdCLEdBQUcsRUFBRTtBQUN6RSx3QkFBd0IsV0FBVyxFQUFFLFNBQVMsMEJBQTBCLEdBQUc7QUFDM0UsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDL0M7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2xELGdDQUFnQyxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssT0FBTyxFQUFFO0FBQ2xFLG9DQUFvQyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3hELGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDL0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3hELDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7QUFDNUMseUJBQXlCO0FBQ3pCLHdCQUF3QixtQkFBbUIsRUFBRSxTQUFTLG1CQUFtQixDQUFDLEtBQUssRUFBRTtBQUNqRiw0QkFBNEIsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssSUFBSSxFQUFFO0FBQzFFLGdDQUFnQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLDBCQUEwQixDQUFDO0FBQ2xGLGdDQUFnQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVMLDZCQUE2QjtBQUM3QjtBQUNBLDRCQUE0QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQztBQUNuRSx5QkFBeUI7QUFDekIsd0JBQXdCLGlCQUFpQixFQUFFLFNBQVMsZ0NBQWdDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUMzRiw0QkFBNEIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQztBQUN6RSw0QkFBNEIsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVJLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixLQUFLLElBQUksRUFBRSxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDOUMsd0JBQXdCLGNBQWMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDL0YscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLE9BQU8sY0FBYyxDQUFDO0FBQzFDLGlCQUFpQixFQUFFLENBQUM7QUFDcEI7QUFDQSxnQkFBZ0IsT0FBTyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7QUFDeEQ7QUFDQSx1QkFBdUI7QUFDdkI7QUFDQSxtQkFBbUIsU0FBUyxNQUFNLEVBQUUsT0FBTyxFQUFFLCtCQUErQixFQUFFO0FBRzlFO0FBQ0E7QUFDQSxnQkFBZ0IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFO0FBQzdELG9CQUFvQixLQUFLLEVBQUUsSUFBSTtBQUMvQixpQkFBaUIsQ0FBQyxDQUFDO0FBQ25CLGdCQUFnQixPQUFPLENBQUMsdUJBQXVCLEdBQUcsdUJBQXVCLENBQUM7QUFDMUUsZ0JBQWdCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDL0M7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLGdCQUFnQixVQUFVLENBQUMsV0FBVyxHQUFHO0FBQ3pDLG9CQUFvQixNQUFNLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUU7QUFDN0Qsd0JBQXdCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hELHdCQUF3QixJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4Qyx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsd0JBQXdCLE9BQU87QUFDL0IsNEJBQTRCLElBQUksRUFBRSxTQUFTO0FBQzNDLDRCQUE0QixVQUFVLEVBQUUsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUU7QUFDN0UsZ0NBQWdDLElBQUksSUFBSSxDQUFDO0FBQ3pDO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxLQUFLLE9BQU8sRUFBRTtBQUN0RCxvQ0FBb0MsSUFBSSxHQUFHLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoRyxpQ0FBaUMsTUFBTSxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7QUFDOUQsb0NBQW9DLElBQUksR0FBRyxHQUFHLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN4RyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTtBQUNyRixvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELG9DQUFvQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRSxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUM7QUFDNUMsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQixpQkFBaUIsQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixJQUFJLGdCQUFnQixHQUFHLFNBQVMsdUJBQXVCLEdBQUc7QUFDMUUsb0JBQW9CLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDakYsd0JBQXdCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNO0FBQ25ELDRCQUE0QixNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNwRCx3QkFBd0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUk7QUFDN0MsNEJBQTRCLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUNyRCx3QkFBd0IsSUFBSSxHQUFHLENBQUM7QUFDaEM7QUFDQSx3QkFBd0IsSUFBSSxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDN0QsNEJBQTRCLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEMsNEJBQTRCLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckMsNEJBQTRCLEdBQUcsR0FBRyxFQUFFLENBQUM7QUFDckMsNEJBQTRCLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDcEMsNEJBQTRCLEVBQUUsR0FBRyxHQUFHLENBQUM7QUFDckMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQzdELDRCQUE0QixHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLDRCQUE0QixFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLDRCQUE0QixHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ3JDLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLDRCQUE0QixFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ3JDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUM3RCw0QkFBNEIsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyw0QkFBNEIsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyQyw0QkFBNEIsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNyQyw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNwQyw0QkFBNEIsRUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNyQyx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ2pGLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDO0FBQ3JGLHdCQUF3QixJQUFJLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDakYsd0JBQXdCLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDckYsd0JBQXdCLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNqRix3QkFBd0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUNyRjtBQUNBLHdCQUF3QixJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUU7QUFDdEMsNEJBQTRCLE9BQU87QUFDbkMseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRCw0QkFBNEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsd0JBQXdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRCw0QkFBNEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsd0JBQXdCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUM7QUFDNUMsNEJBQTRCLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNoRCw0QkFBNEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDakQsd0JBQXdCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRCx3QkFBd0IsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFDOUMsd0JBQXdCLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO0FBQzlDLHdCQUF3QixJQUFJLENBQUMsQ0FBQztBQUM5QjtBQUNBLHdCQUF3QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNELDRCQUE0QixJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7QUFDeEMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLGdDQUFnQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEQsZ0NBQWdDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1RCxnQ0FBZ0MsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVELGdDQUFnQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDNUQsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3RGLGdDQUFnQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEQsZ0NBQWdDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUM1RCxnQ0FBZ0MsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzVELGdDQUFnQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDNUQsNkJBQTZCO0FBQzdCO0FBQ0EsNEJBQTRCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQy9FLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDcEQsNEJBQTRCLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN4RCw0QkFBNEIsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ3hELDRCQUE0QixHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDeEQsNEJBQTRCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuRSw0QkFBNEIsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25FLDRCQUE0QixJQUFJLENBQUMsR0FBRyxPQUFPLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUQ7QUFDQSw0QkFBNEIsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM3RCxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDekQsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDOUQsZ0NBQWdDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2RSxnQ0FBZ0MsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkUsZ0NBQWdDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqRCw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLFVBQVUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUMvRCx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ2xDO0FBQ0Esd0JBQXdCLFFBQVEsTUFBTSxDQUFDLElBQUk7QUFDM0MsNEJBQTRCLEtBQUssU0FBUztBQUMxQyxnQ0FBZ0MsSUFBSSxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztBQUMzRSxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RixnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQztBQUM5RDtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzRCxvQ0FBb0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGNBQWMsQ0FBQztBQUMvRDtBQUNBLG9DQUFvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3hFLHdDQUF3QyxZQUFZLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUN4Six3Q0FBd0MsWUFBWSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ2xNLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLFdBQVc7QUFDNUMsZ0NBQWdDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDNUUsb0NBQW9DLFlBQVksQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFILGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0EsNEJBQTRCO0FBQzVCLGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDbEUseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixTQUFTLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUU7QUFDN0ksd0JBQXdCLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUNqRCx3QkFBd0IsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDcEQsd0JBQXdCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCx3QkFBd0IsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RCx3QkFBd0IsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDekUsd0JBQXdCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQzFFLHdCQUF3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUNySSx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDdkksd0JBQXdCLElBQUksTUFBTSxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFDekQsd0JBQXdCLElBQUksTUFBTSxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUM7QUFDM0Qsd0JBQXdCLElBQUksT0FBTyxHQUFHO0FBQ3RDLDRCQUE0QixNQUFNLEVBQUUsTUFBTTtBQUMxQyw0QkFBNEIsTUFBTSxFQUFFLE1BQU07QUFDMUMsNEJBQTRCLE9BQU8sRUFBRSxDQUFDLE9BQU87QUFDN0MsNEJBQTRCLE9BQU8sRUFBRSxDQUFDLE9BQU87QUFDN0MsNEJBQTRCLE1BQU0sRUFBRSxDQUFDLEdBQUcsTUFBTTtBQUM5Qyw0QkFBNEIsTUFBTSxFQUFFLENBQUMsR0FBRyxNQUFNO0FBQzlDLHlCQUF5QixDQUFDO0FBQzFCLHdCQUF3QixJQUFJLFdBQVcsR0FBRyxLQUFLLEdBQUcsV0FBVyxHQUFHLENBQUMsQ0FBQztBQUNsRSx3QkFBd0IsSUFBSSxZQUFZLEdBQUcsTUFBTSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDcEUsd0JBQXdCLElBQUksTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO0FBQ3JEO0FBQ0Esd0JBQXdCLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtBQUNwRCw0QkFBNEIsTUFBTSxHQUFHLFlBQVksQ0FBQyxXQUFXLENBQUM7QUFDOUQsZ0NBQWdDLEtBQUssRUFBRSxLQUFLO0FBQzVDLGdDQUFnQyxNQUFNLEVBQUUsTUFBTTtBQUM5QyxnQ0FBZ0MsZUFBZSxFQUFFLGVBQWU7QUFDaEUsZ0NBQWdDLE9BQU8sRUFBRSxPQUFPO0FBQ2hELGdDQUFnQyxPQUFPLEVBQUUsT0FBTztBQUNoRCw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLDRCQUE0QixTQUFTLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRyw0QkFBNEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUMxRiw0QkFBNEIsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDdEQseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLFNBQVMsR0FBRyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzNHLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUM3RTtBQUNBLDRCQUE0QixJQUFJLGVBQWUsRUFBRTtBQUNqRCxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztBQUN0RDtBQUNBLGdDQUFnQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0FBQy9FLG9DQUFvQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLG9DQUFvQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSxvQ0FBb0MsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsb0NBQW9DLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ3ZELGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2pFLGdDQUFnQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN0RSw2QkFBNkI7QUFDN0I7QUFDQSw0QkFBNEIsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2hGLDRCQUE0QixNQUFNLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUN0RCx5QkFBeUI7QUFDekI7QUFDQSx3QkFBd0IsT0FBTztBQUMvQiw0QkFBNEIsTUFBTSxFQUFFLE1BQU07QUFDMUMsNEJBQTRCLE9BQU8sRUFBRSxPQUFPLEdBQUcsV0FBVyxHQUFHLE1BQU07QUFDbkUsNEJBQTRCLE9BQU8sRUFBRSxPQUFPLEdBQUcsV0FBVyxHQUFHLE1BQU07QUFDbkUsNEJBQTRCLE1BQU0sRUFBRSxNQUFNO0FBQzFDLDRCQUE0QixNQUFNLEVBQUUsTUFBTTtBQUMxQyx5QkFBeUIsQ0FBQztBQUMxQixxQkFBcUI7QUFDckI7QUFDQSxvQkFBb0IsT0FBTyxnQkFBZ0IsQ0FBQztBQUM1QyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLFVBQVUsQ0FBQyxJQUFJLEdBQUc7QUFDbEMsb0JBQW9CLE1BQU0sRUFBRSxTQUFTLFdBQVcsQ0FBQyxHQUFHLEVBQUU7QUFDdEQsd0JBQXdCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0Msd0JBQXdCLElBQUksTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1Qyx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLHdCQUF3QixJQUFJLFVBQVUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsd0JBQXdCLE9BQU87QUFDL0IsNEJBQTRCLElBQUksRUFBRSxTQUFTO0FBQzNDLDRCQUE0QixVQUFVLEVBQUUsU0FBUyxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUU7QUFDMUYsZ0NBQWdDLElBQUksS0FBSyxDQUFDO0FBQzFDO0FBQ0EsZ0NBQWdDLElBQUksV0FBVyxFQUFFO0FBQ2pELG9DQUFvQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUM5RyxpQ0FBaUMsTUFBTTtBQUN2QyxvQ0FBb0MsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFHO0FBQ0Esb0NBQW9DLElBQUksTUFBTSxFQUFFO0FBQ2hELHdDQUF3QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNHO0FBQ0Esd0NBQXdDLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxzQkFBc0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsR0FBRyxJQUFJLEdBQUcsVUFBVSxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ2pNO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDbEQsb0NBQW9DLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7QUFDckY7QUFDQSxvQ0FBb0MsSUFBSSxNQUFNLEVBQUU7QUFDaEQsd0NBQXdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN6RSxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlHLGdDQUFnQyxHQUFHLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4RyxnQ0FBZ0MsT0FBTyxHQUFHLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztBQUNyRyw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUM7QUFDMUIscUJBQXFCO0FBQ3JCLGlCQUFpQixDQUFDO0FBQ2xCLGdCQUFnQixVQUFVLENBQUMsS0FBSyxHQUFHO0FBQ25DLG9CQUFvQixNQUFNLEVBQUUsU0FBUyxZQUFZLEdBQUc7QUFDcEQsd0JBQXdCLE9BQU87QUFDL0IsNEJBQTRCLElBQUksRUFBRSxTQUFTO0FBQzNDLDRCQUE0QixVQUFVLEVBQUUsU0FBUyx1QkFBdUIsR0FBRztBQUMzRSxnQ0FBZ0MsT0FBTyxTQUFTLENBQUM7QUFDakQsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDO0FBQzFCLHFCQUFxQjtBQUNyQixpQkFBaUIsQ0FBQztBQUNsQjtBQUNBLGdCQUFnQixTQUFTLHVCQUF1QixDQUFDLEdBQUcsRUFBRTtBQUN0RCxvQkFBb0IsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0Esb0JBQW9CLElBQUksQ0FBQyxTQUFTLEVBQUU7QUFDcEMsd0JBQXdCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUUscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqRCxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsSUFBSSxhQUFhLEdBQUcsU0FBUyxvQkFBb0IsR0FBRztBQUNwRSxvQkFBb0IsSUFBSSxTQUFTLEdBQUc7QUFDcEMsd0JBQXdCLE9BQU8sRUFBRSxDQUFDO0FBQ2xDLHdCQUF3QixTQUFTLEVBQUUsQ0FBQztBQUNwQyxxQkFBcUIsQ0FBQztBQUN0QixvQkFBb0IsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDaEQ7QUFDQSxvQkFBb0IsU0FBUyxhQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUscUJBQXFCLEVBQUUsYUFBYSxFQUFFO0FBQ2pHLHdCQUF3QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRCx3QkFBd0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLHdCQUF3QixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQyx3QkFBd0IsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0Msd0JBQXdCLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLHdCQUF3QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyx3QkFBd0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEQsd0JBQXdCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzNDLHdCQUF3QixJQUFJLENBQUMscUJBQXFCLEdBQUcscUJBQXFCLENBQUM7QUFDM0Usd0JBQXdCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQzNELHdCQUF3QixJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUM5Qyx3QkFBd0IsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDdkMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLGFBQWEsQ0FBQyxTQUFTLEdBQUc7QUFDOUMsd0JBQXdCLG1CQUFtQixFQUFFLFNBQVMsZ0NBQWdDLENBQUMsS0FBSyxFQUFFO0FBQzlGLDRCQUE0QixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ2pFLDRCQUE0QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0FBQ2pELDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQzdELDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztBQUNuRiw0QkFBNEIsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLGNBQWMsR0FBRyxVQUFVLENBQUMsQ0FBQztBQUN6RSw0QkFBNEIsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1QyxnQ0FBZ0MsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDNUMsZ0NBQWdDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzVDLGdDQUFnQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLDRCQUE0QixJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNuRCw0QkFBNEIsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNwRSw0QkFBNEIsSUFBSSxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRSw0QkFBNEIsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsRTtBQUNBLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwRztBQUNBLDRCQUE0QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM5RztBQUNBLDRCQUE0QixJQUFJLGFBQWEsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pILDRCQUE0QixLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUM5Ryw0QkFBNEIsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7QUFDaEgsNEJBQTRCLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNHLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0FBQzNELDRCQUE0QixJQUFJLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5Riw0QkFBNEIsUUFBUSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ25FLDRCQUE0QixJQUFJLENBQUMsOEJBQThCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1Riw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUN2RSw0QkFBNEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzVELDRCQUE0QixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RGLDRCQUE0QixRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDN0UsNEJBQTRCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxRSw0QkFBNEIsUUFBUSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3ZFLDRCQUE0QixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDcEQseUJBQXlCO0FBQ3pCLHdCQUF3QixRQUFRLEVBQUUsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDL0YsNEJBQTRCLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEdBQUcsS0FBSyxFQUFFLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQztBQUN6RSx5QkFBeUI7QUFDekIsd0JBQXdCLGdCQUFnQixFQUFFLFNBQVMsOEJBQThCLENBQUMsUUFBUSxFQUFFO0FBQzVGLDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDNUUsNEJBQTRCLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUN6RSx5QkFBeUI7QUFDekIsd0JBQXdCLGNBQWMsRUFBRSxTQUFTLDRCQUE0QixHQUFHO0FBQ2hGLDRCQUE0QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQ25ELDRCQUE0QixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RSx5QkFBeUI7QUFDekIsd0JBQXdCLFFBQVEsRUFBRSxTQUFTLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtBQUNwRiw0QkFBNEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0FBQzFFLGdDQUFnQyxJQUFJLFNBQVMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3hELGdDQUFnQyxJQUFJLFVBQVUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ3pELGdDQUFnQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUNqRixnQ0FBZ0MsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0FBQ2hELGdDQUFnQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDbkQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6Qix3QkFBd0IsOEJBQThCLEVBQUUsU0FBUyw4QkFBOEIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRTtBQUM1SCw0QkFBNEIsSUFBSSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUc7QUFDdEQsZ0NBQWdDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDO0FBQzNEO0FBQ0EsNEJBQTRCLFFBQVEsU0FBUztBQUM3QyxnQ0FBZ0MsS0FBSyxTQUFTLENBQUMsT0FBTztBQUN0RCxvQ0FBb0MsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUN2RCxvQ0FBb0MsT0FBTyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO0FBQ3RFLG9DQUFvQyxPQUFPLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUM7QUFDMUUsb0NBQW9DLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUN0RSxvQ0FBb0MsT0FBTyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO0FBQzFFLG9DQUFvQyxNQUFNO0FBQzFDO0FBQ0EsZ0NBQWdDLEtBQUssU0FBUyxDQUFDLFNBQVM7QUFDeEQsb0NBQW9DLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkc7QUFDQSxvQ0FBb0MsT0FBTyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDakUsb0NBQW9DLE9BQU8sQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO0FBQ25FLG9DQUFvQyxPQUFPLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztBQUNqRSxvQ0FBb0MsT0FBTyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUM7QUFDbkUsb0NBQW9DLE1BQU07QUFDMUM7QUFDQSxnQ0FBZ0M7QUFDaEMsb0NBQW9DLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzlHLDZCQUE2QjtBQUM3Qix5QkFBeUI7QUFDekIsd0JBQXdCLFVBQVUsRUFBRSxTQUFTLHdCQUF3QixDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDbEYsNEJBQTRCLElBQUksc0JBQXNCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pGLDRCQUE0QixHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUMzQyw0QkFBNEIsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM1RSw0QkFBNEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNsRSw0QkFBNEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0FBQ2xELDRCQUE0QixPQUFPLEdBQUcsQ0FBQyxhQUFhLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdkYseUJBQXlCO0FBQ3pCLHFCQUFxQixDQUFDO0FBQ3RCLG9CQUFvQixPQUFPLGFBQWEsQ0FBQztBQUN6QyxpQkFBaUIsRUFBRSxDQUFDO0FBQ3BCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0FBQ3REO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsbUJBQW1CLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRTtBQUc5RTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3RCxvQkFBb0IsS0FBSyxFQUFFLElBQUk7QUFDL0IsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsT0FBTyxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3JELGdCQUFnQixJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsZ0JBQWdCLE9BQU8sQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztBQUNsRSxnQkFBZ0IsbUJBQW1CLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsS0FBSyxTQUFTLEdBQUcsSUFBSSxHQUFHLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztBQUN0SSxnQkFBZ0IsbUJBQW1CLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDLFNBQVMsS0FBSyxTQUFTLEdBQUcsRUFBRSxHQUFHLG1CQUFtQixDQUFDLFNBQVMsQ0FBQztBQUNqSTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0Qsb0JBQW9CLEtBQUssRUFBRSxJQUFJO0FBQy9CLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLE9BQU8sQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO0FBQ3hEO0FBQ0EsZ0JBQWdCLElBQUksWUFBWSxHQUFHLHNCQUFzQixDQUFDLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEc7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9HO0FBQ0EsZ0JBQWdCLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksT0FBTyxNQUFNLEtBQUssVUFBVSxJQUFJLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUUsRUFBRSxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sR0FBRyxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxHQUFHLEtBQUssTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO0FBQy9XO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDelI7QUFDQSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNyWjtBQUNBLGdCQUFnQixTQUFTLFdBQVcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFO0FBQzlDLG9CQUFvQixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixTQUFTLFlBQVksR0FBRztBQUN4QyxvQkFBb0IsWUFBWSxHQUFHLGlCQUFpQjtBQUNwRDtBQUNBLHdCQUF3QixZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFO0FBQzdFLDRCQUE0QixJQUFJLE9BQU87QUFDdkMsZ0NBQWdDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDbEQsNEJBQTRCLE9BQU8sWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxRQUFRLENBQUMsUUFBUSxFQUFFO0FBQ3pGLGdDQUFnQyxPQUFPLENBQUMsRUFBRTtBQUMxQyxvQ0FBb0MsUUFBUSxRQUFRLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJO0FBQ3pFLHdDQUF3QyxLQUFLLENBQUM7QUFDOUMsNENBQTRDLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7QUFDbkg7QUFDQSw0Q0FBNEMsSUFBSSxFQUFFLEVBQUU7QUFDcEQsZ0RBQWdELFFBQVEsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ2xFLGdEQUFnRCxNQUFNO0FBQ3RELDZDQUE2QztBQUM3QztBQUNBLDRDQUE0QyxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0U7QUFDQSx3Q0FBd0MsS0FBSyxDQUFDO0FBQzlDLDRDQUE0QyxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEc7QUFDQSx3Q0FBd0MsS0FBSyxDQUFDLENBQUM7QUFDL0Msd0NBQXdDLEtBQUssS0FBSztBQUNsRCw0Q0FBNEMsT0FBTyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDbkUscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQyw2QkFBNkIsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDOUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCLG9CQUFvQixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9ELGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDNUMsb0JBQW9CLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFFBQVEsRUFBRTtBQUN0RCx3QkFBd0IsT0FBTyxNQUFNLENBQUM7QUFDdEMscUJBQXFCO0FBQ3JCO0FBQ0Esb0JBQW9CLFFBQVEsTUFBTSxDQUFDLElBQUk7QUFDdkMsd0JBQXdCLEtBQUssZ0JBQWdCO0FBQzdDLDRCQUE0QixPQUFPLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUU7QUFDQSx3QkFBd0IsS0FBSyxxQkFBcUI7QUFDbEQsNEJBQTRCLE9BQU8sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2pGO0FBQ0Esd0JBQXdCLEtBQUssNkJBQTZCO0FBQzFELDRCQUE0QixPQUFPLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hHO0FBQ0Esd0JBQXdCO0FBQ3hCLDRCQUE0QixPQUFPLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ25HLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUU7QUFDeEQsb0JBQW9CLElBQUksRUFBRSxNQUFNLFlBQVksS0FBSyxDQUFDLElBQUksTUFBTSxZQUFZLEtBQUssQ0FBQyxjQUFjLElBQUksTUFBTSxZQUFZLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLFlBQVksS0FBSyxDQUFDLDJCQUEyQixJQUFJLE1BQU0sWUFBWSxLQUFLLENBQUMscUJBQXFCLEVBQUU7QUFDclAsd0JBQXdCLE9BQU8sTUFBTSxDQUFDO0FBQ3RDLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixPQUFPLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDOUYsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ3RFLG9CQUFvQixJQUFJLE9BQU8sRUFBRTtBQUNqQyx3QkFBd0IsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzdDLHFCQUFxQixNQUFNO0FBQzNCLHdCQUF3QixVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2xELHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsU0FBUyxRQUFRLENBQUMsT0FBTyxFQUFFO0FBQzNDLG9CQUFvQixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7QUFDMUUsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLFNBQVMsY0FBYyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO0FBQ3hFLG9CQUFvQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDckM7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7QUFDakQsb0JBQW9CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQ2pELG9CQUFvQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN6QyxvQkFBb0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDeEMsb0JBQW9CLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ3RDLG9CQUFvQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO0FBQ3JELG9CQUFvQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0Qsb0JBQW9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pFLG9CQUFvQixJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pHLG9CQUFvQixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEU7QUFDQSxvQkFBb0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFVBQVUsS0FBSyxFQUFFO0FBQy9ELHdCQUF3QixJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0FBQzlDO0FBQ0Esd0JBQXdCLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsVUFBVSxFQUFFO0FBQ2xFLDRCQUE0QixPQUFPO0FBQ25DLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDekMsNEJBQTRCLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5RCx5QkFBeUIsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7QUFDakQsNEJBQTRCLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDN0Q7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLHFCQUFxQixFQUFFO0FBQzFFLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNqRixnQ0FBZ0MsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUN6RTtBQUNBLGdDQUFnQyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7QUFDckQsb0NBQW9DLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVFLGlDQUFpQyxNQUFNO0FBQ3ZDLG9DQUFvQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRSxpQ0FBaUM7QUFDakMsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7QUFDL0YsNkJBQTZCO0FBQzdCLHlCQUF5QixNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxFQUFFLEVBQUU7QUFDdEQsNEJBQTRCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDekQ7QUFDQSw0QkFBNEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2pELGdDQUFnQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO0FBQ25FLGdDQUFnQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ2xFLGdDQUFnQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDbkUsb0NBQW9DLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hGLGlDQUFpQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsTUFBTSxFQUFFO0FBQzFELG9DQUFvQyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQ3ZELHdDQUF3QyxVQUFVLEVBQUUsV0FBVztBQUMvRCx3Q0FBd0MsVUFBVSxFQUFFLFdBQVc7QUFDL0Qsd0NBQXdDLE9BQU8sRUFBRSxJQUFJO0FBQ3JELHdDQUF3QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDbkUsd0NBQXdDLElBQUksRUFBRSxNQUFNO0FBQ3BELHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsaUNBQWlDLEVBQUUsVUFBVSxNQUFNLEVBQUU7QUFDckQsb0NBQW9DLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDdkQsd0NBQXdDLFVBQVUsRUFBRSxXQUFXO0FBQy9ELHdDQUF3QyxVQUFVLEVBQUUsV0FBVztBQUMvRCx3Q0FBd0MsT0FBTyxFQUFFLElBQUk7QUFDckQsd0NBQXdDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtBQUNuRSx3Q0FBd0MsS0FBSyxFQUFFLHNCQUFzQixDQUFDLE1BQU0sQ0FBQztBQUM3RSxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCLE1BQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO0FBQ3RELGdDQUFnQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDOUQsNkJBQTZCLE1BQU07QUFDbkMsZ0NBQWdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRSw2QkFBNkI7QUFDN0IseUJBQXlCLE1BQU07QUFDL0IsNEJBQTRCLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hHLHlCQUF5QjtBQUN6QixxQkFBcUIsQ0FBQztBQUN0QjtBQUNBLG9CQUFvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQ2hGLGlCQUFpQjtBQUNqQjtBQUNBLGdCQUFnQixjQUFjLENBQUMsU0FBUyxHQUFHO0FBQzNDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDaEUsd0JBQXdCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDcEQ7QUFDQSx3QkFBd0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUU7QUFDNUMsNEJBQTRCLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pILHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUQscUJBQXFCO0FBQ3JCLG9CQUFvQixJQUFJLEVBQUUsU0FBUyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7QUFDckUsd0JBQXdCLElBQUksT0FBTyxHQUFHO0FBQ3RDLDRCQUE0QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDdkQsNEJBQTRCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtBQUN2RCw0QkFBNEIsTUFBTSxFQUFFLFVBQVU7QUFDOUMsNEJBQTRCLElBQUksRUFBRSxJQUFJO0FBQ3RDLHlCQUF5QixDQUFDO0FBQzFCLHdCQUF3QixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3RCxxQkFBcUI7QUFDckIsb0JBQW9CLGVBQWUsRUFBRSxTQUFTLGVBQWUsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtBQUMzRix3QkFBd0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0FBQzNELHdCQUF3QixJQUFJLE9BQU8sR0FBRztBQUN0Qyw0QkFBNEIsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO0FBQ3ZELDRCQUE0QixVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7QUFDdkQsNEJBQTRCLE1BQU0sRUFBRSxVQUFVO0FBQzlDLDRCQUE0QixJQUFJLEVBQUUsSUFBSTtBQUN0Qyw0QkFBNEIsVUFBVSxFQUFFLFVBQVU7QUFDbEQseUJBQXlCLENBQUM7QUFDMUIsd0JBQXdCLElBQUksVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDOUUsd0JBQXdCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDNUU7QUFDQSx3QkFBd0IsSUFBSTtBQUM1Qiw0QkFBNEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDakUseUJBQXlCLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDcEMsNEJBQTRCLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakQseUJBQXlCO0FBQ3pCO0FBQ0Esd0JBQXdCLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQztBQUNsRCxxQkFBcUI7QUFDckIsb0JBQW9CLGNBQWMsRUFBRSxTQUFTLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRTtBQUMzRyx3QkFBd0IsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO0FBQzFDO0FBQ0Esd0JBQXdCLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2RCx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN6RCx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN6RCx3QkFBd0IsT0FBTyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUM7QUFDeEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLEtBQUssQ0FBQyxVQUFVLEVBQUU7QUFDOUQsZ0NBQWdDLElBQUksZUFBZSxHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDM0YsZ0NBQWdDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRztBQUNyRSxvQ0FBb0MsVUFBVSxFQUFFLFVBQVU7QUFDMUQsb0NBQW9DLFNBQVMsRUFBRSxlQUFlO0FBQzlELG9DQUFvQyxRQUFRLEVBQUUsS0FBSztBQUNuRCxpQ0FBaUMsQ0FBQztBQUNsQztBQUNBLGdDQUFnQyxNQUFNLENBQUMsV0FBVyxDQUFDO0FBQ25ELG9DQUFvQyxVQUFVLEVBQUUsVUFBVTtBQUMxRCxvQ0FBb0MsVUFBVSxFQUFFLFVBQVU7QUFDMUQsb0NBQW9DLE1BQU0sRUFBRSxVQUFVO0FBQ3RELG9DQUFvQyxRQUFRLEVBQUUsUUFBUTtBQUN0RCxvQ0FBb0MsSUFBSSxFQUFFLElBQUk7QUFDOUMsb0NBQW9DLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztBQUN2RSxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsZ0NBQWdDLE9BQU8sZUFBZSxDQUFDLE9BQU8sQ0FBQztBQUMvRCw2QkFBNkI7QUFDN0IsNEJBQTRCLElBQUksRUFBRSxTQUFTLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDNUQsZ0NBQWdDLElBQUksY0FBYyxHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDMUYsZ0NBQWdDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO0FBQzdGO0FBQ0EsZ0NBQWdDLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDbkQsb0NBQW9DLFVBQVUsRUFBRSxVQUFVO0FBQzFELG9DQUFvQyxVQUFVLEVBQUUsVUFBVTtBQUMxRCxvQ0FBb0MsTUFBTSxFQUFFLE1BQU07QUFDbEQsb0NBQW9DLFFBQVEsRUFBRSxRQUFRO0FBQ3RELG9DQUFvQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7QUFDdkUsaUNBQWlDLENBQUMsQ0FBQztBQUNuQztBQUNBLGdDQUFnQyxPQUFPLGNBQWMsQ0FBQyxPQUFPLENBQUM7QUFDOUQsNkJBQTZCO0FBQzdCLDRCQUE0QixNQUFNLEVBQUUsU0FBUyxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzVELGdDQUFnQyxJQUFJLGdCQUFnQixHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDNUYsZ0NBQWdDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7QUFDakcsZ0NBQWdDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ25GO0FBQ0EsZ0NBQWdDLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDbkQsb0NBQW9DLFVBQVUsRUFBRSxVQUFVO0FBQzFELG9DQUFvQyxVQUFVLEVBQUUsVUFBVTtBQUMxRCxvQ0FBb0MsTUFBTSxFQUFFLFFBQVE7QUFDcEQsb0NBQW9DLE1BQU0sRUFBRSxNQUFNO0FBQ2xELG9DQUFvQyxRQUFRLEVBQUUsUUFBUTtBQUN0RCxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DO0FBQ0EsZ0NBQWdDLE9BQU8sZ0JBQWdCLENBQUMsT0FBTyxDQUFDO0FBQ2hFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzdDLHFCQUFxQjtBQUNyQixvQkFBb0IsaUJBQWlCLEVBQUUsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7QUFDeEUsd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUMxQztBQUNBLHdCQUF3QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUM7QUFDeEMsd0JBQXdCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3JFLHdCQUF3QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3JELHdCQUF3QixJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQzNELHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3pELHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQ3pELHdCQUF3QixJQUFJLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsR0FBRyxDQUFDO0FBQzlFO0FBQ0Esd0JBQXdCLElBQUksaUJBQWlCLEdBQUcsU0FBUyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUU7QUFDakYsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNO0FBQ3BELGdDQUFnQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUs7QUFDbEQsZ0NBQWdDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUztBQUMxRCxnQ0FBZ0MsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPO0FBQ3RELGdDQUFnQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUNyRDtBQUNBLDRCQUE0QixNQUFNLENBQUMsV0FBVyxDQUFDO0FBQy9DLGdDQUFnQyxVQUFVLEVBQUUsVUFBVTtBQUN0RCxnQ0FBZ0MsVUFBVSxFQUFFLFVBQVU7QUFDdEQsZ0NBQWdDLE1BQU0sRUFBRSxNQUFNO0FBQzlDLGdDQUFnQyxRQUFRLEVBQUUsUUFBUTtBQUNsRCxnQ0FBZ0MsS0FBSyxFQUFFLEtBQUs7QUFDNUMsZ0NBQWdDLE9BQU8sRUFBRSxPQUFPO0FBQ2hELGdDQUFnQyxNQUFNLEVBQUUsTUFBTTtBQUM5Qyw2QkFBNkIsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMxQyx5QkFBeUIsQ0FBQztBQUMxQjtBQUNBLHdCQUF3QixJQUFJLFVBQVUsR0FBRztBQUN6Qyw0QkFBNEIsT0FBTyxFQUFFLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtBQUM3RCxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pILGdDQUFnQyxJQUFJLFNBQVMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDO0FBQ2hHO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN0RCxvQ0FBb0MsT0FBTztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUN2RSxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7QUFDekQ7QUFDQSxnQ0FBZ0MsSUFBSSxlQUFlLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxFQUFFO0FBQ2xGLG9DQUFvQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksS0FBSyxDQUFDLHVCQUF1QixHQUFHLENBQUM7QUFDL0Ysb0NBQW9DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7QUFDN0UsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLGlCQUFpQixDQUFDO0FBQ2xELG9DQUFvQyxNQUFNLEVBQUUsU0FBUztBQUNyRCxvQ0FBb0MsS0FBSyxFQUFFLEtBQUs7QUFDaEQsb0NBQW9DLFNBQVMsRUFBRSxTQUFTO0FBQ3hELGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxLQUFLLEdBQUc7QUFDcEQsZ0NBQWdDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtBQUN0RCxvQ0FBb0MsT0FBTztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDeEQsZ0NBQWdDLGlCQUFpQixDQUFDO0FBQ2xELG9DQUFvQyxNQUFNLEVBQUUsT0FBTztBQUNuRCxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDbEUsNkJBQTZCO0FBQzdCLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxLQUFLLENBQUMsTUFBTSxFQUFFO0FBQzFELGdDQUFnQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDdEQsb0NBQW9DLE9BQU87QUFDM0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3hELGdDQUFnQyxpQkFBaUIsQ0FBQztBQUNsRCxvQ0FBb0MsTUFBTSxFQUFFLE9BQU87QUFDbkQsb0NBQW9DLE1BQU0sRUFBRSxNQUFNO0FBQ2xELGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsNkJBQTZCO0FBQzdCLDRCQUE0QixjQUFjLEVBQUUsVUFBVTtBQUN0RCw0QkFBNEIsTUFBTSxFQUFFLElBQUk7QUFDeEMsNEJBQTRCLFFBQVEsRUFBRSxJQUFJO0FBQzFDLDRCQUE0QixXQUFXLEVBQUUsS0FBSztBQUM5Qyw0QkFBNEIsV0FBVyxFQUFFLFdBQVc7QUFDcEQsNEJBQTRCLEtBQUssRUFBRSxJQUFJO0FBQ3ZDLHlCQUF5QixDQUFDO0FBQzFCLHdCQUF3QixVQUFVLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQzVELHdCQUF3QixVQUFVLENBQUMsS0FBSyxHQUFHLFVBQVUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDO0FBQzdFLHdCQUF3QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLFVBQVUsQ0FBQztBQUNoRSx3QkFBd0IsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVk7QUFDcEcsNEJBQTRCLGlCQUFpQixDQUFDO0FBQzlDLGdDQUFnQyxNQUFNLEVBQUUsZ0JBQWdCO0FBQ3hELGdDQUFnQyxPQUFPLEVBQUUsSUFBSTtBQUM3Qyw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QixFQUFFLFVBQVUsTUFBTSxFQUFFO0FBQzdDLDRCQUE0QixpQkFBaUIsQ0FBQztBQUM5QyxnQ0FBZ0MsTUFBTSxFQUFFLGdCQUFnQjtBQUN4RCxnQ0FBZ0MsT0FBTyxFQUFFLEtBQUs7QUFDOUMsZ0NBQWdDLE1BQU0sRUFBRSxNQUFNO0FBQzlDLDZCQUE2QixDQUFDLENBQUM7QUFDL0IseUJBQXlCLENBQUMsQ0FBQztBQUMzQixxQkFBcUI7QUFDckIsb0JBQW9CLHFCQUFxQixFQUFFLFNBQVMscUJBQXFCLENBQUMsSUFBSSxFQUFFO0FBQ2hGLHdCQUF3QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7QUFDMUM7QUFDQSx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN6RCx3QkFBd0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztBQUN6RCx3QkFBd0IsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNyRDtBQUNBLHdCQUF3QixJQUFJLGtCQUFrQixHQUFHLFNBQVMsa0JBQWtCLENBQUMsS0FBSyxFQUFFO0FBQ3BGLDRCQUE0QixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTTtBQUNyRCxnQ0FBZ0MsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPO0FBQ3ZELGdDQUFnQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztBQUN0RDtBQUNBLDRCQUE0QixNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztBQUN0RCxnQ0FBZ0MsVUFBVSxFQUFFLFVBQVU7QUFDdEQsZ0NBQWdDLFVBQVUsRUFBRSxVQUFVO0FBQ3RELGdDQUFnQyxNQUFNLEVBQUUsTUFBTTtBQUM5QyxnQ0FBZ0MsT0FBTyxFQUFFLE9BQU87QUFDaEQsZ0NBQWdDLFFBQVEsRUFBRSxRQUFRO0FBQ2xELGdDQUFnQyxNQUFNLEVBQUUsTUFBTTtBQUM5Qyw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QixDQUFDO0FBQzFCO0FBQ0Esd0JBQXdCLElBQUksc0JBQXNCLEdBQUcsU0FBUyxzQkFBc0IsR0FBRztBQUN2Riw0QkFBNEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsVUFBVSxFQUFFO0FBQzVOLGdDQUFnQyxPQUFPLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2xGLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWTtBQUNqRCxnQ0FBZ0MsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQy9FLDZCQUE2QixDQUFDLENBQUM7QUFDL0IseUJBQXlCLENBQUM7QUFDMUI7QUFDQSx3QkFBd0IsUUFBUSxJQUFJLENBQUMsTUFBTTtBQUMzQyw0QkFBNEIsS0FBSyxnQkFBZ0I7QUFDakQsZ0NBQWdDLGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN4SSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLGVBQWU7QUFDaEQsZ0NBQWdDLGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN2SSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLE1BQU07QUFDdkMsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUN0RSxvQ0FBb0Msa0JBQWtCLENBQUM7QUFDdkQsd0NBQXdDLE1BQU0sRUFBRSxlQUFlO0FBQy9ELHdDQUF3QyxPQUFPLEVBQUUsSUFBSTtBQUNyRCxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLG9DQUFvQyxNQUFNO0FBQzFDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUU7QUFDOUcsb0NBQW9DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM3RixpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDL0YsZ0NBQWdDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWTtBQUNyRyxvQ0FBb0Msa0JBQWtCLENBQUM7QUFDdkQsd0NBQXdDLE1BQU0sRUFBRSxlQUFlO0FBQy9ELHdDQUF3QyxPQUFPLEVBQUUsSUFBSTtBQUNyRCxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLGlDQUFpQyxFQUFFLFVBQVUsTUFBTSxFQUFFO0FBQ3JELG9DQUFvQyxrQkFBa0IsQ0FBQztBQUN2RCx3Q0FBd0MsTUFBTSxFQUFFLGVBQWU7QUFDL0Qsd0NBQXdDLE9BQU8sRUFBRSxLQUFLO0FBQ3RELHdDQUF3QyxNQUFNLEVBQUUsTUFBTTtBQUN0RCxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxTQUFTO0FBQzFDLGdDQUFnQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ2xJO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUNyRixvQ0FBb0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6RyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLE9BQU87QUFDeEMsZ0NBQWdDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7QUFDaEk7QUFDQSxnQ0FBZ0MsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRTtBQUNwRixvQ0FBb0MsTUFBTTtBQUMxQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0FBQ3RGLGdDQUFnQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6RixnQ0FBZ0Msc0JBQXNCLEVBQUUsQ0FBQztBQUN6RCxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLE9BQU87QUFDeEMsZ0NBQWdDLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLHFDQUFxQyxDQUFDLENBQUM7QUFDaEksZ0NBQWdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDaEgsZ0NBQWdDLHNCQUFzQixFQUFFLENBQUM7QUFDekQsZ0NBQWdDLE1BQU07QUFDdEM7QUFDQSw0QkFBNEIsS0FBSyxpQkFBaUI7QUFDbEQsZ0NBQWdDLGVBQWUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUN6SSxnQ0FBZ0Msc0JBQXNCLEVBQUUsQ0FBQztBQUN6RCxnQ0FBZ0MsTUFBTTtBQUN0QztBQUNBLDRCQUE0QixLQUFLLFFBQVE7QUFDekMsZ0NBQWdDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUN0RSxvQ0FBb0MsTUFBTTtBQUMxQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZO0FBQ2xJLG9DQUFvQyxrQkFBa0IsQ0FBQztBQUN2RCx3Q0FBd0MsTUFBTSxFQUFFLGlCQUFpQjtBQUNqRSx3Q0FBd0MsT0FBTyxFQUFFLElBQUk7QUFDckQscUNBQXFDLENBQUMsQ0FBQztBQUN2QyxpQ0FBaUMsRUFBRSxVQUFVLE1BQU0sRUFBRTtBQUNyRCxvQ0FBb0Msa0JBQWtCLENBQUM7QUFDdkQsd0NBQXdDLE1BQU0sRUFBRSxpQkFBaUI7QUFDakUsd0NBQXdDLE9BQU8sRUFBRSxLQUFLO0FBQ3RELHdDQUF3QyxNQUFNLEVBQUUsTUFBTTtBQUN0RCxxQ0FBcUMsQ0FBQyxDQUFDO0FBQ3ZDLGlDQUFpQyxDQUFDLENBQUM7QUFDbkMsZ0NBQWdDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9HLGdDQUFnQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ25GLGdDQUFnQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxNQUFNO0FBQ3RDO0FBQ0EsNEJBQTRCO0FBQzVCLGdDQUFnQyxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDMUUseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQixvQkFBb0IsV0FBVyxFQUFFLFNBQVMsV0FBVyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUU7QUFDMUUsd0JBQXdCLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtBQUNwRSw0QkFBNEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQ3hFLHlCQUF5QixNQUFNO0FBQy9CLDRCQUE0QixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM3RCx5QkFBeUI7QUFDekIscUJBQXFCO0FBQ3JCLG9CQUFvQixPQUFPLEVBQUUsU0FBUyxPQUFPLEdBQUc7QUFDaEQsd0JBQXdCLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBQzVGLHFCQUFxQjtBQUNyQixpQkFBaUIsQ0FBQztBQUNsQjtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLG1CQUFtQixTQUFTLE1BQU0sRUFBRSxPQUFPLEVBQUUsK0JBQStCLEVBQUU7QUFHOUU7QUFDQTtBQUNBLGdCQUFnQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUU7QUFDN0Qsb0JBQW9CLEtBQUssRUFBRSxJQUFJO0FBQy9CLGlCQUFpQixDQUFDLENBQUM7QUFDbkIsZ0JBQWdCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDMUM7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsSUFBSSxXQUFXLEdBQUcsK0JBQStCLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkU7QUFDQSxnQkFBZ0IsU0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLFlBQVksV0FBVyxDQUFDLEVBQUUsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3pLO0FBQ0EsZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDN1U7QUFDQSxnQkFBZ0IsU0FBUyxZQUFZLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUMsRUFBRTtBQUN2TztBQUNBLGdCQUFnQixJQUFJLFFBQVE7QUFDNUI7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQyx3QkFBd0IsU0FBUyxRQUFRLENBQUMsSUFBSSxFQUFFO0FBQ2hELDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQzVEO0FBQ0EsNEJBQTRCLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksS0FBSyxRQUFRLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztBQUMzRyw0QkFBNEIsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEQsNEJBQTRCLElBQUksTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO0FBQzNFLDRCQUE0QixJQUFJLFdBQVcsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNFLDRCQUE0QixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakU7QUFDQSw0QkFBNEIsSUFBSSxXQUFXLEVBQUU7QUFDN0MsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDekQsNkJBQTZCO0FBQzdCLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEQsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQzFELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxVQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUU7QUFDekgsb0NBQW9DLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUUsVUFBVSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUU7QUFDdEgsd0NBQXdDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlGLHFDQUFxQyxDQUFDLENBQUMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLFVBQVUsR0FBRyxFQUFFLElBQUksRUFBRTtBQUNoRyx3Q0FBd0MsUUFBUSxJQUFJO0FBQ3BELDRDQUE0QyxLQUFLLEtBQUs7QUFDdEQsZ0RBQWdELE9BQU8sR0FBRyxDQUFDO0FBQzNEO0FBQ0EsNENBQTRDLEtBQUssTUFBTTtBQUN2RCxnREFBZ0QsT0FBTyxJQUFJLENBQUM7QUFDNUQ7QUFDQSw0Q0FBNEMsS0FBSyxJQUFJO0FBQ3JELGdEQUFnRCxPQUFPLEdBQUcsQ0FBQztBQUMzRDtBQUNBLDRDQUE0QyxLQUFLLElBQUk7QUFDckQsZ0RBQWdELE9BQU8sR0FBRyxDQUFDO0FBQzNEO0FBQ0EsNENBQTRDLEtBQUssTUFBTTtBQUN2RCxnREFBZ0QsT0FBTyxJQUFJLENBQUM7QUFDNUQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO0FBQ3JHLHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsb0NBQW9DLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUNuRDtBQUNBLG9DQUFvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDdkYsd0NBQXdDLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHO0FBQ0Esd0NBQXdDLElBQUksSUFBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLEtBQUssRUFBRSxFQUFFO0FBQ25ILDRDQUE0QyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSx5Q0FBeUMsTUFBTTtBQUMvQyw0Q0FBNEMsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDOUcseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDdkQsaUNBQWlDLENBQUMsQ0FBQztBQUNuQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxRQUFRO0FBQ3pDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxNQUFNLENBQUMsV0FBVyxFQUFFO0FBQ2hFLGdDQUFnQyxJQUFJLEdBQUcsR0FBRyxXQUFXLENBQUMsZUFBZSxDQUFDO0FBQ3RFO0FBQ0EsZ0NBQWdDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxTQUFTLEVBQUU7QUFDOUUsb0NBQW9DLEdBQUcsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQ3pEO0FBQ0Esb0NBQW9DLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssU0FBUyxFQUFFO0FBQzVGLHdDQUF3QyxHQUFHLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztBQUM5RCxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksUUFBUSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUN2RjtBQUNBLGdDQUFnQyxJQUFJLENBQUMsR0FBRyxJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUU7QUFDNUYsb0NBQW9DLE9BQU87QUFDM0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7QUFDOUQ7QUFDQSxnQ0FBZ0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNuRixvQ0FBb0MsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNEO0FBQ0Esb0NBQW9DLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxpQkFBaUIsRUFBRTtBQUMzRix3Q0FBd0MsU0FBUztBQUNqRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDOUYsd0NBQXdDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxFQUFFO0FBQ25HLDRDQUE0QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNFLDRDQUE0QyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO0FBQ3BGLDRDQUE0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDNUYseUNBQXlDO0FBQ3pDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsS0FBSztBQUN0Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsR0FBRyxDQUFDLElBQUksRUFBRTtBQUN0RCxnQ0FBZ0MsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNoRSxnQ0FBZ0MsT0FBTyxPQUFPLElBQUksS0FBSyxXQUFXLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqRiw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxRQUFRO0FBQ3pDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxNQUFNLEdBQUc7QUFDckQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztBQUN0RCw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxLQUFLO0FBQ3RDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxHQUFHLENBQUMsSUFBSSxFQUFFO0FBQ3RELGdDQUFnQyxPQUFPLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxXQUFXLENBQUM7QUFDbkYsNkJBQTZCO0FBQzdCLHlCQUF5QixDQUFDLENBQUMsQ0FBQztBQUM1QjtBQUNBLHdCQUF3QixPQUFPLFFBQVEsQ0FBQztBQUN4QyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3hCO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQzVDO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsbUJBQW1CLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRTtBQUc5RTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3RCxvQkFBb0IsS0FBSyxFQUFFLElBQUk7QUFDL0IsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsT0FBTyxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNqRDtBQUNBLGdCQUFnQixTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFVBQVUsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLEVBQUUsT0FBTyxHQUFHLFNBQVMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sR0FBRyxTQUFTLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksR0FBRyxDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxTQUFTLEdBQUcsUUFBUSxHQUFHLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtBQUMvVztBQUNBLGdCQUFnQixTQUFTLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUkscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixFQUFFLENBQUMsRUFBRTtBQUN2STtBQUNBLGdCQUFnQixTQUFTLGdCQUFnQixHQUFHLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzREFBc0QsQ0FBQyxDQUFDLEVBQUU7QUFDNUg7QUFDQSxnQkFBZ0IsU0FBUyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRTtBQUN6YTtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRTtBQUNyRjtBQUNBLGdCQUFnQixTQUFTLDBCQUEwQixDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRSxJQUFJLElBQUksS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNqTTtBQUNBLGdCQUFnQixTQUFTLHNCQUFzQixDQUFDLElBQUksRUFBRSxFQUFFLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLEVBQUUsTUFBTSxJQUFJLGNBQWMsQ0FBQywyREFBMkQsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ3RMO0FBQ0EsZ0JBQWdCLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsSUFBSSxPQUFPLE9BQU8sS0FBSyxXQUFXLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBRyxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUFFLElBQUksSUFBSSxHQUFHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLElBQUksTUFBTSxDQUFDLENBQUMsRUFBRTtBQUMzYjtBQUNBLGdCQUFnQixTQUFTLGNBQWMsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLEtBQUssSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLE9BQU8sTUFBTSxDQUFDLEVBQUU7QUFDOU07QUFDQSxnQkFBZ0IsU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLEVBQUUsZUFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsR0FBRyxTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzdOO0FBQ0EsZ0JBQWdCLFNBQVMsU0FBUyxDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsRUFBRSxJQUFJLE9BQU8sVUFBVSxLQUFLLFVBQVUsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsRUFBRTtBQUNqWjtBQUNBLGdCQUFnQixTQUFTLGVBQWUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsZUFBZSxHQUFHLE1BQU0sQ0FBQyxjQUFjLElBQUksU0FBUyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxlQUFlLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7QUFDMUw7QUFDQSxnQkFBZ0IsU0FBUyxlQUFlLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLFlBQVksV0FBVyxDQUFDLEVBQUUsRUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3pLO0FBQ0EsZ0JBQWdCLFNBQVMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUMsSUFBSSxPQUFPLElBQUksVUFBVSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDN1U7QUFDQSxnQkFBZ0IsU0FBUyxZQUFZLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLFVBQVUsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsT0FBTyxXQUFXLENBQUMsRUFBRTtBQUN2TztBQUNBLGdCQUFnQixJQUFJLGtCQUFrQixHQUFHO0FBQ3pDLG9CQUFvQixPQUFPLEVBQUUsQ0FBQztBQUM5QixvQkFBb0IsYUFBYSxFQUFFLENBQUMsQ0FBQztBQUNyQyxvQkFBb0IsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLG9CQUFvQiwwQkFBMEIsRUFBRSxDQUFDLENBQUM7QUFDbEQsb0JBQW9CLDhCQUE4QixFQUFFLENBQUMsQ0FBQztBQUN0RCxvQkFBb0IsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLG9CQUFvQixnQkFBZ0IsRUFBRSxDQUFDLENBQUM7QUFDeEMsb0JBQW9CLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbkMsb0JBQW9CLDBCQUEwQixFQUFFLENBQUMsQ0FBQztBQUNsRCxvQkFBb0IsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO0FBQzNDLG9CQUFvQixpQkFBaUIsRUFBRSxDQUFDLEVBQUU7QUFDMUMsaUJBQWlCLENBQUM7QUFDbEI7QUFDQSxnQkFBZ0IsU0FBUyxZQUFZLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRTtBQUNoRCxvQkFBb0IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLG9CQUFvQixPQUFPLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUM7QUFDbkYsaUJBQWlCO0FBQ2pCO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFO0FBQy9DLG9CQUFvQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ2hFLHdCQUF3QixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRTtBQUNqRCw0QkFBNEIsT0FBTyxLQUFLLENBQUM7QUFDekMseUJBQXlCO0FBQ3pCLHFCQUFxQjtBQUNyQjtBQUNBLG9CQUFvQixPQUFPLElBQUksQ0FBQztBQUNoQyxpQkFBaUI7QUFDakI7QUFDQSxnQkFBZ0IsSUFBSSxhQUFhO0FBQ2pDO0FBQ0Esb0JBQW9CLFlBQVk7QUFDaEMsd0JBQXdCLFNBQVMsYUFBYSxHQUFHO0FBQ2pELDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ2pFLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDckQsNEJBQTRCLEdBQUcsRUFBRSxrQkFBa0I7QUFDbkQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGdCQUFnQixDQUFDLENBQUMsRUFBRTtBQUNoRSxnQ0FBZ0MsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO0FBQ2pEO0FBQ0EsZ0NBQWdDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsVUFBVSxHQUFHLEVBQUUsTUFBTSxFQUFFO0FBQ3RGLG9DQUFvQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtBQUN6RSx3Q0FBd0MsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDdEcscUNBQXFDLE1BQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDL0Usd0NBQXdDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RHLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxRQUFRLE1BQU07QUFDbEQsd0NBQXdDLEtBQUssSUFBSTtBQUNqRCw0Q0FBNEMsT0FBTyxHQUFHLENBQUM7QUFDdkQ7QUFDQSx3Q0FBd0MsS0FBSyxJQUFJO0FBQ2pELDRDQUE0QyxPQUFPLEdBQUcsQ0FBQztBQUN2RDtBQUNBLHdDQUF3QyxLQUFLLEtBQUs7QUFDbEQsNENBQTRDLE9BQU8sR0FBRyxDQUFDO0FBQ3ZEO0FBQ0Esd0NBQXdDLEtBQUssTUFBTTtBQUNuRCw0Q0FBNEMsT0FBTyxJQUFJLENBQUM7QUFDeEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLE9BQU8sS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN6RSxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ25DLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGVBQWU7QUFDaEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGFBQWEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQ3BFLGdDQUFnQyxJQUFJLEdBQUcsR0FBRyxLQUFLO0FBQy9DLG9DQUFvQyxJQUFJO0FBQ3hDLG9DQUFvQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0FBQ3BEO0FBQ0EsZ0NBQWdDLFNBQVMsTUFBTSxHQUFHO0FBQ2xELG9DQUFvQyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDbkYsd0NBQXdDLEVBQUUsR0FBRyxDQUFDO0FBQzlDLHFDQUFxQztBQUNyQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3BILG9DQUFvQyxFQUFFLEdBQUcsQ0FBQztBQUMxQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQy9ELGdDQUFnQyxNQUFNLEVBQUUsQ0FBQztBQUN6QztBQUNBLGdDQUFnQyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQzdHLG9DQUFvQyxNQUFNLEVBQUUsQ0FBQztBQUM3QyxvQ0FBb0MsSUFBSSxRQUFRLEdBQUcsRUFBRTtBQUNyRCx3Q0FBd0MsU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUN2RDtBQUNBLG9DQUFvQyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3RHLHdDQUF3QyxRQUFRLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNELHdDQUF3QyxFQUFFLEdBQUcsQ0FBQztBQUM5QyxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsTUFBTSxFQUFFLENBQUM7QUFDN0M7QUFDQSxvQ0FBb0MsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxFQUFFO0FBQ3hELHdDQUF3QyxPQUFPLElBQUksQ0FBQztBQUNwRCxxQ0FBcUM7QUFDckM7QUFDQSxvQ0FBb0MsRUFBRSxHQUFHLENBQUM7QUFDMUMsb0NBQW9DLE1BQU0sRUFBRSxDQUFDO0FBQzdDLG9DQUFvQyxJQUFJLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDN0Q7QUFDQSxvQ0FBb0MsSUFBSSxXQUFXLEtBQUssSUFBSSxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7QUFDdEYsd0NBQXdDLE9BQU8sSUFBSSxDQUFDO0FBQ3BELHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxJQUFJLFlBQVksR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3JGO0FBQ0Esb0NBQW9DLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtBQUMxRCx3Q0FBd0MsT0FBTyxJQUFJLENBQUM7QUFDcEQscUNBQXFDO0FBQ3JDO0FBQ0Esb0NBQW9DLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUMvRSxvQ0FBb0MsVUFBVSxDQUFDLElBQUksQ0FBQztBQUNwRCx3Q0FBd0MsSUFBSSxFQUFFLFFBQVE7QUFDdEQsd0NBQXdDLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO0FBQy9FLHFDQUFxQyxDQUFDLENBQUM7QUFDdkMsb0NBQW9DLEdBQUcsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0FBQzNELG9DQUFvQyxNQUFNLEVBQUUsQ0FBQztBQUM3QyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTztBQUN2QyxvQ0FBb0MsSUFBSSxFQUFFLElBQUk7QUFDOUMsb0NBQW9DLFVBQVUsRUFBRSxVQUFVO0FBQzFELG9DQUFvQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEtBQUs7QUFDdkQsaUNBQWlDLENBQUM7QUFDbEMsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsNkJBQTZCO0FBQzlELDRCQUE0QixLQUFLLEVBQUUsU0FBUywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFO0FBQ2xGLGdDQUFnQyxJQUFJLEdBQUcsR0FBRyxLQUFLO0FBQy9DLG9DQUFvQyxJQUFJO0FBQ3hDLG9DQUFvQyxLQUFLLENBQUM7QUFDMUM7QUFDQSxnQ0FBZ0MsU0FBUyxNQUFNLEdBQUc7QUFDbEQsb0NBQW9DLE9BQU8sR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRTtBQUNuRix3Q0FBd0MsRUFBRSxHQUFHLENBQUM7QUFDOUMscUNBQXFDO0FBQ3JDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPLEdBQUcsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLEVBQUU7QUFDcEgsb0NBQW9DLEVBQUUsR0FBRyxDQUFDO0FBQzFDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0QsZ0NBQWdDLE1BQU0sRUFBRSxDQUFDO0FBQ3pDLGdDQUFnQyxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUM7QUFDcEQ7QUFDQSxnQ0FBZ0MsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7QUFDakcsb0NBQW9DLEVBQUUsR0FBRyxDQUFDO0FBQzFDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEUsZ0NBQWdDLE9BQU87QUFDdkMsb0NBQW9DLElBQUksRUFBRSxJQUFJO0FBQzlDLG9DQUFvQyxLQUFLLEVBQUUsS0FBSztBQUNoRCxvQ0FBb0MsTUFBTSxFQUFFLEdBQUcsR0FBRyxLQUFLO0FBQ3ZELGlDQUFpQyxDQUFDO0FBQ2xDLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFVBQVU7QUFDM0MsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFFBQVEsQ0FBQyxDQUFDLEVBQUU7QUFDeEQsZ0NBQWdDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQztBQUNBLGdDQUFnQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFO0FBQ3JELG9DQUFvQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEQsb0NBQW9DLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUM5QztBQUNBLG9DQUFvQyxJQUFJLEVBQUUsS0FBSyxHQUFHLEVBQUU7QUFDcEQsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDO0FBQzVDLHdDQUF3QyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkQsd0NBQXdDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3ZEO0FBQ0Esd0NBQXdDLFFBQVEsR0FBRztBQUNuRCw0Q0FBNEMsS0FBSyxHQUFHO0FBQ3BELGdEQUFnRCxFQUFFLENBQUMsQ0FBQztBQUNwRCxnREFBZ0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RFO0FBQ0EsZ0RBQWdELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMzRCxvREFBb0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3pHLG9EQUFvRCxPQUFPO0FBQzNELGlEQUFpRDtBQUNqRDtBQUNBLGdEQUFnRCxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckYsZ0RBQWdELENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFELGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0EsNENBQTRDLEtBQUssR0FBRztBQUNwRCxnREFBZ0QsRUFBRSxDQUFDLENBQUM7QUFDcEQ7QUFDQSxnREFBZ0QsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoRztBQUNBLGdEQUFnRCxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO0FBQzVHLG9EQUFvRCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDaEgsb0RBQW9ELE9BQU87QUFDM0QsaURBQWlEO0FBQ2pEO0FBQ0EsZ0RBQWdELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0UsZ0RBQWdELENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNuRSxnREFBZ0QsTUFBTTtBQUN0RDtBQUNBLDRDQUE0QyxLQUFLLEdBQUc7QUFDcEQsZ0RBQWdELElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDeEYsb0RBQW9ELENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEY7QUFDQSxvREFBb0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQy9ELHdEQUF3RCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFDN0csd0RBQXdELE9BQU87QUFDL0QscURBQXFEO0FBQ3JEO0FBQ0Esb0RBQW9ELElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUYsb0RBQW9ELENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlELGlEQUFpRCxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEcsb0RBQW9ELENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEY7QUFDQSxvREFBb0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0FBQy9ELHdEQUF3RCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDMUcsd0RBQXdELE9BQU87QUFDL0QscURBQXFEO0FBQ3JEO0FBQ0Esb0RBQW9ELElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEYsb0RBQW9ELENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzlELGlEQUFpRCxNQUFNLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7QUFDcEcsb0RBQW9ELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRixvREFBb0QsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBQy9FLG9EQUFvRCxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzlFO0FBQ0Esb0RBQW9ELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUMvRCx3REFBd0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO0FBQ3hILHdEQUF3RCxPQUFPO0FBQy9ELHFEQUFxRDtBQUNyRDtBQUNBLG9EQUFvRCxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtBQUMxRSx3REFBd0QsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNuRjtBQUNBLHdEQUF3RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7QUFDbkUsNERBQTRELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsOEJBQThCLENBQUMsQ0FBQztBQUM1SCw0REFBNEQsT0FBTztBQUNuRSx5REFBeUQ7QUFDekQ7QUFDQSx3REFBd0QsY0FBYyxHQUFHLElBQUksQ0FBQztBQUM5RSxxREFBcUQ7QUFDckQ7QUFDQSxvREFBb0QsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUgsb0RBQW9ELElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDbkYsb0RBQW9ELENBQUMsR0FBRyxDQUFDLElBQUksY0FBYyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRixpREFBaUQsTUFBTTtBQUN2RCxvREFBb0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3RHLG9EQUFvRCxPQUFPO0FBQzNELGlEQUFpRDtBQUNqRDtBQUNBLGdEQUFnRCxNQUFNO0FBQ3REO0FBQ0EsNENBQTRDO0FBQzVDLGdEQUFnRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RjtBQUNBLGdEQUFnRCxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDdEUsb0RBQW9ELElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUN0RyxvREFBb0QsT0FBTztBQUMzRCxpREFBaUQ7QUFDakQ7QUFDQSxnREFBZ0QsSUFBSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0FBQ3JFO0FBQ0EsZ0RBQWdELElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDdEgsb0RBQW9ELFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDcEUsaURBQWlELE1BQU0sSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUM1SCxvREFBb0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ3pHLG9EQUFvRCxPQUFPO0FBQzNELGlEQUFpRDtBQUNqRDtBQUNBLGdEQUFnRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoSCxnREFBZ0QsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RixnREFBZ0QsTUFBTTtBQUN0RCx5Q0FBeUM7QUFDekMscUNBQXFDLE1BQU07QUFDM0Msd0NBQXdDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtBQUM3RSw0Q0FBNEMsQ0FBQyxFQUFFLENBQUM7QUFDaEQseUNBQXlDO0FBQ3pDO0FBQ0Esd0NBQXdDLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLHdDQUF3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLHFDQUFxQztBQUNyQztBQUNBLG9DQUFvQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxpQkFBaUI7QUFDbEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUU7QUFDbEUsZ0NBQWdDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDN0QsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsTUFBTTtBQUN2Qyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtBQUNoRSx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFdBQVc7QUFDNUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFNBQVMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM5RCx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFNBQVM7QUFDMUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM1RCx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFdBQVc7QUFDNUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLFNBQVMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtBQUN4RSx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFFBQVE7QUFDekMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUMzRCx5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGdCQUFnQjtBQUNqRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEVBQUU7QUFDeEYseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxjQUFjO0FBQy9DLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxZQUFZLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDakUseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUU7QUFDNUQseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esd0JBQXdCLE9BQU8sYUFBYSxDQUFDO0FBQzdDLHFCQUFxQixFQUFFLENBQUM7QUFDeEI7QUFDQSxnQkFBZ0IsSUFBSSxhQUFhO0FBQ2pDO0FBQ0Esb0JBQW9CLFlBQVk7QUFDaEMsd0JBQXdCLFNBQVMsYUFBYSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUU7QUFDcEUsNEJBQTRCLGVBQWUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFDakU7QUFDQSw0QkFBNEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDckQsNEJBQTRCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0FBQ3ZELDRCQUE0QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7QUFDdEUsZ0NBQWdDLEtBQUssRUFBRSxJQUFJO0FBQzNDLGdDQUFnQyxRQUFRLEVBQUUsSUFBSTtBQUM5Qyw2QkFBNkIsQ0FBQyxDQUFDO0FBQy9CLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsYUFBYSxFQUFFLENBQUM7QUFDckQsNEJBQTRCLEdBQUcsRUFBRSxlQUFlO0FBQ2hELDRCQUE0QixLQUFLLEVBQUUsU0FBUyxhQUFhLEdBQUc7QUFDNUQsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDckYsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsWUFBWTtBQUM3Qyw0QkFBNEIsR0FBRyxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ2hELGdDQUFnQyxPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxhQUFhO0FBQzlDLDRCQUE0QixHQUFHLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDaEQsZ0NBQWdDLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO0FBQzVFO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDakQsb0NBQW9DLE9BQU8sU0FBUyxDQUFDO0FBQ3JELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxJQUFJLEtBQUssR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JFO0FBQ0EsZ0NBQWdDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO0FBQ2xELG9DQUFvQyxPQUFPLFNBQVMsQ0FBQztBQUNyRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxVQUFVLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdELDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGFBQWE7QUFDOUMsNEJBQTRCLEdBQUcsRUFBRSxTQUFTLEdBQUcsR0FBRztBQUNoRCxnQ0FBZ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7QUFDdEQsb0NBQW9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7QUFDaEUsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxLQUFLLEVBQUU7QUFDNUUsb0NBQW9DLE9BQU8sS0FBSyxDQUFDLFdBQVcsQ0FBQztBQUM3RCxpQ0FBaUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM1Qyw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esd0JBQXdCLE9BQU8sYUFBYSxDQUFDO0FBQzdDLHFCQUFxQixFQUFFLENBQUM7QUFDeEI7QUFDQSxnQkFBZ0IsSUFBSSxlQUFlO0FBQ25DO0FBQ0Esb0JBQW9CLFVBQVUsY0FBYyxFQUFFO0FBQzlDLHdCQUF3QixTQUFTLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBQ25FO0FBQ0Esd0JBQXdCLFNBQVMsZUFBZSxHQUFHO0FBQ25ELDRCQUE0QixJQUFJLE1BQU0sQ0FBQztBQUN2QztBQUNBLDRCQUE0QixlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ25FO0FBQ0EsNEJBQTRCLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25ILDRCQUE0QixNQUFNLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0FBQzNELDRCQUE0QixNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztBQUNqRCw0QkFBNEIsTUFBTSxDQUFDLFVBQVUsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7QUFDM0UsNEJBQTRCLE9BQU8sTUFBTSxDQUFDO0FBQzFDLHlCQUF5QjtBQUN6QjtBQUNBLHdCQUF3QixZQUFZLENBQUMsZUFBZSxFQUFFLENBQUM7QUFDdkQsNEJBQTRCLEdBQUcsRUFBRSxpQkFBaUI7QUFDbEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUU7QUFDbEUsZ0NBQWdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7QUFDM0QsZ0NBQWdDLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBQ2pELGdDQUFnQyxJQUFJLENBQUMsVUFBVSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztBQUM3RSxnQ0FBZ0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRDtBQUNBLGdDQUFnQyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssa0JBQWtCLENBQUMsT0FBTyxFQUFFO0FBQ3BGLG9DQUFvQyxPQUFPLFNBQVMsQ0FBQztBQUNyRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxxQkFBcUIsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztBQUNwRyxvQ0FBb0MsZUFBZSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9FO0FBQ0EsZ0NBQWdDLElBQUksQ0FBQyxlQUFlLEVBQUU7QUFDdEQsb0NBQW9DLE9BQU8sU0FBUyxDQUFDO0FBQ3JELGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxPQUFPO0FBQ3ZDLG9DQUFvQyxlQUFlLEVBQUUsZUFBZTtBQUNwRSxpQ0FBaUMsQ0FBQztBQUNsQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxpQkFBaUI7QUFDbEQsNEJBQTRCLEtBQUssRUFBRSxTQUFTLGVBQWUsQ0FBQyxJQUFJLEVBQUU7QUFDbEUsZ0NBQWdDLFFBQVEsSUFBSTtBQUM1QyxvQ0FBb0MsS0FBSyxNQUFNO0FBQy9DLHdDQUF3QyxPQUFPLElBQUksQ0FBQztBQUNwRCxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2xJLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFFBQVE7QUFDekMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE1BQU0sQ0FBQyxJQUFJLEVBQUU7QUFDekQsZ0NBQWdDLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDOUQsb0NBQW9DLE9BQU87QUFDM0MsaUNBQWlDO0FBQ2pDO0FBQ0EsZ0NBQWdDLElBQUksSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdDQUFnQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLFNBQVM7QUFDMUMsNEJBQTRCLEtBQUssRUFBRSxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUU7QUFDMUQsZ0NBQWdDLElBQUksSUFBSSxHQUFHLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM1RTtBQUNBLGdDQUFnQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pFLDZCQUE2QjtBQUM3Qix5QkFBeUIsRUFBRTtBQUMzQiw0QkFBNEIsR0FBRyxFQUFFLGdCQUFnQjtBQUNqRCw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsY0FBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFO0FBQ3RGLGdDQUFnQyxJQUFJLElBQUksR0FBRyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRSxnQ0FBZ0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDckQ7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRTtBQUNBLGdDQUFnQyxJQUFJLE9BQU8sRUFBRTtBQUM3QyxvQ0FBb0MsT0FBTztBQUMzQyxpQ0FBaUM7QUFDakM7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEU7QUFDQSxnQ0FBZ0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDeEUsNkJBQTZCO0FBQzdCLHlCQUF5QixFQUFFO0FBQzNCLDRCQUE0QixHQUFHLEVBQUUsY0FBYztBQUMvQyw0QkFBNEIsS0FBSyxFQUFFLFNBQVMsWUFBWSxDQUFDLElBQUksRUFBRTtBQUMvRCxnQ0FBZ0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ2hGLGdDQUFnQyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRztBQUNBLGdDQUFnQyxJQUFJLENBQUMsV0FBVyxFQUFFO0FBQ2xELG9DQUFvQyxPQUFPO0FBQzNDLGlDQUFpQztBQUNqQztBQUNBLGdDQUFnQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNqRyxvQ0FBb0MsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDO0FBQ3ZGLGlDQUFpQztBQUNqQyw2QkFBNkI7QUFDN0IseUJBQXlCLEVBQUU7QUFDM0IsNEJBQTRCLEdBQUcsRUFBRSxTQUFTO0FBQzFDLDRCQUE0QixLQUFLLEVBQUUsU0FBUyxPQUFPLENBQUMsSUFBSSxFQUFFO0FBQzFELGdDQUFnQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2RCw2QkFBNkI7QUFDN0IseUJBQXlCLENBQUMsQ0FBQyxDQUFDO0FBQzVCO0FBQ0Esd0JBQXdCLE9BQU8sZUFBZSxDQUFDO0FBQy9DLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3JDO0FBQ0EsZ0JBQWdCLE9BQU8sQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDO0FBQzFEO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsbUJBQW1CLFNBQVMsTUFBTSxFQUFFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRTtBQUc5RTtBQUNBO0FBQ0EsZ0JBQWdCLE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRTtBQUM3RCxvQkFBb0IsS0FBSyxFQUFFLElBQUk7QUFDL0IsaUJBQWlCLENBQUMsQ0FBQztBQUNuQixnQkFBZ0IsT0FBTyxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxDQUFDO0FBQ3hEO0FBQ0EsZ0JBQWdCLElBQUksWUFBWSxHQUFHLHNCQUFzQixDQUFDLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEc7QUFDQSxnQkFBZ0IsSUFBSSxLQUFLLEdBQUcsK0JBQStCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0Q7QUFDQSxnQkFBZ0IsU0FBUyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFO0FBQy9HO0FBQ0EsZ0JBQWdCLFNBQVMsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sS0FBSyxFQUFFLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUU7QUFDelI7QUFDQSxnQkFBZ0IsU0FBUyxpQkFBaUIsQ0FBQyxFQUFFLEVBQUUsRUFBRSxPQUFPLFlBQVksRUFBRSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsVUFBVSxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsU0FBUyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLENB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QyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDOUYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEcsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMvRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0Ryw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdEcsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5Riw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRyw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsRyw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9GLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQy9GLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDcEYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNwRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRiw0Q0FBNEMsTUFBTSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3JGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDckYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3hGLDRDQUE0QyxNQUFNLENBQUMsTUFBTSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUYsNENBQTRDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1Riw0Q0FBNEMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUN6RCw0Q0FBNEMsTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUN6RCx5Q0FBeUM7QUFD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QUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLG9DQUFvQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLG9DQUFvQyxPQUFPLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3BELGlDQUFpQyxDQUFDO0FBQ2xDO0FBQ0EsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLGdDQUFnQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNyRSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RSxnQ0FBZ0MsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdkUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekUs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LENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ3ZELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQzNELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQzFELDRCQUE0QixJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDckQsNEJBQTRCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkMsNEJBQTRCLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNoRSw0QkFBNEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRSw0QkFBNEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRSw0QkFBNEIsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztBQUNwRSw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyw0QkFBNEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUMsNEJBQTRCLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdDLDRCQUE0QixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakUsNEJBQTRCLElBQUks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SSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLGFBQWE7QUFDcEUsNENBQTRDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNySCw0Q0FBNEMsTUFBTTtBQUNsRDtBQUNBLHdDQUF3QyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsV0FBVztBQUNsRSw0Q0FBNEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0RSw0Q0FBNEMsTUFBTTtBQUNsRDtBQUNBLHdDQUF3QyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsb0JBQW9CO0FBQzNFLDRDQUE0QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0UsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVk7QUFDbkUsNENBQTRDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFdBQVc7QUFDbEUsNENBQTRDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVU7QUFDakUsNENBQTRDLElBQUksQ0FBQyxVQUFVLENBQUMs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SSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzNDLGdDQUFnQyxJQUFJLFFBQVEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDO0FBQzFEO0FBQ0EsZ0NBQWdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxRSxvQ0FBb0MsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztBQUN0RCx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVM7QUFDaEUsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFELDRDQUE0QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsRSw0Q0FBNEMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbkUsNENBQTRDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDL0QsNENBQTRDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDaEUsNENBQTRDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDeEksNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDN0QsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFELDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07QUFDN0QsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFELDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsNENBQTRDLE1BQU07QUFDbEQ7QUFDQSx3Q0FBd0MsS0FBSyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU87QUFDOUQsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELDRDQUE0QyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCw0Q0FBNEMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0SSw0Q0FBNEMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRCw0Q0FBNEMsTUFBTTtBQUNsRDtBQUNBLHdDQUF3QyxLQUFLLEtBQUssQ0FBQyxHQUFHLENBQUMsUUFBUTtBQUMvRCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsNENBQTRDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVELDRDQUE0QyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RJLDRDQUE0QyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ELDRDQUE0QyxNQUFNO0FBQ2xEO0FBQ0Esd0NBQXdDLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRO0FBQy9ELDRDQUE0QyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1RCw0Q0FBNEMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDNUQsNENBQTRDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFD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