From 70a13986fd8bfe698d6a20f8b55356428b5f76d3 Mon Sep 17 00:00:00 2001 From: Yeban8090 Date: Thu, 27 Feb 2025 12:22:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E7=9A=84=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data.json | 2 +- main.js | 291 ++++++++++++++++++--- src/converter.ts | 3 - src/copyManager.ts | 1 - src/main.ts | 2 +- src/templateManager.ts | 42 +-- {templates => src/templates}/academic.json | 0 {templates => src/templates}/dark.json | 0 {templates => src/templates}/default.json | 0 {templates => src/templates}/elegant.json | 0 src/templates/index.ts | 14 + {templates => src/templates}/minimal.json | 0 tsconfig.json | 2 +- 13 files changed, 286 insertions(+), 71 deletions(-) rename {templates => src/templates}/academic.json (100%) rename {templates => src/templates}/dark.json (100%) rename {templates => src/templates}/default.json (100%) rename {templates => src/templates}/elegant.json (100%) create mode 100644 src/templates/index.ts rename {templates => src/templates}/minimal.json (100%) diff --git a/data.json b/data.json index 9c25775..05bc0b2 100644 --- a/data.json +++ b/data.json @@ -1,5 +1,5 @@ { - "templateId": "elegant", + "templateId": "academic", "fontFamily": "Optima-Regular, Optima, PingFangSC-light, PingFangTC-light, \"PingFang SC\", Cambria, Cochin, Georgia, Times, \"Times New Roman\", serif", "fontSize": 15 } \ No newline at end of file diff --git a/main.js b/main.js index b85e0e8..9aace2f 100644 --- a/main.js +++ b/main.js @@ -21,6 +21,9 @@ var __spreadValues = (a, b) => { } return a; }; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); @@ -55,6 +58,241 @@ var __async = (__this, __arguments, generator) => { }); }; +// src/templates/default.json +var require_default = __commonJS({ + "src/templates/default.json"(exports, module2) { + module2.exports = { + id: "default", + name: "\u9ED8\u8BA4\u6A21\u677F", + styles: { + container: "width: 100% !important; table-layout: fixed; border-collapse: collapse; border: none; margin: 0; padding: 0; max-width: 100vw;", + title: { + h1: "font-weight: bold; margin: 32px 0 24px; font-size: 2em; color: #2c3e50;", + h2: "font-weight: bold; margin: 28px 0 20px; font-size: 1.5em; color: #34495e;", + h3: "font-weight: bold; margin: 24px 0 16px; font-size: 1.25em; color: #3d566e;", + base: "font-weight: bold; margin: 20px 0 14px; font-size: 1em; color: #47637f;" + }, + paragraph: "line-height: 1.8; margin-bottom: 1.2em; font-size: 1em; color: #4a4a4a;", + list: { + container: "padding-left: 20px; margin-bottom: 1.2em; color: #4a4a4a;", + item: "margin-bottom: 0.6em; font-size: 1em; color: #4a4a4a; line-height: 1.8;", + taskList: "list-style: none; margin-left: -24px; font-size: 1em; color: #4a4a4a; line-height: 1.8;" + }, + code: { + block: "background: #f8f8f8; padding: 0.5em 1em 1em; border-radius: 8px; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; line-height: 1.6; white-space: pre; overflow-x: auto; word-wrap: normal; color: #333; margin: 1.2em 0; border: 1px solid #eee; box-shadow: 0 2px 4px rgba(0,0,0,0.05); width: 100%;", + inline: "background: #f8f8f8; padding: 2px 6px; border-radius: 4px; color: #333; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; border: 1px solid #eee;" + }, + quote: "border-left: 4px solid #e0e0e0; border-radius: 6px; padding: 16px 20px; background: #f6f8fa; margin: 0.8em 0; color: #6a737d; font-style: italic; font-size: 1em; word-wrap: break-word;", + image: "max-width: 100%; height: auto; margin: 1em auto; display: block;", + link: "color: #e0e0e0; text-decoration: none; border-bottom: 1px solid #e0e0e0;", + emphasis: { + strong: "font-weight: bold; color: #4a4a4a;", + em: "font-style: italic; color: #4a4a4a;", + del: "text-decoration: line-through; color: #4a4a4a;" + }, + table: { + container: "width: 100%; margin: 1em 0; border-collapse: collapse; border: 1px solid #e1e4e8;", + header: "background: #f6f8fa; font-weight: bold; color: #4a4a4a; border-bottom: 2px solid #e1e4e8; font-size: 1em;", + cell: "border: 1px solid #f0f0f0; padding: 8px; color: #4a4a4a; font-size: 1em;" + }, + hr: "border: none; border-top: 1px solid #f0f0f0; margin: 20px 0;", + footnote: { + ref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;", + backref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;" + } + } + }; + } +}); + +// src/templates/minimal.json +var require_minimal = __commonJS({ + "src/templates/minimal.json"(exports, module2) { + module2.exports = { + id: "minimal", + name: "\u6781\u7B80\u4E3B\u9898", + styles: { + container: "width: 100% !important; table-layout: fixed; border-collapse: collapse; border: none; margin: 0; padding: 0; max-width: 100vw;", + title: { + h1: "font-weight: bold; margin: 32px 0 24px; font-size: 2em; color: #3B4252; letter-spacing: -0.02em;", + h2: "font-weight: bold; margin: 28px 0 20px; font-size: 1.5em; color: #434C5E; letter-spacing: -0.01em;", + h3: "font-weight: bold; margin: 24px 0 16px; font-size: 1.25em; color: #4C566A;", + base: "font-weight: bold; margin: 20px 0 14px; font-size: 1em; color: #5E81AC;" + }, + paragraph: "line-height: 1.8; margin-bottom: 1.2em; font-size: 1em; color: #4a4a4a;", + list: { + container: "padding-left: 20px; margin-bottom: 1.2em; color: #4a4a4a;", + item: "margin-bottom: 0.6em; font-size: 1em; color: #4a4a4a; line-height: 1.8;", + taskList: "list-style: none; margin-left: -24px; font-size: 1em; color: #4a4a4a; line-height: 1.8;" + }, + code: { + block: "background: #f8f8f8; padding: 0.5em 1em 1em; border-radius: 8px; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; line-height: 1.6; white-space: pre; overflow-x: auto; word-wrap: normal; color: #333; margin: 1.2em 0; border: 1px solid #eee; box-shadow: 0 2px 4px rgba(0,0,0,0.05); width: 100%;", + inline: "background: #f8f8f8; padding: 2px 6px; border-radius: 4px; color: #333; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; border: 1px solid #eee;" + }, + quote: "border-left: 4px solid #81A1C1; border-radius: 6px; padding: 16px 20px; background: #f8f9fc; margin: 0.8em 0; color: #4C566A; font-style: italic; font-size: 1em; word-wrap: break-word;", + image: "max-width: 100%; height: auto; margin: 1em auto; display: block;", + link: "color: #5E81AC; text-decoration: none; border-bottom: 1px solid #81A1C1; transition: all 0.2s ease;", + emphasis: { + strong: "font-weight: bold; color: #4a4a4a;", + em: "font-style: italic; color: #4a4a4a;", + del: "text-decoration: line-through; color: #4a4a4a;" + }, + table: { + container: "width: 100%; margin: 1em 0; border-collapse: collapse; border: 1px solid #e1e4e8;", + header: "background: #f6f8fa; font-weight: bold; color: #4a4a4a; border-bottom: 2px solid #e1e4e8; font-size: 1em;", + cell: "border: 1px solid #f0f0f0; padding: 8px; color: #4a4a4a; font-size: 1em;" + }, + hr: "border: none; border-top: 1px solid #f0f0f0; margin: 20px 0;", + footnote: { + ref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;", + backref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;" + } + } + }; + } +}); + +// src/templates/elegant.json +var require_elegant = __commonJS({ + "src/templates/elegant.json"(exports, module2) { + module2.exports = { + id: "elegant", + name: "\u4F18\u96C5\u4E3B\u9898", + styles: { + container: "width: 100% !important; table-layout: fixed; border-collapse: collapse; border: none; margin: 0; padding: 0; max-width: 100vw;", + title: { + h1: "font-weight: bold; margin: 32px 0 24px; font-size: 2em; color: #553C9A; letter-spacing: -0.03em; border-bottom: 2px solid #9F7AEA; padding-bottom: 0.3em;", + h2: "font-weight: bold; margin: 28px 0 20px; font-size: 1.5em; color: #6B46C1; letter-spacing: -0.02em; border-left: 4px solid #9F7AEA; padding-left: 12px;", + h3: "font-weight: bold; margin: 24px 0 16px; font-size: 1.25em; color: #805AD5; letter-spacing: -0.01em;", + base: "font-weight: bold; margin: 20px 0 14px; font-size: 1em; color: #9F7AEA;" + }, + paragraph: "line-height: 1.8; margin-bottom: 1.2em; font-size: 1em; color: #4a4a4a;", + list: { + container: "padding-left: 20px; margin-bottom: 1.2em; color: #4a4a4a;", + item: "margin-bottom: 0.6em; font-size: 1em; color: #4a4a4a; line-height: 1.8;", + taskList: "list-style: none; margin-left: -24px; font-size: 1em; color: #4a4a4a; line-height: 1.8;" + }, + code: { + block: "background: #f8f8f8; padding: 0.5em 1em 1em; border-radius: 8px; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; line-height: 1.6; white-space: pre; overflow-x: auto; word-wrap: normal; color: #333; margin: 1.2em 0; border: 1px solid #eee; box-shadow: 0 2px 4px rgba(0,0,0,0.05); width: 100%;", + inline: "background: #f8f8f8; padding: 2px 6px; border-radius: 4px; color: #333; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; border: 1px solid #eee;" + }, + quote: "border-left: 4px solid #9F7AEA; border-radius: 6px; padding: 16px 20px; background: #f5f3ff; margin: 0.8em 0; color: #6B46C1; font-style: italic; font-size: 1em; word-wrap: break-word;", + image: "max-width: 100%; height: auto; margin: 1em auto; display: block;", + link: "color: #805AD5; text-decoration: none; border-bottom: 1px solid #9F7AEA; transition: all 0.2s ease;", + emphasis: { + strong: "font-weight: bold; color: #4a4a4a;", + em: "font-style: italic; color: #4a4a4a;", + del: "text-decoration: line-through; color: #4a4a4a;" + }, + table: { + container: "width: 100%; margin: 1em 0; border-collapse: collapse; border: 1px solid #e1e4e8;", + header: "background: #f6f8fa; font-weight: bold; color: #4a4a4a; border-bottom: 2px solid #e1e4e8; font-size: 1em;", + cell: "border: 1px solid #f0f0f0; padding: 8px; color: #4a4a4a; font-size: 1em;" + }, + hr: "border: none; border-top: 1px solid #f0f0f0; margin: 20px 0;", + footnote: { + ref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;", + backref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;" + } + } + }; + } +}); + +// src/templates/dark.json +var require_dark = __commonJS({ + "src/templates/dark.json"(exports, module2) { + module2.exports = { + id: "dark", + name: "\u6DF1\u8272\u4E3B\u9898", + styles: { + container: "width: 100% !important; table-layout: fixed; border-collapse: collapse; border: none; margin: 0; padding: 0; max-width: 100vw;", + title: { + h1: "font-weight: bold; margin: 32px 0 24px; font-size: 2em; color: #4A90E2; letter-spacing: -0.03em; border-bottom: 2px solid #4A90E2; padding-bottom: 0.3em;", + h2: "font-weight: bold; margin: 28px 0 20px; font-size: 1.5em; color: #5B9BE0; letter-spacing: -0.02em; border-left: 4px solid #4A90E2; padding-left: 12px;", + h3: "font-weight: bold; margin: 24px 0 16px; font-size: 1.25em; color: #6BA5DE; letter-spacing: -0.01em;", + base: "font-weight: bold; margin: 20px 0 14px; font-size: 1em; color: #7BB0DD;" + }, + paragraph: "line-height: 1.8; margin-bottom: 1.2em; font-size: 1em; color: #4a4a4a;", + list: { + container: "padding-left: 20px; margin-bottom: 1.2em; color: #4a4a4a;", + item: "margin-bottom: 0.6em; font-size: 1em; color: #4a4a4a; line-height: 1.8;", + taskList: "list-style: none; margin-left: -24px; font-size: 1em; color: #4a4a4a; line-height: 1.8;" + }, + code: { + block: "background: #f8f8f8; padding: 0.5em 1em 1em; border-radius: 8px; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; line-height: 1.6; white-space: pre; overflow-x: auto; word-wrap: normal; color: #333; margin: 1.2em 0; border: 1px solid #eee; box-shadow: 0 2px 4px rgba(0,0,0,0.05); width: 100%;", + inline: "background: #f8f8f8; padding: 2px 6px; border-radius: 4px; color: #333; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; border: 1px solid #eee;" + }, + quote: "border-left: 4px solid #4A90E2; border-radius: 6px; padding: 16px 20px; background: #F5F9FF; margin: 0.8em 0; color: #4A5568; font-style: italic; font-size: 1em; word-wrap: break-word;", + image: "max-width: 100%; height: auto; margin: 1em auto; display: block;", + link: "color: #4A90E2; text-decoration: none; border-bottom: 1px solid #4A90E2; transition: all 0.2s ease;", + emphasis: { + strong: "font-weight: bold; color: #4a4a4a;", + em: "font-style: italic; color: #4a4a4a;", + del: "text-decoration: line-through; color: #4a4a4a;" + }, + table: { + container: "width: 100%; margin: 1em 0; border-collapse: collapse; border: 1px solid #e1e4e8;", + header: "background: #f6f8fa; font-weight: bold; color: #4a4a4a; border-bottom: 2px solid #e1e4e8; font-size: 1em;", + cell: "border: 1px solid #f0f0f0; padding: 8px; color: #4a4a4a; font-size: 1em;" + }, + hr: "border: none; border-top: 1px solid #f0f0f0; margin: 20px 0;", + footnote: { + ref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;", + backref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;" + } + } + }; + } +}); + +// src/templates/academic.json +var require_academic = __commonJS({ + "src/templates/academic.json"(exports, module2) { + module2.exports = { + id: "academic", + name: "\u5B66\u672F\u4E3B\u9898", + styles: { + container: "width: 100% !important; table-layout: fixed; border-collapse: collapse; border: none; margin: 0; padding: 0; max-width: 100vw;", + title: { + h1: "font-weight: bold; margin: 32px 0 24px; font-size: 2em; color: #5D4037; letter-spacing: -0.03em; border-bottom: 2px solid #8D6E63; padding-bottom: 0.3em;", + h2: "font-weight: bold; margin: 28px 0 20px; font-size: 1.5em; color: #6D4C41; letter-spacing: -0.02em; border-left: 4px solid #8D6E63; padding-left: 12px;", + h3: "font-weight: bold; margin: 24px 0 16px; font-size: 1.25em; color: #795548; letter-spacing: -0.01em;", + base: "font-weight: bold; margin: 20px 0 14px; font-size: 1em; color: #8D6E63;" + }, + paragraph: "line-height: 1.8; margin-bottom: 1.2em; font-size: 1em; color: #4a4a4a;", + quote: "border-left: 4px solid #8D6E63; border-radius: 6px; padding: 16px 20px; background: #EFEBE9; margin: 0.8em 0; color: #5D4037; font-style: italic; font-size: 1em; word-wrap: break-word;", + link: "color: #795548; text-decoration: none; border-bottom: 1px solid #8D6E63; transition: all 0.2s ease;", + emphasis: { + strong: "font-weight: 600; color: #4a4a4a;", + em: "font-style: italic; color: #4a4a4a;", + del: "text-decoration: line-through; color: #4a4a4a;" + }, + list: { + container: "padding-left: 20px; margin-bottom: 1.2em; color: #4a4a4a;", + item: "margin-bottom: 0.6em; font-size: 1em; color: #4a4a4a; line-height: 1.8;", + taskList: "list-style: none; margin-left: -24px; font-size: 1em; color: #4a4a4a; line-height: 1.8;" + }, + code: { + block: "background: #f8f8f8; padding: 0.5em 1em 1em; border-radius: 8px; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; line-height: 1.6; white-space: pre; overflow-x: auto; word-wrap: normal; color: #333; margin: 1.2em 0; border: 1px solid #eee; box-shadow: 0 2px 4px rgba(0,0,0,0.05); width: 100%;", + inline: "background: #f8f8f8; padding: 2px 6px; border-radius: 4px; color: #333; font-size: 14px; font-family: Operator Mono, Consolas, Monaco, Menlo, monospace; border: 1px solid #eee;" + }, + image: "max-width: 100%; height: auto; margin: 1em auto; display: block;", + table: { + container: "width: 100%; margin: 1em 0; border-collapse: collapse; border: 1px solid #e1e4e8;", + header: "background: #f6f8fa; font-weight: bold; color: #4a4a4a; border-bottom: 2px solid #e1e4e8; font-size: 1em;", + cell: "border: 1px solid #f0f0f0; padding: 8px; color: #4a4a4a; font-size: 1em;" + }, + hr: "border: none; border-top: 1px solid #f0f0f0; margin: 20px 0;", + footnote: { + ref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;", + backref: "color: #e0e0e0; text-decoration: none; font-size: 0.9em;" + } + } + }; + } +}); + // src/main.ts var main_exports = {}; __export(main_exports, { @@ -167,10 +405,7 @@ var MPConverter = class { if (!src) return; try { const linktext = src.split("|")[0]; - console.log(src); - console.log(linktext); const file = this.app.metadataCache.getFirstLinkpathDest(linktext, ""); - console.log(file); if (file) { const absolutePath = this.app.vault.adapter.getResourcePath(file.path); const newImg = document.createElement("img"); @@ -248,7 +483,6 @@ var CopyManager = class { container.style.left = "-9999px"; container.innerHTML = element.innerHTML; document.body.appendChild(container); - console.log(element.innerHTML); yield this.processImages(container); const cleanHtml = this.cleanupHtml(container.innerHTML); const clipData = new ClipboardItem({ @@ -648,8 +882,8 @@ var MPView = class extends import_obsidian2.ItemView { getTemplateOptions() { return __async(this, null, function* () { yield this.templateManager.loadTemplates(); - const templates = this.templateManager.getAllTemplates(); - return templates.length > 0 ? templates.map((t) => ({ value: t.id, label: t.name })) : [{ value: "default", label: "\u9ED8\u8BA4\u6A21\u677F" }]; + const templates2 = this.templateManager.getAllTemplates(); + return templates2.length > 0 ? templates2.map((t) => ({ value: t.id, label: t.name })) : [{ value: "default", label: "\u9ED8\u8BA4\u6A21\u677F" }]; }); } // 获取字体选项 @@ -679,6 +913,20 @@ var MPView = class extends import_obsidian2.ItemView { } }; +// src/templates/index.ts +var defaultTemplate = require_default(); +var minimalTemplate = require_minimal(); +var elegantTemplate = require_elegant(); +var darkTemplate = require_dark(); +var academicTemplate = require_academic(); +var templates = { + default: defaultTemplate, + minimal: minimalTemplate, + elegant: elegantTemplate, + dark: darkTemplate, + academic: academicTemplate +}; + // src/templateManager.ts var TemplateManager = class { constructor(app) { @@ -691,29 +939,12 @@ var TemplateManager = class { loadTemplates() { return __async(this, null, function* () { try { - const configDir = this.app.vault.configDir; - const templatesPath = `${configDir}/plugins/obsidian-to-mp/templates`; - const defaultTemplate = JSON.parse( - yield this.app.vault.adapter.read(`${templatesPath}/default.json`) - ); - this.templates.set(defaultTemplate.id, defaultTemplate); - this.currentTemplate = defaultTemplate; - const minimalTemplate = JSON.parse( - yield this.app.vault.adapter.read(`${templatesPath}/minimal.json`) - ); - this.templates.set(minimalTemplate.id, minimalTemplate); - const elegantTemplate = JSON.parse( - yield this.app.vault.adapter.read(`${templatesPath}/elegant.json`) - ); - this.templates.set(elegantTemplate.id, elegantTemplate); - const darkTemplate = JSON.parse( - yield this.app.vault.adapter.read(`${templatesPath}/dark.json`) - ); - this.templates.set(darkTemplate.id, darkTemplate); - const academicTemplate = JSON.parse( - yield this.app.vault.adapter.read(`${templatesPath}/academic.json`) - ); - this.templates.set(academicTemplate.id, academicTemplate); + Object.values(templates).forEach((template) => { + this.templates.set(template.id, template); + if (template.id === "default") { + this.currentTemplate = template; + } + }); } catch (error) { console.error("\u52A0\u8F7D\u6A21\u677F\u5931\u8D25:", error); throw new Error("\u65E0\u6CD5\u52A0\u8F7D\u6A21\u677F\u6587\u4EF6"); @@ -936,4 +1167,4 @@ var MPPlugin = class extends import_obsidian3.Plugin { }); } }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL3ZpZXcudHMiLCAic3JjL2NvbnZlcnRlci50cyIsICJzcmMvY29weU1hbmFnZXIudHMiLCAic3JjL2RvbmF0ZU1hbmFnZXIudHMiLCAic3JjL3RlbXBsYXRlTWFuYWdlci50cyIsICJzcmMvc2V0dGluZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IFBsdWdpbiwgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgTVBWaWV3LCBWSUVXX1RZUEVfTVAgfSBmcm9tICcuL3ZpZXcnO1xuaW1wb3J0IHsgVGVtcGxhdGVNYW5hZ2VyIH0gZnJvbSAnLi90ZW1wbGF0ZU1hbmFnZXInO1xuaW1wb3J0IHsgU2V0dGluZ3NNYW5hZ2VyIH0gZnJvbSAnLi9zZXR0aW5ncyc7XG5pbXBvcnQgeyBNUENvbnZlcnRlciB9IGZyb20gJy4vY29udmVydGVyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTVBQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuICAgIHByaXZhdGUgc2V0dGluZ3NNYW5hZ2VyOiBTZXR0aW5nc01hbmFnZXI7XG5cbiAgICBhc3luYyBvbmxvYWQoKSB7XG4gICAgICAgIC8vIFx1NTIxRFx1NTlDQlx1NTMxNlx1OEJCRVx1N0Y2RVx1N0JBMVx1NzQwNlx1NTY2OFxuICAgICAgICB0aGlzLnNldHRpbmdzTWFuYWdlciA9IG5ldyBTZXR0aW5nc01hbmFnZXIodGhpcyk7XG4gICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLmxvYWRTZXR0aW5ncygpO1xuXG4gICAgICAgIC8vIFx1NTIxRFx1NTlDQlx1NTMxNlx1NkEyMVx1Njc3Rlx1N0JBMVx1NzQwNlx1NTY2OFxuICAgICAgICBjb25zdCB0ZW1wbGF0ZU1hbmFnZXIgPSBuZXcgVGVtcGxhdGVNYW5hZ2VyKHRoaXMuYXBwKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1NTIxRFx1NTlDQlx1NTMxNlx1OEY2Q1x1NjM2Mlx1NTY2OFxuICAgICAgICBNUENvbnZlcnRlci5pbml0aWFsaXplKHRoaXMuYXBwKTtcblxuICAgICAgICAvLyBcdTZDRThcdTUxOENcdTg5QzZcdTU2RkVcbiAgICAgICAgdGhpcy5yZWdpc3RlclZpZXcoXG4gICAgICAgICAgICBWSUVXX1RZUEVfTVAsXG4gICAgICAgICAgICAobGVhZikgPT4gbmV3IE1QVmlldyhsZWFmLCB0ZW1wbGF0ZU1hbmFnZXIsIHRoaXMuc2V0dGluZ3NNYW5hZ2VyKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFx1NkRGQlx1NTJBMFx1NTQ3RFx1NEVFNFx1NTIzMFx1NTQ3RFx1NEVFNFx1OTc2Mlx1Njc3RlxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6ICdvcGVuLW1wLXByZXZpZXcnLFxuICAgICAgICAgICAgbmFtZTogJ1x1NjI1M1x1NUYwMFx1NTE2Q1x1NEYxN1x1NTNGN1x1OTg4NFx1ODlDOFx1NjNEMlx1NEVGNicsXG4gICAgICAgICAgICBjYWxsYmFjazogYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aXZhdGVWaWV3KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NjNEMlx1NEVGNlx1NTJBMFx1OEY3RFx1NjVGNlx1ODFFQVx1NTJBOFx1NkZDMFx1NkQzQlx1ODlDNlx1NTZGRVxuICAgICAgICB0aGlzLmFwcC53b3Jrc3BhY2Uub25MYXlvdXRSZWFkeSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlVmlldygpO1xuICAgICAgICB9KTtcbiAgICAgICAgTVBDb252ZXJ0ZXIuaW5pdGlhbGl6ZSh0aGlzLmFwcCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb251bmxvYWQoKSB7XG4gICAgICAgIC8vIFx1NkUwNVx1NzQwNlx1ODlDNlx1NTZGRVxuICAgICAgICB0aGlzLmFwcC53b3Jrc3BhY2UuZGV0YWNoTGVhdmVzT2ZUeXBlKFZJRVdfVFlQRV9NUCk7XG4gICAgfVxuICAgIFxuICAgIGFzeW5jIGFjdGl2YXRlVmlldygpIHtcbiAgICAgICAgLy8gXHU1OTgyXHU2NzlDXHU4OUM2XHU1NkZFXHU1REYyXHU3RUNGXHU1QjU4XHU1NzI4XHVGRjBDXHU2RkMwXHU2RDNCXHU1QjgzXG4gICAgICAgIGNvbnN0IGxlYXZlcyA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUoVklFV19UWVBFX01QKTtcbiAgICAgICAgaWYgKGxlYXZlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcC53b3Jrc3BhY2UucmV2ZWFsTGVhZihsZWF2ZXNbMF0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gXHU1MjFCXHU1RUZBXHU2NUIwXHU4OUM2XHU1NkZFXG4gICAgICAgIGNvbnN0IHJpZ2h0TGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRSaWdodExlYWYoZmFsc2UpO1xuICAgICAgICBpZiAocmlnaHRMZWFmKSB7XG4gICAgICAgICAgICBhd2FpdCByaWdodExlYWYuc2V0Vmlld1N0YXRlKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBWSUVXX1RZUEVfTVAsXG4gICAgICAgICAgICAgICAgYWN0aXZlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBcdTU5ODJcdTY3OUNcdTY1RTBcdTZDRDVcdTgzQjdcdTUzRDZcdTUzRjNcdTRGQTdcdTk3NjJcdTY3N0ZcdUZGMENcdTY2M0VcdTc5M0FcdTk1MTlcdThCRUZcdTYzRDBcdTc5M0FcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoJ1x1NjVFMFx1NkNENVx1NTIxQlx1NUVGQVx1ODlDNlx1NTZGRVx1OTc2Mlx1Njc3RicpO1xuICAgICAgICB9XG4gICAgfVxufSIsICJpbXBvcnQgeyBJdGVtVmlldywgV29ya3NwYWNlTGVhZiwgTWFya2Rvd25SZW5kZXJlciwgVEZpbGUgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgeyBNUENvbnZlcnRlciB9IGZyb20gJy4vY29udmVydGVyJztcbmltcG9ydCB7IENvcHlNYW5hZ2VyIH0gZnJvbSAnLi9jb3B5TWFuYWdlcic7XG5pbXBvcnQgdHlwZSB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gJy4vdGVtcGxhdGVNYW5hZ2VyJztcbmltcG9ydCB7IERvbmF0ZU1hbmFnZXIgfSBmcm9tICcuL2RvbmF0ZU1hbmFnZXInO1xuaW1wb3J0IHR5cGUgeyBTZXR0aW5nc01hbmFnZXIgfSBmcm9tICcuL3NldHRpbmdzJztcbmV4cG9ydCBjb25zdCBWSUVXX1RZUEVfTVAgPSAnbXAtcHJldmlldyc7XG5cbmV4cG9ydCBjbGFzcyBNUFZpZXcgZXh0ZW5kcyBJdGVtVmlldyB7XG4gICAgcHJpdmF0ZSBwcmV2aWV3RWw6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgY3VycmVudEZpbGU6IFRGaWxlIHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSB1cGRhdGVUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgICBwcml2YXRlIGlzUHJldmlld0xvY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHByaXZhdGUgbG9ja0J1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBjb3B5QnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudDtcbiAgICBwcml2YXRlIHRlbXBsYXRlTWFuYWdlcjogVGVtcGxhdGVNYW5hZ2VyO1xuICAgIHByaXZhdGUgc2V0dGluZ3NNYW5hZ2VyOiBTZXR0aW5nc01hbmFnZXI7XG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZVNlbGVjdDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBjdXN0b21Gb250U2VsZWN0OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGZvbnRTaXplU2VsZWN0OiBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGxlYWY6IFdvcmtzcGFjZUxlYWYsIFxuICAgICAgICB0ZW1wbGF0ZU1hbmFnZXI6IFRlbXBsYXRlTWFuYWdlcixcbiAgICAgICAgc2V0dGluZ3NNYW5hZ2VyOiBTZXR0aW5nc01hbmFnZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIobGVhZik7XG4gICAgICAgIHRoaXMudGVtcGxhdGVNYW5hZ2VyID0gdGVtcGxhdGVNYW5hZ2VyO1xuICAgICAgICB0aGlzLnNldHRpbmdzTWFuYWdlciA9IHNldHRpbmdzTWFuYWdlcjtcbiAgICB9XG5cbiAgICBnZXRWaWV3VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIFZJRVdfVFlQRV9NUDtcbiAgICB9XG5cbiAgICBnZXREaXNwbGF5VGV4dCgpIHtcbiAgICAgICAgcmV0dXJuICdcdTUxNkNcdTRGMTdcdTUzRjdcdTk4ODRcdTg5QzgnO1xuICAgIH1cblxuICAgIGdldEljb24oKSB7XG4gICAgICAgcmV0dXJuICdleWUnO1xuICAgIH1cblxuICAgIC8vIFx1NTcyOCBvbk9wZW4gXHU2NUI5XHU2Q0Q1XHU0RTJEXHU2NkY0XHU2NUIwXHU1RTk1XHU5MEU4XHU5NTAxXHU1QjlBXHU2MzA5XHU5NEFFXHU3Njg0XHU1MjFCXHU1RUZBXG4gICAgYXN5bmMgb25PcGVuKCkge1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lckVsLmNoaWxkcmVuWzFdO1xuICAgICAgICBjb250YWluZXIuZW1wdHkoKTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHRvb2xiYXIgPSBjb250YWluZXIuY3JlYXRlRWwoJ2RpdicsIHsgY2xzOiAnbXAtdG9vbGJhcicgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTk1MDFcdTVCOUFcdTYzMDlcdTk0QUVcbiAgICAgICAgdGhpcy5sb2NrQnV0dG9uID0gdG9vbGJhci5jcmVhdGVFbCgnYnV0dG9uJywge1xuICAgICAgICAgICAgY2xzOiAnbXAtbG9jay1idXR0b24nLFxuICAgICAgICAgICAgYXR0cjogeyAnYXJpYS1sYWJlbCc6ICdcdTUxNzNcdTk1RURcdTVCOUVcdTY1RjZcdTk4ODRcdTg5QzhcdTcyQjZcdTYwMDEnIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubG9ja0J1dHRvbi5pbm5lckhUTUwgPSAnXHVEODNEXHVERDEzJztcbiAgICAgICAgdGhpcy5sb2NrQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4gdGhpcy50b2dnbGVQcmV2aWV3TG9jaygpKTtcbiAgICBcbiAgICAgICAgLy8gXHU1MjFCXHU1RUZBXHU0RTJEXHU5NUY0XHU2M0E3XHU0RUY2XHU1QkI5XHU1NjY4XG4gICAgICAgIGNvbnN0IGNvbnRyb2xzR3JvdXAgPSB0b29sYmFyLmNyZWF0ZUVsKCdkaXYnLCB7IGNsczogJ21wLWNvbnRyb2xzLWdyb3VwJyB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1NTIxQlx1NUVGQVx1ODFFQVx1NUI5QVx1NEU0OVx1NEUwQlx1NjJDOVx1OTAwOVx1NjJFOVx1NTY2OFxuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlU2VsZWN0ID0gdGhpcy5jcmVhdGVDdXN0b21TZWxlY3QoXG4gICAgICAgICAgICBjb250cm9sc0dyb3VwLFxuICAgICAgICAgICAgJ21wLXRlbXBsYXRlLXNlbGVjdCcsXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldFRlbXBsYXRlT3B0aW9ucygpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVTZWxlY3QuaWQgPSAndGVtcGxhdGUtc2VsZWN0JztcbiAgICAgICAgXG4gICAgICAgIC8vIFx1NkRGQlx1NTJBMFx1NkEyMVx1Njc3Rlx1OTAwOVx1NjJFOVx1NTY2OFx1NzY4NCBjaGFuZ2UgXHU0RThCXHU0RUY2XHU3NkQxXHU1NDJDXG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVTZWxlY3QucXVlcnlTZWxlY3RvcignLmN1c3RvbS1zZWxlY3QnKT8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgYXN5bmMgKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlLmRldGFpbC52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVNYW5hZ2VyLnNldEN1cnJlbnRUZW1wbGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmdzTWFuYWdlci51cGRhdGVTZXR0aW5ncyh7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGVJZDogdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuYXBwbHlUZW1wbGF0ZSh0aGlzLnByZXZpZXdFbCk7XG4gICAgICAgIH0pO1xuICAgIFxuICAgICAgICB0aGlzLmN1c3RvbUZvbnRTZWxlY3QgPSB0aGlzLmNyZWF0ZUN1c3RvbVNlbGVjdChcbiAgICAgICAgICAgIGNvbnRyb2xzR3JvdXAsXG4gICAgICAgICAgICAnbXAtZm9udC1zZWxlY3QnLFxuICAgICAgICAgICAgdGhpcy5nZXRGb250T3B0aW9ucygpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gXHU2REZCXHU1MkEwXHU1QjU3XHU0RjUzXHU5MDA5XHU2MkU5XHU1NjY4XHU3Njg0IGNoYW5nZSBcdTRFOEJcdTRFRjZcdTc2RDFcdTU0MkNcbiAgICAgICAgdGhpcy5jdXN0b21Gb250U2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJy5jdXN0b20tc2VsZWN0Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGFzeW5jIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZS5kZXRhaWwudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5zZXRGb250KHZhbHVlKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLnVwZGF0ZVNldHRpbmdzKHtcbiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiB2YWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5hcHBseVRlbXBsYXRlKHRoaXMucHJldmlld0VsKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY3VzdG9tRm9udFNlbGVjdC5pZCA9ICdmb250LXNlbGVjdCc7XG4gICAgICAgIC8vIFx1NUI1N1x1NTNGN1x1OEMwM1x1NjU3NFxuICAgICAgICBjb25zdCBmb250U2l6ZUdyb3VwID0gY29udHJvbHNHcm91cC5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICdtcC1mb250LXNpemUtZ3JvdXAnIH0pO1xuICAgICAgICBjb25zdCBkZWNyZWFzZUJ1dHRvbiA9IGZvbnRTaXplR3JvdXAuY3JlYXRlRWwoJ2J1dHRvbicsIHsgXG4gICAgICAgICAgICBjbHM6ICdtcC1mb250LXNpemUtYnRuJyxcbiAgICAgICAgICAgIHRleHQ6ICctJ1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb250U2l6ZVNlbGVjdCA9IGZvbnRTaXplR3JvdXAuY3JlYXRlRWwoJ2lucHV0JywgeyBcbiAgICAgICAgICAgIGNsczogJ21wLWZvbnQtc2l6ZS1pbnB1dCcsXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICB2YWx1ZTogJzE2JyxcbiAgICAgICAgICAgIGF0dHI6IHtcbiAgICAgICAgICAgICAgICBzdHlsZTogJ2JvcmRlcjogbm9uZTsgb3V0bGluZTogbm9uZTsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7J1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW5jcmVhc2VCdXR0b24gPSBmb250U2l6ZUdyb3VwLmNyZWF0ZUVsKCdidXR0b24nLCB7IFxuICAgICAgICAgICAgY2xzOiAnbXAtZm9udC1zaXplLWJ0bicsXG4gICAgICAgICAgICB0ZXh0OiAnKydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU0RUNFXHU4QkJFXHU3RjZFXHU0RTJEXHU2MDYyXHU1OTBEXHU0RTBBXHU2QjIxXHU3Njg0XHU5MDA5XHU2MkU5XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5nc01hbmFnZXIuZ2V0U2V0dGluZ3MoKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1NjA2Mlx1NTkwRFx1OEJCRVx1N0Y2RVxuICAgICAgICBpZiAoc2V0dGluZ3MudGVtcGxhdGVJZCkge1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVTZWxlY3QgPSB0aGlzLmN1c3RvbVRlbXBsYXRlU2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJy5zZWxlY3RlZC10ZXh0Jyk7XG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZURyb3Bkb3duID0gdGhpcy5jdXN0b21UZW1wbGF0ZVNlbGVjdC5xdWVyeVNlbGVjdG9yKCcuc2VsZWN0LWRyb3Bkb3duJyk7XG4gICAgICAgICAgICBpZiAodGVtcGxhdGVTZWxlY3QgJiYgdGVtcGxhdGVEcm9wZG93bikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IGF3YWl0IHRoaXMuZ2V0VGVtcGxhdGVPcHRpb25zKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBvcHRpb24uZmluZChvID0+IG8udmFsdWUgPT09IHNldHRpbmdzLnRlbXBsYXRlSWQpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBcdTY2RjRcdTY1QjBcdTkwMDlcdTRFMkRcdTY1ODdcdTY3MkNcdTU0OENcdTUwM0NcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTZWxlY3QudGV4dENvbnRlbnQgPSBzZWxlY3RlZC5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZVNlbGVjdC5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLXNlbGVjdCcpPy5zZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnLCBzZWxlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFx1NjZGNFx1NjVCMFx1NEUwQlx1NjJDOVx1NTIxN1x1ODg2OFx1NEUyRFx1NzY4NFx1OTAwOVx1NEUyRFx1NzJCNlx1NjAwMVxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZURyb3Bkb3duLnF1ZXJ5U2VsZWN0b3JBbGwoJy5zZWxlY3QtaXRlbScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsLmdldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScpID09PSBzZWxlY3RlZC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVNYW5hZ2VyLnNldEN1cnJlbnRUZW1wbGF0ZShzZXR0aW5ncy50ZW1wbGF0ZUlkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXR0aW5ncy5mb250RmFtaWx5KSB7XG4gICAgICAgICAgICBjb25zdCBmb250U2VsZWN0ID0gdGhpcy5jdXN0b21Gb250U2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJy5zZWxlY3RlZC10ZXh0Jyk7XG4gICAgICAgICAgICBjb25zdCBmb250RHJvcGRvd24gPSB0aGlzLmN1c3RvbUZvbnRTZWxlY3QucXVlcnlTZWxlY3RvcignLnNlbGVjdC1kcm9wZG93bicpO1xuICAgICAgICAgICAgaWYgKGZvbnRTZWxlY3QgJiYgZm9udERyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5nZXRGb250T3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gb3B0aW9uLmZpbmQobyA9PiBvLnZhbHVlID09PSBzZXR0aW5ncy5mb250RmFtaWx5KTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU2NkY0XHU2NUIwXHU5MDA5XHU0RTJEXHU2NTg3XHU2NzJDXHU1NDhDXHU1MDNDXG4gICAgICAgICAgICAgICAgICAgIGZvbnRTZWxlY3QudGV4dENvbnRlbnQgPSBzZWxlY3RlZC5sYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXN0b21Gb250U2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJy5jdXN0b20tc2VsZWN0Jyk/LnNldEF0dHJpYnV0ZSgnZGF0YS12YWx1ZScsIHNlbGVjdGVkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU2NkY0XHU2NUIwXHU0RTBCXHU2MkM5XHU1MjE3XHU4ODY4XHU0RTJEXHU3Njg0XHU5MDA5XHU0RTJEXHU3MkI2XHU2MDAxXG4gICAgICAgICAgICAgICAgICAgIGZvbnREcm9wZG93bi5xdWVyeVNlbGVjdG9yQWxsKCcuc2VsZWN0LWl0ZW0nKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSA9PT0gc2VsZWN0ZWQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5zZXRGb250KHNldHRpbmdzLmZvbnRGYW1pbHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNldHRpbmdzLmZvbnRTaXplKSB7XG4gICAgICAgICAgICB0aGlzLmZvbnRTaXplU2VsZWN0LnZhbHVlID0gc2V0dGluZ3MuZm9udFNpemUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVNYW5hZ2VyLnNldEZvbnRTaXplKHNldHRpbmdzLmZvbnRTaXplKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFx1NjZGNFx1NjVCMFx1NUI1N1x1NTNGN1x1OEMwM1x1NjU3NFx1NEU4Qlx1NEVGNlxuICAgICAgICBjb25zdCB1cGRhdGVGb250U2l6ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSBwYXJzZUludCh0aGlzLmZvbnRTaXplU2VsZWN0LnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVNYW5hZ2VyLnNldEZvbnRTaXplKHNpemUpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5nc01hbmFnZXIudXBkYXRlU2V0dGluZ3Moe1xuICAgICAgICAgICAgICAgIGZvbnRTaXplOiBzaXplXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVNYW5hZ2VyLmFwcGx5VGVtcGxhdGUodGhpcy5wcmV2aWV3RWwpO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFx1NUI1N1x1NTNGN1x1OEMwM1x1NjU3NFx1NjMwOVx1OTRBRVx1NEU4Qlx1NEVGNlxuICAgICAgICBkZWNyZWFzZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaXplID0gcGFyc2VJbnQodGhpcy5mb250U2l6ZVNlbGVjdC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFNpemUgPiAxMikge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9udFNpemVTZWxlY3QudmFsdWUgPSAoY3VycmVudFNpemUgLSAxKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZvbnRTaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGluY3JlYXNlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNpemUgPSBwYXJzZUludCh0aGlzLmZvbnRTaXplU2VsZWN0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2l6ZSA8IDMwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb250U2l6ZVNlbGVjdC52YWx1ZSA9IChjdXJyZW50U2l6ZSArIDEpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgdXBkYXRlRm9udFNpemUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5mb250U2l6ZVNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB1cGRhdGVGb250U2l6ZSk7XG5cbiAgICAgICAgLy8gXHU5ODg0XHU4OUM4XHU1MzNBXHU1N0RGXG4gICAgICAgIHRoaXMucHJldmlld0VsID0gY29udGFpbmVyLmNyZWF0ZUVsKCdkaXYnLCB7IGNsczogJ21wLXByZXZpZXctYXJlYScgfSk7XG5cbiAgICAgICAgLy8gXHU1RTk1XHU5MEU4XHU1REU1XHU1MTc3XHU2ODBGXG4gICAgICAgIGNvbnN0IGJvdHRvbUJhciA9IGNvbnRhaW5lci5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICdtcC1ib3R0b20tYmFyJyB9KTtcblxuICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTRGN0ZcdTc1MjhcdThCRjRcdTY2MEVcdTYzMDlcdTk0QUVcbiAgICAgICAgY29uc3QgaGVscEJ1dHRvbiA9IGJvdHRvbUJhci5jcmVhdGVFbCgnYnV0dG9uJywge1xuICAgICAgICAgICAgY2xzOiAnbXAtaGVscC1idXR0b24nLFxuICAgICAgICAgICAgYXR0cjogeyAnYXJpYS1sYWJlbCc6ICdcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTcnIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGhlbHBCdXR0b24uaW5uZXJIVE1MID0gJ1x1Mjc1Myc7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTYzRDBcdTc5M0FcdTY4NDZcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IGJvdHRvbUJhci5jcmVhdGVFbCgnZGl2Jywge1xuICAgICAgICAgICAgY2xzOiAnbXAtaGVscC10b29sdGlwJyxcbiAgICAgICAgICAgIHRleHQ6IGBcdTRGN0ZcdTc1MjhcdTYzMDdcdTUzNTdcdUZGMUFcbiAgICAgICAgICAgICAgICAxLiBcdTkwMDlcdTYyRTlcdTU1OUNcdTZCMjJcdTc2ODRcdTRFM0JcdTk4OThcdTZBMjFcdTY3N0ZcbiAgICAgICAgICAgICAgICAyLiBcdThDMDNcdTY1NzRcdTVCNTdcdTRGNTNcdTU0OENcdTVCNTdcdTUzRjdcbiAgICAgICAgICAgICAgICAzLiBcdTVCOUVcdTY1RjZcdTk4ODRcdTg5QzhcdTY1NDhcdTY3OUNcbiAgICAgICAgICAgICAgICA0LiBcdTcwQjlcdTUxRkJcdTMwMTBcdTU5MERcdTUyMzZcdTYzMDlcdTk0QUVcdTMwMTFcdTUzNzNcdTUzRUZcdTdDOThcdThEMzRcdTUyMzBcdTUxNkNcdTRGMTdcdTUzRjdcbiAgICAgICAgICAgICAgICA1LiBcdTdGMTZcdThGOTFcdTVCOUVcdTY1RjZcdTY3RTVcdTc3MEJcdTY1NDhcdTY3OUNcdUZGMENcdTcwQjlcdUQ4M0RcdUREMTNcdTUxNzNcdTk1RURcdTVCOUVcdTY1RjZcdTUyMzdcdTY1QjBcbiAgICAgICAgICAgICAgICA2LiBcdTU5ODJcdTY3OUNcdTRGNjBcdTU1OUNcdTZCMjJcdThGRDlcdTRFMkFcdTYzRDJcdTRFRjZcdUZGMENcdTZCMjJcdThGQ0VcdTYyNTNcdThENEZgXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTRFMkRcdTk1RjRcdTYzQTdcdTRFRjZcdTVCQjlcdTU2NjhcbiAgICAgICAgY29uc3QgYm90dG9tQ29udHJvbHNHcm91cCA9IGJvdHRvbUJhci5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICdtcC1ib3R0b20tY29udHJvbHMtZ3JvdXAnIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gXHU4QkY3XHU0RjVDXHU4MDA1XHU1NTlEXHU1NDk2XHU1NTYxXHU2MzA5XHU5NEFFXG4gICAgICAgIGNvbnN0IGxpa2VCdXR0b24gPSBib3R0b21Db250cm9sc0dyb3VwLmNyZWF0ZUVsKCdidXR0b24nLCB7IFxuICAgICAgICAgICAgY2xzOiAnbXAtbGlrZS1idXR0b24nXG4gICAgICAgIH0pO1xuICAgICAgICBsaWtlQnV0dG9uLmlubmVySFRNTCA9ICc8c3BhbiBzdHlsZT1cIm1hcmdpbi1yaWdodDogNHB4XCI+XHUyNjE1XHVGRTBGPC9zcGFuPlx1NTU5Q1x1NkIyMlx1NEY1Q1x1ODAwNSc7XG4gICAgICAgIGxpa2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICBEb25hdGVNYW5hZ2VyLnNob3dEb25hdGVNb2RhbCh0aGlzLmNvbnRhaW5lckVsKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1NzI4XHU2M0E3XHU0RUY2XHU1QkI5XHU1NjY4XHU0RTJEXHU1MjFCXHU1RUZBXHU2MzA5XHU5NEFFXG4gICAgICAgIHRoaXMuY29weUJ1dHRvbiA9IGJvdHRvbUNvbnRyb2xzR3JvdXAuY3JlYXRlRWwoJ2J1dHRvbicsIHsgXG4gICAgICAgICAgICB0ZXh0OiAnXHU1OTBEXHU1MjM2XHU0RTNBXHU1MTZDXHU0RjE3XHU1M0Y3XHU2ODNDXHU1RjBGJyxcbiAgICAgICAgICAgIGNsczogJ21wLWNvcHktYnV0dG9uJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBuZXdCdXR0b24gPSBib3R0b21Db250cm9sc0dyb3VwLmNyZWF0ZUVsKCdidXR0b24nLCB7IFxuICAgICAgICAgICAgdGV4dDogJ1x1NjU2Q1x1OEJGN1x1NjcxRlx1NUY4NScsXG4gICAgICAgICAgICBjbHM6ICdtcC1uZXctYnV0dG9uJ1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTU5MERcdTUyMzZcdTYzMDlcdTk0QUVcdTcwQjlcdTUxRkJcdTRFOEJcdTRFRjZcbiAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldmlld0VsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvcHlCdXR0b24uc2V0VGV4dCgnXHU1OTBEXHU1MjM2XHU0RTJELi4uJyk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgQ29weU1hbmFnZXIuY29weVRvQ2xpcGJvYXJkKHRoaXMucHJldmlld0VsKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLnNldFRleHQoJ1x1NTkwRFx1NTIzNlx1NjIxMFx1NTI5RicpO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcHlCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29weUJ1dHRvbi5zZXRUZXh0KCdcdTU5MERcdTUyMzZcdTRFM0FcdTUxNkNcdTRGMTdcdTUzRjdcdTY4M0NcdTVGMEYnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLnNldFRleHQoJ1x1NTkwRFx1NTIzNlx1NTkzMVx1OEQyNScpO1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29weUJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLnNldFRleHQoJ1x1NTkwRFx1NTIzNlx1NEUzQVx1NTE2Q1x1NEYxN1x1NTNGN1x1NjgzQ1x1NUYwRicpO1xuICAgICAgICAgICAgICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NzZEMVx1NTQyQ1x1NjU4N1x1Njg2M1x1NTNEOFx1NTMxNlxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoXG4gICAgICAgICAgICB0aGlzLmFwcC53b3Jrc3BhY2Uub24oJ2ZpbGUtb3BlbicsIHRoaXMub25GaWxlT3Blbi5iaW5kKHRoaXMpKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFx1NzZEMVx1NTQyQ1x1NjU4N1x1Njg2M1x1NTE4NVx1NUJCOVx1NTNEOFx1NTMxNlxuICAgICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQoXG4gICAgICAgICAgICB0aGlzLmFwcC52YXVsdC5vbignbW9kaWZ5JywgdGhpcy5vbkZpbGVNb2RpZnkuYmluZCh0aGlzKSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBcdTY4QzBcdTY3RTVcdTVGNTNcdTUyNERcdTYyNTNcdTVGMDBcdTc2ODRcdTY1ODdcdTRFRjZcbiAgICAgICAgY29uc3QgY3VycmVudEZpbGUgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0QWN0aXZlRmlsZSgpO1xuICAgICAgICBhd2FpdCB0aGlzLm9uRmlsZU9wZW4oY3VycmVudEZpbGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ29udHJvbHNTdGF0ZShlbmFibGVkOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMubG9ja0J1dHRvbi5kaXNhYmxlZCA9ICFlbmFibGVkO1xuICAgICAgICAvLyBcdTY2RjRcdTY1QjBcdTgxRUFcdTVCOUFcdTRFNDlcdTkwMDlcdTYyRTlcdTU2NjhcdTc2ODRcdTc5ODFcdTc1MjhcdTcyQjZcdTYwMDFcbiAgICAgICAgY29uc3QgdGVtcGxhdGVTZWxlY3QgPSB0aGlzLmN1c3RvbVRlbXBsYXRlU2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJy5jdXN0b20tc2VsZWN0Jyk7XG4gICAgICAgIGNvbnN0IGZvbnRTZWxlY3QgPSB0aGlzLmN1c3RvbUZvbnRTZWxlY3QucXVlcnlTZWxlY3RvcignLmN1c3RvbS1zZWxlY3QnKTtcbiAgICAgICAgaWYgKHRlbXBsYXRlU2VsZWN0KSB7XG4gICAgICAgICAgICB0ZW1wbGF0ZVNlbGVjdC5jbGFzc0xpc3QudG9nZ2xlKCdkaXNhYmxlZCcsICFlbmFibGVkKTtcbiAgICAgICAgICAgIC8vIFx1NEY3Rlx1NzUyOHNldEF0dHJpYnV0ZVx1Njc2NVx1OEJCRVx1N0Y2RXN0eWxlXHU1QzVFXHU2MDI3XG4gICAgICAgICAgICB0ZW1wbGF0ZVNlbGVjdC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYHBvaW50ZXItZXZlbnRzOiAke2VuYWJsZWQgPyAnYXV0bycgOiAnbm9uZSd9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvbnRTZWxlY3QpIHtcbiAgICAgICAgICAgIGZvbnRTZWxlY3QuY2xhc3NMaXN0LnRvZ2dsZSgnZGlzYWJsZWQnLCAhZW5hYmxlZCk7XG4gICAgICAgICAgICAvLyBcdTRGN0ZcdTc1MjhzZXRBdHRyaWJ1dGVcdTY3NjVcdThCQkVcdTdGNkVzdHlsZVx1NUM1RVx1NjAyN1xuICAgICAgICAgICAgZm9udFNlbGVjdC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYHBvaW50ZXItZXZlbnRzOiAke2VuYWJsZWQgPyAnYXV0bycgOiAnbm9uZSd9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb250U2l6ZVNlbGVjdC5kaXNhYmxlZCA9ICFlbmFibGVkO1xuICAgICAgICB0aGlzLmNvcHlCdXR0b24uZGlzYWJsZWQgPSAhZW5hYmxlZDtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1NkRGQlx1NTJBMFx1NUI1N1x1NTNGN1x1OEMwM1x1ODI4Mlx1NjMwOVx1OTRBRVx1NzY4NFx1NzJCNlx1NjAwMVx1NjNBN1x1NTIzNlxuICAgICAgICBjb25zdCBmb250U2l6ZUJ1dHRvbnMgPSB0aGlzLmNvbnRhaW5lckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5tcC1mb250LXNpemUtYnRuJyk7XG4gICAgICAgIGZvbnRTaXplQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAoYnV0dG9uIGFzIEhUTUxCdXR0b25FbGVtZW50KS5kaXNhYmxlZCA9ICFlbmFibGVkO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBvbkZpbGVPcGVuKGZpbGU6IFRGaWxlIHwgbnVsbCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRGaWxlID0gZmlsZTtcbiAgICAgICAgaWYgKCFmaWxlIHx8IGZpbGUuZXh0ZW5zaW9uICE9PSAnbWQnKSB7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbC5lbXB0eSgpO1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3RWwuY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiAnXHU1M0VBXHU4MEZEXHU5ODg0XHU4OUM4IE1hcmtkb3duIFx1NjU4N1x1NjcyQ1x1NjU4N1x1Njg2MycsXG4gICAgICAgICAgICAgICAgY2xzOiAnbXAtZW1wdHktbWVzc2FnZSdcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb250cm9sc1N0YXRlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlQ29udHJvbHNTdGF0ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1ByZXZpZXdMb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sb2NrQnV0dG9uLmlubmVySFRNTCA9ICdcdUQ4M0RcdUREMTMnO1xuICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVByZXZpZXcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHRvZ2dsZVByZXZpZXdMb2NrKCkge1xuICAgICAgICB0aGlzLmlzUHJldmlld0xvY2tlZCA9ICF0aGlzLmlzUHJldmlld0xvY2tlZDtcbiAgICAgICAgY29uc3QgbG9ja0ljb24gPSB0aGlzLmlzUHJldmlld0xvY2tlZCA/ICdcdUQ4M0RcdUREMTInIDogJ1x1RDgzRFx1REQxMyc7XG4gICAgICAgIGNvbnN0IGxvY2tTdGF0dXMgPSB0aGlzLmlzUHJldmlld0xvY2tlZCA/ICdcdTVGMDBcdTU0MkZcdTVCOUVcdTY1RjZcdTk4ODRcdTg5QzhcdTcyQjZcdTYwMDEnIDogJ1x1NTE3M1x1OTVFRFx1NUI5RVx1NjVGNlx1OTg4NFx1ODlDOFx1NzJCNlx1NjAwMSc7XG4gICAgICAgIHRoaXMubG9ja0J1dHRvbi5pbm5lckhUTUwgPSBsb2NrSWNvbjtcbiAgICAgICAgdGhpcy5sb2NrQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGxvY2tTdGF0dXMpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCF0aGlzLmlzUHJldmlld0xvY2tlZCkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBvbkZpbGVNb2RpZnkoZmlsZTogVEZpbGUpIHtcbiAgICAgICAgaWYgKGZpbGUgPT09IHRoaXMuY3VycmVudEZpbGUgJiYgIXRoaXMuaXNQcmV2aWV3TG9ja2VkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy51cGRhdGVUaW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnVwZGF0ZVRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy51cGRhdGVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUHJldmlldygpO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHVwZGF0ZVByZXZpZXcoKSB7XG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50RmlsZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMucHJldmlld0VsLmVtcHR5KCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5yZWFkKHRoaXMuY3VycmVudEZpbGUpO1xuICAgICAgICBcbiAgICAgICAgLy8gMS4gXHU1MTQ4XHU4RjZDXHU2MzYyIE1hcmtkb3duIFx1NEUzQSBIVE1MXG4gICAgICAgIGF3YWl0IE1hcmtkb3duUmVuZGVyZXIucmVuZGVyTWFya2Rvd24oXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgdGhpcy5wcmV2aWV3RWwsXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGaWxlLnBhdGgsXG4gICAgICAgICAgICB0aGlzXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gMi4gXHU2ODNDXHU1RjBGXHU1MzE2XHU1MTg1XHU1QkI5IChcdTUzRUFcdTU3MjhcdTUxODVcdTVCQjlcdTY2RjRcdTY1QjBcdTY1RjZcdTYyNjdcdTg4NEMpXG4gICAgICAgIE1QQ29udmVydGVyLmZvcm1hdENvbnRlbnQodGhpcy5wcmV2aWV3RWwpO1xuXG4gICAgICAgIC8vIDMuIFx1NUU5NFx1NzUyOFx1NkEyMVx1Njc3Rlx1NjgzN1x1NUYwRlxuICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5hcHBseVRlbXBsYXRlKHRoaXMucHJldmlld0VsKTtcbiAgICB9XG5cbiAgICAvLyBcdTZERkJcdTUyQTBcdTgxRUFcdTVCOUFcdTRFNDlcdTRFMEJcdTYyQzlcdTkwMDlcdTYyRTlcdTU2NjhcdTUyMUJcdTVFRkFcdTY1QjlcdTZDRDVcbiAgICBwcml2YXRlIGNyZWF0ZUN1c3RvbVNlbGVjdChcbiAgICAgICAgcGFyZW50OiBIVE1MRWxlbWVudCxcbiAgICAgICAgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgICAgIG9wdGlvbnM6IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W11cbiAgICApIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gcGFyZW50LmNyZWF0ZUVsKCdkaXYnLCB7IGNsczogJ2N1c3RvbS1zZWxlY3QtY29udGFpbmVyJyB9KTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gY29udGFpbmVyLmNyZWF0ZUVsKCdkaXYnLCB7IGNsczogJ2N1c3RvbS1zZWxlY3QnIH0pO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3QuY3JlYXRlRWwoJ3NwYW4nLCB7IGNsczogJ3NlbGVjdGVkLXRleHQnIH0pO1xuICAgICAgICBjb25zdCBhcnJvdyA9IHNlbGVjdC5jcmVhdGVFbCgnc3BhbicsIHsgY2xzOiAnc2VsZWN0LWFycm93JywgdGV4dDogJ1x1MjVCRScgfSk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBkcm9wZG93biA9IGNvbnRhaW5lci5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICdzZWxlY3QtZHJvcGRvd24nIH0pO1xuICAgICAgICBcbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gZHJvcGRvd24uY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgICAgICAgICAgICBjbHM6ICdzZWxlY3QtaXRlbScsXG4gICAgICAgICAgICAgICAgdGV4dDogb3B0aW9uLmxhYmVsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaXRlbS5kYXRhc2V0LnZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBcdTc5RkJcdTk2NjRcdTUxNzZcdTRFRDZcdTk4NzlcdTc2ODRcdTkwMDlcdTRFMkRcdTcyQjZcdTYwMDFcbiAgICAgICAgICAgICAgICBkcm9wZG93bi5xdWVyeVNlbGVjdG9yQWxsKCcuc2VsZWN0LWl0ZW0nKS5mb3JFYWNoKGVsID0+IFxuICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpKTtcbiAgICAgICAgICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTVGNTNcdTUyNERcdTk4NzlcdTc2ODRcdTkwMDlcdTRFMkRcdTcyQjZcdTYwMDFcbiAgICAgICAgICAgICAgICBpdGVtLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRUZXh0LnRleHRDb250ZW50ID0gb3B0aW9uLmxhYmVsO1xuICAgICAgICAgICAgICAgIHNlbGVjdC5kYXRhc2V0LnZhbHVlID0gb3B0aW9uLnZhbHVlO1xuICAgICAgICAgICAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgICAgICAgICAgICBzZWxlY3QuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiBvcHRpb24udmFsdWUgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1OEJCRVx1N0Y2RVx1OUVEOFx1OEJBNFx1NTAzQ1x1NTQ4Q1x1OTAwOVx1NEUyRFx1NzJCNlx1NjAwMVxuICAgICAgICBpZiAob3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZWxlY3RlZFRleHQudGV4dENvbnRlbnQgPSBvcHRpb25zWzBdLmxhYmVsO1xuICAgICAgICAgICAgc2VsZWN0LmRhdGFzZXQudmFsdWUgPSBvcHRpb25zWzBdLnZhbHVlO1xuICAgICAgICAgICAgZHJvcGRvd24ucXVlcnlTZWxlY3RvcignLnNlbGVjdC1pdGVtJyk/LmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIFx1NzBCOVx1NTFGQlx1NjYzRVx1NzkzQS9cdTk2OTBcdTg1Q0ZcdTRFMEJcdTYyQzlcdTUyMTdcdTg4NjhcbiAgICAgICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBkcm9wZG93bi5jbGFzc0xpc3QudG9nZ2xlKCdzaG93Jyk7XG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gXHU3MEI5XHU1MUZCXHU1MTc2XHU0RUQ2XHU1NzMwXHU2NUI5XHU1MTczXHU5NUVEXHU0RTBCXHU2MkM5XHU1MjE3XHU4ODY4XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LnJlbW92ZSgnc2hvdycpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIHJldHVybiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgLy8gXHU4M0I3XHU1M0Q2XHU2QTIxXHU2NzdGXHU5MDA5XHU5ODc5XG4gICAgcHJpdmF0ZSBhc3luYyBnZXRUZW1wbGF0ZU9wdGlvbnMoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmxvYWRUZW1wbGF0ZXMoKTtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gdGhpcy50ZW1wbGF0ZU1hbmFnZXIuZ2V0QWxsVGVtcGxhdGVzKCk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gdGVtcGxhdGVzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGVtcGxhdGVzLm1hcCh0ID0+ICh7IHZhbHVlOiB0LmlkLCBsYWJlbDogdC5uYW1lIH0pKVxuICAgICAgICAgICAgOiBbeyB2YWx1ZTogJ2RlZmF1bHQnLCBsYWJlbDogJ1x1OUVEOFx1OEJBNFx1NkEyMVx1Njc3RicgfV07XG4gICAgfVxuXG4gICAgLy8gXHU4M0I3XHU1M0Q2XHU1QjU3XHU0RjUzXHU5MDA5XHU5ODc5XG4gICAgcHJpdmF0ZSBnZXRGb250T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHsgXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdPcHRpbWEtUmVndWxhciwgT3B0aW1hLCBQaW5nRmFuZ1NDLWxpZ2h0LCBQaW5nRmFuZ1RDLWxpZ2h0LCBcIlBpbmdGYW5nIFNDXCIsIENhbWJyaWEsIENvY2hpbiwgR2VvcmdpYSwgVGltZXMsIFwiVGltZXMgTmV3IFJvbWFuXCIsIHNlcmlmJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1x1OUVEOFx1OEJBNFx1NUI1N1x1NEY1MydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnU2ltU3VuLCBcIlx1NUI4Qlx1NEY1M1wiLCBzZXJpZicsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdcdTVCOEJcdTRGNTMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1NpbUhlaSwgXCJcdTlFRDFcdTRGNTNcIiwgc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdcdTlFRDFcdTRGNTMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ0thaVRpLCBcIlx1Njk3N1x1NEY1M1wiLCBzZXJpZicsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdcdTY5NzdcdTRGNTMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1wiTWljcm9zb2Z0IFlhSGVpXCIsIFwiXHU1RkFFXHU4RjZGXHU5NkM1XHU5RUQxXCIsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnXHU5NkM1XHU5RUQxJ1xuICAgICAgICAgICAgfVxuICAgICAgICBdO1xuICAgIH1cbn0iLCAiaW1wb3J0IHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5leHBvcnQgY2xhc3MgTVBDb252ZXJ0ZXIge1xuICAgIHByaXZhdGUgc3RhdGljIGFwcDogQXBwO1xuXG4gICAgc3RhdGljIGluaXRpYWxpemUoYXBwOiBBcHApIHtcbiAgICAgICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgfVxuXG4gICAgc3RhdGljIGZvcm1hdENvbnRlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gXHU1MjFCXHU1RUZBXHU4ODY4XHU2ODNDXHU1MzA1XHU4OEY5XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5jcmVhdGVXcmFwcGVyVGFibGUoZWxlbWVudCk7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTU0MDRcdTc5Q0QgTWFya2Rvd24gXHU1MTQzXHU3RDIwXG4gICAgICAgIHRoaXMucHJvY2Vzc0VsZW1lbnRzKHRhYmxlLnF1ZXJ5U2VsZWN0b3IoJ3RkJykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNyZWF0ZVdyYXBwZXJUYWJsZShlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxUYWJsZUVsZW1lbnQge1xuICAgICAgICBjb25zdCB0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RhYmxlJyk7XG4gICAgICAgIGNvbnN0IHRib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGJvZHknKTtcbiAgICAgICAgY29uc3QgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1xuICAgICAgICBjb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7XG5cbiAgICAgICAgdGFibGUuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgIHRhYmxlLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJztcbiAgICAgICAgdGQuc3R5bGUud29yZEJyZWFrID0gJ2JyZWFrLWFsbCc7XG5cbiAgICAgICAgd2hpbGUgKGVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgdGQuYXBwZW5kQ2hpbGQoZWxlbWVudC5maXJzdENoaWxkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyLmFwcGVuZENoaWxkKHRkKTtcbiAgICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQodHIpO1xuICAgICAgICB0YWJsZS5hcHBlbmRDaGlsZCh0Ym9keSk7XG4gICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQodGFibGUpO1xuXG4gICAgICAgIHJldHVybiB0YWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBwcm9jZXNzRWxlbWVudHMoY29udGFpbmVyOiBIVE1MRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFjb250YWluZXIpIHJldHVybjtcblxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTVGM0FcdThDMDNcdTY1ODdcdTY3MkNcbiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3N0cm9uZywgZW0nKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTk0RkVcdTYzQTVcbiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuY29sb3IgPSAnIzU3NmI5NSc7XG4gICAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLnRleHREZWNvcmF0aW9uID0gJ25vbmUnO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTg4NjhcdTY4M0NcbiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RhYmxlJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBpZiAoZWwgPT09IGNvbnRhaW5lci5jbG9zZXN0KCd0YWJsZScpKSByZXR1cm47XG4gICAgICAgICAgICAoZWwgYXMgSFRNTFRhYmxlRWxlbWVudCkuc3R5bGUuYm9yZGVyQ29sbGFwc2UgPSAnY29sbGFwc2UnO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxUYWJsZUVsZW1lbnQpLnN0eWxlLm1hcmdpbiA9ICcxZW0gMCc7XG4gICAgICAgICAgICAoZWwgYXMgSFRNTFRhYmxlRWxlbWVudCkuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NTkwNFx1NzQwNlx1ODg2OFx1NjgzQ1x1NTM1NVx1NTE0M1x1NjgzQ1xuICAgICAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgndGgsIHRkJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBpZiAoZWwgPT09IGNvbnRhaW5lci5jbG9zZXN0KCd0ZCcpKSByZXR1cm47XG4gICAgICAgICAgICAoZWwgYXMgSFRNTFRhYmxlQ2VsbEVsZW1lbnQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2RmZGZkZic7XG4gICAgICAgICAgICAoZWwgYXMgSFRNTFRhYmxlQ2VsbEVsZW1lbnQpLnN0eWxlLnBhZGRpbmcgPSAnOHB4JztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU1MjA2XHU1MjcyXHU3RUJGXG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdocicpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7XG4gICAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmJvcmRlclRvcCA9ICcxcHggc29saWQgI2RmZGZkZic7XG4gICAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLm1hcmdpbiA9ICcyMHB4IDAnO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTUyMjBcdTk2NjRcdTdFQkZcbiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RlbCcpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdsaW5lLXRocm91Z2gnO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTRFRkJcdTUyQTFcdTUyMTdcdTg4NjhcbiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy50YXNrLWxpc3QtaXRlbScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5saXN0U3R5bGUgPSAnbm9uZSc7XG4gICAgICAgICAgICBjb25zdCBjaGVja2JveCA9IGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpO1xuICAgICAgICAgICAgaWYgKGNoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgKGNoZWNrYm94IGFzIEhUTUxFbGVtZW50KS5zdHlsZS5tYXJnaW5SaWdodCA9ICc2cHgnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTgxMUFcdTZDRThcbiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJy5mb290bm90ZS1yZWYsIC5mb290bm90ZS1iYWNrcmVmJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmNvbG9yID0gJyM1NzZiOTUnO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdub25lJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU0RUUzXHU3ODAxXHU1NzU3XG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdwcmUgY29kZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJlID0gZWwucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGlmIChwcmUpIHtcbiAgICAgICAgICAgICAgICAvLyBcdTZERkJcdTUyQTAgbWFjT1MgXHU5OENFXHU2ODNDXHU3Njg0XHU3QTk3XHU1M0UzXHU2MzA5XHU5NEFFXG4gICAgICAgICAgICAgICAgY29uc3QgZG90cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGRvdHMuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA4cHggMCAxMnB4IDA7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICAgICAgICAgIGdhcDogNnB4O1xuICAgICAgICAgICAgICAgIGA7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb2xvcnMgPSBbJyNmZjVmNTYnLCAnI2ZmYmQyZScsICcjMjdjOTNmJ107XG4gICAgICAgICAgICAgICAgY29sb3JzLmZvckVhY2goY29sb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIGRvdC5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDEycHg7XG4gICAgICAgICAgICAgICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2NvbG9yfTtcbiAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICAgICAgZG90cy5hcHBlbmRDaGlsZChkb3QpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gXHU1QzA2XHU3RUEyXHU3RUZGXHU3MDZGXHU2M0QyXHU1MTY1XHU1MjMwXHU0RUUzXHU3ODAxXHU1NzU3XHU3Njg0XHU2NzAwXHU1MjREXHU5NzYyXG4gICAgICAgICAgICAgICAgcHJlLmluc2VydEJlZm9yZShkb3RzLCBwcmUuZmlyc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgcHJlLnN0eWxlLnBhZGRpbmdUb3AgPSAnMzJweCc7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gXHU3OUZCXHU5NjY0XHU1MzlGXHU2NzA5XHU3Njg0XHU1OTBEXHU1MjM2XHU2MzA5XHU5NEFFXG4gICAgICAgICAgICAgICAgY29uc3QgY29weUJ1dHRvbiA9IHByZS5xdWVyeVNlbGVjdG9yKCcuY29weS1jb2RlLWJ1dHRvbicpO1xuICAgICAgICAgICAgICAgIGlmIChjb3B5QnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlCdXR0b24ucmVtb3ZlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTU2RkVcdTcyNDdcbiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3NwYW4uaW50ZXJuYWwtZW1iZWRbYWx0XVtzcmNdJykuZm9yRWFjaChhc3luYyBlbCA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFNwYW4gPSBlbCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHNyYyA9IG9yaWdpbmFsU3Bhbi5nZXRBdHRyaWJ1dGUoJ3NyYycpO1xuICAgICAgICAgICAgY29uc3QgYWx0ID0gb3JpZ2luYWxTcGFuLmdldEF0dHJpYnV0ZSgnYWx0Jyk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmICghc3JjKSByZXR1cm47XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgLy8gXHU4M0I3XHU1M0Q2XHU2NTg3XHU0RUY2XHU3Njg0XHU1MTQzXHU2NTcwXHU2MzZFXG4gICAgICAgICAgICAgICAgY29uc3QgbGlua3RleHQgPSBzcmMuc3BsaXQoJ3wnKVswXTsgIC8vIFx1NTkwNFx1NzQwNlx1NTNFRlx1ODBGRFx1NUUyNlx1NjcwOVx1NTIyQlx1NTQwRFx1NzY4NFx1OTRGRVx1NjNBNVxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHNyYyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cobGlua3RleHQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KGxpbmt0ZXh0LCAnJyk7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZmlsZSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVQYXRoID0gdGhpcy5hcHAudmF1bHQuYWRhcHRlci5nZXRSZXNvdXJjZVBhdGgoZmlsZS5wYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3SW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XG4gICAgICAgICAgICAgICAgICAgIG5ld0ltZy5zcmMgPSBhYnNvbHV0ZVBhdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhbHQpIG5ld0ltZy5hbHQgPSBhbHQ7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTY4MzdcdTVGMEZcbiAgICAgICAgICAgICAgICAgICAgbmV3SW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xuICAgICAgICAgICAgICAgICAgICBuZXdJbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xuICAgICAgICAgICAgICAgICAgICBuZXdJbWcuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIG5ld0ltZy5zdHlsZS5tYXJnaW4gPSAnMWVtIGF1dG8nO1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU3NkY0XHU2M0E1XHU2NkZGXHU2MzYyIHNwYW4gXHU1MTQzXHU3RDIwXHVGRjBDXHU0RkREXHU3NTU5XHU2QkI1XHU4NDNEXHU0RTJEXHU3Njg0XHU1MTc2XHU0RUQ2XHU1MTg1XHU1QkI5XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsU3Bhbi5wYXJlbnROb2RlPy5yZXBsYWNlQ2hpbGQobmV3SW1nLCBvcmlnaW5hbFNwYW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignXHU1NkZFXHU3MjQ3XHU1OTA0XHU3NDA2XHU1OTMxXHU4RDI1OicsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU1RjE1XHU3NTI4XHU1NzU3XG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdibG9ja3F1b3RlJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAvLyBcdTZFMDVcdTc0MDZcdTVGMTVcdTc1MjhcdTU3NTdcdTUxODVcdTkwRThcdTZCQjVcdTg0M0RcdTc2ODRcdTY4MzdcdTVGMEZcbiAgICAgICAgICAgIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3AnKS5mb3JFYWNoKHAgPT4ge1xuICAgICAgICAgICAgICAgIHAuc3R5bGUubWFyZ2luID0gJzAnO1xuICAgICAgICAgICAgICAgIHAuc3R5bGUucGFkZGluZyA9ICcwJztcbiAgICAgICAgICAgICAgICBwLnN0eWxlLmxpbmVIZWlnaHQgPSAnaW5oZXJpdCc7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufSIsICJpbXBvcnQgeyBOb3RpY2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmV4cG9ydCBjbGFzcyBDb3B5TWFuYWdlciB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgY2xlYW51cEh0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgLy8gXHU1MjFCXHU1RUZBXHU0RTAwXHU0RTJBXHU0RTM0XHU2NUY2XHU3Njg0IGRpdiBcdTUxNDNcdTdEMjBcdTY3NjVcdTU5MDRcdTc0MDYgSFRNTFxuICAgICAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRlbXBEaXYuaW5uZXJIVE1MID0gaHRtbDtcblxuICAgICAgICAvLyBcdTc5RkJcdTk2NjRcdTYyNDBcdTY3MDlcdTc2ODQgZGF0YS0qIFx1NUM1RVx1NjAyN1xuICAgICAgICB0ZW1wRGl2LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lLnN0YXJ0c1dpdGgoJ2RhdGEtJykpIHtcbiAgICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NzlGQlx1OTY2NFx1NjI0MFx1NjcwOVx1NzY4NCBjbGFzcyBcdTVDNUVcdTYwMjdcbiAgICAgICAgdGVtcERpdi5xdWVyeVNlbGVjdG9yQWxsKCcqJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NzlGQlx1OTY2NFx1NjI0MFx1NjcwOVx1NzY4NCBpZCBcdTVDNUVcdTYwMjdcbiAgICAgICAgdGVtcERpdi5xdWVyeVNlbGVjdG9yQWxsKCcqJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0ZW1wRGl2LmlubmVySFRNTDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBhc3luYyBwcm9jZXNzSW1hZ2VzKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgaW1hZ2VzID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xuICAgICAgICBjb25zdCBpbWFnZUFycmF5ID0gQXJyYXkuZnJvbShpbWFnZXMpO1xuICAgICAgICBcbiAgICAgICAgZm9yIChjb25zdCBpbWcgb2YgaW1hZ2VBcnJheSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGltZy5zcmMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gcmVhZGVyLnJlc3VsdCBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoYmxvYik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1x1NTZGRVx1NzI0N1x1OEY2Q1x1NjM2Mlx1NTkzMVx1OEQyNTonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGFzeW5jIGNvcHlUb0NsaXBib2FyZChlbGVtZW50OiBIVE1MRWxlbWVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAnLTk5OTlweCc7XG4gICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gZWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlbGVtZW50LmlubmVySFRNTCk7XG4gICAgICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTU2RkVcdTcyNDdcdThGNkNcdTYzNjJcdTRFM0EgYmFzZTY0XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NJbWFnZXMoY29udGFpbmVyKTtcblxuICAgICAgICAgICAgLy8gXHU2RTA1XHU3NDA2IEhUTUxcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuSHRtbCA9IHRoaXMuY2xlYW51cEh0bWwoY29udGFpbmVyLmlubmVySFRNTCk7XG5cbiAgICAgICAgICAgIC8vIFx1NTIxQlx1NUVGQVx1NTI2QVx1OEQzNFx1Njc3Rlx1NjU3MFx1NjM2RVxuICAgICAgICAgICAgY29uc3QgY2xpcERhdGEgPSBuZXcgQ2xpcGJvYXJkSXRlbSh7XG4gICAgICAgICAgICAgICAgJ3RleHQvaHRtbCc6IG5ldyBCbG9iKFtjbGVhbkh0bWxdLCB7IHR5cGU6ICd0ZXh0L2h0bWwnIH0pLFxuICAgICAgICAgICAgICAgICd0ZXh0L3BsYWluJzogbmV3IEJsb2IoW2NvbnRhaW5lci50ZXh0Q29udGVudCB8fCAnJ10sIHsgdHlwZTogJ3RleHQvcGxhaW4nIH0pXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZShbY2xpcERhdGFdKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbmV3IE5vdGljZSgnXHU1REYyXHU1OTBEXHU1MjM2XHU1MjMwXHU1MjZBXHU4RDM0XHU2NzdGJyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBuZXcgTm90aWNlKCdcdTU5MERcdTUyMzZcdTU5MzFcdThEMjUnKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCAiZXhwb3J0IGNsYXNzIERvbmF0ZU1hbmFnZXIge1xuICAgIHByaXZhdGUgc3RhdGljIG92ZXJsYXk6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgc3RhdGljIG1vZGFsOiBIVE1MRWxlbWVudDtcblxuICAgIHB1YmxpYyBzdGF0aWMgc2hvd0RvbmF0ZU1vZGFsKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5ID0gY29udGFpbmVyLmNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICAgICAgICBjbHM6ICdtcC1kb25hdGUtb3ZlcmxheSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tb2RhbCA9IHRoaXMub3ZlcmxheS5jcmVhdGVFbCgnZGl2Jywge1xuICAgICAgICAgICAgY2xzOiAnbXAtZG9uYXRlLW1vZGFsJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjbG9zZUJ1dHRvbiA9IHRoaXMubW9kYWwuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgICAgICAgIGNsczogJ21wLWRvbmF0ZS1jbG9zZScsXG4gICAgICAgICAgICB0ZXh0OiAnXHUwMEQ3J1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm1vZGFsLmNyZWF0ZUVsKCdoMycsIHtcbiAgICAgICAgICAgIHRleHQ6ICdcdTUxNzNcdTZDRThcdTRGNUNcdTgwMDUnLFxuICAgICAgICAgICAgY2xzOiAnbXAtZG9uYXRlLXRpdGxlJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5tb2RhbC5jcmVhdGVFbCgnZGl2Jywge1xuICAgICAgICAgICAgY2xzOiAnbXAtZG9uYXRlLWNvbnRlbnQnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NkRGQlx1NTJBMFx1NkUyOVx1OTlBOFx1NjNEMFx1NzkzQVxuICAgICAgICBjb250ZW50LmNyZWF0ZUVsKCdwJywge1xuICAgICAgICAgICAgdGV4dDogJ1x1NTk4Mlx1Njc5Q1x1NEY2MFx1NTU5Q1x1NkIyMlx1OEZEOVx1NEUyQVx1NjNEMlx1NEVGNlx1RkYwQ1x1NkIyMlx1OEZDRVx1NTE3M1x1NkNFOFx1NjIxMVx1NzY4NFx1NTE2Q1x1NEYxN1x1NTNGNyBcdTI3NjRcdUZFMEYnLFxuICAgICAgICAgICAgY2xzOiAnbXAtZG9uYXRlLWRlc2MnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NTIxQlx1NUVGQVx1NEU4Q1x1N0VGNFx1NzgwMVx1NjYzRVx1NzkzQVx1NTMzQVx1NTdERlxuICAgICAgICBjb25zdCBxckNvbnRhaW5lciA9IGNvbnRlbnQuY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgICAgICAgIGNsczogJ21wLWRvbmF0ZS1xci1jb250YWluZXInXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHFyQ29kZSA9IHFyQ29udGFpbmVyLmNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICAgICAgICBjbHM6ICdtcC1kb25hdGUtcXIgYWN0aXZlJ1xuICAgICAgICB9KTtcbiAgICAgICAgcXJDb2RlLmNyZWF0ZUVsKCdpbWcnLCB7XG4gICAgICAgICAgICBhdHRyOiB7XG4gICAgICAgICAgICAgICAgc3JjOiAnLi9hc3NldHMvcXJjb2RlLnBuZycsXG4gICAgICAgICAgICAgICAgYWx0OiAnXHU1MTZDXHU0RjE3XHU1M0Y3XHU0RThDXHU3RUY0XHU3ODAxJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTUxNkNcdTRGMTdcdTUzRjdcdTU0MERcdTc5RjBcbiAgICAgICAgY29udGVudC5jcmVhdGVFbCgncCcsIHtcbiAgICAgICAgICAgIHRleHQ6ICdcdTUxNkNcdTRGMTdcdTUzRjdcdUZGMUFcdTU5MUNcdTUzNEEnLFxuICAgICAgICAgICAgY2xzOiAnbXAtZG9uYXRlLWRlc2MnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NkRGQlx1NTJBMFx1NTE3M1x1OTVFRFx1NEU4Qlx1NEVGNlxuICAgICAgICBjbG9zZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMuY2xvc2VEb25hdGVNb2RhbCgpKTtcbiAgICAgICAgdGhpcy5vdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChlLnRhcmdldCA9PT0gdGhpcy5vdmVybGF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZURvbmF0ZU1vZGFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNsb3NlRG9uYXRlTW9kYWwoKSB7XG4gICAgICAgIGlmICh0aGlzLm92ZXJsYXkpIHtcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheS5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCAiaW1wb3J0IHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbnRlcmZhY2UgVGVtcGxhdGUge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHN0eWxlczoge1xuICAgICAgICBjb250YWluZXI6IHN0cmluZztcbiAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIGgxOiBzdHJpbmc7XG4gICAgICAgICAgICBoMjogc3RyaW5nO1xuICAgICAgICAgICAgaDM6IHN0cmluZztcbiAgICAgICAgICAgIGJhc2U6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgcGFyYWdyYXBoOiBzdHJpbmc7XG4gICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogc3RyaW5nO1xuICAgICAgICAgICAgaXRlbTogc3RyaW5nO1xuICAgICAgICAgICAgdGFza0xpc3Q6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgcXVvdGU6IHN0cmluZztcbiAgICAgICAgY29kZToge1xuICAgICAgICAgICAgYmxvY2s6IHN0cmluZztcbiAgICAgICAgICAgIGlubGluZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICBpbWFnZTogc3RyaW5nO1xuICAgICAgICBsaW5rOiBzdHJpbmc7XG4gICAgICAgIGVtcGhhc2lzOiB7XG4gICAgICAgICAgICBzdHJvbmc6IHN0cmluZztcbiAgICAgICAgICAgIGVtOiBzdHJpbmc7XG4gICAgICAgICAgICBkZWw6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgdGFibGU6IHtcbiAgICAgICAgICAgIGNvbnRhaW5lcjogc3RyaW5nO1xuICAgICAgICAgICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgICAgICAgICBjZWxsOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGhyOiBzdHJpbmc7XG4gICAgICAgIGZvb3Rub3RlOiB7XG4gICAgICAgICAgICByZWY6IHN0cmluZztcbiAgICAgICAgICAgIGJhY2tyZWY6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICB9O1xufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVNYW5hZ2VyIHtcbiAgICBwcml2YXRlIHRlbXBsYXRlczogTWFwPHN0cmluZywgVGVtcGxhdGU+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgY3VycmVudFRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgICBwcml2YXRlIGN1cnJlbnRGb250OiBzdHJpbmcgPSAnLWFwcGxlLXN5c3RlbSc7XG4gICAgcHJpdmF0ZSBjdXJyZW50Rm9udFNpemU6IG51bWJlciA9IDE2O1xuICAgIHByaXZhdGUgYXBwOiBBcHA7XG5cbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCkge1xuICAgICAgICB0aGlzLmFwcCA9IGFwcDtcbiAgICAgICAgdGhpcy5sb2FkVGVtcGxhdGVzKCk7IC8vIFx1NTJBMFx1OEY3RFx1NkEyMVx1Njc3RlxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkVGVtcGxhdGVzKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnRGlyID0gdGhpcy5hcHAudmF1bHQuY29uZmlnRGlyO1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzUGF0aCA9IGAke2NvbmZpZ0Rpcn0vcGx1Z2lucy9vYnNpZGlhbi10by1tcC90ZW1wbGF0ZXNgO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBcdTUyQTBcdThGN0RcdTlFRDhcdThCQTRcdTZBMjFcdTY3N0ZcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRUZW1wbGF0ZSA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkKGAke3RlbXBsYXRlc1BhdGh9L2RlZmF1bHQuanNvbmApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMuc2V0KGRlZmF1bHRUZW1wbGF0ZS5pZCwgZGVmYXVsdFRlbXBsYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRlbXBsYXRlID0gZGVmYXVsdFRlbXBsYXRlO1xuXG4gICAgICAgICAgICAvLyBcdTUyQTBcdThGN0RcdTY3ODFcdTdCODBcdTRFM0JcdTk4OThcbiAgICAgICAgICAgIGNvbnN0IG1pbmltYWxUZW1wbGF0ZSA9IEpTT04ucGFyc2UoXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkKGAke3RlbXBsYXRlc1BhdGh9L21pbmltYWwuanNvbmApXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMuc2V0KG1pbmltYWxUZW1wbGF0ZS5pZCwgbWluaW1hbFRlbXBsYXRlKTtcblxuICAgICAgICAgICAgLy8gXHU1MkEwXHU4RjdEXHU0RjE4XHU5NkM1XHU0RTNCXHU5ODk4XG4gICAgICAgICAgICBjb25zdCBlbGVnYW50VGVtcGxhdGUgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChgJHt0ZW1wbGF0ZXNQYXRofS9lbGVnYW50Lmpzb25gKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzLnNldChlbGVnYW50VGVtcGxhdGUuaWQsIGVsZWdhbnRUZW1wbGF0ZSk7XG5cbiAgICAgICAgICAgIC8vIFx1NTJBMFx1OEY3RFx1NkRGMVx1ODI3Mlx1NEUzQlx1OTg5OFxuICAgICAgICAgICAgY29uc3QgZGFya1RlbXBsYXRlID0gSlNPTi5wYXJzZShcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQoYCR7dGVtcGxhdGVzUGF0aH0vZGFyay5qc29uYClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcy5zZXQoZGFya1RlbXBsYXRlLmlkLCBkYXJrVGVtcGxhdGUpO1xuXG4gICAgICAgICAgICAvLyBcdTUyQTBcdThGN0RcdTVCNjZcdTY3MkZcdTRFM0JcdTk4OThcbiAgICAgICAgICAgIGNvbnN0IGFjYWRlbWljVGVtcGxhdGUgPSBKU09OLnBhcnNlKFxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChgJHt0ZW1wbGF0ZXNQYXRofS9hY2FkZW1pYy5qc29uYClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlcy5zZXQoYWNhZGVtaWNUZW1wbGF0ZS5pZCwgYWNhZGVtaWNUZW1wbGF0ZSk7XG4gICAgICAgICAgICBcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1x1NTJBMFx1OEY3RFx1NkEyMVx1Njc3Rlx1NTkzMVx1OEQyNTonLCBlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1x1NjVFMFx1NkNENVx1NTJBMFx1OEY3RFx1NkEyMVx1Njc3Rlx1NjU4N1x1NEVGNicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRlbXBsYXRlKGlkOiBzdHJpbmcpOiBUZW1wbGF0ZSB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlcy5nZXQoaWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDdXJyZW50VGVtcGxhdGUoKTogVGVtcGxhdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGVtcGxhdGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEN1cnJlbnRUZW1wbGF0ZShpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMuZ2V0KGlkKTtcbiAgICAgICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBbGxUZW1wbGF0ZXMoKTogVGVtcGxhdGVbXSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMudGVtcGxhdGVzLnZhbHVlcygpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9udChmb250RmFtaWx5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9udCA9IGZvbnRGYW1pbHk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZvbnRTaXplKHNpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmN1cnJlbnRGb250U2l6ZSA9IHNpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5VGVtcGxhdGUoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3R5bGVzID0gdGhpcy5jdXJyZW50VGVtcGxhdGUuc3R5bGVzO1xuICAgICAgICBjb25zdCB0YWJsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgY29uc3QgdGQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RkJyk7XG4gICAgICAgIFxuICAgICAgICBpZiAoIXRhYmxlIHx8ICF0ZCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NUJCOVx1NTY2OFx1NjgzN1x1NUYwRlx1NTIzMFx1ODg2OFx1NjgzQ1xuICAgICAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVzLmNvbnRhaW5lcik7XG4gICAgICAgIHRhYmxlLnNldEF0dHJpYnV0ZSgnY2VsbHBhZGRpbmcnLCAnMCcpO1xuICAgICAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoJ2NlbGxzcGFjaW5nJywgJzAnKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NTdGQVx1Nzg0MFx1NjgzN1x1NUYwRlx1NTIzMFx1NTM1NVx1NTE0M1x1NjgzQ1xuICAgICAgICB0ZC5zdHlsZS5jc3NUZXh0ID0gYFxuICAgICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgICAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjc7XG4gICAgICAgICAgICBvdmVyZmxvdy13cmFwOiBicmVhay13b3JkO1xuICAgICAgICAgICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9O1xuICAgICAgICBgO1xuICAgICAgICBcbiAgICAgICAgLy8gXHU1RTk0XHU3NTI4XHU2ODA3XHU5ODk4XHU2ODM3XHU1RjBGXG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2gxJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLnRpdGxlLmgxfTsgZm9udC1mYW1pbHk6ICR7dGhpcy5jdXJyZW50Rm9udH07YCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdoMicpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy50aXRsZS5oMn07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9O2ApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnaDMnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMudGl0bGUuaDN9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTtgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2g0LCBoNSwgaDYnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMudGl0bGUuYmFzZX07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9O2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTZCQjVcdTg0M0RcdTY4MzdcdTVGMEZcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgncCcpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgLy8gXHU2OEMwXHU2N0U1XHU2NjJGXHU1NDI2XHU0RTNBXHU2NzAwXHU1OTE2XHU1QzQyXHU2QkI1XHU4NDNEXG4gICAgICAgICAgICBpZiAoIWVsLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ3AnKSAmJiAhZWwucGFyZW50RWxlbWVudD8uY2xvc2VzdCgnYmxvY2txdW90ZScpKSB7XG4gICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5wYXJhZ3JhcGh9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTsgZm9udC1zaXplOiAke3RoaXMuY3VycmVudEZvbnRTaXplfXB4O2ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTUyMTdcdTg4NjhcdTY4MzdcdTVGMEZcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgndWwsIG9sJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVzLmxpc3QuY29udGFpbmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLmxpc3QuaXRlbX07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9OyBmb250LXNpemU6ICR7dGhpcy5jdXJyZW50Rm9udFNpemV9cHg7YCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCcudGFzay1saXN0LWl0ZW0nKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMubGlzdC50YXNrTGlzdH07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9OyBmb250LXNpemU6ICR7dGhpcy5jdXJyZW50Rm9udFNpemV9cHg7YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NUYxNVx1NzUyOFx1NjgzN1x1NUYwRlxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdibG9ja3F1b3RlJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLnF1b3RlfTsgZm9udC1mYW1pbHk6ICR7dGhpcy5jdXJyZW50Rm9udH07IGZvbnQtc2l6ZTogJHt0aGlzLmN1cnJlbnRGb250U2l6ZX1weDtgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1RTk0XHU3NTI4XHU0RUUzXHU3ODAxXHU2ODM3XHU1RjBGXG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5jb2RlLmJsb2NrfTsgZm9udC1zaXplOiAke3RoaXMuY3VycmVudEZvbnRTaXplfXB4O2ApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnY29kZTpub3QocHJlIGNvZGUpJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLmNvZGUuaW5saW5lfTsgZm9udC1zaXplOiAke3RoaXMuY3VycmVudEZvbnRTaXplfXB4O2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTk0RkVcdTYzQTVcdTY4MzdcdTVGMEZcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnYScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlcy5saW5rKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1RTk0XHU3NTI4XHU1RjNBXHU4QzAzXHU2ODM3XHU1RjBGXG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ3N0cm9uZycpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlcy5lbXBoYXNpcy5zdHJvbmcpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnZW0nKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZXMuZW1waGFzaXMuZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnZGVsJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVzLmVtcGhhc2lzLmRlbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1ODg2OFx1NjgzQ1x1NjgzN1x1NUYwRlxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgaWYgKGVsID09PSB0YWJsZSkgcmV0dXJuOyAvLyBcdThERjNcdThGQzdcdTUzMDVcdTg4RjlcdTg4NjhcdTY4M0NcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZXMudGFibGUuY29udGFpbmVyKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLnRhYmxlLmhlYWRlcn07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9OyBmb250LXNpemU6ICR7dGhpcy5jdXJyZW50Rm9udFNpemV9cHg7YCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgaWYgKGVsID09PSB0ZCkgcmV0dXJuOyAvLyBcdThERjNcdThGQzdcdTUzMDVcdTg4RjlcdTUzNTVcdTUxNDNcdTY4M0NcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMudGFibGUuY2VsbH07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9OyBmb250LXNpemU6ICR7dGhpcy5jdXJyZW50Rm9udFNpemV9cHg7YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NTIwNlx1NTI3Mlx1N0VCRlx1NjgzN1x1NUYwRlxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdocicpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlcy5ocik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1ODExQVx1NkNFOFx1NjgzN1x1NUYwRlxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9vdG5vdGUtcmVmJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVzLmZvb3Rub3RlLnJlZik7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCcuZm9vdG5vdGUtYmFja3JlZicpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlcy5mb290bm90ZS5iYWNrcmVmKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1RTk0XHU3NTI4XHU1NkZFXHU3MjQ3XHU2ODM3XHU1RjBGXG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW1nID0gZWwgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICAgICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NTdGQVx1Nzg0MFx1NjgzN1x1NUYwRlxuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5pbWFnZX07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9O2ApO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBcdTU5ODJcdTY3OUNcdTU2RkVcdTcyNDdcdTY2MkZcdTZCQjVcdTg0M0RcdTRFMkRcdTU1MkZcdTRFMDBcdTc2ODRcdTUxNDNcdTdEMjBcdUZGMENcdTYyNERcdThCQkVcdTdGNkVcdTVDNDVcdTRFMkRcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudCA9IGltZy5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAncCcpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LnN0eWxlLm1hcmdpbiA9ICcxZW0gMCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTY2RjRcdTY1QjBcdTRFRTNcdTc4MDFcdTU3NTdcdTY4MzdcdTVGMEZcdTVFOTRcdTc1MjhcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgncHJlJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLmNvZGUuYmxvY2t9O2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTY2RjRcdTY1QjBcdTVGMTVcdTc1MjhcdTU3NTdcdTY4MzdcdTVGMEZcdTVFOTRcdTc1MjhcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnYmxvY2txdW90ZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5xdW90ZX07YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NjZGNFx1NjVCMFx1NTIxN1x1ODg2OFx1NjgzN1x1NUYwRlx1NUU5NFx1NzUyOFxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCd1bCwgb2wnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMubGlzdC5jb250YWluZXJ9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTtgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2xpJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLmxpc3QuaXRlbX07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9OyBmb250LXNpemU6ICR7dGhpcy5jdXJyZW50Rm9udFNpemV9cHg7YCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRlbXBsYXRlTWFuYWdlciA9IChhcHA6IEFwcCkgPT4gbmV3IFRlbXBsYXRlTWFuYWdlcihhcHApO1xuIiwgImludGVyZmFjZSBNUFNldHRpbmdzIHtcbiAgICB0ZW1wbGF0ZUlkOiBzdHJpbmc7XG4gICAgZm9udEZhbWlseTogc3RyaW5nO1xuICAgIGZvbnRTaXplOiBudW1iZXI7XG59XG5cbmNvbnN0IERFRkFVTFRfU0VUVElOR1M6IE1QU2V0dGluZ3MgPSB7XG4gICAgdGVtcGxhdGVJZDogJ2RlZmF1bHQnLFxuICAgIGZvbnRGYW1pbHk6ICctYXBwbGUtc3lzdGVtJyxcbiAgICBmb250U2l6ZTogMTZcbn07XG5cbmV4cG9ydCBjbGFzcyBTZXR0aW5nc01hbmFnZXIge1xuICAgIHByaXZhdGUgcGx1Z2luOiBhbnk7XG4gICAgcHJpdmF0ZSBzZXR0aW5nczogTVBTZXR0aW5ncztcblxuICAgIGNvbnN0cnVjdG9yKHBsdWdpbjogYW55KSB7XG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gREVGQVVMVF9TRVRUSU5HUztcbiAgICB9XG5cbiAgICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLnBsdWdpbi5sb2FkRGF0YSgpKTtcbiAgICB9XG5cbiAgICBhc3luYyBzYXZlU2V0dGluZ3MoKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICAgIH1cblxuICAgIGdldFNldHRpbmdzKCk6IE1QU2V0dGluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5ncztcbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVTZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxNUFNldHRpbmdzPikge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0geyAuLi50aGlzLnNldHRpbmdzLCAuLi5zZXR0aW5ncyB9O1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVTZXR0aW5ncygpO1xuICAgIH1cbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBQUFBLG1CQUErQjs7O0FDQS9CLElBQUFDLG1CQUFpRTs7O0FDRTFELElBQU0sY0FBTixNQUFrQjtBQUFBLEVBR3JCLE9BQU8sV0FBVyxLQUFVO0FBQ3hCLFNBQUssTUFBTTtBQUFBLEVBQ2Y7QUFBQSxFQUVBLE9BQU8sY0FBYyxTQUE0QjtBQUU3QyxVQUFNLFFBQVEsS0FBSyxtQkFBbUIsT0FBTztBQUc3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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL3RlbXBsYXRlcy9kZWZhdWx0Lmpzb24iLCAic3JjL3RlbXBsYXRlcy9taW5pbWFsLmpzb24iLCAic3JjL3RlbXBsYXRlcy9lbGVnYW50Lmpzb24iLCAic3JjL3RlbXBsYXRlcy9kYXJrLmpzb24iLCAic3JjL3RlbXBsYXRlcy9hY2FkZW1pYy5qc29uIiwgInNyYy9tYWluLnRzIiwgInNyYy92aWV3LnRzIiwgInNyYy9jb252ZXJ0ZXIudHMiLCAic3JjL2NvcHlNYW5hZ2VyLnRzIiwgInNyYy9kb25hdGVNYW5hZ2VyLnRzIiwgInNyYy90ZW1wbGF0ZXMvaW5kZXgudHMiLCAic3JjL3RlbXBsYXRlTWFuYWdlci50cyIsICJzcmMvc2V0dGluZ3MudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIntcbiAgICBcImlkXCI6IFwiZGVmYXVsdFwiLFxuICAgIFwibmFtZVwiOiBcIlx1OUVEOFx1OEJBNFx1NkEyMVx1Njc3RlwiLFxuICAgIFwic3R5bGVzXCI6IHtcbiAgICAgICAgXCJjb250YWluZXJcIjogXCJ3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBib3JkZXI6IG5vbmU7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgbWF4LXdpZHRoOiAxMDB2dztcIixcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgICBcImgxXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMzJweCAwIDI0cHg7IGZvbnQtc2l6ZTogMmVtOyBjb2xvcjogIzJjM2U1MDtcIixcbiAgICAgICAgICAgIFwiaDJcIjogXCJmb250LXdlaWdodDogYm9sZDsgbWFyZ2luOiAyOHB4IDAgMjBweDsgZm9udC1zaXplOiAxLjVlbTsgY29sb3I6ICMzNDQ5NWU7XCIsXG4gICAgICAgICAgICBcImgzXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMjRweCAwIDE2cHg7IGZvbnQtc2l6ZTogMS4yNWVtOyBjb2xvcjogIzNkNTY2ZTtcIixcbiAgICAgICAgICAgIFwiYmFzZVwiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW46IDIwcHggMCAxNHB4OyBmb250LXNpemU6IDFlbTsgY29sb3I6ICM0NzYzN2Y7XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJhZ3JhcGhcIjogXCJsaW5lLWhlaWdodDogMS44OyBtYXJnaW4tYm90dG9tOiAxLjJlbTsgZm9udC1zaXplOiAxZW07IGNvbG9yOiAjNGE0YTRhO1wiLFxuICAgICAgICBcImxpc3RcIjoge1xuICAgICAgICAgICAgXCJjb250YWluZXJcIjogXCJwYWRkaW5nLWxlZnQ6IDIwcHg7IG1hcmdpbi1ib3R0b206IDEuMmVtOyBjb2xvcjogIzRhNGE0YTtcIixcbiAgICAgICAgICAgIFwiaXRlbVwiOiBcIm1hcmdpbi1ib3R0b206IDAuNmVtOyBmb250LXNpemU6IDFlbTsgY29sb3I6ICM0YTRhNGE7IGxpbmUtaGVpZ2h0OiAxLjg7XCIsXG4gICAgICAgICAgICBcInRhc2tMaXN0XCI6IFwibGlzdC1zdHlsZTogbm9uZTsgbWFyZ2luLWxlZnQ6IC0yNHB4OyBmb250LXNpemU6IDFlbTsgY29sb3I6ICM0YTRhNGE7IGxpbmUtaGVpZ2h0OiAxLjg7XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2RlXCI6IHtcbiAgICAgICAgICAgIFwiYmxvY2tcIjogXCJiYWNrZ3JvdW5kOiAjZjhmOGY4OyBwYWRkaW5nOiAwLjVlbSAxZW0gMWVtOyBib3JkZXItcmFkaXVzOiA4cHg7IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6IE9wZXJhdG9yIE1vbm8sIENvbnNvbGFzLCBNb25hY28sIE1lbmxvLCBtb25vc3BhY2U7IGxpbmUtaGVpZ2h0OiAxLjY7IHdoaXRlLXNwYWNlOiBwcmU7IG92ZXJmbG93LXg6IGF1dG87IHdvcmQtd3JhcDogbm9ybWFsOyBjb2xvcjogIzMzMzsgbWFyZ2luOiAxLjJlbSAwOyBib3JkZXI6IDFweCBzb2xpZCAjZWVlOyBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjA1KTsgd2lkdGg6IDEwMCU7XCIsXG4gICAgICAgICAgICBcImlubGluZVwiOiBcImJhY2tncm91bmQ6ICNmOGY4Zjg7IHBhZGRpbmc6IDJweCA2cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6ICMzMzM7IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6IE9wZXJhdG9yIE1vbm8sIENvbnNvbGFzLCBNb25hY28sIE1lbmxvLCBtb25vc3BhY2U7IGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdW90ZVwiOiBcImJvcmRlci1sZWZ0OiA0cHggc29saWQgI2UwZTBlMDsgYm9yZGVyLXJhZGl1czogNnB4OyBwYWRkaW5nOiAxNnB4IDIwcHg7IGJhY2tncm91bmQ6ICNmNmY4ZmE7IG1hcmdpbjogMC44ZW0gMDsgY29sb3I6ICM2YTczN2Q7IGZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC1zaXplOiAxZW07IHdvcmQtd3JhcDogYnJlYWstd29yZDtcIixcbiAgICAgICAgXCJpbWFnZVwiOiBcIm1heC13aWR0aDogMTAwJTsgaGVpZ2h0OiBhdXRvOyBtYXJnaW46IDFlbSBhdXRvOyBkaXNwbGF5OiBibG9jaztcIixcbiAgICAgICAgXCJsaW5rXCI6IFwiY29sb3I6ICNlMGUwZTA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlMGUwZTA7XCIsXG4gICAgICAgIFwiZW1waGFzaXNcIjoge1xuICAgICAgICAgICAgXCJzdHJvbmdcIjogXCJmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICM0YTRhNGE7XCIsXG4gICAgICAgICAgICBcImVtXCI6IFwiZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogIzRhNGE0YTtcIixcbiAgICAgICAgICAgIFwiZGVsXCI6IFwidGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IGNvbG9yOiAjNGE0YTRhO1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGFibGVcIjoge1xuICAgICAgICAgICAgXCJjb250YWluZXJcIjogXCJ3aWR0aDogMTAwJTsgbWFyZ2luOiAxZW0gMDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgYm9yZGVyOiAxcHggc29saWQgI2UxZTRlODtcIixcbiAgICAgICAgICAgIFwiaGVhZGVyXCI6IFwiYmFja2dyb3VuZDogI2Y2ZjhmYTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjNGE0YTRhOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2UxZTRlODsgZm9udC1zaXplOiAxZW07XCIsXG4gICAgICAgICAgICBcImNlbGxcIjogXCJib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwOyBwYWRkaW5nOiA4cHg7IGNvbG9yOiAjNGE0YTRhOyBmb250LXNpemU6IDFlbTtcIlxuICAgICAgICB9LFxuICAgICAgICBcImhyXCI6IFwiYm9yZGVyOiBub25lOyBib3JkZXItdG9wOiAxcHggc29saWQgI2YwZjBmMDsgbWFyZ2luOiAyMHB4IDA7XCIsXG4gICAgICAgIFwiZm9vdG5vdGVcIjoge1xuICAgICAgICAgICAgXCJyZWZcIjogXCJjb2xvcjogI2UwZTBlMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDAuOWVtO1wiLFxuICAgICAgICAgICAgXCJiYWNrcmVmXCI6IFwiY29sb3I6ICNlMGUwZTA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAwLjllbTtcIlxuICAgICAgICB9XG4gICAgfVxufSIsICJ7XG4gICAgXCJpZFwiOiBcIm1pbmltYWxcIixcbiAgICBcIm5hbWVcIjogXCJcdTY3ODFcdTdCODBcdTRFM0JcdTk4OThcIixcbiAgICBcInN0eWxlc1wiOiB7XG4gICAgICAgIFwiY29udGFpbmVyXCI6IFwid2lkdGg6IDEwMCUgIWltcG9ydGFudDsgdGFibGUtbGF5b3V0OiBmaXhlZDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgYm9yZGVyOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IG1heC13aWR0aDogMTAwdnc7XCIsXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgXCJoMVwiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW46IDMycHggMCAyNHB4OyBmb250LXNpemU6IDJlbTsgY29sb3I6ICMzQjQyNTI7IGxldHRlci1zcGFjaW5nOiAtMC4wMmVtO1wiLFxuICAgICAgICAgICAgXCJoMlwiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW46IDI4cHggMCAyMHB4OyBmb250LXNpemU6IDEuNWVtOyBjb2xvcjogIzQzNEM1RTsgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XCIsXG4gICAgICAgICAgICBcImgzXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMjRweCAwIDE2cHg7IGZvbnQtc2l6ZTogMS4yNWVtOyBjb2xvcjogIzRDNTY2QTtcIixcbiAgICAgICAgICAgIFwiYmFzZVwiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW46IDIwcHggMCAxNHB4OyBmb250LXNpemU6IDFlbTsgY29sb3I6ICM1RTgxQUM7XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXJhZ3JhcGhcIjogXCJsaW5lLWhlaWdodDogMS44OyBtYXJnaW4tYm90dG9tOiAxLjJlbTsgZm9udC1zaXplOiAxZW07IGNvbG9yOiAjNGE0YTRhO1wiLFxuICAgICAgICBcImxpc3RcIjoge1xuICAgICAgICAgICAgXCJjb250YWluZXJcIjogXCJwYWRkaW5nLWxlZnQ6IDIwcHg7IG1hcmdpbi1ib3R0b206IDEuMmVtOyBjb2xvcjogIzRhNGE0YTtcIixcbiAgICAgICAgICAgIFwiaXRlbVwiOiBcIm1hcmdpbi1ib3R0b206IDAuNmVtOyBmb250LXNpemU6IDFlbTsgY29sb3I6ICM0YTRhNGE7IGxpbmUtaGVpZ2h0OiAxLjg7XCIsXG4gICAgICAgICAgICBcInRhc2tMaXN0XCI6IFwibGlzdC1zdHlsZTogbm9uZTsgbWFyZ2luLWxlZnQ6IC0yNHB4OyBmb250LXNpemU6IDFlbTsgY29sb3I6ICM0YTRhNGE7IGxpbmUtaGVpZ2h0OiAxLjg7XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb2RlXCI6IHtcbiAgICAgICAgICAgIFwiYmxvY2tcIjogXCJiYWNrZ3JvdW5kOiAjZjhmOGY4OyBwYWRkaW5nOiAwLjVlbSAxZW0gMWVtOyBib3JkZXItcmFkaXVzOiA4cHg7IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6IE9wZXJhdG9yIE1vbm8sIENvbnNvbGFzLCBNb25hY28sIE1lbmxvLCBtb25vc3BhY2U7IGxpbmUtaGVpZ2h0OiAxLjY7IHdoaXRlLXNwYWNlOiBwcmU7IG92ZXJmbG93LXg6IGF1dG87IHdvcmQtd3JhcDogbm9ybWFsOyBjb2xvcjogIzMzMzsgbWFyZ2luOiAxLjJlbSAwOyBib3JkZXI6IDFweCBzb2xpZCAjZWVlOyBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLDAsMCwwLjA1KTsgd2lkdGg6IDEwMCU7XCIsXG4gICAgICAgICAgICBcImlubGluZVwiOiBcImJhY2tncm91bmQ6ICNmOGY4Zjg7IHBhZGRpbmc6IDJweCA2cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgY29sb3I6ICMzMzM7IGZvbnQtc2l6ZTogMTRweDsgZm9udC1mYW1pbHk6IE9wZXJhdG9yIE1vbm8sIENvbnNvbGFzLCBNb25hY28sIE1lbmxvLCBtb25vc3BhY2U7IGJvcmRlcjogMXB4IHNvbGlkICNlZWU7XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJxdW90ZVwiOiBcImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzgxQTFDMTsgYm9yZGVyLXJhZGl1czogNnB4OyBwYWRkaW5nOiAxNnB4IDIwcHg7IGJhY2tncm91bmQ6ICNmOGY5ZmM7IG1hcmdpbjogMC44ZW0gMDsgY29sb3I6ICM0QzU2NkE7IGZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC1zaXplOiAxZW07IHdvcmQtd3JhcDogYnJlYWstd29yZDtcIixcbiAgICAgICAgXCJpbWFnZVwiOiBcIm1heC13aWR0aDogMTAwJTsgaGVpZ2h0OiBhdXRvOyBtYXJnaW46IDFlbSBhdXRvOyBkaXNwbGF5OiBibG9jaztcIixcbiAgICAgICAgXCJsaW5rXCI6IFwiY29sb3I6ICM1RTgxQUM7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4MUExQzE7IHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XCIsXG4gICAgICAgIFwiZW1waGFzaXNcIjoge1xuICAgICAgICAgICAgXCJzdHJvbmdcIjogXCJmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICM0YTRhNGE7XCIsXG4gICAgICAgICAgICBcImVtXCI6IFwiZm9udC1zdHlsZTogaXRhbGljOyBjb2xvcjogIzRhNGE0YTtcIixcbiAgICAgICAgICAgIFwiZGVsXCI6IFwidGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7IGNvbG9yOiAjNGE0YTRhO1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwidGFibGVcIjoge1xuICAgICAgICAgICAgXCJjb250YWluZXJcIjogXCJ3aWR0aDogMTAwJTsgbWFyZ2luOiAxZW0gMDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgYm9yZGVyOiAxcHggc29saWQgI2UxZTRlODtcIixcbiAgICAgICAgICAgIFwiaGVhZGVyXCI6IFwiYmFja2dyb3VuZDogI2Y2ZjhmYTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjNGE0YTRhOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2UxZTRlODsgZm9udC1zaXplOiAxZW07XCIsXG4gICAgICAgICAgICBcImNlbGxcIjogXCJib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwOyBwYWRkaW5nOiA4cHg7IGNvbG9yOiAjNGE0YTRhOyBmb250LXNpemU6IDFlbTtcIlxuICAgICAgICB9LFxuICAgICAgICBcImhyXCI6IFwiYm9yZGVyOiBub25lOyBib3JkZXItdG9wOiAxcHggc29saWQgI2YwZjBmMDsgbWFyZ2luOiAyMHB4IDA7XCIsXG4gICAgICAgIFwiZm9vdG5vdGVcIjoge1xuICAgICAgICAgICAgXCJyZWZcIjogXCJjb2xvcjogI2UwZTBlMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDAuOWVtO1wiLFxuICAgICAgICAgICAgXCJiYWNrcmVmXCI6IFwiY29sb3I6ICNlMGUwZTA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAwLjllbTtcIlxuICAgICAgICB9XG4gICAgfVxufSIsICJ7XG4gICAgXCJpZFwiOiBcImVsZWdhbnRcIixcbiAgICBcIm5hbWVcIjogXCJcdTRGMThcdTk2QzVcdTRFM0JcdTk4OThcIixcbiAgICBcInN0eWxlc1wiOiB7XG4gICAgICAgIFwiY29udGFpbmVyXCI6IFwid2lkdGg6IDEwMCUgIWltcG9ydGFudDsgdGFibGUtbGF5b3V0OiBmaXhlZDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgYm9yZGVyOiBub25lOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IG1heC13aWR0aDogMTAwdnc7XCIsXG4gICAgICAgIFwidGl0bGVcIjoge1xuICAgICAgICAgICAgXCJoMVwiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW46IDMycHggMCAyNHB4OyBmb250LXNpemU6IDJlbTsgY29sb3I6ICM1NTNDOUE7IGxldHRlci1zcGFjaW5nOiAtMC4wM2VtOyBib3JkZXItYm90dG9tOiAycHggc29saWQgIzlGN0FFQTsgcGFkZGluZy1ib3R0b206IDAuM2VtO1wiLFxuICAgICAgICAgICAgXCJoMlwiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW46IDI4cHggMCAyMHB4OyBmb250LXNpemU6IDEuNWVtOyBjb2xvcjogIzZCNDZDMTsgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07IGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzlGN0FFQTsgcGFkZGluZy1sZWZ0OiAxMnB4O1wiLFxuICAgICAgICAgICAgXCJoM1wiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBtYXJnaW46IDI0cHggMCAxNnB4OyBmb250LXNpemU6IDEuMjVlbTsgY29sb3I6ICM4MDVBRDU7IGxldHRlci1zcGFjaW5nOiAtMC4wMWVtO1wiLFxuICAgICAgICAgICAgXCJiYXNlXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMjBweCAwIDE0cHg7IGZvbnQtc2l6ZTogMWVtOyBjb2xvcjogIzlGN0FFQTtcIlxuICAgICAgICB9LFxuICAgICAgICBcInBhcmFncmFwaFwiOiBcImxpbmUtaGVpZ2h0OiAxLjg7IG1hcmdpbi1ib3R0b206IDEuMmVtOyBmb250LXNpemU6IDFlbTsgY29sb3I6ICM0YTRhNGE7XCIsXG4gICAgICAgIFwibGlzdFwiOiB7XG4gICAgICAgICAgICBcImNvbnRhaW5lclwiOiBcInBhZGRpbmctbGVmdDogMjBweDsgbWFyZ2luLWJvdHRvbTogMS4yZW07IGNvbG9yOiAjNGE0YTRhO1wiLFxuICAgICAgICAgICAgXCJpdGVtXCI6IFwibWFyZ2luLWJvdHRvbTogMC42ZW07IGZvbnQtc2l6ZTogMWVtOyBjb2xvcjogIzRhNGE0YTsgbGluZS1oZWlnaHQ6IDEuODtcIixcbiAgICAgICAgICAgIFwidGFza0xpc3RcIjogXCJsaXN0LXN0eWxlOiBub25lOyBtYXJnaW4tbGVmdDogLTI0cHg7IGZvbnQtc2l6ZTogMWVtOyBjb2xvcjogIzRhNGE0YTsgbGluZS1oZWlnaHQ6IDEuODtcIlxuICAgICAgICB9LFxuICAgICAgICBcImNvZGVcIjoge1xuICAgICAgICAgICAgXCJibG9ja1wiOiBcImJhY2tncm91bmQ6ICNmOGY4Zjg7IHBhZGRpbmc6IDAuNWVtIDFlbSAxZW07IGJvcmRlci1yYWRpdXM6IDhweDsgZm9udC1zaXplOiAxNHB4OyBmb250LWZhbWlseTogT3BlcmF0b3IgTW9ubywgQ29uc29sYXMsIE1vbmFjbywgTWVubG8sIG1vbm9zcGFjZTsgbGluZS1oZWlnaHQ6IDEuNjsgd2hpdGUtc3BhY2U6IHByZTsgb3ZlcmZsb3cteDogYXV0bzsgd29yZC13cmFwOiBub3JtYWw7IGNvbG9yOiAjMzMzOyBtYXJnaW46IDEuMmVtIDA7IGJvcmRlcjogMXB4IHNvbGlkICNlZWU7IGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsMCwwLDAuMDUpOyB3aWR0aDogMTAwJTtcIixcbiAgICAgICAgICAgIFwiaW5saW5lXCI6IFwiYmFja2dyb3VuZDogI2Y4ZjhmODsgcGFkZGluZzogMnB4IDZweDsgYm9yZGVyLXJhZGl1czogNHB4OyBjb2xvcjogIzMzMzsgZm9udC1zaXplOiAxNHB4OyBmb250LWZhbWlseTogT3BlcmF0b3IgTW9ubywgQ29uc29sYXMsIE1vbmFjbywgTWVubG8sIG1vbm9zcGFjZTsgYm9yZGVyOiAxcHggc29saWQgI2VlZTtcIlxuICAgICAgICB9LFxuICAgICAgICBcInF1b3RlXCI6IFwiYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjOUY3QUVBOyBib3JkZXItcmFkaXVzOiA2cHg7IHBhZGRpbmc6IDE2cHggMjBweDsgYmFja2dyb3VuZDogI2Y1ZjNmZjsgbWFyZ2luOiAwLjhlbSAwOyBjb2xvcjogIzZCNDZDMTsgZm9udC1zdHlsZTogaXRhbGljOyBmb250LXNpemU6IDFlbTsgd29yZC13cmFwOiBicmVhay13b3JkO1wiLFxuICAgICAgICBcImltYWdlXCI6IFwibWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG87IG1hcmdpbjogMWVtIGF1dG87IGRpc3BsYXk6IGJsb2NrO1wiLFxuICAgICAgICBcImxpbmtcIjogXCJjb2xvcjogIzgwNUFENTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzlGN0FFQTsgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcIixcbiAgICAgICAgXCJlbXBoYXNpc1wiOiB7XG4gICAgICAgICAgICBcInN0cm9uZ1wiOiBcImZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogIzRhNGE0YTtcIixcbiAgICAgICAgICAgIFwiZW1cIjogXCJmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiAjNGE0YTRhO1wiLFxuICAgICAgICAgICAgXCJkZWxcIjogXCJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsgY29sb3I6ICM0YTRhNGE7XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJ0YWJsZVwiOiB7XG4gICAgICAgICAgICBcImNvbnRhaW5lclwiOiBcIndpZHRoOiAxMDAlOyBtYXJnaW46IDFlbSAwOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBib3JkZXI6IDFweCBzb2xpZCAjZTFlNGU4O1wiLFxuICAgICAgICAgICAgXCJoZWFkZXJcIjogXCJiYWNrZ3JvdW5kOiAjZjZmOGZhOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICM0YTRhNGE7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjZTFlNGU4OyBmb250LXNpemU6IDFlbTtcIixcbiAgICAgICAgICAgIFwiY2VsbFwiOiBcImJvcmRlcjogMXB4IHNvbGlkICNmMGYwZjA7IHBhZGRpbmc6IDhweDsgY29sb3I6ICM0YTRhNGE7IGZvbnQtc2l6ZTogMWVtO1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaHJcIjogXCJib3JkZXI6IG5vbmU7IGJvcmRlci10b3A6IDFweCBzb2xpZCAjZjBmMGYwOyBtYXJnaW46IDIwcHggMDtcIixcbiAgICAgICAgXCJmb290bm90ZVwiOiB7XG4gICAgICAgICAgICBcInJlZlwiOiBcImNvbG9yOiAjZTBlMGUwOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMC45ZW07XCIsXG4gICAgICAgICAgICBcImJhY2tyZWZcIjogXCJjb2xvcjogI2UwZTBlMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDAuOWVtO1wiXG4gICAgICAgIH1cbiAgICB9XG59IiwgIntcbiAgICBcImlkXCI6IFwiZGFya1wiLFxuICAgIFwibmFtZVwiOiBcIlx1NkRGMVx1ODI3Mlx1NEUzQlx1OTg5OFwiLFxuICAgIFwic3R5bGVzXCI6IHtcbiAgICAgICAgXCJjb250YWluZXJcIjogXCJ3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBib3JkZXI6IG5vbmU7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgbWF4LXdpZHRoOiAxMDB2dztcIixcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgICBcImgxXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMzJweCAwIDI0cHg7IGZvbnQtc2l6ZTogMmVtOyBjb2xvcjogIzRBOTBFMjsgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNEE5MEUyOyBwYWRkaW5nLWJvdHRvbTogMC4zZW07XCIsXG4gICAgICAgICAgICBcImgyXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMjhweCAwIDIwcHg7IGZvbnQtc2l6ZTogMS41ZW07IGNvbG9yOiAjNUI5QkUwOyBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjNEE5MEUyOyBwYWRkaW5nLWxlZnQ6IDEycHg7XCIsXG4gICAgICAgICAgICBcImgzXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMjRweCAwIDE2cHg7IGZvbnQtc2l6ZTogMS4yNWVtOyBjb2xvcjogIzZCQTVERTsgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XCIsXG4gICAgICAgICAgICBcImJhc2VcIjogXCJmb250LXdlaWdodDogYm9sZDsgbWFyZ2luOiAyMHB4IDAgMTRweDsgZm9udC1zaXplOiAxZW07IGNvbG9yOiAjN0JCMEREO1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFyYWdyYXBoXCI6IFwibGluZS1oZWlnaHQ6IDEuODsgbWFyZ2luLWJvdHRvbTogMS4yZW07IGZvbnQtc2l6ZTogMWVtOyBjb2xvcjogIzRhNGE0YTtcIixcbiAgICAgICAgXCJsaXN0XCI6IHtcbiAgICAgICAgICAgIFwiY29udGFpbmVyXCI6IFwicGFkZGluZy1sZWZ0OiAyMHB4OyBtYXJnaW4tYm90dG9tOiAxLjJlbTsgY29sb3I6ICM0YTRhNGE7XCIsXG4gICAgICAgICAgICBcIml0ZW1cIjogXCJtYXJnaW4tYm90dG9tOiAwLjZlbTsgZm9udC1zaXplOiAxZW07IGNvbG9yOiAjNGE0YTRhOyBsaW5lLWhlaWdodDogMS44O1wiLFxuICAgICAgICAgICAgXCJ0YXNrTGlzdFwiOiBcImxpc3Qtc3R5bGU6IG5vbmU7IG1hcmdpbi1sZWZ0OiAtMjRweDsgZm9udC1zaXplOiAxZW07IGNvbG9yOiAjNGE0YTRhOyBsaW5lLWhlaWdodDogMS44O1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29kZVwiOiB7XG4gICAgICAgICAgICBcImJsb2NrXCI6IFwiYmFja2dyb3VuZDogI2Y4ZjhmODsgcGFkZGluZzogMC41ZW0gMWVtIDFlbTsgYm9yZGVyLXJhZGl1czogOHB4OyBmb250LXNpemU6IDE0cHg7IGZvbnQtZmFtaWx5OiBPcGVyYXRvciBNb25vLCBDb25zb2xhcywgTW9uYWNvLCBNZW5sbywgbW9ub3NwYWNlOyBsaW5lLWhlaWdodDogMS42OyB3aGl0ZS1zcGFjZTogcHJlOyBvdmVyZmxvdy14OiBhdXRvOyB3b3JkLXdyYXA6IG5vcm1hbDsgY29sb3I6ICMzMzM7IG1hcmdpbjogMS4yZW0gMDsgYm9yZGVyOiAxcHggc29saWQgI2VlZTsgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwwLDAsMC4wNSk7IHdpZHRoOiAxMDAlO1wiLFxuICAgICAgICAgICAgXCJpbmxpbmVcIjogXCJiYWNrZ3JvdW5kOiAjZjhmOGY4OyBwYWRkaW5nOiAycHggNnB4OyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiAjMzMzOyBmb250LXNpemU6IDE0cHg7IGZvbnQtZmFtaWx5OiBPcGVyYXRvciBNb25vLCBDb25zb2xhcywgTW9uYWNvLCBNZW5sbywgbW9ub3NwYWNlOyBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicXVvdGVcIjogXCJib3JkZXItbGVmdDogNHB4IHNvbGlkICM0QTkwRTI7IGJvcmRlci1yYWRpdXM6IDZweDsgcGFkZGluZzogMTZweCAyMHB4OyBiYWNrZ3JvdW5kOiAjRjVGOUZGOyBtYXJnaW46IDAuOGVtIDA7IGNvbG9yOiAjNEE1NTY4OyBmb250LXN0eWxlOiBpdGFsaWM7IGZvbnQtc2l6ZTogMWVtOyB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XCIsXG4gICAgICAgIFwiaW1hZ2VcIjogXCJtYXgtd2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bzsgbWFyZ2luOiAxZW0gYXV0bzsgZGlzcGxheTogYmxvY2s7XCIsXG4gICAgICAgIFwibGlua1wiOiBcImNvbG9yOiAjNEE5MEUyOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNEE5MEUyOyB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1wiLFxuICAgICAgICBcImVtcGhhc2lzXCI6IHtcbiAgICAgICAgICAgIFwic3Ryb25nXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjNGE0YTRhO1wiLFxuICAgICAgICAgICAgXCJlbVwiOiBcImZvbnQtc3R5bGU6IGl0YWxpYzsgY29sb3I6ICM0YTRhNGE7XCIsXG4gICAgICAgICAgICBcImRlbFwiOiBcInRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOyBjb2xvcjogIzRhNGE0YTtcIlxuICAgICAgICB9LFxuICAgICAgICBcInRhYmxlXCI6IHtcbiAgICAgICAgICAgIFwiY29udGFpbmVyXCI6IFwid2lkdGg6IDEwMCU7IG1hcmdpbjogMWVtIDA7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7IGJvcmRlcjogMXB4IHNvbGlkICNlMWU0ZTg7XCIsXG4gICAgICAgICAgICBcImhlYWRlclwiOiBcImJhY2tncm91bmQ6ICNmNmY4ZmE7IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogIzRhNGE0YTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICNlMWU0ZTg7IGZvbnQtc2l6ZTogMWVtO1wiLFxuICAgICAgICAgICAgXCJjZWxsXCI6IFwiYm9yZGVyOiAxcHggc29saWQgI2YwZjBmMDsgcGFkZGluZzogOHB4OyBjb2xvcjogIzRhNGE0YTsgZm9udC1zaXplOiAxZW07XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJoclwiOiBcImJvcmRlcjogbm9uZTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNmMGYwZjA7IG1hcmdpbjogMjBweCAwO1wiLFxuICAgICAgICBcImZvb3Rub3RlXCI6IHtcbiAgICAgICAgICAgIFwicmVmXCI6IFwiY29sb3I6ICNlMGUwZTA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAwLjllbTtcIixcbiAgICAgICAgICAgIFwiYmFja3JlZlwiOiBcImNvbG9yOiAjZTBlMGUwOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGZvbnQtc2l6ZTogMC45ZW07XCJcbiAgICAgICAgfVxuICAgIH1cbn0iLCAie1xuICAgIFwiaWRcIjogXCJhY2FkZW1pY1wiLFxuICAgIFwibmFtZVwiOiBcIlx1NUI2Nlx1NjcyRlx1NEUzQlx1OTg5OFwiLFxuICAgIFwic3R5bGVzXCI6IHtcbiAgICAgICAgXCJjb250YWluZXJcIjogXCJ3aWR0aDogMTAwJSAhaW1wb3J0YW50OyB0YWJsZS1sYXlvdXQ6IGZpeGVkOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBib3JkZXI6IG5vbmU7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgbWF4LXdpZHRoOiAxMDB2dztcIixcbiAgICAgICAgXCJ0aXRsZVwiOiB7XG4gICAgICAgICAgICBcImgxXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMzJweCAwIDI0cHg7IGZvbnQtc2l6ZTogMmVtOyBjb2xvcjogIzVENDAzNzsgbGV0dGVyLXNwYWNpbmc6IC0wLjAzZW07IGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjOEQ2RTYzOyBwYWRkaW5nLWJvdHRvbTogMC4zZW07XCIsXG4gICAgICAgICAgICBcImgyXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMjhweCAwIDIwcHg7IGZvbnQtc2l6ZTogMS41ZW07IGNvbG9yOiAjNkQ0QzQxOyBsZXR0ZXItc3BhY2luZzogLTAuMDJlbTsgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAjOEQ2RTYzOyBwYWRkaW5nLWxlZnQ6IDEycHg7XCIsXG4gICAgICAgICAgICBcImgzXCI6IFwiZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogMjRweCAwIDE2cHg7IGZvbnQtc2l6ZTogMS4yNWVtOyBjb2xvcjogIzc5NTU0ODsgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07XCIsXG4gICAgICAgICAgICBcImJhc2VcIjogXCJmb250LXdlaWdodDogYm9sZDsgbWFyZ2luOiAyMHB4IDAgMTRweDsgZm9udC1zaXplOiAxZW07IGNvbG9yOiAjOEQ2RTYzO1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwicGFyYWdyYXBoXCI6IFwibGluZS1oZWlnaHQ6IDEuODsgbWFyZ2luLWJvdHRvbTogMS4yZW07IGZvbnQtc2l6ZTogMWVtOyBjb2xvcjogIzRhNGE0YTtcIixcbiAgICAgICAgXCJxdW90ZVwiOiBcImJvcmRlci1sZWZ0OiA0cHggc29saWQgIzhENkU2MzsgYm9yZGVyLXJhZGl1czogNnB4OyBwYWRkaW5nOiAxNnB4IDIwcHg7IGJhY2tncm91bmQ6ICNFRkVCRTk7IG1hcmdpbjogMC44ZW0gMDsgY29sb3I6ICM1RDQwMzc7IGZvbnQtc3R5bGU6IGl0YWxpYzsgZm9udC1zaXplOiAxZW07IHdvcmQtd3JhcDogYnJlYWstd29yZDtcIixcbiAgICAgICAgXCJsaW5rXCI6IFwiY29sb3I6ICM3OTU1NDg7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4RDZFNjM7IHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7XCIsXG4gICAgICAgIFwiZW1waGFzaXNcIjoge1xuICAgICAgICAgICAgXCJzdHJvbmdcIjogXCJmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzRhNGE0YTtcIixcbiAgICAgICAgICAgIFwiZW1cIjogXCJmb250LXN0eWxlOiBpdGFsaWM7IGNvbG9yOiAjNGE0YTRhO1wiLFxuICAgICAgICAgICAgXCJkZWxcIjogXCJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsgY29sb3I6ICM0YTRhNGE7XCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJsaXN0XCI6IHtcbiAgICAgICAgICAgIFwiY29udGFpbmVyXCI6IFwicGFkZGluZy1sZWZ0OiAyMHB4OyBtYXJnaW4tYm90dG9tOiAxLjJlbTsgY29sb3I6ICM0YTRhNGE7XCIsXG4gICAgICAgICAgICBcIml0ZW1cIjogXCJtYXJnaW4tYm90dG9tOiAwLjZlbTsgZm9udC1zaXplOiAxZW07IGNvbG9yOiAjNGE0YTRhOyBsaW5lLWhlaWdodDogMS44O1wiLFxuICAgICAgICAgICAgXCJ0YXNrTGlzdFwiOiBcImxpc3Qtc3R5bGU6IG5vbmU7IG1hcmdpbi1sZWZ0OiAtMjRweDsgZm9udC1zaXplOiAxZW07IGNvbG9yOiAjNGE0YTRhOyBsaW5lLWhlaWdodDogMS44O1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiY29kZVwiOiB7XG4gICAgICAgICAgICBcImJsb2NrXCI6IFwiYmFja2dyb3VuZDogI2Y4ZjhmODsgcGFkZGluZzogMC41ZW0gMWVtIDFlbTsgYm9yZGVyLXJhZGl1czogOHB4OyBmb250LXNpemU6IDE0cHg7IGZvbnQtZmFtaWx5OiBPcGVyYXRvciBNb25vLCBDb25zb2xhcywgTW9uYWNvLCBNZW5sbywgbW9ub3NwYWNlOyBsaW5lLWhlaWdodDogMS42OyB3aGl0ZS1zcGFjZTogcHJlOyBvdmVyZmxvdy14OiBhdXRvOyB3b3JkLXdyYXA6IG5vcm1hbDsgY29sb3I6ICMzMzM7IG1hcmdpbjogMS4yZW0gMDsgYm9yZGVyOiAxcHggc29saWQgI2VlZTsgYm94LXNoYWRvdzogMCAycHggNHB4IHJnYmEoMCwwLDAsMC4wNSk7IHdpZHRoOiAxMDAlO1wiLFxuICAgICAgICAgICAgXCJpbmxpbmVcIjogXCJiYWNrZ3JvdW5kOiAjZjhmOGY4OyBwYWRkaW5nOiAycHggNnB4OyBib3JkZXItcmFkaXVzOiA0cHg7IGNvbG9yOiAjMzMzOyBmb250LXNpemU6IDE0cHg7IGZvbnQtZmFtaWx5OiBPcGVyYXRvciBNb25vLCBDb25zb2xhcywgTW9uYWNvLCBNZW5sbywgbW9ub3NwYWNlOyBib3JkZXI6IDFweCBzb2xpZCAjZWVlO1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiaW1hZ2VcIjogXCJtYXgtd2lkdGg6IDEwMCU7IGhlaWdodDogYXV0bzsgbWFyZ2luOiAxZW0gYXV0bzsgZGlzcGxheTogYmxvY2s7XCIsXG4gICAgICAgIFwidGFibGVcIjoge1xuICAgICAgICAgICAgXCJjb250YWluZXJcIjogXCJ3aWR0aDogMTAwJTsgbWFyZ2luOiAxZW0gMDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgYm9yZGVyOiAxcHggc29saWQgI2UxZTRlODtcIixcbiAgICAgICAgICAgIFwiaGVhZGVyXCI6IFwiYmFja2dyb3VuZDogI2Y2ZjhmYTsgZm9udC13ZWlnaHQ6IGJvbGQ7IGNvbG9yOiAjNGE0YTRhOyBib3JkZXItYm90dG9tOiAycHggc29saWQgI2UxZTRlODsgZm9udC1zaXplOiAxZW07XCIsXG4gICAgICAgICAgICBcImNlbGxcIjogXCJib3JkZXI6IDFweCBzb2xpZCAjZjBmMGYwOyBwYWRkaW5nOiA4cHg7IGNvbG9yOiAjNGE0YTRhOyBmb250LXNpemU6IDFlbTtcIlxuICAgICAgICB9LFxuICAgICAgICBcImhyXCI6IFwiYm9yZGVyOiBub25lOyBib3JkZXItdG9wOiAxcHggc29saWQgI2YwZjBmMDsgbWFyZ2luOiAyMHB4IDA7XCIsXG4gICAgICAgIFwiZm9vdG5vdGVcIjoge1xuICAgICAgICAgICAgXCJyZWZcIjogXCJjb2xvcjogI2UwZTBlMDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyBmb250LXNpemU6IDAuOWVtO1wiLFxuICAgICAgICAgICAgXCJiYWNrcmVmXCI6IFwiY29sb3I6ICNlMGUwZTA7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAwLjllbTtcIlxuICAgICAgICB9XG4gICAgfVxufSIsICJpbXBvcnQgeyBQbHVnaW4sIE5vdGljZSB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IE1QVmlldywgVklFV19UWVBFX01QIH0gZnJvbSAnLi92aWV3JztcbmltcG9ydCB7IFRlbXBsYXRlTWFuYWdlciB9IGZyb20gJy4vdGVtcGxhdGVNYW5hZ2VyJztcbmltcG9ydCB7IFNldHRpbmdzTWFuYWdlciB9IGZyb20gJy4vc2V0dGluZ3MnO1xuaW1wb3J0IHsgTVBDb252ZXJ0ZXIgfSBmcm9tICcuL2NvbnZlcnRlcic7XG5pbXBvcnQgeyBEb25hdGVNYW5hZ2VyIH0gZnJvbSAnLi9kb25hdGVNYW5hZ2VyJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1QUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHtcbiAgICBwcml2YXRlIHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xuXG4gICAgYXN5bmMgb25sb2FkKCkge1xuICAgICAgICAvLyBcdTUyMURcdTU5Q0JcdTUzMTZcdThCQkVcdTdGNkVcdTdCQTFcdTc0MDZcdTU2NjhcbiAgICAgICAgdGhpcy5zZXR0aW5nc01hbmFnZXIgPSBuZXcgU2V0dGluZ3NNYW5hZ2VyKHRoaXMpO1xuICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmdzTWFuYWdlci5sb2FkU2V0dGluZ3MoKTtcblxuICAgICAgICAvLyBcdTUyMURcdTU5Q0JcdTUzMTZcdTZBMjFcdTY3N0ZcdTdCQTFcdTc0MDZcdTU2NjhcbiAgICAgICAgY29uc3QgdGVtcGxhdGVNYW5hZ2VyID0gbmV3IFRlbXBsYXRlTWFuYWdlcih0aGlzLmFwcCk7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTUyMURcdTU5Q0JcdTUzMTZcdThGNkNcdTYzNjJcdTU2NjhcbiAgICAgICAgTVBDb252ZXJ0ZXIuaW5pdGlhbGl6ZSh0aGlzLmFwcCk7XG5cbiAgICAgICAgLy8gXHU2Q0U4XHU1MThDXHU4OUM2XHU1NkZFXG4gICAgICAgIHRoaXMucmVnaXN0ZXJWaWV3KFxuICAgICAgICAgICAgVklFV19UWVBFX01QLFxuICAgICAgICAgICAgKGxlYWYpID0+IG5ldyBNUFZpZXcobGVhZiwgdGVtcGxhdGVNYW5hZ2VyLCB0aGlzLnNldHRpbmdzTWFuYWdlcilcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTU0N0RcdTRFRTRcdTUyMzBcdTU0N0RcdTRFRTRcdTk3NjJcdTY3N0ZcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtcbiAgICAgICAgICAgIGlkOiAnb3Blbi1tcC1wcmV2aWV3JyxcbiAgICAgICAgICAgIG5hbWU6ICdcdTYyNTNcdTVGMDBcdTUxNkNcdTRGMTdcdTUzRjdcdTk4ODRcdTg5QzhcdTYzRDJcdTRFRjYnLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2YXRlVmlldygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTYzRDJcdTRFRjZcdTUyQTBcdThGN0RcdTY1RjZcdTgxRUFcdTUyQThcdTZGQzBcdTZEM0JcdTg5QzZcdTU2RkVcbiAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZVZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIE1QQ29udmVydGVyLmluaXRpYWxpemUodGhpcy5hcHApO1xuICAgIH1cblxuICAgIGFzeW5jIG9udW5sb2FkKCkge1xuICAgICAgICAvLyBcdTZFMDVcdTc0MDZcdTg5QzZcdTU2RkVcbiAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLmRldGFjaExlYXZlc09mVHlwZShWSUVXX1RZUEVfTVApO1xuICAgIH1cbiAgICBcbiAgICBhc3luYyBhY3RpdmF0ZVZpZXcoKSB7XG4gICAgICAgIC8vIFx1NTk4Mlx1Njc5Q1x1ODlDNlx1NTZGRVx1NURGMlx1N0VDRlx1NUI1OFx1NTcyOFx1RkYwQ1x1NkZDMFx1NkQzQlx1NUI4M1xuICAgICAgICBjb25zdCBsZWF2ZXMgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0TGVhdmVzT2ZUeXBlKFZJRVdfVFlQRV9NUCk7XG4gICAgICAgIGlmIChsZWF2ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLnJldmVhbExlYWYobGVhdmVzWzBdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFx1NTIxQlx1NUVGQVx1NjVCMFx1ODlDNlx1NTZGRVxuICAgICAgICBjb25zdCByaWdodExlYWYgPSB0aGlzLmFwcC53b3Jrc3BhY2UuZ2V0UmlnaHRMZWFmKGZhbHNlKTtcbiAgICAgICAgaWYgKHJpZ2h0TGVhZikge1xuICAgICAgICAgICAgYXdhaXQgcmlnaHRMZWFmLnNldFZpZXdTdGF0ZSh7XG4gICAgICAgICAgICAgICAgdHlwZTogVklFV19UWVBFX01QLFxuICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gXHU1OTgyXHU2NzlDXHU2NUUwXHU2Q0Q1XHU4M0I3XHU1M0Q2XHU1M0YzXHU0RkE3XHU5NzYyXHU2NzdGXHVGRjBDXHU2NjNFXHU3OTNBXHU5NTE5XHU4QkVGXHU2M0QwXHU3OTNBXG4gICAgICAgICAgICBuZXcgTm90aWNlKCdcdTY1RTBcdTZDRDVcdTUyMUJcdTVFRkFcdTg5QzZcdTU2RkVcdTk3NjJcdTY3N0YnKTtcbiAgICAgICAgfVxuICAgIH1cbn0iLCAiaW1wb3J0IHsgSXRlbVZpZXcsIFdvcmtzcGFjZUxlYWYsIE1hcmtkb3duUmVuZGVyZXIsIFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHsgTVBDb252ZXJ0ZXIgfSBmcm9tICcuL2NvbnZlcnRlcic7XG5pbXBvcnQgeyBDb3B5TWFuYWdlciB9IGZyb20gJy4vY29weU1hbmFnZXInO1xuaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZU1hbmFnZXIgfSBmcm9tICcuL3RlbXBsYXRlTWFuYWdlcic7XG5pbXBvcnQgeyBEb25hdGVNYW5hZ2VyIH0gZnJvbSAnLi9kb25hdGVNYW5hZ2VyJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ3NNYW5hZ2VyIH0gZnJvbSAnLi9zZXR0aW5ncyc7XG5leHBvcnQgY29uc3QgVklFV19UWVBFX01QID0gJ21wLXByZXZpZXcnO1xuXG5leHBvcnQgY2xhc3MgTVBWaWV3IGV4dGVuZHMgSXRlbVZpZXcge1xuICAgIHByaXZhdGUgcHJldmlld0VsOiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIGN1cnJlbnRGaWxlOiBURmlsZSB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgdXBkYXRlVGltZXI6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSBpc1ByZXZpZXdMb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBwcml2YXRlIGxvY2tCdXR0b246IEhUTUxCdXR0b25FbGVtZW50O1xuICAgIHByaXZhdGUgY29weUJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQ7XG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZU1hbmFnZXI6IFRlbXBsYXRlTWFuYWdlcjtcbiAgICBwcml2YXRlIHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyO1xuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVTZWxlY3Q6IEhUTUxFbGVtZW50O1xuICAgIHByaXZhdGUgY3VzdG9tRm9udFNlbGVjdDogSFRNTEVsZW1lbnQ7XG4gICAgcHJpdmF0ZSBmb250U2l6ZVNlbGVjdDogSFRNTElucHV0RWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBsZWFmOiBXb3Jrc3BhY2VMZWFmLCBcbiAgICAgICAgdGVtcGxhdGVNYW5hZ2VyOiBUZW1wbGF0ZU1hbmFnZXIsXG4gICAgICAgIHNldHRpbmdzTWFuYWdlcjogU2V0dGluZ3NNYW5hZ2VyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGxlYWYpO1xuICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlciA9IHRlbXBsYXRlTWFuYWdlcjtcbiAgICAgICAgdGhpcy5zZXR0aW5nc01hbmFnZXIgPSBzZXR0aW5nc01hbmFnZXI7XG4gICAgfVxuXG4gICAgZ2V0Vmlld1R5cGUoKSB7XG4gICAgICAgIHJldHVybiBWSUVXX1RZUEVfTVA7XG4gICAgfVxuXG4gICAgZ2V0RGlzcGxheVRleHQoKSB7XG4gICAgICAgIHJldHVybiAnXHU1MTZDXHU0RjE3XHU1M0Y3XHU5ODg0XHU4OUM4JztcbiAgICB9XG5cbiAgICBnZXRJY29uKCkge1xuICAgICAgIHJldHVybiAnZXllJztcbiAgICB9XG5cbiAgICAvLyBcdTU3Mjggb25PcGVuIFx1NjVCOVx1NkNENVx1NEUyRFx1NjZGNFx1NjVCMFx1NUU5NVx1OTBFOFx1OTUwMVx1NUI5QVx1NjMwOVx1OTRBRVx1NzY4NFx1NTIxQlx1NUVGQVxuICAgIGFzeW5jIG9uT3BlbigpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5jb250YWluZXJFbC5jaGlsZHJlblsxXTtcbiAgICAgICAgY29udGFpbmVyLmVtcHR5KCk7XG4gICAgICAgIFxuICAgICAgICBjb25zdCB0b29sYmFyID0gY29udGFpbmVyLmNyZWF0ZUVsKCdkaXYnLCB7IGNsczogJ21wLXRvb2xiYXInIH0pO1xuICAgICAgICBcbiAgICAgICAgLy8gXHU5NTAxXHU1QjlBXHU2MzA5XHU5NEFFXG4gICAgICAgIHRoaXMubG9ja0J1dHRvbiA9IHRvb2xiYXIuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgICAgICAgIGNsczogJ21wLWxvY2stYnV0dG9uJyxcbiAgICAgICAgICAgIGF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnXHU1MTczXHU5NUVEXHU1QjlFXHU2NUY2XHU5ODg0XHU4OUM4XHU3MkI2XHU2MDAxJyB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvY2tCdXR0b24uaW5uZXJIVE1MID0gJ1x1RDgzRFx1REQxMyc7XG4gICAgICAgIHRoaXMubG9ja0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMudG9nZ2xlUHJldmlld0xvY2soKSk7XG4gICAgXG4gICAgICAgIC8vIFx1NTIxQlx1NUVGQVx1NEUyRFx1OTVGNFx1NjNBN1x1NEVGNlx1NUJCOVx1NTY2OFxuICAgICAgICBjb25zdCBjb250cm9sc0dyb3VwID0gdG9vbGJhci5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICdtcC1jb250cm9scy1ncm91cCcgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTgxRUFcdTVCOUFcdTRFNDlcdTRFMEJcdTYyQzlcdTkwMDlcdTYyRTlcdTU2NjhcbiAgICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZVNlbGVjdCA9IHRoaXMuY3JlYXRlQ3VzdG9tU2VsZWN0KFxuICAgICAgICAgICAgY29udHJvbHNHcm91cCxcbiAgICAgICAgICAgICdtcC10ZW1wbGF0ZS1zZWxlY3QnLFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZU9wdGlvbnMoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlU2VsZWN0LmlkID0gJ3RlbXBsYXRlLXNlbGVjdCc7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTZBMjFcdTY3N0ZcdTkwMDlcdTYyRTlcdTU2NjhcdTc2ODQgY2hhbmdlIFx1NEU4Qlx1NEVGNlx1NzZEMVx1NTQyQ1xuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlU2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJy5jdXN0b20tc2VsZWN0Jyk/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGFzeW5jIChlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZS5kZXRhaWwudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5zZXRDdXJyZW50VGVtcGxhdGUodmFsdWUpO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5nc01hbmFnZXIudXBkYXRlU2V0dGluZ3Moe1xuICAgICAgICAgICAgICAgIHRlbXBsYXRlSWQ6IHZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVNYW5hZ2VyLmFwcGx5VGVtcGxhdGUodGhpcy5wcmV2aWV3RWwpO1xuICAgICAgICB9KTtcbiAgICBcbiAgICAgICAgdGhpcy5jdXN0b21Gb250U2VsZWN0ID0gdGhpcy5jcmVhdGVDdXN0b21TZWxlY3QoXG4gICAgICAgICAgICBjb250cm9sc0dyb3VwLFxuICAgICAgICAgICAgJ21wLWZvbnQtc2VsZWN0JyxcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9udE9wdGlvbnMoKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFx1NkRGQlx1NTJBMFx1NUI1N1x1NEY1M1x1OTAwOVx1NjJFOVx1NTY2OFx1NzY4NCBjaGFuZ2UgXHU0RThCXHU0RUY2XHU3NkQxXHU1NDJDXG4gICAgICAgIHRoaXMuY3VzdG9tRm9udFNlbGVjdC5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLXNlbGVjdCcpPy5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBhc3luYyAoZTogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUuZGV0YWlsLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuc2V0Rm9udCh2YWx1ZSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmdzTWFuYWdlci51cGRhdGVTZXR0aW5ncyh7XG4gICAgICAgICAgICAgICAgZm9udEZhbWlseTogdmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuYXBwbHlUZW1wbGF0ZSh0aGlzLnByZXZpZXdFbCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1c3RvbUZvbnRTZWxlY3QuaWQgPSAnZm9udC1zZWxlY3QnO1xuICAgICAgICAvLyBcdTVCNTdcdTUzRjdcdThDMDNcdTY1NzRcbiAgICAgICAgY29uc3QgZm9udFNpemVHcm91cCA9IGNvbnRyb2xzR3JvdXAuY3JlYXRlRWwoJ2RpdicsIHsgY2xzOiAnbXAtZm9udC1zaXplLWdyb3VwJyB9KTtcbiAgICAgICAgY29uc3QgZGVjcmVhc2VCdXR0b24gPSBmb250U2l6ZUdyb3VwLmNyZWF0ZUVsKCdidXR0b24nLCB7IFxuICAgICAgICAgICAgY2xzOiAnbXAtZm9udC1zaXplLWJ0bicsXG4gICAgICAgICAgICB0ZXh0OiAnLSdcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9udFNpemVTZWxlY3QgPSBmb250U2l6ZUdyb3VwLmNyZWF0ZUVsKCdpbnB1dCcsIHsgXG4gICAgICAgICAgICBjbHM6ICdtcC1mb250LXNpemUtaW5wdXQnLFxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgdmFsdWU6ICcxNicsXG4gICAgICAgICAgICBhdHRyOiB7XG4gICAgICAgICAgICAgICAgc3R5bGU6ICdib3JkZXI6IG5vbmU7IG91dGxpbmU6IG5vbmU7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGluY3JlYXNlQnV0dG9uID0gZm9udFNpemVHcm91cC5jcmVhdGVFbCgnYnV0dG9uJywgeyBcbiAgICAgICAgICAgIGNsczogJ21wLWZvbnQtc2l6ZS1idG4nLFxuICAgICAgICAgICAgdGV4dDogJysnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NEVDRVx1OEJCRVx1N0Y2RVx1NEUyRFx1NjA2Mlx1NTkwRFx1NEUwQVx1NkIyMVx1NzY4NFx1OTAwOVx1NjJFOVxuICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLmdldFNldHRpbmdzKCk7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTYwNjJcdTU5MERcdThCQkVcdTdGNkVcbiAgICAgICAgaWYgKHNldHRpbmdzLnRlbXBsYXRlSWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlU2VsZWN0ID0gdGhpcy5jdXN0b21UZW1wbGF0ZVNlbGVjdC5xdWVyeVNlbGVjdG9yKCcuc2VsZWN0ZWQtdGV4dCcpO1xuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVEcm9wZG93biA9IHRoaXMuY3VzdG9tVGVtcGxhdGVTZWxlY3QucXVlcnlTZWxlY3RvcignLnNlbGVjdC1kcm9wZG93bicpO1xuICAgICAgICAgICAgaWYgKHRlbXBsYXRlU2VsZWN0ICYmIHRlbXBsYXRlRHJvcGRvd24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb24gPSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlT3B0aW9ucygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gb3B0aW9uLmZpbmQobyA9PiBvLnZhbHVlID09PSBzZXR0aW5ncy50ZW1wbGF0ZUlkKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU2NkY0XHU2NUIwXHU5MDA5XHU0RTJEXHU2NTg3XHU2NzJDXHU1NDhDXHU1MDNDXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU2VsZWN0LnRleHRDb250ZW50ID0gc2VsZWN0ZWQubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVTZWxlY3QucXVlcnlTZWxlY3RvcignLmN1c3RvbS1zZWxlY3QnKT8uc2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJywgc2VsZWN0ZWQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAvLyBcdTY2RjRcdTY1QjBcdTRFMEJcdTYyQzlcdTUyMTdcdTg4NjhcdTRFMkRcdTc2ODRcdTkwMDlcdTRFMkRcdTcyQjZcdTYwMDFcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEcm9wZG93bi5xdWVyeVNlbGVjdG9yQWxsKCcuc2VsZWN0LWl0ZW0nKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbC5nZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnKSA9PT0gc2VsZWN0ZWQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5zZXRDdXJyZW50VGVtcGxhdGUoc2V0dGluZ3MudGVtcGxhdGVJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2V0dGluZ3MuZm9udEZhbWlseSkge1xuICAgICAgICAgICAgY29uc3QgZm9udFNlbGVjdCA9IHRoaXMuY3VzdG9tRm9udFNlbGVjdC5xdWVyeVNlbGVjdG9yKCcuc2VsZWN0ZWQtdGV4dCcpO1xuICAgICAgICAgICAgY29uc3QgZm9udERyb3Bkb3duID0gdGhpcy5jdXN0b21Gb250U2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJy5zZWxlY3QtZHJvcGRvd24nKTtcbiAgICAgICAgICAgIGlmIChmb250U2VsZWN0ICYmIGZvbnREcm9wZG93bikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuZ2V0Rm9udE9wdGlvbnMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IG9wdGlvbi5maW5kKG8gPT4gby52YWx1ZSA9PT0gc2V0dGluZ3MuZm9udEZhbWlseSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFx1NjZGNFx1NjVCMFx1OTAwOVx1NEUyRFx1NjU4N1x1NjcyQ1x1NTQ4Q1x1NTAzQ1xuICAgICAgICAgICAgICAgICAgICBmb250U2VsZWN0LnRleHRDb250ZW50ID0gc2VsZWN0ZWQubGFiZWw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRm9udFNlbGVjdC5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLXNlbGVjdCcpPy5zZXRBdHRyaWJ1dGUoJ2RhdGEtdmFsdWUnLCBzZWxlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIFx1NjZGNFx1NjVCMFx1NEUwQlx1NjJDOVx1NTIxN1x1ODg2OFx1NEUyRFx1NzY4NFx1OTAwOVx1NEUyRFx1NzJCNlx1NjAwMVxuICAgICAgICAgICAgICAgICAgICBmb250RHJvcGRvd24ucXVlcnlTZWxlY3RvckFsbCgnLnNlbGVjdC1pdGVtJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWwuZ2V0QXR0cmlidXRlKCdkYXRhLXZhbHVlJykgPT09IHNlbGVjdGVkLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuc2V0Rm9udChzZXR0aW5ncy5mb250RmFtaWx5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZXR0aW5ncy5mb250U2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5mb250U2l6ZVNlbGVjdC52YWx1ZSA9IHNldHRpbmdzLmZvbnRTaXplLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5zZXRGb250U2l6ZShzZXR0aW5ncy5mb250U2l6ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBcdTY2RjRcdTY1QjBcdTVCNTdcdTUzRjdcdThDMDNcdTY1NzRcdTRFOEJcdTRFRjZcbiAgICAgICAgY29uc3QgdXBkYXRlRm9udFNpemUgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzaXplID0gcGFyc2VJbnQodGhpcy5mb250U2l6ZVNlbGVjdC52YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5zZXRGb250U2l6ZShzaXplKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZ3NNYW5hZ2VyLnVwZGF0ZVNldHRpbmdzKHtcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogc2l6ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlTWFuYWdlci5hcHBseVRlbXBsYXRlKHRoaXMucHJldmlld0VsKTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBcdTVCNTdcdTUzRjdcdThDMDNcdTY1NzRcdTYzMDlcdTk0QUVcdTRFOEJcdTRFRjZcbiAgICAgICAgZGVjcmVhc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2l6ZSA9IHBhcnNlSW50KHRoaXMuZm9udFNpemVTZWxlY3QudmFsdWUpO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRTaXplID4gMTIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvbnRTaXplU2VsZWN0LnZhbHVlID0gKGN1cnJlbnRTaXplIC0gMSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVGb250U2l6ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpbmNyZWFzZUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaXplID0gcGFyc2VJbnQodGhpcy5mb250U2l6ZVNlbGVjdC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFNpemUgPCAzMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9udFNpemVTZWxlY3QudmFsdWUgPSAoY3VycmVudFNpemUgKyAxKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZUZvbnRTaXplKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZm9udFNpemVTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdXBkYXRlRm9udFNpemUpO1xuXG4gICAgICAgIC8vIFx1OTg4NFx1ODlDOFx1NTMzQVx1NTdERlxuICAgICAgICB0aGlzLnByZXZpZXdFbCA9IGNvbnRhaW5lci5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICdtcC1wcmV2aWV3LWFyZWEnIH0pO1xuXG4gICAgICAgIC8vIFx1NUU5NVx1OTBFOFx1NURFNVx1NTE3N1x1NjgwRlxuICAgICAgICBjb25zdCBib3R0b21CYXIgPSBjb250YWluZXIuY3JlYXRlRWwoJ2RpdicsIHsgY2xzOiAnbXAtYm90dG9tLWJhcicgfSk7XG5cbiAgICAgICAgLy8gXHU2REZCXHU1MkEwXHU0RjdGXHU3NTI4XHU4QkY0XHU2NjBFXHU2MzA5XHU5NEFFXG4gICAgICAgIGNvbnN0IGhlbHBCdXR0b24gPSBib3R0b21CYXIuY3JlYXRlRWwoJ2J1dHRvbicsIHtcbiAgICAgICAgICAgIGNsczogJ21wLWhlbHAtYnV0dG9uJyxcbiAgICAgICAgICAgIGF0dHI6IHsgJ2FyaWEtbGFiZWwnOiAnXHU0RjdGXHU3NTI4XHU2MzA3XHU1MzU3JyB9XG4gICAgICAgIH0pO1xuICAgICAgICBoZWxwQnV0dG9uLmlubmVySFRNTCA9ICdcdTI3NTMnO1xuICAgICAgICBcbiAgICAgICAgLy8gXHU1MjFCXHU1RUZBXHU2M0QwXHU3OTNBXHU2ODQ2XG4gICAgICAgIGNvbnN0IHRvb2x0aXAgPSBib3R0b21CYXIuY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgICAgICAgIGNsczogJ21wLWhlbHAtdG9vbHRpcCcsXG4gICAgICAgICAgICB0ZXh0OiBgXHU0RjdGXHU3NTI4XHU2MzA3XHU1MzU3XHVGRjFBXG4gICAgICAgICAgICAgICAgMS4gXHU5MDA5XHU2MkU5XHU1NTlDXHU2QjIyXHU3Njg0XHU0RTNCXHU5ODk4XHU2QTIxXHU2NzdGXG4gICAgICAgICAgICAgICAgMi4gXHU4QzAzXHU2NTc0XHU1QjU3XHU0RjUzXHU1NDhDXHU1QjU3XHU1M0Y3XG4gICAgICAgICAgICAgICAgMy4gXHU1QjlFXHU2NUY2XHU5ODg0XHU4OUM4XHU2NTQ4XHU2NzlDXG4gICAgICAgICAgICAgICAgNC4gXHU3MEI5XHU1MUZCXHUzMDEwXHU1OTBEXHU1MjM2XHU2MzA5XHU5NEFFXHUzMDExXHU1MzczXHU1M0VGXHU3Qzk4XHU4RDM0XHU1MjMwXHU1MTZDXHU0RjE3XHU1M0Y3XG4gICAgICAgICAgICAgICAgNS4gXHU3RjE2XHU4RjkxXHU1QjlFXHU2NUY2XHU2N0U1XHU3NzBCXHU2NTQ4XHU2NzlDXHVGRjBDXHU3MEI5XHVEODNEXHVERDEzXHU1MTczXHU5NUVEXHU1QjlFXHU2NUY2XHU1MjM3XHU2NUIwXG4gICAgICAgICAgICAgICAgNi4gXHU1OTgyXHU2NzlDXHU0RjYwXHU1NTlDXHU2QjIyXHU4RkQ5XHU0RTJBXHU2M0QyXHU0RUY2XHVGRjBDXHU2QjIyXHU4RkNFXHU2MjUzXHU4RDRGYFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gXHU1MjFCXHU1RUZBXHU0RTJEXHU5NUY0XHU2M0E3XHU0RUY2XHU1QkI5XHU1NjY4XG4gICAgICAgIGNvbnN0IGJvdHRvbUNvbnRyb2xzR3JvdXAgPSBib3R0b21CYXIuY3JlYXRlRWwoJ2RpdicsIHsgY2xzOiAnbXAtYm90dG9tLWNvbnRyb2xzLWdyb3VwJyB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1OEJGN1x1NEY1Q1x1ODAwNVx1NTU5RFx1NTQ5Nlx1NTU2MVx1NjMwOVx1OTRBRVxuICAgICAgICBjb25zdCBsaWtlQnV0dG9uID0gYm90dG9tQ29udHJvbHNHcm91cC5jcmVhdGVFbCgnYnV0dG9uJywgeyBcbiAgICAgICAgICAgIGNsczogJ21wLWxpa2UtYnV0dG9uJ1xuICAgICAgICB9KTtcbiAgICAgICAgbGlrZUJ1dHRvbi5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDRweFwiPlx1MjYxNVx1RkUwRjwvc3Bhbj5cdTU1OUNcdTZCMjJcdTRGNUNcdTgwMDUnO1xuICAgICAgICBsaWtlQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgICAgRG9uYXRlTWFuYWdlci5zaG93RG9uYXRlTW9kYWwodGhpcy5jb250YWluZXJFbCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NTcyOFx1NjNBN1x1NEVGNlx1NUJCOVx1NTY2OFx1NEUyRFx1NTIxQlx1NUVGQVx1NjMwOVx1OTRBRVxuICAgICAgICB0aGlzLmNvcHlCdXR0b24gPSBib3R0b21Db250cm9sc0dyb3VwLmNyZWF0ZUVsKCdidXR0b24nLCB7IFxuICAgICAgICAgICAgdGV4dDogJ1x1NTkwRFx1NTIzNlx1NEUzQVx1NTE2Q1x1NEYxN1x1NTNGN1x1NjgzQ1x1NUYwRicsXG4gICAgICAgICAgICBjbHM6ICdtcC1jb3B5LWJ1dHRvbidcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbmV3QnV0dG9uID0gYm90dG9tQ29udHJvbHNHcm91cC5jcmVhdGVFbCgnYnV0dG9uJywgeyBcbiAgICAgICAgICAgIHRleHQ6ICdcdTY1NkNcdThCRjdcdTY3MUZcdTVGODUnLFxuICAgICAgICAgICAgY2xzOiAnbXAtbmV3LWJ1dHRvbidcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU2REZCXHU1MkEwXHU1OTBEXHU1MjM2XHU2MzA5XHU5NEFFXHU3MEI5XHU1MUZCXHU0RThCXHU0RUY2XG4gICAgICAgIHRoaXMuY29weUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXZpZXdFbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29weUJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLnNldFRleHQoJ1x1NTkwRFx1NTIzNlx1NEUyRC4uLicpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IENvcHlNYW5hZ2VyLmNvcHlUb0NsaXBib2FyZCh0aGlzLnByZXZpZXdFbCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29weUJ1dHRvbi5zZXRUZXh0KCdcdTU5MERcdTUyMzZcdTYyMTBcdTUyOUYnKTtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcHlCdXR0b24uc2V0VGV4dCgnXHU1OTBEXHU1MjM2XHU0RTNBXHU1MTZDXHU0RjE3XHU1M0Y3XHU2ODNDXHU1RjBGJyk7XG4gICAgICAgICAgICAgICAgICAgIH0sIDIwMDApO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29weUJ1dHRvbi5zZXRUZXh0KCdcdTU5MERcdTUyMzZcdTU5MzFcdThEMjUnKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvcHlCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29weUJ1dHRvbi5zZXRUZXh0KCdcdTU5MERcdTUyMzZcdTRFM0FcdTUxNkNcdTRGMTdcdTUzRjdcdTY4M0NcdTVGMEYnKTtcbiAgICAgICAgICAgICAgICAgICAgfSwgMjAwMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTc2RDFcdTU0MkNcdTY1ODdcdTY4NjNcdTUzRDhcdTUzMTZcbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KFxuICAgICAgICAgICAgdGhpcy5hcHAud29ya3NwYWNlLm9uKCdmaWxlLW9wZW4nLCB0aGlzLm9uRmlsZU9wZW4uYmluZCh0aGlzKSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBcdTc2RDFcdTU0MkNcdTY1ODdcdTY4NjNcdTUxODVcdTVCQjlcdTUzRDhcdTUzMTZcbiAgICAgICAgdGhpcy5yZWdpc3RlckV2ZW50KFxuICAgICAgICAgICAgdGhpcy5hcHAudmF1bHQub24oJ21vZGlmeScsIHRoaXMub25GaWxlTW9kaWZ5LmJpbmQodGhpcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gXHU2OEMwXHU2N0U1XHU1RjUzXHU1MjREXHU2MjUzXHU1RjAwXHU3Njg0XHU2NTg3XHU0RUY2XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWxlID0gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZUZpbGUoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbkZpbGVPcGVuKGN1cnJlbnRGaWxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNvbnRyb2xzU3RhdGUoZW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmxvY2tCdXR0b24uZGlzYWJsZWQgPSAhZW5hYmxlZDtcbiAgICAgICAgLy8gXHU2NkY0XHU2NUIwXHU4MUVBXHU1QjlBXHU0RTQ5XHU5MDA5XHU2MkU5XHU1NjY4XHU3Njg0XHU3OTgxXHU3NTI4XHU3MkI2XHU2MDAxXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlU2VsZWN0ID0gdGhpcy5jdXN0b21UZW1wbGF0ZVNlbGVjdC5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLXNlbGVjdCcpO1xuICAgICAgICBjb25zdCBmb250U2VsZWN0ID0gdGhpcy5jdXN0b21Gb250U2VsZWN0LnF1ZXJ5U2VsZWN0b3IoJy5jdXN0b20tc2VsZWN0Jyk7XG4gICAgICAgIGlmICh0ZW1wbGF0ZVNlbGVjdCkge1xuICAgICAgICAgICAgdGVtcGxhdGVTZWxlY3QuY2xhc3NMaXN0LnRvZ2dsZSgnZGlzYWJsZWQnLCAhZW5hYmxlZCk7XG4gICAgICAgICAgICAvLyBcdTRGN0ZcdTc1MjhzZXRBdHRyaWJ1dGVcdTY3NjVcdThCQkVcdTdGNkVzdHlsZVx1NUM1RVx1NjAyN1xuICAgICAgICAgICAgdGVtcGxhdGVTZWxlY3Quc2V0QXR0cmlidXRlKCdzdHlsZScsIGBwb2ludGVyLWV2ZW50czogJHtlbmFibGVkID8gJ2F1dG8nIDogJ25vbmUnfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb250U2VsZWN0KSB7XG4gICAgICAgICAgICBmb250U2VsZWN0LmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2FibGVkJywgIWVuYWJsZWQpO1xuICAgICAgICAgICAgLy8gXHU0RjdGXHU3NTI4c2V0QXR0cmlidXRlXHU2NzY1XHU4QkJFXHU3RjZFc3R5bGVcdTVDNUVcdTYwMjdcbiAgICAgICAgICAgIGZvbnRTZWxlY3Quc2V0QXR0cmlidXRlKCdzdHlsZScsIGBwb2ludGVyLWV2ZW50czogJHtlbmFibGVkID8gJ2F1dG8nIDogJ25vbmUnfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9udFNpemVTZWxlY3QuZGlzYWJsZWQgPSAhZW5hYmxlZDtcbiAgICAgICAgdGhpcy5jb3B5QnV0dG9uLmRpc2FibGVkID0gIWVuYWJsZWQ7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTVCNTdcdTUzRjdcdThDMDNcdTgyODJcdTYzMDlcdTk0QUVcdTc2ODRcdTcyQjZcdTYwMDFcdTYzQTdcdTUyMzZcbiAgICAgICAgY29uc3QgZm9udFNpemVCdXR0b25zID0gdGhpcy5jb250YWluZXJFbC5xdWVyeVNlbGVjdG9yQWxsKCcubXAtZm9udC1zaXplLWJ0bicpO1xuICAgICAgICBmb250U2l6ZUJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgICAgICAgKGJ1dHRvbiBhcyBIVE1MQnV0dG9uRWxlbWVudCkuZGlzYWJsZWQgPSAhZW5hYmxlZDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgb25GaWxlT3BlbihmaWxlOiBURmlsZSB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmlsZSA9IGZpbGU7XG4gICAgICAgIGlmICghZmlsZSB8fCBmaWxlLmV4dGVuc2lvbiAhPT0gJ21kJykge1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3RWwuZW1wdHkoKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0VsLmNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgdGV4dDogJ1x1NTNFQVx1ODBGRFx1OTg4NFx1ODlDOCBNYXJrZG93biBcdTY1ODdcdTY3MkNcdTY1ODdcdTY4NjMnLFxuICAgICAgICAgICAgICAgIGNsczogJ21wLWVtcHR5LW1lc3NhZ2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udHJvbHNTdGF0ZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnRyb2xzU3RhdGUodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNQcmV2aWV3TG9ja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9ja0J1dHRvbi5pbm5lckhUTUwgPSAnXHVEODNEXHVERDEzJztcbiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQcmV2aWV3KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyB0b2dnbGVQcmV2aWV3TG9jaygpIHtcbiAgICAgICAgdGhpcy5pc1ByZXZpZXdMb2NrZWQgPSAhdGhpcy5pc1ByZXZpZXdMb2NrZWQ7XG4gICAgICAgIGNvbnN0IGxvY2tJY29uID0gdGhpcy5pc1ByZXZpZXdMb2NrZWQgPyAnXHVEODNEXHVERDEyJyA6ICdcdUQ4M0RcdUREMTMnO1xuICAgICAgICBjb25zdCBsb2NrU3RhdHVzID0gdGhpcy5pc1ByZXZpZXdMb2NrZWQgPyAnXHU1RjAwXHU1NDJGXHU1QjlFXHU2NUY2XHU5ODg0XHU4OUM4XHU3MkI2XHU2MDAxJyA6ICdcdTUxNzNcdTk1RURcdTVCOUVcdTY1RjZcdTk4ODRcdTg5QzhcdTcyQjZcdTYwMDEnO1xuICAgICAgICB0aGlzLmxvY2tCdXR0b24uaW5uZXJIVE1MID0gbG9ja0ljb247XG4gICAgICAgIHRoaXMubG9ja0J1dHRvbi5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCBsb2NrU3RhdHVzKTtcbiAgICAgICAgXG4gICAgICAgIGlmICghdGhpcy5pc1ByZXZpZXdMb2NrZWQpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUHJldmlldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgb25GaWxlTW9kaWZ5KGZpbGU6IFRGaWxlKSB7XG4gICAgICAgIGlmIChmaWxlID09PSB0aGlzLmN1cnJlbnRGaWxlICYmICF0aGlzLmlzUHJldmlld0xvY2tlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXBkYXRlVGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy51cGRhdGVUaW1lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVByZXZpZXcoKTtcbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyB1cGRhdGVQcmV2aWV3KCkge1xuICAgICAgICBpZiAoIXRoaXMuY3VycmVudEZpbGUpIHJldHVybjtcblxuICAgICAgICB0aGlzLnByZXZpZXdFbC5lbXB0eSgpO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQucmVhZCh0aGlzLmN1cnJlbnRGaWxlKTtcbiAgICAgICAgXG4gICAgICAgIC8vIDEuIFx1NTE0OFx1OEY2Q1x1NjM2MiBNYXJrZG93biBcdTRFM0EgSFRNTFxuICAgICAgICBhd2FpdCBNYXJrZG93blJlbmRlcmVyLnJlbmRlck1hcmtkb3duKFxuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIHRoaXMucHJldmlld0VsLFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RmlsZS5wYXRoLFxuICAgICAgICAgICAgdGhpc1xuICAgICAgICApO1xuXG4gICAgICAgIC8vIDIuIFx1NjgzQ1x1NUYwRlx1NTMxNlx1NTE4NVx1NUJCOSAoXHU1M0VBXHU1NzI4XHU1MTg1XHU1QkI5XHU2NkY0XHU2NUIwXHU2NUY2XHU2MjY3XHU4ODRDKVxuICAgICAgICBNUENvbnZlcnRlci5mb3JtYXRDb250ZW50KHRoaXMucHJldmlld0VsKTtcblxuICAgICAgICAvLyAzLiBcdTVFOTRcdTc1MjhcdTZBMjFcdTY3N0ZcdTY4MzdcdTVGMEZcbiAgICAgICAgdGhpcy50ZW1wbGF0ZU1hbmFnZXIuYXBwbHlUZW1wbGF0ZSh0aGlzLnByZXZpZXdFbCk7XG4gICAgfVxuXG4gICAgLy8gXHU2REZCXHU1MkEwXHU4MUVBXHU1QjlBXHU0RTQ5XHU0RTBCXHU2MkM5XHU5MDA5XHU2MkU5XHU1NjY4XHU1MjFCXHU1RUZBXHU2NUI5XHU2Q0Q1XG4gICAgcHJpdmF0ZSBjcmVhdGVDdXN0b21TZWxlY3QoXG4gICAgICAgIHBhcmVudDogSFRNTEVsZW1lbnQsXG4gICAgICAgIGNsYXNzTmFtZTogc3RyaW5nLFxuICAgICAgICBvcHRpb25zOiB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHBhcmVudC5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICdjdXN0b20tc2VsZWN0LWNvbnRhaW5lcicgfSk7XG4gICAgICAgIGNvbnN0IHNlbGVjdCA9IGNvbnRhaW5lci5jcmVhdGVFbCgnZGl2JywgeyBjbHM6ICdjdXN0b20tc2VsZWN0JyB9KTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0LmNyZWF0ZUVsKCdzcGFuJywgeyBjbHM6ICdzZWxlY3RlZC10ZXh0JyB9KTtcbiAgICAgICAgY29uc3QgYXJyb3cgPSBzZWxlY3QuY3JlYXRlRWwoJ3NwYW4nLCB7IGNsczogJ3NlbGVjdC1hcnJvdycsIHRleHQ6ICdcdTI1QkUnIH0pO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSBjb250YWluZXIuY3JlYXRlRWwoJ2RpdicsIHsgY2xzOiAnc2VsZWN0LWRyb3Bkb3duJyB9KTtcbiAgICAgICAgXG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGRyb3Bkb3duLmNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICAgICAgICAgICAgY2xzOiAnc2VsZWN0LWl0ZW0nLFxuICAgICAgICAgICAgICAgIHRleHQ6IG9wdGlvbi5sYWJlbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGl0ZW0uZGF0YXNldC52YWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gXHU3OUZCXHU5NjY0XHU1MTc2XHU0RUQ2XHU5ODc5XHU3Njg0XHU5MDA5XHU0RTJEXHU3MkI2XHU2MDAxXG4gICAgICAgICAgICAgICAgZHJvcGRvd24ucXVlcnlTZWxlY3RvckFsbCgnLnNlbGVjdC1pdGVtJykuZm9yRWFjaChlbCA9PiBcbiAgICAgICAgICAgICAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnc2VsZWN0ZWQnKSk7XG4gICAgICAgICAgICAgICAgLy8gXHU2REZCXHU1MkEwXHU1RjUzXHU1MjREXHU5ODc5XHU3Njg0XHU5MDA5XHU0RTJEXHU3MkI2XHU2MDAxXG4gICAgICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkVGV4dC50ZXh0Q29udGVudCA9IG9wdGlvbi5sYWJlbDtcbiAgICAgICAgICAgICAgICBzZWxlY3QuZGF0YXNldC52YWx1ZSA9IG9wdGlvbi52YWx1ZTtcbiAgICAgICAgICAgICAgICBkcm9wZG93bi5jbGFzc0xpc3QucmVtb3ZlKCdzaG93Jyk7XG4gICAgICAgICAgICAgICAgc2VsZWN0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGRldGFpbDogeyB2YWx1ZTogb3B0aW9uLnZhbHVlIH1cbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBcdThCQkVcdTdGNkVcdTlFRDhcdThCQTRcdTUwM0NcdTU0OENcdTkwMDlcdTRFMkRcdTcyQjZcdTYwMDFcbiAgICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2VsZWN0ZWRUZXh0LnRleHRDb250ZW50ID0gb3B0aW9uc1swXS5sYWJlbDtcbiAgICAgICAgICAgIHNlbGVjdC5kYXRhc2V0LnZhbHVlID0gb3B0aW9uc1swXS52YWx1ZTtcbiAgICAgICAgICAgIGRyb3Bkb3duLnF1ZXJ5U2VsZWN0b3IoJy5zZWxlY3QtaXRlbScpPy5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZCcpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBcdTcwQjlcdTUxRkJcdTY2M0VcdTc5M0EvXHU5NjkwXHU4NUNGXHU0RTBCXHU2MkM5XHU1MjE3XHU4ODY4XG4gICAgICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZHJvcGRvd24uY2xhc3NMaXN0LnRvZ2dsZSgnc2hvdycpO1xuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1NzBCOVx1NTFGQlx1NTE3Nlx1NEVENlx1NTczMFx1NjVCOVx1NTE3M1x1OTVFRFx1NEUwQlx1NjJDOVx1NTIxN1x1ODg2OFxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgICAgIGRyb3Bkb3duLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTtcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gY29udGFpbmVyO1xuICAgIH1cblxuICAgIC8vIFx1ODNCN1x1NTNENlx1NkEyMVx1Njc3Rlx1OTAwOVx1OTg3OVxuICAgIHByaXZhdGUgYXN5bmMgZ2V0VGVtcGxhdGVPcHRpb25zKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnRlbXBsYXRlTWFuYWdlci5sb2FkVGVtcGxhdGVzKCk7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IHRoaXMudGVtcGxhdGVNYW5hZ2VyLmdldEFsbFRlbXBsYXRlcygpO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRlbXBsYXRlcy5tYXAodCA9PiAoeyB2YWx1ZTogdC5pZCwgbGFiZWw6IHQubmFtZSB9KSlcbiAgICAgICAgICAgIDogW3sgdmFsdWU6ICdkZWZhdWx0JywgbGFiZWw6ICdcdTlFRDhcdThCQTRcdTZBMjFcdTY3N0YnIH1dO1xuICAgIH1cblxuICAgIC8vIFx1ODNCN1x1NTNENlx1NUI1N1x1NEY1M1x1OTAwOVx1OTg3OVxuICAgIHByaXZhdGUgZ2V0Rm9udE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICB7IFxuICAgICAgICAgICAgICAgIHZhbHVlOiAnT3B0aW1hLVJlZ3VsYXIsIE9wdGltYSwgUGluZ0ZhbmdTQy1saWdodCwgUGluZ0ZhbmdUQy1saWdodCwgXCJQaW5nRmFuZyBTQ1wiLCBDYW1icmlhLCBDb2NoaW4sIEdlb3JnaWEsIFRpbWVzLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZicsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdcdTlFRDhcdThCQTRcdTVCNTdcdTRGNTMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBcbiAgICAgICAgICAgICAgICB2YWx1ZTogJ1NpbVN1biwgXCJcdTVCOEJcdTRGNTNcIiwgc2VyaWYnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnXHU1QjhCXHU0RjUzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdTaW1IZWksIFwiXHU5RUQxXHU0RjUzXCIsIHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnXHU5RUQxXHU0RjUzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdLYWlUaSwgXCJcdTY5NzdcdTRGNTNcIiwgc2VyaWYnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnXHU2OTc3XHU0RjUzJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgXG4gICAgICAgICAgICAgICAgdmFsdWU6ICdcIk1pY3Jvc29mdCBZYUhlaVwiLCBcIlx1NUZBRVx1OEY2Rlx1OTZDNVx1OUVEMVwiLCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICBsYWJlbDogJ1x1OTZDNVx1OUVEMSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXTtcbiAgICB9XG59IiwgImltcG9ydCB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuZXhwb3J0IGNsYXNzIE1QQ29udmVydGVyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBhcHA6IEFwcDtcblxuICAgIHN0YXRpYyBpbml0aWFsaXplKGFwcDogQXBwKSB7XG4gICAgICAgIHRoaXMuYXBwID0gYXBwO1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JtYXRDb250ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIC8vIFx1NTIxQlx1NUVGQVx1ODg2OFx1NjgzQ1x1NTMwNVx1ODhGOVxuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuY3JlYXRlV3JhcHBlclRhYmxlKGVsZW1lbnQpO1xuICAgICAgICBcbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU1NDA0XHU3OUNEIE1hcmtkb3duIFx1NTE0M1x1N0QyMFxuICAgICAgICB0aGlzLnByb2Nlc3NFbGVtZW50cyh0YWJsZS5xdWVyeVNlbGVjdG9yKCd0ZCcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjcmVhdGVXcmFwcGVyVGFibGUoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MVGFibGVFbGVtZW50IHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpO1xuICAgICAgICBjb25zdCB0Ym9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Rib2R5Jyk7XG4gICAgICAgIGNvbnN0IHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcbiAgICAgICAgY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO1xuXG4gICAgICAgIHRhYmxlLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICB0YWJsZS5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9ICdjb2xsYXBzZSc7XG4gICAgICAgIHRkLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnO1xuXG4gICAgICAgIHdoaWxlIChlbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgIHRkLmFwcGVuZENoaWxkKGVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZCk7XG4gICAgICAgIHRib2R5LmFwcGVuZENoaWxkKHRyKTtcbiAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGJvZHkpO1xuICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRhYmxlKTtcblxuICAgICAgICByZXR1cm4gdGFibGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcHJvY2Vzc0VsZW1lbnRzKGNvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghY29udGFpbmVyKSByZXR1cm47XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU1RjNBXHU4QzAzXHU2NTg3XHU2NzJDXG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdzdHJvbmcsIGVtJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU5NEZFXHU2M0E1XG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdhJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmNvbG9yID0gJyM1NzZiOTUnO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdub25lJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU4ODY4XHU2ODNDXG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgaWYgKGVsID09PSBjb250YWluZXIuY2xvc2VzdCgndGFibGUnKSkgcmV0dXJuO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxUYWJsZUVsZW1lbnQpLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJztcbiAgICAgICAgICAgIChlbCBhcyBIVE1MVGFibGVFbGVtZW50KS5zdHlsZS5tYXJnaW4gPSAnMWVtIDAnO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxUYWJsZUVsZW1lbnQpLnN0eWxlLndpZHRoID0gJzEwMCUnO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTU5MDRcdTc0MDZcdTg4NjhcdTY4M0NcdTUzNTVcdTUxNDNcdTY4M0NcbiAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoLCB0ZCcpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgaWYgKGVsID09PSBjb250YWluZXIuY2xvc2VzdCgndGQnKSkgcmV0dXJuO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50KS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNkZmRmZGYnO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50KS5zdHlsZS5wYWRkaW5nID0gJzhweCc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NTkwNFx1NzQwNlx1NTIwNlx1NTI3Mlx1N0VCRlxuICAgICAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnaHInKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUuYm9yZGVyID0gJ25vbmUnO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5ib3JkZXJUb3AgPSAnMXB4IHNvbGlkICNkZmRmZGYnO1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5tYXJnaW4gPSAnMjBweCAwJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU1MjIwXHU5NjY0XHU3RUJGXG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdkZWwnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudGV4dERlY29yYXRpb24gPSAnbGluZS10aHJvdWdoJztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU0RUZCXHU1MkExXHU1MjE3XHU4ODY4XG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcudGFzay1saXN0LWl0ZW0nKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUubGlzdFN0eWxlID0gJ25vbmUnO1xuICAgICAgICAgICAgY29uc3QgY2hlY2tib3ggPSBlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKTtcbiAgICAgICAgICAgIGlmIChjaGVja2JveCkge1xuICAgICAgICAgICAgICAgIChjaGVja2JveCBhcyBIVE1MRWxlbWVudCkuc3R5bGUubWFyZ2luUmlnaHQgPSAnNnB4JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU4MTFBXHU2Q0U4XG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZm9vdG5vdGUtcmVmLCAuZm9vdG5vdGUtYmFja3JlZicpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5jb2xvciA9ICcjNTc2Yjk1JztcbiAgICAgICAgICAgIChlbCBhcyBIVE1MRWxlbWVudCkuc3R5bGUudGV4dERlY29yYXRpb24gPSAnbm9uZSc7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NTkwNFx1NzQwNlx1NEVFM1x1NzgwMVx1NTc1N1xuICAgICAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgncHJlIGNvZGUnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZSA9IGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAocHJlKSB7XG4gICAgICAgICAgICAgICAgLy8gXHU2REZCXHU1MkEwIG1hY09TIFx1OThDRVx1NjgzQ1x1NzY4NFx1N0E5N1x1NTNFM1x1NjMwOVx1OTRBRVxuICAgICAgICAgICAgICAgIGNvbnN0IGRvdHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBkb3RzLnN0eWxlLmNzc1RleHQgPSBgXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogOHB4IDAgMTJweCAwO1xuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICAgICAgICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgICAgICAgICBgO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3JzID0gWycjZmY1ZjU2JywgJyNmZmJkMmUnLCAnIzI3YzkzZiddO1xuICAgICAgICAgICAgICAgIGNvbG9ycy5mb3JFYWNoKGNvbG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG90ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICBkb3Quc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMnB4O1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvcn07XG4gICAgICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgICAgICAgIGRvdHMuYXBwZW5kQ2hpbGQoZG90KTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIFx1NUMwNlx1N0VBMlx1N0VGRlx1NzA2Rlx1NjNEMlx1NTE2NVx1NTIzMFx1NEVFM1x1NzgwMVx1NTc1N1x1NzY4NFx1NjcwMFx1NTI0RFx1OTc2MlxuICAgICAgICAgICAgICAgIHByZS5pbnNlcnRCZWZvcmUoZG90cywgcHJlLmZpcnN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgIHByZS5zdHlsZS5wYWRkaW5nVG9wID0gJzMycHgnO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFx1NzlGQlx1OTY2NFx1NTM5Rlx1NjcwOVx1NzY4NFx1NTkwRFx1NTIzNlx1NjMwOVx1OTRBRVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlCdXR0b24gPSBwcmUucXVlcnlTZWxlY3RvcignLmNvcHktY29kZS1idXR0b24nKTtcbiAgICAgICAgICAgICAgICBpZiAoY29weUJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICBjb3B5QnV0dG9uLnJlbW92ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU1NkZFXHU3MjQ3XG4gICAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdzcGFuLmludGVybmFsLWVtYmVkW2FsdF1bc3JjXScpLmZvckVhY2goYXN5bmMgZWwgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxTcGFuID0gZWwgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBvcmlnaW5hbFNwYW4uZ2V0QXR0cmlidXRlKCdzcmMnKTtcbiAgICAgICAgICAgIGNvbnN0IGFsdCA9IG9yaWdpbmFsU3Bhbi5nZXRBdHRyaWJ1dGUoJ2FsdCcpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoIXNyYykgcmV0dXJuO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFx1ODNCN1x1NTNENlx1NjU4N1x1NEVGNlx1NzY4NFx1NTE0M1x1NjU3MFx1NjM2RVxuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmt0ZXh0ID0gc3JjLnNwbGl0KCd8JylbMF07ICAvLyBcdTU5MDRcdTc0MDZcdTUzRUZcdTgwRkRcdTVFMjZcdTY3MDlcdTUyMkJcdTU0MERcdTc2ODRcdTk0RkVcdTYzQTVcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaXJzdExpbmtwYXRoRGVzdChsaW5rdGV4dCwgJycpO1xuICAgICAgICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIuZ2V0UmVzb3VyY2VQYXRoKGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgICAgICAgICAgICAgICAgICBuZXdJbWcuc3JjID0gYWJzb2x1dGVQYXRoO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWx0KSBuZXdJbWcuYWx0ID0gYWx0O1xuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgLy8gXHU1RTk0XHU3NTI4XHU2ODM3XHU1RjBGXG4gICAgICAgICAgICAgICAgICAgIG5ld0ltZy5zdHlsZS5tYXhXaWR0aCA9ICcxMDAlJztcbiAgICAgICAgICAgICAgICAgICAgbmV3SW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgbmV3SW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICBuZXdJbWcuc3R5bGUubWFyZ2luID0gJzFlbSBhdXRvJztcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIC8vIFx1NzZGNFx1NjNBNVx1NjZGRlx1NjM2MiBzcGFuIFx1NTE0M1x1N0QyMFx1RkYwQ1x1NEZERFx1NzU1OVx1NkJCNVx1ODQzRFx1NEUyRFx1NzY4NFx1NTE3Nlx1NEVENlx1NTE4NVx1NUJCOVxuICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbFNwYW4ucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKG5ld0ltZywgb3JpZ2luYWxTcGFuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1x1NTZGRVx1NzI0N1x1NTkwNFx1NzQwNlx1NTkzMVx1OEQyNTonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NTkwNFx1NzQwNlx1NUYxNVx1NzUyOFx1NTc1N1xuICAgICAgICBjb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgnYmxvY2txdW90ZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgLy8gXHU2RTA1XHU3NDA2XHU1RjE1XHU3NTI4XHU1NzU3XHU1MTg1XHU5MEU4XHU2QkI1XHU4NDNEXHU3Njg0XHU2ODM3XHU1RjBGXG4gICAgICAgICAgICBlbC5xdWVyeVNlbGVjdG9yQWxsKCdwJykuZm9yRWFjaChwID0+IHtcbiAgICAgICAgICAgICAgICBwLnN0eWxlLm1hcmdpbiA9ICcwJztcbiAgICAgICAgICAgICAgICBwLnN0eWxlLnBhZGRpbmcgPSAnMCc7XG4gICAgICAgICAgICAgICAgcC5zdHlsZS5saW5lSGVpZ2h0ID0gJ2luaGVyaXQnO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn0iLCAiaW1wb3J0IHsgTm90aWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5leHBvcnQgY2xhc3MgQ29weU1hbmFnZXIge1xuICAgIHByaXZhdGUgc3RhdGljIGNsZWFudXBIdG1sKGh0bWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIC8vIFx1NTIxQlx1NUVGQVx1NEUwMFx1NEUyQVx1NEUzNFx1NjVGNlx1NzY4NCBkaXYgXHU1MTQzXHU3RDIwXHU2NzY1XHU1OTA0XHU3NDA2IEhUTUxcbiAgICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0ZW1wRGl2LmlubmVySFRNTCA9IGh0bWw7XG5cbiAgICAgICAgLy8gXHU3OUZCXHU5NjY0XHU2MjQwXHU2NzA5XHU3Njg0IGRhdGEtKiBcdTVDNUVcdTYwMjdcbiAgICAgICAgdGVtcERpdi5xdWVyeVNlbGVjdG9yQWxsKCcqJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBBcnJheS5mcm9tKGVsLmF0dHJpYnV0ZXMpLmZvckVhY2goYXR0ciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dHIubmFtZS5zdGFydHNXaXRoKCdkYXRhLScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShhdHRyLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTc5RkJcdTk2NjRcdTYyNDBcdTY3MDlcdTc2ODQgY2xhc3MgXHU1QzVFXHU2MDI3XG4gICAgICAgIHRlbXBEaXYucXVlcnlTZWxlY3RvckFsbCgnKicpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdjbGFzcycpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTc5RkJcdTk2NjRcdTYyNDBcdTY3MDlcdTc2ODQgaWQgXHU1QzVFXHU2MDI3XG4gICAgICAgIHRlbXBEaXYucXVlcnlTZWxlY3RvckFsbCgnKicpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdpZCcpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGVtcERpdi5pbm5lckhUTUw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgcHJvY2Vzc0ltYWdlcyhjb250YWluZXI6IEhUTUxFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGltYWdlcyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCdpbWcnKTtcbiAgICAgICAgY29uc3QgaW1hZ2VBcnJheSA9IEFycmF5LmZyb20oaW1hZ2VzKTtcbiAgICAgICAgXG4gICAgICAgIGZvciAoY29uc3QgaW1nIG9mIGltYWdlQXJyYXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChpbWcuc3JjKTtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1nLnNyYyA9IHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdcdTU2RkVcdTcyNDdcdThGNkNcdTYzNjJcdTU5MzFcdThEMjU6JywgZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhc3luYyBjb3B5VG9DbGlwYm9hcmQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnO1xuICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IGVsZW1lbnQuaW5uZXJIVE1MO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICAgICAgLy8gXHU1OTA0XHU3NDA2XHU1NkZFXHU3MjQ3XHU4RjZDXHU2MzYyXHU0RTNBIGJhc2U2NFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzSW1hZ2VzKGNvbnRhaW5lcik7XG5cbiAgICAgICAgICAgIC8vIFx1NkUwNVx1NzQwNiBIVE1MXG4gICAgICAgICAgICBjb25zdCBjbGVhbkh0bWwgPSB0aGlzLmNsZWFudXBIdG1sKGNvbnRhaW5lci5pbm5lckhUTUwpO1xuXG4gICAgICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTUyNkFcdThEMzRcdTY3N0ZcdTY1NzBcdTYzNkVcbiAgICAgICAgICAgIGNvbnN0IGNsaXBEYXRhID0gbmV3IENsaXBib2FyZEl0ZW0oe1xuICAgICAgICAgICAgICAgICd0ZXh0L2h0bWwnOiBuZXcgQmxvYihbY2xlYW5IdG1sXSwgeyB0eXBlOiAndGV4dC9odG1sJyB9KSxcbiAgICAgICAgICAgICAgICAndGV4dC9wbGFpbic6IG5ldyBCbG9iKFtjb250YWluZXIudGV4dENvbnRlbnQgfHwgJyddLCB7IHR5cGU6ICd0ZXh0L3BsYWluJyB9KVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGUoW2NsaXBEYXRhXSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIG5ldyBOb3RpY2UoJ1x1NURGMlx1NTkwRFx1NTIzNlx1NTIzMFx1NTI2QVx1OEQzNFx1Njc3RicpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbmV3IE5vdGljZSgnXHU1OTBEXHU1MjM2XHU1OTMxXHU4RDI1Jyk7XG4gICAgICAgIH1cbiAgICB9XG59IiwgImV4cG9ydCBjbGFzcyBEb25hdGVNYW5hZ2VyIHtcbiAgICBwcml2YXRlIHN0YXRpYyBvdmVybGF5OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHN0YXRpYyBtb2RhbDogSFRNTEVsZW1lbnQ7XG5cbiAgICBwdWJsaWMgc3RhdGljIHNob3dEb25hdGVNb2RhbChjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHRoaXMub3ZlcmxheSA9IGNvbnRhaW5lci5jcmVhdGVFbCgnZGl2Jywge1xuICAgICAgICAgICAgY2xzOiAnbXAtZG9uYXRlLW92ZXJsYXknXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubW9kYWwgPSB0aGlzLm92ZXJsYXkuY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgICAgICAgIGNsczogJ21wLWRvbmF0ZS1tb2RhbCdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY2xvc2VCdXR0b24gPSB0aGlzLm1vZGFsLmNyZWF0ZUVsKCdidXR0b24nLCB7XG4gICAgICAgICAgICBjbHM6ICdtcC1kb25hdGUtY2xvc2UnLFxuICAgICAgICAgICAgdGV4dDogJ1x1MDBENydcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5tb2RhbC5jcmVhdGVFbCgnaDMnLCB7XG4gICAgICAgICAgICB0ZXh0OiAnXHU1MTczXHU2Q0U4XHU0RjVDXHU4MDA1JyxcbiAgICAgICAgICAgIGNsczogJ21wLWRvbmF0ZS10aXRsZSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMubW9kYWwuY3JlYXRlRWwoJ2RpdicsIHtcbiAgICAgICAgICAgIGNsczogJ21wLWRvbmF0ZS1jb250ZW50J1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTZFMjlcdTk5QThcdTYzRDBcdTc5M0FcbiAgICAgICAgY29udGVudC5jcmVhdGVFbCgncCcsIHtcbiAgICAgICAgICAgIHRleHQ6ICdcdTU5ODJcdTY3OUNcdTRGNjBcdTU1OUNcdTZCMjJcdThGRDlcdTRFMkFcdTYzRDJcdTRFRjZcdUZGMENcdTZCMjJcdThGQ0VcdTUxNzNcdTZDRThcdTYyMTFcdTc2ODRcdTUxNkNcdTRGMTdcdTUzRjcgXHUyNzY0XHVGRTBGJyxcbiAgICAgICAgICAgIGNsczogJ21wLWRvbmF0ZS1kZXNjJ1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTUyMUJcdTVFRkFcdTRFOENcdTdFRjRcdTc4MDFcdTY2M0VcdTc5M0FcdTUzM0FcdTU3REZcbiAgICAgICAgY29uc3QgcXJDb250YWluZXIgPSBjb250ZW50LmNyZWF0ZUVsKCdkaXYnLCB7XG4gICAgICAgICAgICBjbHM6ICdtcC1kb25hdGUtcXItY29udGFpbmVyJ1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBxckNvZGUgPSBxckNvbnRhaW5lci5jcmVhdGVFbCgnZGl2Jywge1xuICAgICAgICAgICAgY2xzOiAnbXAtZG9uYXRlLXFyIGFjdGl2ZSdcbiAgICAgICAgfSk7XG4gICAgICAgIHFyQ29kZS5jcmVhdGVFbCgnaW1nJywge1xuICAgICAgICAgICAgYXR0cjoge1xuICAgICAgICAgICAgICAgIHNyYzogJy4vYXNzZXRzL3FyY29kZS5wbmcnLFxuICAgICAgICAgICAgICAgIGFsdDogJ1x1NTE2Q1x1NEYxN1x1NTNGN1x1NEU4Q1x1N0VGNFx1NzgwMSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU2REZCXHU1MkEwXHU1MTZDXHU0RjE3XHU1M0Y3XHU1NDBEXHU3OUYwXG4gICAgICAgIGNvbnRlbnQuY3JlYXRlRWwoJ3AnLCB7XG4gICAgICAgICAgICB0ZXh0OiAnXHU1MTZDXHU0RjE3XHU1M0Y3XHVGRjFBXHU1OTFDXHU1MzRBJyxcbiAgICAgICAgICAgIGNsczogJ21wLWRvbmF0ZS1kZXNjJ1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTZERkJcdTUyQTBcdTUxNzNcdTk1RURcdTRFOEJcdTRFRjZcbiAgICAgICAgY2xvc2VCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB0aGlzLmNsb3NlRG9uYXRlTW9kYWwoKSk7XG4gICAgICAgIHRoaXMub3ZlcmxheS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZS50YXJnZXQgPT09IHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VEb25hdGVNb2RhbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjbG9zZURvbmF0ZU1vZGFsKCkge1xuICAgICAgICBpZiAodGhpcy5vdmVybGF5KSB7XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXkucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG59IiwgIi8vIFx1NEY3Rlx1NzUyOCByZXF1aXJlIFx1NUJGQ1x1NTE2NSBKU09OIFx1NjU4N1x1NEVGNlx1NEVFNVx1OTA3Rlx1NTE0RCBUeXBlU2NyaXB0IFx1NzY4NCBKU09OIFx1NkEyMVx1NTc1N1x1ODlFM1x1Njc5MFx1OTVFRVx1OTg5OFxuY29uc3QgZGVmYXVsdFRlbXBsYXRlID0gcmVxdWlyZSgnLi9kZWZhdWx0Lmpzb24nKTtcbmNvbnN0IG1pbmltYWxUZW1wbGF0ZSA9IHJlcXVpcmUoJy4vbWluaW1hbC5qc29uJyk7XG5jb25zdCBlbGVnYW50VGVtcGxhdGUgPSByZXF1aXJlKCcuL2VsZWdhbnQuanNvbicpO1xuY29uc3QgZGFya1RlbXBsYXRlID0gcmVxdWlyZSgnLi9kYXJrLmpzb24nKTtcbmNvbnN0IGFjYWRlbWljVGVtcGxhdGUgPSByZXF1aXJlKCcuL2FjYWRlbWljLmpzb24nKTtcblxuZXhwb3J0IGNvbnN0IHRlbXBsYXRlcyA9IHtcbiAgICBkZWZhdWx0OiBkZWZhdWx0VGVtcGxhdGUsXG4gICAgbWluaW1hbDogbWluaW1hbFRlbXBsYXRlLFxuICAgIGVsZWdhbnQ6IGVsZWdhbnRUZW1wbGF0ZSxcbiAgICBkYXJrOiBkYXJrVGVtcGxhdGUsXG4gICAgYWNhZGVtaWM6IGFjYWRlbWljVGVtcGxhdGVcbn07IiwgImltcG9ydCB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB7IHRlbXBsYXRlcyB9IGZyb20gJy4vdGVtcGxhdGVzJztcblxuaW50ZXJmYWNlIFRlbXBsYXRlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBzdHlsZXM6IHtcbiAgICAgICAgY29udGFpbmVyOiBzdHJpbmc7XG4gICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICBoMTogc3RyaW5nO1xuICAgICAgICAgICAgaDI6IHN0cmluZztcbiAgICAgICAgICAgIGgzOiBzdHJpbmc7XG4gICAgICAgICAgICBiYXNlOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIHBhcmFncmFwaDogc3RyaW5nO1xuICAgICAgICBsaXN0OiB7XG4gICAgICAgICAgICBjb250YWluZXI6IHN0cmluZztcbiAgICAgICAgICAgIGl0ZW06IHN0cmluZztcbiAgICAgICAgICAgIHRhc2tMaXN0OiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIHF1b3RlOiBzdHJpbmc7XG4gICAgICAgIGNvZGU6IHtcbiAgICAgICAgICAgIGJsb2NrOiBzdHJpbmc7XG4gICAgICAgICAgICBpbmxpbmU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgICAgaW1hZ2U6IHN0cmluZztcbiAgICAgICAgbGluazogc3RyaW5nO1xuICAgICAgICBlbXBoYXNpczoge1xuICAgICAgICAgICAgc3Ryb25nOiBzdHJpbmc7XG4gICAgICAgICAgICBlbTogc3RyaW5nO1xuICAgICAgICAgICAgZGVsOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIHRhYmxlOiB7XG4gICAgICAgICAgICBjb250YWluZXI6IHN0cmluZztcbiAgICAgICAgICAgIGhlYWRlcjogc3RyaW5nO1xuICAgICAgICAgICAgY2VsbDogc3RyaW5nO1xuICAgICAgICB9O1xuICAgICAgICBocjogc3RyaW5nO1xuICAgICAgICBmb290bm90ZToge1xuICAgICAgICAgICAgcmVmOiBzdHJpbmc7XG4gICAgICAgICAgICBiYWNrcmVmOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlTWFuYWdlciB7XG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZXM6IE1hcDxzdHJpbmcsIFRlbXBsYXRlPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIGN1cnJlbnRUZW1wbGF0ZTogVGVtcGxhdGU7XG4gICAgcHJpdmF0ZSBjdXJyZW50Rm9udDogc3RyaW5nID0gJy1hcHBsZS1zeXN0ZW0nO1xuICAgIHByaXZhdGUgY3VycmVudEZvbnRTaXplOiBudW1iZXIgPSAxNjtcbiAgICBwcml2YXRlIGFwcDogQXBwO1xuXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHApIHtcbiAgICAgICAgdGhpcy5hcHAgPSBhcHA7XG4gICAgICAgIHRoaXMubG9hZFRlbXBsYXRlcygpOyAvLyBcdTUyQTBcdThGN0RcdTZBMjFcdTY3N0ZcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgbG9hZFRlbXBsYXRlcygpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFx1NzZGNFx1NjNBNVx1NEVDRVx1NTE4NVx1N0Y2RVx1NkEyMVx1Njc3Rlx1NTJBMFx1OEY3RFxuICAgICAgICAgICAgT2JqZWN0LnZhbHVlcyh0ZW1wbGF0ZXMpLmZvckVhY2godGVtcGxhdGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVzLnNldCh0ZW1wbGF0ZS5pZCwgdGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZS5pZCA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdcdTUyQTBcdThGN0RcdTZBMjFcdTY3N0ZcdTU5MzFcdThEMjU6JywgZXJyb3IpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcdTY1RTBcdTZDRDVcdTUyQTBcdThGN0RcdTZBMjFcdTY3N0ZcdTY1ODdcdTRFRjYnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUZW1wbGF0ZShpZDogc3RyaW5nKTogVGVtcGxhdGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuZ2V0KGlkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q3VycmVudFRlbXBsYXRlKCk6IFRlbXBsYXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRlbXBsYXRlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRDdXJyZW50VGVtcGxhdGUoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzLmdldChpZCk7XG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50VGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QWxsVGVtcGxhdGVzKCk6IFRlbXBsYXRlW10ge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRlbXBsYXRlcy52YWx1ZXMoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZvbnQoZm9udEZhbWlseTogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvbnQgPSBmb250RmFtaWx5O1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGb250U2l6ZShzaXplOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Rm9udFNpemUgPSBzaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcHBseVRlbXBsYXRlKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0eWxlcyA9IHRoaXMuY3VycmVudFRlbXBsYXRlLnN0eWxlcztcbiAgICAgICAgY29uc3QgdGFibGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGNvbnN0IHRkID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0ZCcpO1xuICAgICAgICBcbiAgICAgICAgaWYgKCF0YWJsZSB8fCAhdGQpIHJldHVybjtcblxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTVCQjlcdTU2NjhcdTY4MzdcdTVGMEZcdTUyMzBcdTg4NjhcdTY4M0NcbiAgICAgICAgdGFibGUuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlcy5jb250YWluZXIpO1xuICAgICAgICB0YWJsZS5zZXRBdHRyaWJ1dGUoJ2NlbGxwYWRkaW5nJywgJzAnKTtcbiAgICAgICAgdGFibGUuc2V0QXR0cmlidXRlKCdjZWxsc3BhY2luZycsICcwJyk7XG4gICAgICAgIFxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTU3RkFcdTc4NDBcdTY4MzdcdTVGMEZcdTUyMzBcdTUzNTVcdTUxNDNcdTY4M0NcbiAgICAgICAgdGQuc3R5bGUuY3NzVGV4dCA9IGBcbiAgICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDtcbiAgICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMS43O1xuICAgICAgICAgICAgb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDtcbiAgICAgICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTtcbiAgICAgICAgYDtcbiAgICAgICAgXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NjgwN1x1OTg5OFx1NjgzN1x1NUYwRlxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdoMScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy50aXRsZS5oMX07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9O2ApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnaDInKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMudGl0bGUuaDJ9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTtgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2gzJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLnRpdGxlLmgzfTsgZm9udC1mYW1pbHk6ICR7dGhpcy5jdXJyZW50Rm9udH07YCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdoNCwgaDUsIGg2JykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLnRpdGxlLmJhc2V9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTtgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1RTk0XHU3NTI4XHU2QkI1XHU4NDNEXHU2ODM3XHU1RjBGXG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ3AnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIC8vIFx1NjhDMFx1NjdFNVx1NjYyRlx1NTQyNlx1NEUzQVx1NjcwMFx1NTkxNlx1NUM0Mlx1NkJCNVx1ODQzRFxuICAgICAgICAgICAgaWYgKCFlbC5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KCdwJykgJiYgIWVsLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoJ2Jsb2NrcXVvdGUnKSkge1xuICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMucGFyYWdyYXBofTsgZm9udC1mYW1pbHk6ICR7dGhpcy5jdXJyZW50Rm9udH07IGZvbnQtc2l6ZTogJHt0aGlzLmN1cnJlbnRGb250U2l6ZX1weDtgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1RTk0XHU3NTI4XHU1MjE3XHU4ODY4XHU2ODM3XHU1RjBGXG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ3VsLCBvbCcpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlcy5saXN0LmNvbnRhaW5lcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5saXN0Lml0ZW19OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTsgZm9udC1zaXplOiAke3RoaXMuY3VycmVudEZvbnRTaXplfXB4O2ApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnLnRhc2stbGlzdC1pdGVtJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLmxpc3QudGFza0xpc3R9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTsgZm9udC1zaXplOiAke3RoaXMuY3VycmVudEZvbnRTaXplfXB4O2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTVGMTVcdTc1MjhcdTY4MzdcdTVGMEZcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnYmxvY2txdW90ZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5xdW90ZX07IGZvbnQtZmFtaWx5OiAke3RoaXMuY3VycmVudEZvbnR9OyBmb250LXNpemU6ICR7dGhpcy5jdXJyZW50Rm9udFNpemV9cHg7YCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NEVFM1x1NzgwMVx1NjgzN1x1NUYwRlxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdwcmUnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMuY29kZS5ibG9ja307IGZvbnQtc2l6ZTogJHt0aGlzLmN1cnJlbnRGb250U2l6ZX1weDtgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2NvZGU6bm90KHByZSBjb2RlKScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5jb2RlLmlubGluZX07IGZvbnQtc2l6ZTogJHt0aGlzLmN1cnJlbnRGb250U2l6ZX1weDtgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU1RTk0XHU3NTI4XHU5NEZFXHU2M0E1XHU2ODM3XHU1RjBGXG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2EnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZXMubGluayk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NUYzQVx1OEMwM1x1NjgzN1x1NUYwRlxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdzdHJvbmcnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZXMuZW1waGFzaXMuc3Ryb25nKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2VtJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVzLmVtcGhhc2lzLmVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2RlbCcpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlcy5lbXBoYXNpcy5kZWwpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTg4NjhcdTY4M0NcdTY4MzdcdTVGMEZcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgndGFibGUnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGlmIChlbCA9PT0gdGFibGUpIHJldHVybjsgLy8gXHU4REYzXHU4RkM3XHU1MzA1XHU4OEY5XHU4ODY4XHU2ODNDXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgc3R5bGVzLnRhYmxlLmNvbnRhaW5lcik7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy50YWJsZS5oZWFkZXJ9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTsgZm9udC1zaXplOiAke3RoaXMuY3VycmVudEZvbnRTaXplfXB4O2ApO1xuICAgICAgICB9KTtcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgndGQnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGlmIChlbCA9PT0gdGQpIHJldHVybjsgLy8gXHU4REYzXHU4RkM3XHU1MzA1XHU4OEY5XHU1MzU1XHU1MTQzXHU2ODNDXG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLnRhYmxlLmNlbGx9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTsgZm9udC1zaXplOiAke3RoaXMuY3VycmVudEZvbnRTaXplfXB4O2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTUyMDZcdTUyNzJcdTdFQkZcdTY4MzdcdTVGMEZcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnaHInKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZXMuaHIpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTgxMUFcdTZDRThcdTY4MzdcdTVGMEZcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnLmZvb3Rub3RlLXJlZicpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIHN0eWxlcy5mb290bm90ZS5yZWYpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgnLmZvb3Rub3RlLWJhY2tyZWYnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBzdHlsZXMuZm9vdG5vdGUuYmFja3JlZik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIFx1NUU5NFx1NzUyOFx1NTZGRVx1NzI0N1x1NjgzN1x1NUYwRlxuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdpbWcnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGltZyA9IGVsIGFzIEhUTUxJbWFnZUVsZW1lbnQ7XG4gICAgICAgICAgICAvLyBcdTVFOTRcdTc1MjhcdTU3RkFcdTc4NDBcdTY4MzdcdTVGMEZcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMuaW1hZ2V9OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTtgKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gXHU1OTgyXHU2NzlDXHU1NkZFXHU3MjQ3XHU2NjJGXHU2QkI1XHU4NDNEXHU0RTJEXHU1NTJGXHU0RTAwXHU3Njg0XHU1MTQzXHU3RDIwXHVGRjBDXHU2MjREXHU4QkJFXHU3RjZFXHU1QzQ1XHU0RTJEXG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBpbWcucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3AnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnQuc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5zdHlsZS5tYXJnaW4gPSAnMWVtIDAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU2NkY0XHU2NUIwXHU0RUUzXHU3ODAxXHU1NzU3XHU2ODM3XHU1RjBGXHU1RTk0XHU3NTI4XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5jb2RlLmJsb2NrfTtgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gXHU2NkY0XHU2NUIwXHU1RjE1XHU3NTI4XHU1NzU3XHU2ODM3XHU1RjBGXHU1RTk0XHU3NTI4XG4gICAgICAgIHRkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2Jsb2NrcXVvdGUnKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnc3R5bGUnLCBgJHtzdHlsZXMucXVvdGV9O2ApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBcdTY2RjRcdTY1QjBcdTUyMTdcdTg4NjhcdTY4MzdcdTVGMEZcdTVFOTRcdTc1MjhcbiAgICAgICAgdGQucXVlcnlTZWxlY3RvckFsbCgndWwsIG9sJykuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgYCR7c3R5bGVzLmxpc3QuY29udGFpbmVyfTsgZm9udC1mYW1pbHk6ICR7dGhpcy5jdXJyZW50Rm9udH07YCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0ZC5xdWVyeVNlbGVjdG9yQWxsKCdsaScpLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIGAke3N0eWxlcy5saXN0Lml0ZW19OyBmb250LWZhbWlseTogJHt0aGlzLmN1cnJlbnRGb250fTsgZm9udC1zaXplOiAke3RoaXMuY3VycmVudEZvbnRTaXplfXB4O2ApO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCB0ZW1wbGF0ZU1hbmFnZXIgPSAoYXBwOiBBcHApID0+IG5ldyBUZW1wbGF0ZU1hbmFnZXIoYXBwKTtcbiIsICJpbnRlcmZhY2UgTVBTZXR0aW5ncyB7XG4gICAgdGVtcGxhdGVJZDogc3RyaW5nO1xuICAgIGZvbnRGYW1pbHk6IHN0cmluZztcbiAgICBmb250U2l6ZTogbnVtYmVyO1xufVxuXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBNUFNldHRpbmdzID0ge1xuICAgIHRlbXBsYXRlSWQ6ICdkZWZhdWx0JyxcbiAgICBmb250RmFtaWx5OiAnLWFwcGxlLXN5c3RlbScsXG4gICAgZm9udFNpemU6IDE2XG59O1xuXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NNYW5hZ2VyIHtcbiAgICBwcml2YXRlIHBsdWdpbjogYW55O1xuICAgIHByaXZhdGUgc2V0dGluZ3M6IE1QU2V0dGluZ3M7XG5cbiAgICBjb25zdHJ1Y3RvcihwbHVnaW46IGFueSkge1xuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IERFRkFVTFRfU0VUVElOR1M7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZFNldHRpbmdzKCkge1xuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9TRVRUSU5HUywgYXdhaXQgdGhpcy5wbHVnaW4ubG9hZERhdGEoKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcbiAgICB9XG5cbiAgICBnZXRTZXR0aW5ncygpOiBNUFNldHRpbmdzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M7XG4gICAgfVxuXG4gICAgYXN5bmMgdXBkYXRlU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8TVBTZXR0aW5ncz4pIHtcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IHsgLi4udGhpcy5zZXR0aW5ncywgLi4uc2V0dGluZ3MgfTtcbiAgICAgICAgYXdhaXQgdGhpcy5zYXZlU2V0dGluZ3MoKTtcbiAgICB9XG59Il0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUEsd0NBQUFBLFNBQUE7QUFBQSxJQUFBQSxRQUFBO0FBQUEsTUFDSSxJQUFNO0FBQUEsTUFDTixNQUFRO0FBQUEsTUFDUixRQUFVO0FBQUEsUUFDTixXQUFhO0FBQUEsUUFDYixPQUFTO0FBQUEsVUFDTCxJQUFNO0FBQUEsVUFDTixJQUFNO0FBQUEsVUFDTixJQUFNO0FB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Z0JBQU0sS0FBSyxhQUFhO0FBQUEsUUFDNUI7QUFBQSxNQUNKLENBQUM7QUFHRCxXQUFLLElBQUksVUFBVSxjQUFjLE1BQU07QUFDbkMsYUFBSyxhQUFhO0FBQUEsTUFDdEIsQ0FBQztBQUNELGtCQUFZLFdBQVcsS0FBSyxHQUFHO0FBQUEsSUFDbkM7QUFBQTtBQUFBLEVBRU0sV0FBVztBQUFBO0FBRWIsV0FBSyxJQUFJLFVBQVUsbUJBQW1CLFlBQVk7QUFBQSxJQUN0RDtBQUFBO0FBQUEsRUFFTSxlQUFlO0FBQUE7QUFFakIsWUFBTSxTQUFTLEtBQUssSUFBSSxVQUFVLGdCQUFnQixZQUFZO0FBQzlELFVBQUksT0FBTyxTQUFTLEdBQUc7QUFDbkIsYUFBSyxJQUFJLFVBQVUsV0FBVyxPQUFPLENBQUMsQ0FBQztBQUN2QztBQUFBLE1BQ0o7QUFHQSxZQUFNLFlBQVksS0FBSyxJQUFJLFVBQVUsYUFBYSxLQUFLO0FBQ3ZELFVBQUksV0FBVztBQUNYLGNBQU0sVUFBVSxhQUFhO0FBQUEsVUFDekIsTUFBTTtBQUFBLFVBQ04sUUFBUTtBQUFBLFFBQ1osQ0FBQztBQUFBLE1BQ0wsT0FBTztBQUVILFlBQUksd0JBQU8sa0RBQVU7QUFBQSxNQUN6QjtBQUFBLElBQ0o7QUFBQTtBQUNKOyIsCiAgIm5hbWVzIjogWyJtb2R1bGUiLCAibW9kdWxlIiwgIm1vZHVsZSIsICJtb2R1bGUiLCAibW9kdWxlIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAidGVtcGxhdGVzIl0KfQo= diff --git a/src/converter.ts b/src/converter.ts index 52a3efe..d620d69 100644 --- a/src/converter.ts +++ b/src/converter.ts @@ -140,10 +140,7 @@ export class MPConverter { try { // 获取文件的元数据 const linktext = src.split('|')[0]; // 处理可能带有别名的链接 - console.log(src); - console.log(linktext); const file = this.app.metadataCache.getFirstLinkpathDest(linktext, ''); - console.log(file); if (file) { const absolutePath = this.app.vault.adapter.getResourcePath(file.path); const newImg = document.createElement('img'); diff --git a/src/copyManager.ts b/src/copyManager.ts index 9dd086f..6191eda 100644 --- a/src/copyManager.ts +++ b/src/copyManager.ts @@ -58,7 +58,6 @@ export class CopyManager { container.style.left = '-9999px'; container.innerHTML = element.innerHTML; document.body.appendChild(container); - console.log(element.innerHTML); // 处理图片转换为 base64 await this.processImages(container); diff --git a/src/main.ts b/src/main.ts index a121e43..511f3a9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,7 +3,7 @@ import { MPView, VIEW_TYPE_MP } from './view'; import { TemplateManager } from './templateManager'; import { SettingsManager } from './settings'; import { MPConverter } from './converter'; - +import { DonateManager } from './donateManager'; export default class MPPlugin extends Plugin { private settingsManager: SettingsManager; diff --git a/src/templateManager.ts b/src/templateManager.ts index 0589372..198c5ba 100644 --- a/src/templateManager.ts +++ b/src/templateManager.ts @@ -1,4 +1,5 @@ import { App } from 'obsidian'; +import { templates } from './templates'; interface Template { id: string; @@ -56,40 +57,13 @@ export class TemplateManager { public async loadTemplates() { try { - const configDir = this.app.vault.configDir; - const templatesPath = `${configDir}/plugins/obsidian-to-mp/templates`; - - // 加载默认模板 - const defaultTemplate = JSON.parse( - await this.app.vault.adapter.read(`${templatesPath}/default.json`) - ); - this.templates.set(defaultTemplate.id, defaultTemplate); - this.currentTemplate = defaultTemplate; - - // 加载极简主题 - const minimalTemplate = JSON.parse( - await this.app.vault.adapter.read(`${templatesPath}/minimal.json`) - ); - this.templates.set(minimalTemplate.id, minimalTemplate); - - // 加载优雅主题 - const elegantTemplate = JSON.parse( - await this.app.vault.adapter.read(`${templatesPath}/elegant.json`) - ); - this.templates.set(elegantTemplate.id, elegantTemplate); - - // 加载深色主题 - const darkTemplate = JSON.parse( - await this.app.vault.adapter.read(`${templatesPath}/dark.json`) - ); - this.templates.set(darkTemplate.id, darkTemplate); - - // 加载学术主题 - const academicTemplate = JSON.parse( - await this.app.vault.adapter.read(`${templatesPath}/academic.json`) - ); - this.templates.set(academicTemplate.id, academicTemplate); - + // 直接从内置模板加载 + Object.values(templates).forEach(template => { + this.templates.set(template.id, template); + if (template.id === 'default') { + this.currentTemplate = template; + } + }); } catch (error) { console.error('加载模板失败:', error); throw new Error('无法加载模板文件'); diff --git a/templates/academic.json b/src/templates/academic.json similarity index 100% rename from templates/academic.json rename to src/templates/academic.json diff --git a/templates/dark.json b/src/templates/dark.json similarity index 100% rename from templates/dark.json rename to src/templates/dark.json diff --git a/templates/default.json b/src/templates/default.json similarity index 100% rename from templates/default.json rename to src/templates/default.json diff --git a/templates/elegant.json b/src/templates/elegant.json similarity index 100% rename from templates/elegant.json rename to src/templates/elegant.json diff --git a/src/templates/index.ts b/src/templates/index.ts new file mode 100644 index 0000000..d2d099d --- /dev/null +++ b/src/templates/index.ts @@ -0,0 +1,14 @@ +// 使用 require 导入 JSON 文件以避免 TypeScript 的 JSON 模块解析问题 +const defaultTemplate = require('./default.json'); +const minimalTemplate = require('./minimal.json'); +const elegantTemplate = require('./elegant.json'); +const darkTemplate = require('./dark.json'); +const academicTemplate = require('./academic.json'); + +export const templates = { + default: defaultTemplate, + minimal: minimalTemplate, + elegant: elegantTemplate, + dark: darkTemplate, + academic: academicTemplate +}; \ No newline at end of file diff --git a/templates/minimal.json b/src/templates/minimal.json similarity index 100% rename from templates/minimal.json rename to src/templates/minimal.json diff --git a/tsconfig.json b/tsconfig.json index 232f9fa..42016fe 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -20,5 +20,5 @@ }, "include": [ "src/**/*.ts" - ] +, "templates/index.ts" ] } \ No newline at end of file