diff --git a/src/frame.ts b/src/frame.ts index c7c99a1..1167e86 100644 --- a/src/frame.ts +++ b/src/frame.ts @@ -12,19 +12,29 @@ export class CustomFrame { this.data = data; } - create(additionalStyle: string = undefined, urlSuffix: string = undefined): any { + create(parent: HTMLElement, additionalStyle: string = undefined, urlSuffix: string = undefined): void { let style = `padding: ${this.settings.padding}px;`; if (additionalStyle) style += additionalStyle; if (Platform.isDesktopApp && !this.data.forceIframe) { - this.frame = document.createElement("webview"); + let frameDoc = parent.doc; + this.frame = frameDoc.createElement("webview"); + parent.appendChild(this.frame); this.frame.setAttribute("allowpopups", ""); this.frame.addEventListener("dom-ready", () => { this.frame.setZoomFactor(this.data.zoomLevel); this.frame.insertCSS(this.data.customCss); }); + this.frame.addEventListener("destroyed", () => { + // recreate the webview if it was moved to a new window + if (frameDoc != parent.doc) { + this.frame.detach(); + this.create(parent, additionalStyle, urlSuffix); + } + }); } else { - this.frame = document.createElement("iframe"); + this.frame = parent.doc.createElement("iframe"); + parent.appendChild(this.frame); this.frame.setAttribute("sandbox", "allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation"); this.frame.setAttribute("allow", "encrypted-media; fullscreen; oversized-images; picture-in-picture; sync-xhr; geolocation;"); style += `transform: scale(${this.data.zoomLevel}); transform-origin: 0 0;`; @@ -40,8 +50,6 @@ export class CustomFrame { src += urlSuffix; } this.frame.setAttribute("src", src); - - return this.frame; } refresh(): void { diff --git a/src/main.ts b/src/main.ts index f021850..49656b8 100644 --- a/src/main.ts +++ b/src/main.ts @@ -68,7 +68,7 @@ export default class CustomFramesPlugin extends Plugin { urlSuffix ||= ""; let frame = new CustomFrame(this.settings, data); - e.appendChild(frame.create(style, urlSuffix)); + frame.create(e, style, urlSuffix); }); } diff --git a/src/view.ts b/src/view.ts index f1aba41..5b111eb 100644 --- a/src/view.ts +++ b/src/view.ts @@ -53,7 +53,7 @@ export class CustomFrameView extends ItemView { onload(): void { this.contentEl.empty(); this.contentEl.addClass("custom-frames-view"); - this.contentEl.appendChild(this.frame.create()); + this.frame.create(this.contentEl); } onPaneMenu(menu: Menu, source: string): void { diff --git a/test-vault/.obsidian/plugins/obsidian-custom-frames/data.json b/test-vault/.obsidian/plugins/obsidian-custom-frames/data.json index 0143e9a..6151f36 100644 --- a/test-vault/.obsidian/plugins/obsidian-custom-frames/data.json +++ b/test-vault/.obsidian/plugins/obsidian-custom-frames/data.json @@ -32,6 +32,17 @@ "zoomLevel": 1, "forceIframe": false, "customCss": "/* hide the menu bar, \"Keep\" text, and logo */\nhtml > body > div:nth-child(2) > div:nth-child(2) > div:first-child[class*=\" \"],\nhtml > body > div:first-child > header:first-child > div > div:first-child > div > div:first-child,\nhtml > body > div:nth-child(2) > div:nth-child(2) > div:first-child > div:first-child {\ndisplay: none !important;\n}" + }, + { + "url": "https://scholar.google.com", + "displayName": "Scholar", + "icon": "book", + "hideOnMobile": false, + "addRibbonIcon": true, + "openInCenter": false, + "zoomLevel": 1, + "forceIframe": false, + "customCss": "" } ], "padding": 5 diff --git a/test-vault/.obsidian/plugins/obsidian-custom-frames/main b/test-vault/.obsidian/plugins/obsidian-custom-frames/main index f5f8b48..cf86647 100644 --- a/test-vault/.obsidian/plugins/obsidian-custom-frames/main +++ b/test-vault/.obsidian/plugins/obsidian-custom-frames/main @@ -181,19 +181,28 @@ var CustomFrame = class { this.settings = settings; this.data = data; } - create(additionalStyle = void 0, urlSuffix = void 0) { + create(parent, additionalStyle = void 0, urlSuffix = void 0) { let style = `padding: ${this.settings.padding}px;`; if (additionalStyle) style += additionalStyle; if (import_obsidian.Platform.isDesktopApp && !this.data.forceIframe) { - this.frame = document.createElement("webview"); + let frameDoc = parent.doc; + this.frame = frameDoc.createElement("webview"); + parent.appendChild(this.frame); this.frame.setAttribute("allowpopups", ""); this.frame.addEventListener("dom-ready", () => { this.frame.setZoomFactor(this.data.zoomLevel); this.frame.insertCSS(this.data.customCss); }); + this.frame.addEventListener("destroyed", () => { + if (frameDoc != parent.doc) { + this.frame.detach(); + this.create(parent, additionalStyle, urlSuffix); + } + }); } else { - this.frame = document.createElement("iframe"); + this.frame = parent.doc.createElement("iframe"); + parent.appendChild(this.frame); this.frame.setAttribute("sandbox", "allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation"); this.frame.setAttribute("allow", "encrypted-media; fullscreen; oversized-images; picture-in-picture; sync-xhr; geolocation;"); style += `transform: scale(${this.data.zoomLevel}); transform-origin: 0 0;`; @@ -208,7 +217,6 @@ var CustomFrame = class { src += urlSuffix; } this.frame.setAttribute("src", src); - return this.frame; } refresh() { if (this.frame instanceof HTMLIFrameElement) { @@ -422,7 +430,7 @@ var _CustomFrameView = class extends import_obsidian3.ItemView { onload() { this.contentEl.empty(); this.contentEl.addClass("custom-frames-view"); - this.contentEl.appendChild(this.frame.create()); + this.frame.create(this.contentEl); } onPaneMenu(menu, source) { super.onPaneMenu(menu, source); @@ -539,7 +547,7 @@ var CustomFramesPlugin = class extends import_obsidian4.Plugin { let urlSuffix = urlSuffixMatch && urlSuffixMatch[1].trim(); urlSuffix || (urlSuffix = ""); let frame = new CustomFrame(this.settings, data); - e.appendChild(frame.create(style, urlSuffix)); + frame.create(e, style, urlSuffix); }); }); } @@ -570,4 +578,4 @@ var CustomFramesPlugin = class extends import_obsidian4.Plugin { }); } }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtLCBXb3Jrc3BhY2VMZWFmIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiwgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZXNTZXR0aW5nVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3MtdGFiXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lVmlldyB9IGZyb20gXCIuL3ZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUZyYW1lc1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG5cdHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuXHJcblx0YXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHRmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnNldHRpbmdzLmZyYW1lcykge1xyXG5cdFx0XHRpZiAoIWZyYW1lLnVybCB8fCAhZnJhbWUuZGlzcGxheU5hbWUpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdGxldCBuYW1lID0gYGN1c3RvbS1mcmFtZXMtJHtnZXRJZChmcmFtZSl9YDtcclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGZyYW1lLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBTa2lwcGluZyBmcmFtZSAke25hbWV9IHdoaWNoIGlzIGhpZGRlbiBvbiBtb2JpbGVgKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBSZWdpc3RlcmluZyBmcmFtZSAke25hbWV9IGZvciBVUkwgJHtmcmFtZS51cmx9YCk7XHJcblxyXG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJWaWV3KG5hbWUsIGwgPT4gbmV3IEN1c3RvbUZyYW1lVmlldyhsLCB0aGlzLnNldHRpbmdzLCBmcmFtZSwgbmFtZSkpO1xyXG5cdFx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0XHRpZDogYG9wZW4tJHtuYW1lfWAsXHJcblx0XHRcdFx0XHRuYW1lOiBgT3BlbiAke2ZyYW1lLmRpc3BsYXlOYW1lfWAsXHJcblx0XHRcdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5vcGVuTGVhZihuYW1lLCBmcmFtZS5vcGVuSW5DZW50ZXIsIGZhbHNlKSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKGZyYW1lLmFkZFJpYmJvbkljb24pXHJcblx0XHRcdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oZ2V0SWNvbihmcmFtZSksIGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdFx0ZSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgUGxhdGZvcm0uaXNNYWNPUyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpO1xyXG5cdFx0XHR9IGNhdGNoIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBDb3VsZG4ndCByZWdpc3RlciBmcmFtZSAke25hbWV9LCBpcyB0aGVyZSBhbHJlYWR5IG9uZSB3aXRoIHRoZSBzYW1lIG5hbWU/YCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXCJjdXN0b20tZnJhbWVzXCIsIChzLCBlKSA9PiB7XHJcblx0XHRcdGUuZW1wdHkoKTtcclxuXHRcdFx0ZS5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtdmlldy1maWxlXCIpO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lTWF0Y2ggPSAvZnJhbWU6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCBmcmFtZU5hbWUgPSBmcmFtZU1hdGNoICYmIGZyYW1lTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRpZiAoIWZyYW1lTmFtZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQ291bGRuJ3QgcGFyc2UgZnJhbWUgbmFtZVwiIH0pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZGF0YSA9IHRoaXMuc2V0dGluZ3MuZnJhbWVzLmZpbmQoZiA9PiBmLmRpc3BsYXlOYW1lID09IGZyYW1lTmFtZSk7XHJcblx0XHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGBDb3VsZG4ndCBmaW5kIGEgZnJhbWUgd2l0aCBuYW1lICR7ZnJhbWVOYW1lfWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChQbGF0Zm9ybS5pc01vYmlsZUFwcCAmJiBkYXRhLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGAke2ZyYW1lTmFtZX0gaXMgaGlkZGVuIG9uIG1vYmlsZWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXQgc3R5bGVNYXRjaCA9IC9zdHlsZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHN0eWxlID0gc3R5bGVNYXRjaCAmJiBzdHlsZU1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0c3R5bGUgfHw9IFwiaGVpZ2h0OiA2MDBweDtcIjtcclxuXHJcblx0XHRcdGxldCB1cmxTdWZmaXhNYXRjaCA9IC91cmxzdWZmaXg6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCB1cmxTdWZmaXggPSB1cmxTdWZmaXhNYXRjaCAmJiB1cmxTdWZmaXhNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdHVybFN1ZmZpeCB8fD0gXCJcIjtcclxuXHJcblx0XHRcdGxldCBmcmFtZSA9IG5ldyBDdXN0b21GcmFtZSh0aGlzLnNldHRpbmdzLCBkYXRhKTtcclxuXHRcdFx0ZS5hcHBlbmRDaGlsZChmcmFtZS5jcmVhdGUoc3R5bGUsIHVybFN1ZmZpeCkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgb3BlbkxlYWYobmFtZTogc3RyaW5nLCBjZW50ZXI6IGJvb2xlYW4sIHNwbGl0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRsZXQgbGVhZjogV29ya3NwYWNlTGVhZjtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0bGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWFmKHNwbGl0KTtcclxuXHRcdFx0YXdhaXQgbGVhZi5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoIXRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSkubGVuZ3RoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRSaWdodExlYWYoZmFsc2UpLnNldFZpZXdTdGF0ZSh7IHR5cGU6IG5hbWUsIGFjdGl2ZTogdHJ1ZSB9KTtcclxuXHRcdFx0bGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF07XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKGxlYWYpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGxlYWYudmlldyBpbnN0YW5jZW9mIEN1c3RvbUZyYW1lVmlldylcclxuXHRcdFx0bGVhZi52aWV3LmZvY3VzKCk7XHJcblx0fVxyXG59XHJcbiIsICJpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZVNldHRpbmdzLCBDdXN0b21GcmFtZXNTZXR0aW5ncywgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZShhZGRpdGlvbmFsU3R5bGU6IHN0cmluZyA9IHVuZGVmaW5lZCwgdXJsU3VmZml4OiBzdHJpbmcgPSB1bmRlZmluZWQpOiBhbnkge1xyXG4gICAgICAgIGxldCBzdHlsZSA9IGBwYWRkaW5nOiAke3RoaXMuc2V0dGluZ3MucGFkZGluZ31weDtgO1xyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsU3R5bGUpXHJcbiAgICAgICAgICAgIHN0eWxlICs9IGFkZGl0aW9uYWxTdHlsZTtcclxuICAgICAgICBpZiAoUGxhdGZvcm0uaXNEZXNrdG9wQXBwICYmICF0aGlzLmRhdGEuZm9yY2VJZnJhbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ3ZWJ2aWV3XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93cG9wdXBzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRab29tRmFjdG9yKHRoaXMuZGF0YS56b29tTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5pbnNlcnRDU1ModGhpcy5kYXRhLmN1c3RvbUNzcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInNhbmRib3hcIiwgXCJhbGxvdy1mb3JtcyBhbGxvdy1tb2RhbHMgYWxsb3ctcG9wdXBzIGFsbG93LXByZXNlbnRhdGlvbiBhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIGFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvblwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd1wiLCBcImVuY3J5cHRlZC1tZWRpYTsgZnVsbHNjcmVlbjsgb3ZlcnNpemVkLWltYWdlczsgcGljdHVyZS1pbi1waWN0dXJlOyBzeW5jLXhocjsgZ2VvbG9jYXRpb247XCIpO1xyXG4gICAgICAgICAgICBzdHlsZSArPSBgdHJhbnNmb3JtOiBzY2FsZSgke3RoaXMuZGF0YS56b29tTGV2ZWx9KTsgdHJhbnNmb3JtLW9yaWdpbjogMCAwO2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJhbWUuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLWZyYW1lXCIpO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuYWRkQ2xhc3MoYGN1c3RvbS1mcmFtZXMtJHtnZXRJZCh0aGlzLmRhdGEpfWApO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xyXG5cclxuICAgICAgICBsZXQgc3JjID0gdGhpcy5kYXRhLnVybDtcclxuICAgICAgICBpZiAodXJsU3VmZml4KSB7XHJcbiAgICAgICAgICAgIGlmICghdXJsU3VmZml4LnN0YXJ0c1dpdGgoXCIvXCIpKVxyXG4gICAgICAgICAgICAgICAgc3JjICs9IFwiL1wiO1xyXG4gICAgICAgICAgICBzcmMgKz0gdXJsU3VmZml4O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCBzcmMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUucmVsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5vcGVuKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUubG9hZFVSTCh0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ29CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29CYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdvRm9yd2FyZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmZvcndhcmQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvRm9yd2FyZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVEZXZUb29scygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mcmFtZS5pc0RldlRvb2xzT3BlbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUub3BlbkRldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmNsb3NlRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCA/IHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmIDogdGhpcy5mcmFtZS5nZXRVUkwoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1cygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5mb2N1cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwgImV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzID0ge1xyXG4gICAgZnJhbWVzOiBbXSxcclxuICAgIHBhZGRpbmc6IDVcclxufTtcclxuZXhwb3J0IGNvbnN0IHByZXNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUZyYW1lU2V0dGluZ3M+ID0ge1xyXG4gICAgXCJvYnNpZGlhblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiT2JzaWRpYW4gRm9ydW1cIixcclxuICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogdHJ1ZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IHRydWUsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH0sXHJcbiAgICBcImRldGV4aWZ5XCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9kZXRleGlmeS5raXJlbGFicy5vcmcvY2xhc3NpZnkuaHRtbFwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkRldGV4aWZ5XCIsXHJcbiAgICAgICAgaWNvbjogXCJ0eXBlXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IHRydWUsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IC45NSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSBpbmZvIGNsdXR0ZXIgYW5kIGFkIGJhbm5lciAqL1xyXG4jY2xhc3NpZnktLWluZm8tYXJlYSxcclxuLmFkc2J5Z29vZ2xlIHtcclxuXHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnRcclxufWBcclxuICAgIH0sXHJcbiAgICBcImNhbGVuZGFyXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9jYWxlbmRhci5nb29nbGUuY29tL2NhbGVuZGFyXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIG1lbnUgYmFyLCBcIktlZXBcIiB0ZXh0LCBhbmQgbG9nbyAqL1xyXG5odG1sID4gYm9keSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2OmZpcnN0LWNoaWxkW2NsYXNzKj1cIiBcIl0sXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkLFxyXG5odG1sID4gYm9keSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2OmZpcnN0LWNoaWxkIHtcclxuZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59YFxyXG4gICAgfSxcclxuICAgIFwia2VlcFwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8va2VlcC5nb29nbGUuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIEtlZXBcIixcclxuICAgICAgICBpY29uOiBcImZpbGVzXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IGAvKiBoaWRlIHRoZSBtZW51IGJhciBhbmQgdGhlIFwiS2VlcFwiIHRleHQgKi9cclxuaHRtbCA+IGJvZHkgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpmaXJzdC1jaGlsZCxcclxuaHRtbCA+IGJvZHkgPiBkaXY6Zmlyc3QtY2hpbGQgPiBoZWFkZXI6Zmlyc3QtY2hpbGQgPiBkaXYgPiBkaXY6Zmlyc3QtY2hpbGQgPiBkaXYgPiBkaXY6Zmlyc3QtY2hpbGQgPiBhOmZpcnN0LWNoaWxkID4gc3BhbiB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59YFxyXG4gICAgfSxcclxuICAgIFwidG9kb2lzdFwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdG9kb2lzdC5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUb2RvaXN0XCIsXHJcbiAgICAgICAgaWNvbjogXCJsaXN0LWNoZWNrc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgaGVscCwgaG9tZSwgc2VhcmNoLCBhbmQgcHJvZHVjdGl2aXR5IG92ZXJ2aWV3IGJ1dHRvbnMsIGNyZWF0ZSBleHRyYSBzcGFjZSwgYW5kIHByZXZlbnQgdG9hc3QgcG9wLXVwIGZyb20gYWN0aW5nIHdlaXJkICovXHJcblthcmlhLWxhYmVsPVwiR28gdG8gSG9tZSB2aWV3XCJdLCAjcXVpY2tfZmluZCwgW2FyaWEtbGFiZWw9XCJQcm9kdWN0aXZpdHlcIl0sIFthcmlhLWxhYmVsPVwiSGVscCAmIEZlZWRiYWNrXCJdIHtcclxuXHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi52aWV3X2NvbnRlbnQge1xyXG5cdHBhZGRpbmctbGVmdDogMTVweDtcclxufVxyXG5cclxuLnZpZXdfaGVhZGVyIHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcblx0cGFkZGluZy10b3A6IDEwcHg7XHJcbn1cclxuXHJcbi51bmRvX3RvYXN0IHtcclxuXHR3aWR0aDogOTUlO1xyXG59YFxyXG4gICAgfSxcclxuICAgIFwibm90aW9uXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly93d3cubm90aW9uLnNvL1wiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIk5vdGlvblwiLFxyXG4gICAgICAgIGljb246IFwiYm94XCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IHRydWUsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiB0cnVlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgXCJ0d2l0dGVyXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly90d2l0dGVyLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIlR3aXR0ZXJcIixcclxuICAgICAgICBpY29uOiBcInR3aXR0ZXJcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21GcmFtZXNTZXR0aW5ncyB7XHJcbiAgICBmcmFtZXM6IEN1c3RvbUZyYW1lU2V0dGluZ3NbXTtcclxuICAgIHBhZGRpbmc6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21GcmFtZVNldHRpbmdzIHtcclxuICAgIHVybDogc3RyaW5nO1xyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICAgIGljb246IHN0cmluZztcclxuICAgIGhpZGVPbk1vYmlsZTogYm9vbGVhbjtcclxuICAgIGFkZFJpYmJvbkljb246IGJvb2xlYW47XHJcbiAgICBvcGVuSW5DZW50ZXI6IGJvb2xlYW47XHJcbiAgICB6b29tTGV2ZWw6IG51bWJlcjtcclxuICAgIGZvcmNlSWZyYW1lOiBib29sZWFuO1xyXG4gICAgY3VzdG9tQ3NzOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uKHNldHRpbmdzOiBDdXN0b21GcmFtZVNldHRpbmdzKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3MuaWNvbiA/IGBsdWNpZGUtJHtzZXR0aW5ncy5pY29ufWAgOiBcImRvY3VtZW50c1wiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWQoc2V0dGluZ3M6IEN1c3RvbUZyYW1lU2V0dGluZ3MpIHtcclxuICAgIHJldHVybiBzZXR0aW5ncy5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccy9nLCBcIi1cIik7XHJcbn1cclxuIiwgImltcG9ydCB7IEFwcCwgQnV0dG9uQ29tcG9uZW50LCBEcm9wZG93bkNvbXBvbmVudCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MsIHByZXNldHMgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgQ3VzdG9tRnJhbWVzUGx1Z2luIGZyb20gXCIuL21haW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GcmFtZXNTZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblxyXG4gICAgcGx1Z2luOiBDdXN0b21GcmFtZXNQbHVnaW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogQ3VzdG9tRnJhbWVzUGx1Z2luKSB7XHJcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiQ3VzdG9tIEZyYW1lcyBTZXR0aW5nc1wiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJQbGVhc2Ugbm90ZSB0aGF0IE9ic2lkaWFuIGhhcyB0byBiZSByZXN0YXJ0ZWQgb3IgcmVsb2FkZWQgZm9yIG1vc3Qgb2YgdGhlc2Ugc2V0dGluZ3MgdG8gdGFrZSBlZmZlY3QuXCIsIGNsczogXCJtb2Qtd2FybmluZ1wiIH0pO1xyXG5cclxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxyXG4gICAgICAgICAgICAuc2V0TmFtZShcIkZyYW1lIFBhZGRpbmdcIilcclxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgcGFkZGluZyB0aGF0IHNob3VsZCBiZSBsZWZ0IGFyb3VuZCB0aGUgaW5zaWRlIG9mIGN1c3RvbSBmcmFtZSBwYW5lcywgaW4gcGl4ZWxzLlwiKVxyXG4gICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIHQuaW5wdXRFbC50eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcpKTtcclxuICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MucGFkZGluZyA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIDogZGVmYXVsdFNldHRpbmdzLnBhZGRpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGZyYW1lIG9mIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcykge1xyXG4gICAgICAgICAgICBsZXQgaGVhZGluZyA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoM1wiLCB7IHRleHQ6IGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiIH0pO1xyXG4gICAgICAgICAgICBsZXQgdG9nZ2xlID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRhaW5lckVsKVxyXG4gICAgICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJTaG93IFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0Q2xhc3MoXCJjdXN0b20tZnJhbWVzLXNob3dcIilcclxuICAgICAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LmhpZGRlbiA9ICFjb250ZW50LmhpZGRlbjtcclxuICAgICAgICAgICAgICAgICAgICB0b2dnbGUuc2V0QnV0dG9uVGV4dChjb250ZW50LmhpZGRlbiA/IFwiU2hvdyBTZXR0aW5nc1wiIDogXCJIaWRlIFNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5jb250YWluZXJFbC5jcmVhdGVEaXYoKTtcclxuICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiRGlzcGxheSBOYW1lXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSBkaXNwbGF5IG5hbWUgdGhhdCB0aGlzIGZyYW1lIHNob3VsZCBoYXZlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuZGlzcGxheU5hbWUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkaW5nLnNldFRleHQoZnJhbWUuZGlzcGxheU5hbWUgfHwgXCJVbm5hbWVkIEZyYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJJY29uXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhjcmVhdGVGcmFnbWVudChmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZVNwYW4oeyB0ZXh0OiBcIlRoZSBpY29uIHRoYXQgdGhpcyBmcmFtZSdzIHBhbmUgc2hvdWxkIGhhdmUuIFRoZSBuYW1lcyBvZiBhbnkgXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImFcIiwgeyB0ZXh0OiBcIkx1Y2lkZSBpY29uc1wiLCBocmVmOiBcImh0dHBzOi8vbHVjaWRlLmRldi9cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZVNwYW4oeyB0ZXh0OiBcIiBjYW4gYmUgdXNlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5pY29uKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5pY29uID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiVVJMXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSBVUkwgdGhhdCBzaG91bGQgYmUgb3BlbmVkIGluIHRoaXMgZnJhbWUuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLnVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUudXJsID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiRGlzYWJsZSBvbiBNb2JpbGVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiQ3VzdG9tIEZyYW1lcyBpcyBhIGxvdCBtb3JlIHJlc3RyaWN0ZWQgb24gbW9iaWxlIGRldmljZXMgYW5kIGRvZXNuJ3QgYWxsb3cgZm9yIHRoZSBzYW1lIHR5cGVzIG9mIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkLiBJZiBhIGZyYW1lIGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZCBvbiBtb2JpbGUsIGl0IGNhbiBiZSBkaXNhYmxlZC5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUb2dnbGUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5oaWRlT25Nb2JpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmhpZGVPbk1vYmlsZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkFkZCBSaWJib24gSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJXaGV0aGVyIGEgYnV0dG9uIHRvIG9wZW4gdGhpcyBmcmFtZSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJpYmJvbi5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUb2dnbGUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5hZGRSaWJib25JY29uKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5hZGRSaWJib25JY29uID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiT3BlbiBpbiBDZW50ZXJcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCBiZSBvcGVuZWQgaW4gdGhlIHVucGlubmVkIGNlbnRlciBlZGl0b3IgcmF0aGVyIHRoYW4gb25lIG9mIHRoZSBwYW5lcyBvbiB0aGUgc2lkZS4gVGhpcyBpcyB1c2VmdWwgZm9yIHNpdGVzIHRoYXQgZG9uJ3Qgd29yayB3ZWxsIGluIGEgbmFycm93IHZpZXcsIG9yIHNpdGVzIHRoYXQgZG9uJ3QgcmVxdWlyZSBhIG5vdGUgdG8gYmUgb3BlbiB3aGVuIHZpZXdlZC5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUb2dnbGUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5vcGVuSW5DZW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLm9wZW5JbkNlbnRlciA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkZvcmNlIGlmcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJXaGV0aGVyIHRoaXMgZnJhbWUgc2hvdWxkIHVzZSBpZnJhbWVzIG9uIGRlc2t0b3AgYXMgb3Bwb3NlZCB0byBFbGVjdHJvbiB3ZWJ2aWV3cy5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJPbmx5IGVuYWJsZSB0aGlzIHNldHRpbmcgaWYgdGhlIGZyYW1lIGlzIGNhdXNpbmcgaXNzdWVzIG9yIGZyZXF1ZW50IGNyYXNoZXMuIFRoaXMgc2V0dGluZyBjYXVzZXMgYWxsIERlc2t0b3Atb25seSBzZXR0aW5ncyB0byBiZSBpZ25vcmVkLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZm9yY2VJZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmZvcmNlSWZyYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiUGFnZSBab29tXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSB6b29tIHRoYXQgdGhpcyBmcmFtZSdzIHBhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZCB3aXRoLCBhcyBhIHBlcmNlbnRhZ2UuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShTdHJpbmcoZnJhbWUuem9vbUxldmVsICogMTAwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuem9vbUxldmVsID0gdi5sZW5ndGggPyBOdW1iZXIodikgLyAxMDAgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGRpdGlvbmFsIENTU1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJBIHNuaXBwZXQgb2YgYWRkaXRpb25hbCBDU1MgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGlzIGZyYW1lLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJiclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiZW1cIiwgeyB0ZXh0OiBcIk5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgYXBwbGllZCBvbiBEZXNrdG9wLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dEFyZWEodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnJvd3MgPSA1O1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5jb2xzID0gNTA7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5jdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmN1c3RvbUNzcyA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiUmVtb3ZlIEZyYW1lXCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnJlbW92ZShmcmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiQ3JlYXRlIGEgbmV3IGZyYW1lLCBlaXRoZXIgZnJvbSBhIHByZXNldCBzaGlwcGVkIHdpdGggdGhlIHBsdWdpbiwgb3IgYSBjdXN0b20gb25lIHRoYXQgeW91IGNhbiBlZGl0IHlvdXJzZWxmLiBFYWNoIGZyYW1lJ3MgcGFuZSBjYW4gYmUgb3BlbmVkIHVzaW5nIHRoZSBcXFwiQ3VzdG9tIEZyYW1lczogT3BlblxcXCIgY29tbWFuZC5cIiB9KTtcclxuXHJcbiAgICAgICAgbGV0IGFkZERpdiA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgbGV0IGRyb3Bkb3duID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KGFkZERpdik7XHJcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibmV3XCIsIFwiQ3VzdG9tXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhwcmVzZXRzKSlcclxuICAgICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKGtleSwgcHJlc2V0c1trZXldLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGFkZERpdilcclxuICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJBZGQgRnJhbWVcIilcclxuICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1hZGRcIilcclxuICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGRyb3Bkb3duLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiTmV3IEZyYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2gocHJlc2V0c1tvcHRpb25dKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgZGlzY2xhaW1lciA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJwXCIsIHsgY2xzOiBcIm1vZC13YXJuaW5nXCIgfSk7XHJcbiAgICAgICAgZGlzY2xhaW1lci5jcmVhdGVTcGFuKHsgdGV4dDogXCJQbGVhc2UgYmUgYWR2aXNlZCB0aGF0LCB3aGVuIGFkZGluZyBhIHNpdGUgYXMgYSBjdXN0b20gZnJhbWUsIHlvdSBwb3RlbnRpYWxseSBleHBvc2UgcGVyc29uYWwgaW5mb3JtYXRpb24geW91IGVudGVyIHRvIG90aGVyIHBsdWdpbnMgeW91IGhhdmUgaW5zdGFsbGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFwiIH0pO1xyXG4gICAgICAgIGRpc2NsYWltZXIuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJ0aGlzIGRpc2N1c3Npb25cIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vRWxscGVjay9PYnNpZGlhbkN1c3RvbUZyYW1lcy9pc3N1ZXMvNTQjaXNzdWVjb21tZW50LTEyMTA4Nzk2ODVcIiwgY2xzOiBcIm1vZC13YXJuaW5nXCIgfSk7XHJcbiAgICAgICAgZGlzY2xhaW1lci5jcmVhdGVTcGFuKHsgdGV4dDogXCIuXCIgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiSWYgeW91IGxpa2UgdGhpcyBwbHVnaW4gYW5kIHdhbnQgdG8gc3VwcG9ydCBpdHMgZGV2ZWxvcG1lbnQsIHlvdSBjYW4gZG8gc28gdGhyb3VnaCBteSB3ZWJzaXRlIGJ5IGNsaWNraW5nIHRoaXMgZmFuY3kgaW1hZ2UhXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vZWxscGVjay5kZS9zdXBwb3J0XCIgfSlcclxuICAgICAgICAgICAgLmNyZWF0ZUVsKFwiaW1nXCIsIHsgYXR0cjogeyBzcmM6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3Jlcy9nZW5lcmFsc3VwcG9ydC5wbmdcIiB9LCBjbHM6IFwiY3VzdG9tLWZyYW1lcy1zdXBwb3J0XCIgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IEl0ZW1WaWV3LCBXb3Jrc3BhY2VMZWFmLCBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGdldEljb24gfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmV0dXJuIHRvIG9yaWdpbmFsIHBhZ2VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJob21lXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJldHVybigpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gZGV2IHRvb2xzXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYmluYXJ5XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnRvZ2dsZURldlRvb2xzKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBsaW5rXCIsXHJcbiAgICAgICAgICAgIGljb246IFwibGlua1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gYnJvd3NlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImdsb2JlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBvcGVuKHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZWZyZXNoXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVmcmVzaC1jd1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZWZyZXNoKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gYmFja1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LWxlZnRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29CYWNrKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gZm9yd2FyZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvRm9yd2FyZCgpXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3M7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZnJhbWU6IEN1c3RvbUZyYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQ3VzdG9tRnJhbWUoc2V0dGluZ3MsIGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbi5pY29uLCBhY3Rpb24ubmFtZSwgKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLXZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25QYW5lTWVudShtZW51OiBNZW51LCBzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm9uUGFuZU1lbnUobWVudSwgc291cmNlKTtcclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpIHtcclxuICAgICAgICAgICAgbWVudS5hZGRJdGVtKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaS5zZXRUaXRsZShhY3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpLnNldEljb24oYWN0aW9uLmljb24pO1xyXG4gICAgICAgICAgICAgICAgaS5vbkNsaWNrKCgpID0+IGFjdGlvbi5hY3Rpb24odGhpcykpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Vmlld1R5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpc3BsYXlUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kaXNwbGF5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJY29uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGdldEljb24odGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZyYW1lLmZvY3VzKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbjogc3RyaW5nO1xyXG4gICAgYWN0aW9uOiAodmlldzogQ3VzdG9tRnJhbWVWaWV3KSA9PiBhbnk7XHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUFnRDs7O0FDQWhELHNCQUF5Qjs7O0FDQWxCLElBQU0sa0JBQXdDO0FBQUEsRUFDakQsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBO0FBRU4sSUFBTSxVQUErQztBQUFBLEVBQ3hELFlBQVk7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBLEVBRWYsWUFBWTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1mLFlBQVk7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdB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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtLCBXb3Jrc3BhY2VMZWFmIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiwgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZXNTZXR0aW5nVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3MtdGFiXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lVmlldyB9IGZyb20gXCIuL3ZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUZyYW1lc1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG5cdHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuXHJcblx0YXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHRmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnNldHRpbmdzLmZyYW1lcykge1xyXG5cdFx0XHRpZiAoIWZyYW1lLnVybCB8fCAhZnJhbWUuZGlzcGxheU5hbWUpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdGxldCBuYW1lID0gYGN1c3RvbS1mcmFtZXMtJHtnZXRJZChmcmFtZSl9YDtcclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGZyYW1lLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBTa2lwcGluZyBmcmFtZSAke25hbWV9IHdoaWNoIGlzIGhpZGRlbiBvbiBtb2JpbGVgKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBSZWdpc3RlcmluZyBmcmFtZSAke25hbWV9IGZvciBVUkwgJHtmcmFtZS51cmx9YCk7XHJcblxyXG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJWaWV3KG5hbWUsIGwgPT4gbmV3IEN1c3RvbUZyYW1lVmlldyhsLCB0aGlzLnNldHRpbmdzLCBmcmFtZSwgbmFtZSkpO1xyXG5cdFx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0XHRpZDogYG9wZW4tJHtuYW1lfWAsXHJcblx0XHRcdFx0XHRuYW1lOiBgT3BlbiAke2ZyYW1lLmRpc3BsYXlOYW1lfWAsXHJcblx0XHRcdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5vcGVuTGVhZihuYW1lLCBmcmFtZS5vcGVuSW5DZW50ZXIsIGZhbHNlKSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKGZyYW1lLmFkZFJpYmJvbkljb24pXHJcblx0XHRcdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oZ2V0SWNvbihmcmFtZSksIGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdFx0ZSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgUGxhdGZvcm0uaXNNYWNPUyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpO1xyXG5cdFx0XHR9IGNhdGNoIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBDb3VsZG4ndCByZWdpc3RlciBmcmFtZSAke25hbWV9LCBpcyB0aGVyZSBhbHJlYWR5IG9uZSB3aXRoIHRoZSBzYW1lIG5hbWU/YCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXCJjdXN0b20tZnJhbWVzXCIsIChzLCBlKSA9PiB7XHJcblx0XHRcdGUuZW1wdHkoKTtcclxuXHRcdFx0ZS5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtdmlldy1maWxlXCIpO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lTWF0Y2ggPSAvZnJhbWU6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCBmcmFtZU5hbWUgPSBmcmFtZU1hdGNoICYmIGZyYW1lTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRpZiAoIWZyYW1lTmFtZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQ291bGRuJ3QgcGFyc2UgZnJhbWUgbmFtZVwiIH0pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZGF0YSA9IHRoaXMuc2V0dGluZ3MuZnJhbWVzLmZpbmQoZiA9PiBmLmRpc3BsYXlOYW1lID09IGZyYW1lTmFtZSk7XHJcblx0XHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGBDb3VsZG4ndCBmaW5kIGEgZnJhbWUgd2l0aCBuYW1lICR7ZnJhbWVOYW1lfWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChQbGF0Zm9ybS5pc01vYmlsZUFwcCAmJiBkYXRhLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGAke2ZyYW1lTmFtZX0gaXMgaGlkZGVuIG9uIG1vYmlsZWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXQgc3R5bGVNYXRjaCA9IC9zdHlsZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHN0eWxlID0gc3R5bGVNYXRjaCAmJiBzdHlsZU1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0c3R5bGUgfHw9IFwiaGVpZ2h0OiA2MDBweDtcIjtcclxuXHJcblx0XHRcdGxldCB1cmxTdWZmaXhNYXRjaCA9IC91cmxzdWZmaXg6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCB1cmxTdWZmaXggPSB1cmxTdWZmaXhNYXRjaCAmJiB1cmxTdWZmaXhNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdHVybFN1ZmZpeCB8fD0gXCJcIjtcclxuXHJcblx0XHRcdGxldCBmcmFtZSA9IG5ldyBDdXN0b21GcmFtZSh0aGlzLnNldHRpbmdzLCBkYXRhKTtcclxuXHRcdFx0ZnJhbWUuY3JlYXRlKGUsIHN0eWxlLCB1cmxTdWZmaXgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgb3BlbkxlYWYobmFtZTogc3RyaW5nLCBjZW50ZXI6IGJvb2xlYW4sIHNwbGl0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRsZXQgbGVhZjogV29ya3NwYWNlTGVhZjtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0bGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWFmKHNwbGl0KTtcclxuXHRcdFx0YXdhaXQgbGVhZi5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoIXRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSkubGVuZ3RoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRSaWdodExlYWYoZmFsc2UpLnNldFZpZXdTdGF0ZSh7IHR5cGU6IG5hbWUsIGFjdGl2ZTogdHJ1ZSB9KTtcclxuXHRcdFx0bGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF07XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKGxlYWYpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGxlYWYudmlldyBpbnN0YW5jZW9mIEN1c3RvbUZyYW1lVmlldylcclxuXHRcdFx0bGVhZi52aWV3LmZvY3VzKCk7XHJcblx0fVxyXG59XHJcbiIsICJpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZVNldHRpbmdzLCBDdXN0b21GcmFtZXNTZXR0aW5ncywgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZShwYXJlbnQ6IEhUTUxFbGVtZW50LCBhZGRpdGlvbmFsU3R5bGU6IHN0cmluZyA9IHVuZGVmaW5lZCwgdXJsU3VmZml4OiBzdHJpbmcgPSB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc3R5bGUgPSBgcGFkZGluZzogJHt0aGlzLnNldHRpbmdzLnBhZGRpbmd9cHg7YDtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlKVxyXG4gICAgICAgICAgICBzdHlsZSArPSBhZGRpdGlvbmFsU3R5bGU7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCAmJiAhdGhpcy5kYXRhLmZvcmNlSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIGxldCBmcmFtZURvYyA9IHBhcmVudC5kb2M7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZURvYy5jcmVhdGVFbGVtZW50KFwid2Vidmlld1wiKTtcclxuICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93cG9wdXBzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRab29tRmFjdG9yKHRoaXMuZGF0YS56b29tTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5pbnNlcnRDU1ModGhpcy5kYXRhLmN1c3RvbUNzcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJkZXN0cm95ZWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVjcmVhdGUgdGhlIHdlYnZpZXcgaWYgaXQgd2FzIG1vdmVkIHRvIGEgbmV3IHdpbmRvd1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYW1lRG9jICE9IHBhcmVudC5kb2MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmRldGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlKHBhcmVudCwgYWRkaXRpb25hbFN0eWxlLCB1cmxTdWZmaXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gcGFyZW50LmRvYy5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwic2FuZGJveFwiLCBcImFsbG93LWZvcm1zIGFsbG93LW1vZGFscyBhbGxvdy1wb3B1cHMgYWxsb3ctcHJlc2VudGF0aW9uIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXNjcmlwdHMgYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93XCIsIFwiZW5jcnlwdGVkLW1lZGlhOyBmdWxsc2NyZWVuOyBvdmVyc2l6ZWQtaW1hZ2VzOyBwaWN0dXJlLWluLXBpY3R1cmU7IHN5bmMteGhyOyBnZW9sb2NhdGlvbjtcIik7XHJcbiAgICAgICAgICAgIHN0eWxlICs9IGB0cmFuc2Zvcm06IHNjYWxlKCR7dGhpcy5kYXRhLnpvb21MZXZlbH0pOyB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZS5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtZnJhbWVcIik7XHJcbiAgICAgICAgdGhpcy5mcmFtZS5hZGRDbGFzcyhgY3VzdG9tLWZyYW1lcy0ke2dldElkKHRoaXMuZGF0YSl9YCk7XHJcbiAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBzdHlsZSk7XHJcblxyXG4gICAgICAgIGxldCBzcmMgPSB0aGlzLmRhdGEudXJsO1xyXG4gICAgICAgIGlmICh1cmxTdWZmaXgpIHtcclxuICAgICAgICAgICAgaWYgKCF1cmxTdWZmaXguc3RhcnRzV2l0aChcIi9cIikpXHJcbiAgICAgICAgICAgICAgICBzcmMgKz0gXCIvXCI7XHJcbiAgICAgICAgICAgIHNyYyArPSB1cmxTdWZmaXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwic3JjXCIsIHNyYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnJlbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cub3Blbih0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmxvYWRVUkwodGhpcy5kYXRhLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnb0ZvcndhcmQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuaGlzdG9yeS5mb3J3YXJkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5nb0ZvcndhcmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlRGV2VG9vbHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCEodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZnJhbWUuaXNEZXZUb29sc09wZW5lZCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLm9wZW5EZXZUb29scygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5jbG9zZURldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA6IHRoaXMuZnJhbWUuZ2V0VVJMKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsICJleHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncyA9IHtcclxuICAgIGZyYW1lczogW10sXHJcbiAgICBwYWRkaW5nOiA1XHJcbn07XHJcbmV4cG9ydCBjb25zdCBwcmVzZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21GcmFtZVNldHRpbmdzPiA9IHtcclxuICAgIFwib2JzaWRpYW5cIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL1wiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIk9ic2lkaWFuIEZvcnVtXCIsXHJcbiAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IHRydWUsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiB0cnVlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgXCJkZXRleGlmeVwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vZGV0ZXhpZnkua2lyZWxhYnMub3JnL2NsYXNzaWZ5Lmh0bWxcIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJEZXRleGlmeVwiLFxyXG4gICAgICAgIGljb246IFwidHlwZVwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAuOTUsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgaW5mbyBjbHV0dGVyIGFuZCBhZCBiYW5uZXIgKi9cclxuI2NsYXNzaWZ5LS1pbmZvLWFyZWEsXHJcbi5hZHNieWdvb2dsZSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50XHJcbn1gXHJcbiAgICB9LFxyXG4gICAgXCJjYWxlbmRhclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS9jYWxlbmRhclwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBDYWxlbmRhclwiLFxyXG4gICAgICAgIGljb246IFwiY2FsZW5kYXJcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogdHJ1ZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IHRydWUsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IGAvKiBoaWRlIHRoZSBtZW51IGJhciwgXCJLZWVwXCIgdGV4dCwgYW5kIGxvZ28gKi9cclxuaHRtbCA+IGJvZHkgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpmaXJzdC1jaGlsZFtjbGFzcyo9XCIgXCJdLFxyXG5odG1sID4gYm9keSA+IGRpdjpmaXJzdC1jaGlsZCA+IGhlYWRlcjpmaXJzdC1jaGlsZCA+IGRpdiA+IGRpdjpmaXJzdC1jaGlsZCA+IGRpdiA+IGRpdjpmaXJzdC1jaGlsZCxcclxuaHRtbCA+IGJvZHkgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpmaXJzdC1jaGlsZCA+IGRpdjpmaXJzdC1jaGlsZCB7XHJcbmRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldElkKHNldHRpbmdzOiBDdXN0b21GcmFtZVNldHRpbmdzKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3MuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgXCItXCIpO1xyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIEJ1dHRvbkNvbXBvbmVudCwgRHJvcGRvd25Db21wb25lbnQsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzLCBwcmVzZXRzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbUZyYW1lc1BsdWdpbiBmcm9tIFwiLi9tYWluXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cclxuICAgIHBsdWdpbjogQ3VzdG9tRnJhbWVzUGx1Z2luO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIkN1c3RvbSBGcmFtZXMgU2V0dGluZ3NcIiB9KTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiUGxlYXNlIG5vdGUgdGhhdCBPYnNpZGlhbiBoYXMgdG8gYmUgcmVzdGFydGVkIG9yIHJlbG9hZGVkIGZvciBtb3N0IG9mIHRoZXNlIHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJGcmFtZSBQYWRkaW5nXCIpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHBhZGRpbmcgdGhhdCBzaG91bGQgYmUgbGVmdCBhcm91bmQgdGhlIGluc2lkZSBvZiBjdXN0b20gZnJhbWUgcGFuZXMsIGluIHBpeGVscy5cIilcclxuICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSA6IGRlZmF1bHRTZXR0aW5ncy5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMpIHtcclxuICAgICAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwgeyB0ZXh0OiBmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIiB9KTtcclxuICAgICAgICAgICAgbGV0IHRvZ2dsZSA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiU2hvdyBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1zaG93XCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSAhY29udGVudC5oaWRkZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldEJ1dHRvblRleHQoY29udGVudC5oaWRkZW4gPyBcIlNob3cgU2V0dGluZ3NcIiA6IFwiSGlkZSBTZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc3BsYXkgTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgZGlzcGxheSBuYW1lIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgaGF2ZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmRpc3BsYXlOYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zZXRUZXh0KGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJUaGUgaWNvbiB0aGF0IHRoaXMgZnJhbWUncyBwYW5lIHNob3VsZCBoYXZlLiBUaGUgbmFtZXMgb2YgYW55IFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJMdWNpZGUgaWNvbnNcIiwgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXYvXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCIgY2FuIGJlIHVzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlVSTFwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgVVJMIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGlzIGZyYW1lLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnVybCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc2FibGUgb24gTW9iaWxlXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkN1c3RvbSBGcmFtZXMgaXMgYSBsb3QgbW9yZSByZXN0cmljdGVkIG9uIG1vYmlsZSBkZXZpY2VzIGFuZCBkb2Vzbid0IGFsbG93IGZvciB0aGUgc2FtZSB0eXBlcyBvZiBjb250ZW50IHRvIGJlIGRpc3BsYXllZC4gSWYgYSBmcmFtZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gbW9iaWxlLCBpdCBjYW4gYmUgZGlzYWJsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaGlkZU9uTW9iaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oaWRlT25Nb2JpbGUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGQgUmliYm9uIEljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBhIGJ1dHRvbiB0byBvcGVuIHRoaXMgZnJhbWUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByaWJib24uXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuYWRkUmliYm9uSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuYWRkUmliYm9uSWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIk9wZW4gaW4gQ2VudGVyXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgYmUgb3BlbmVkIGluIHRoZSB1bnBpbm5lZCBjZW50ZXIgZWRpdG9yIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgcGFuZXMgb24gdGhlIHNpZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBzaXRlcyB0aGF0IGRvbid0IHdvcmsgd2VsbCBpbiBhIG5hcnJvdyB2aWV3LCBvciBzaXRlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBub3RlIHRvIGJlIG9wZW4gd2hlbiB2aWV3ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUub3BlbkluQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5vcGVuSW5DZW50ZXIgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJGb3JjZSBpZnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCB1c2UgaWZyYW1lcyBvbiBkZXNrdG9wIGFzIG9wcG9zZWQgdG8gRWxlY3Ryb24gd2Vidmlld3MuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiT25seSBlbmFibGUgdGhpcyBzZXR0aW5nIGlmIHRoZSBmcmFtZSBpcyBjYXVzaW5nIGlzc3VlcyBvciBmcmVxdWVudCBjcmFzaGVzLiBUaGlzIHNldHRpbmcgY2F1c2VzIGFsbCBEZXNrdG9wLW9ubHkgc2V0dGluZ3MgdG8gYmUgaWdub3JlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmZvcmNlSWZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mb3JjZUlmcmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2UgWm9vbVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgem9vbSB0aGF0IHRoaXMgZnJhbWUncyBwYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2l0aCwgYXMgYSBwZXJjZW50YWdlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKGZyYW1lLnpvb21MZXZlbCAqIDEwMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnpvb21MZXZlbCA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIC8gMTAwIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkaXRpb25hbCBDU1NcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQSBzbmlwcGV0IG9mIGFkZGl0aW9uYWwgQ1NTIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBmcmFtZS5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFwcGxpZWQgb24gRGVza3RvcC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHRBcmVhKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5yb3dzID0gNTtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwuY29scyA9IDUwO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5jdXN0b21Dc3MgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlJlbW92ZSBGcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5yZW1vdmUoZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIkNyZWF0ZSBhIG5ldyBmcmFtZSwgZWl0aGVyIGZyb20gYSBwcmVzZXQgc2hpcHBlZCB3aXRoIHRoZSBwbHVnaW4sIG9yIGEgY3VzdG9tIG9uZSB0aGF0IHlvdSBjYW4gZWRpdCB5b3Vyc2VsZi4gRWFjaCBmcmFtZSdzIHBhbmUgY2FuIGJlIG9wZW5lZCB1c2luZyB0aGUgXFxcIkN1c3RvbSBGcmFtZXM6IE9wZW5cXFwiIGNvbW1hbmQuXCIgfSk7XHJcblxyXG4gICAgICAgIGxldCBhZGREaXYgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xyXG4gICAgICAgIGxldCBkcm9wZG93biA9IG5ldyBEcm9wZG93bkNvbXBvbmVudChhZGREaXYpO1xyXG4gICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihcIm5ld1wiLCBcIkN1c3RvbVwiKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMocHJlc2V0cykpXHJcbiAgICAgICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihrZXksIHByZXNldHNba2V5XS5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChhZGREaXYpXHJcbiAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiQWRkIEZyYW1lXCIpXHJcbiAgICAgICAgICAgIC5zZXRDbGFzcyhcImN1c3RvbS1mcmFtZXMtYWRkXCIpXHJcbiAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBkcm9wZG93bi5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PSBcIm5ld1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIk5ldyBGcmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ3NzOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5wdXNoKHByZXNldHNbb3B0aW9uXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIGRpc2NsYWltZXIgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IGNsczogXCJtb2Qtd2FybmluZ1wiIH0pO1xyXG4gICAgICAgIGRpc2NsYWltZXIuY3JlYXRlU3Bhbih7IHRleHQ6IFwiUGxlYXNlIGJlIGFkdmlzZWQgdGhhdCwgd2hlbiBhZGRpbmcgYSBzaXRlIGFzIGEgY3VzdG9tIGZyYW1lLCB5b3UgcG90ZW50aWFsbHkgZXhwb3NlIHBlcnNvbmFsIGluZm9ybWF0aW9uIHlvdSBlbnRlciB0byBvdGhlciBwbHVnaW5zIHlvdSBoYXZlIGluc3RhbGxlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBcIiB9KTtcclxuICAgICAgICBkaXNjbGFpbWVyLmNyZWF0ZUVsKFwiYVwiLCB7IHRleHQ6IFwidGhpcyBkaXNjdXNzaW9uXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0VsbHBlY2svT2JzaWRpYW5DdXN0b21GcmFtZXMvaXNzdWVzLzU0I2lzc3VlY29tbWVudC0xMjEwODc5Njg1XCIsIGNsczogXCJtb2Qtd2FybmluZ1wiIH0pO1xyXG4gICAgICAgIGRpc2NsYWltZXIuY3JlYXRlU3Bhbih7IHRleHQ6IFwiLlwiIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luIGFuZCB3YW50IHRvIHN1cHBvcnQgaXRzIGRldmVsb3BtZW50LCB5b3UgY2FuIGRvIHNvIHRocm91Z2ggbXkgd2Vic2l0ZSBieSBjbGlja2luZyB0aGlzIGZhbmN5IGltYWdlIVwiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL2VsbHBlY2suZGUvc3VwcG9ydFwiIH0pXHJcbiAgICAgICAgICAgIC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiBcImh0dHBzOi8vZWxscGVjay5kZS9yZXMvZ2VuZXJhbHN1cHBvcnQucG5nXCIgfSwgY2xzOiBcImN1c3RvbS1mcmFtZXMtc3VwcG9ydFwiIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsICJpbXBvcnQgeyBJdGVtVmlldywgV29ya3NwYWNlTGVhZiwgTWVudSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZSB9IGZyb20gXCIuL2ZyYW1lXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lU2V0dGluZ3MsIEN1c3RvbUZyYW1lc1NldHRpbmdzLCBnZXRJY29uIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GcmFtZVZpZXcgZXh0ZW5kcyBJdGVtVmlldyB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYWN0aW9uczogQWN0aW9uW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlJldHVybiB0byBvcmlnaW5hbCBwYWdlXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiaG9tZVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZXR1cm4oKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJPcGVuIGRldiB0b29sc1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImJpbmFyeVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS50b2dnbGVEZXZUb29scygpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkNvcHkgbGlua1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImxpbmtcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJPcGVuIGluIGJyb3dzZXJcIixcclxuICAgICAgICAgICAgaWNvbjogXCJnbG9iZVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gb3Blbih2LmZyYW1lLmdldEN1cnJlbnRVcmwoKSlcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmVmcmVzaFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcInJlZnJlc2gtY3dcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUucmVmcmVzaCgpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkdvIGJhY2tcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvdy1sZWZ0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvQmFjaygpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkdvIGZvcndhcmRcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvdy1yaWdodFwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5nb0ZvcndhcmQoKVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhOiBDdXN0b21GcmFtZVNldHRpbmdzO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGZyYW1lOiBDdXN0b21GcmFtZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihsZWFmOiBXb3Jrc3BhY2VMZWFmLCBzZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3MsIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKGxlYWYpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHNldHRpbmdzLCBkYXRhKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKVxyXG4gICAgICAgICAgICB0aGlzLmFkZEFjdGlvbihhY3Rpb24uaWNvbiwgYWN0aW9uLm5hbWUsICgpID0+IGFjdGlvbi5hY3Rpb24odGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIG9ubG9hZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRlbnRFbC5lbXB0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3XCIpO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuY3JlYXRlKHRoaXMuY29udGVudEVsKTtcclxuICAgIH1cclxuXHJcbiAgICBvblBhbmVNZW51KG1lbnU6IE1lbnUsIHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIub25QYW5lTWVudShtZW51LCBzb3VyY2UpO1xyXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBDdXN0b21GcmFtZVZpZXcuYWN0aW9ucykge1xyXG4gICAgICAgICAgICBtZW51LmFkZEl0ZW0oaSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpLnNldFRpdGxlKGFjdGlvbi5uYW1lKTtcclxuICAgICAgICAgICAgICAgIGkuc2V0SWNvbihhY3Rpb24uaWNvbik7XHJcbiAgICAgICAgICAgICAgICBpLm9uQ2xpY2soKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRWaWV3VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzcGxheVRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmRpc3BsYXlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEljb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZ2V0SWNvbih0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZnJhbWUuZm9jdXMoKTtcclxuICAgIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIEFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBhY3Rpb246ICh2aWV3OiBDdXN0b21GcmFtZVZpZXcpID0+IGFueTtcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQWdEOzs7QUNBaEQsc0JBQXlCOzs7QUNBbEIsSUFBTSxrQkFBd0M7QUFBQSxFQUNqRCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUE7QUFFTixJQUFNLFVBQStDO0FBQUEsRUFDeEQsWUFBWTtBQUFBLElBQ1IsS0FBSztB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 diff --git a/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js b/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js index f5f8b48..cf86647 100644 --- a/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js +++ b/test-vault/.obsidian/plugins/obsidian-custom-frames/main.js @@ -181,19 +181,28 @@ var CustomFrame = class { this.settings = settings; this.data = data; } - create(additionalStyle = void 0, urlSuffix = void 0) { + create(parent, additionalStyle = void 0, urlSuffix = void 0) { let style = `padding: ${this.settings.padding}px;`; if (additionalStyle) style += additionalStyle; if (import_obsidian.Platform.isDesktopApp && !this.data.forceIframe) { - this.frame = document.createElement("webview"); + let frameDoc = parent.doc; + this.frame = frameDoc.createElement("webview"); + parent.appendChild(this.frame); this.frame.setAttribute("allowpopups", ""); this.frame.addEventListener("dom-ready", () => { this.frame.setZoomFactor(this.data.zoomLevel); this.frame.insertCSS(this.data.customCss); }); + this.frame.addEventListener("destroyed", () => { + if (frameDoc != parent.doc) { + this.frame.detach(); + this.create(parent, additionalStyle, urlSuffix); + } + }); } else { - this.frame = document.createElement("iframe"); + this.frame = parent.doc.createElement("iframe"); + parent.appendChild(this.frame); this.frame.setAttribute("sandbox", "allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts allow-top-navigation-by-user-activation"); this.frame.setAttribute("allow", "encrypted-media; fullscreen; oversized-images; picture-in-picture; sync-xhr; geolocation;"); style += `transform: scale(${this.data.zoomLevel}); transform-origin: 0 0;`; @@ -208,7 +217,6 @@ var CustomFrame = class { src += urlSuffix; } this.frame.setAttribute("src", src); - return this.frame; } refresh() { if (this.frame instanceof HTMLIFrameElement) { @@ -422,7 +430,7 @@ var _CustomFrameView = class extends import_obsidian3.ItemView { onload() { this.contentEl.empty(); this.contentEl.addClass("custom-frames-view"); - this.contentEl.appendChild(this.frame.create()); + this.frame.create(this.contentEl); } onPaneMenu(menu, source) { super.onPaneMenu(menu, source); @@ -539,7 +547,7 @@ var CustomFramesPlugin = class extends import_obsidian4.Plugin { let urlSuffix = urlSuffixMatch && urlSuffixMatch[1].trim(); urlSuffix || (urlSuffix = ""); let frame = new CustomFrame(this.settings, data); - e.appendChild(frame.create(style, urlSuffix)); + frame.create(e, style, urlSuffix); }); }); } @@ -570,4 +578,4 @@ var CustomFramesPlugin = class extends import_obsidian4.Plugin { }); } }; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtLCBXb3Jrc3BhY2VMZWFmIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiwgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZXNTZXR0aW5nVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3MtdGFiXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lVmlldyB9IGZyb20gXCIuL3ZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUZyYW1lc1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG5cdHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuXHJcblx0YXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHRmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnNldHRpbmdzLmZyYW1lcykge1xyXG5cdFx0XHRpZiAoIWZyYW1lLnVybCB8fCAhZnJhbWUuZGlzcGxheU5hbWUpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdGxldCBuYW1lID0gYGN1c3RvbS1mcmFtZXMtJHtnZXRJZChmcmFtZSl9YDtcclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGZyYW1lLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBTa2lwcGluZyBmcmFtZSAke25hbWV9IHdoaWNoIGlzIGhpZGRlbiBvbiBtb2JpbGVgKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBSZWdpc3RlcmluZyBmcmFtZSAke25hbWV9IGZvciBVUkwgJHtmcmFtZS51cmx9YCk7XHJcblxyXG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJWaWV3KG5hbWUsIGwgPT4gbmV3IEN1c3RvbUZyYW1lVmlldyhsLCB0aGlzLnNldHRpbmdzLCBmcmFtZSwgbmFtZSkpO1xyXG5cdFx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0XHRpZDogYG9wZW4tJHtuYW1lfWAsXHJcblx0XHRcdFx0XHRuYW1lOiBgT3BlbiAke2ZyYW1lLmRpc3BsYXlOYW1lfWAsXHJcblx0XHRcdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5vcGVuTGVhZihuYW1lLCBmcmFtZS5vcGVuSW5DZW50ZXIsIGZhbHNlKSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKGZyYW1lLmFkZFJpYmJvbkljb24pXHJcblx0XHRcdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oZ2V0SWNvbihmcmFtZSksIGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdFx0ZSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgUGxhdGZvcm0uaXNNYWNPUyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpO1xyXG5cdFx0XHR9IGNhdGNoIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBDb3VsZG4ndCByZWdpc3RlciBmcmFtZSAke25hbWV9LCBpcyB0aGVyZSBhbHJlYWR5IG9uZSB3aXRoIHRoZSBzYW1lIG5hbWU/YCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXCJjdXN0b20tZnJhbWVzXCIsIChzLCBlKSA9PiB7XHJcblx0XHRcdGUuZW1wdHkoKTtcclxuXHRcdFx0ZS5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtdmlldy1maWxlXCIpO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lTWF0Y2ggPSAvZnJhbWU6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCBmcmFtZU5hbWUgPSBmcmFtZU1hdGNoICYmIGZyYW1lTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRpZiAoIWZyYW1lTmFtZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQ291bGRuJ3QgcGFyc2UgZnJhbWUgbmFtZVwiIH0pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZGF0YSA9IHRoaXMuc2V0dGluZ3MuZnJhbWVzLmZpbmQoZiA9PiBmLmRpc3BsYXlOYW1lID09IGZyYW1lTmFtZSk7XHJcblx0XHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGBDb3VsZG4ndCBmaW5kIGEgZnJhbWUgd2l0aCBuYW1lICR7ZnJhbWVOYW1lfWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChQbGF0Zm9ybS5pc01vYmlsZUFwcCAmJiBkYXRhLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGAke2ZyYW1lTmFtZX0gaXMgaGlkZGVuIG9uIG1vYmlsZWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXQgc3R5bGVNYXRjaCA9IC9zdHlsZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHN0eWxlID0gc3R5bGVNYXRjaCAmJiBzdHlsZU1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0c3R5bGUgfHw9IFwiaGVpZ2h0OiA2MDBweDtcIjtcclxuXHJcblx0XHRcdGxldCB1cmxTdWZmaXhNYXRjaCA9IC91cmxzdWZmaXg6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCB1cmxTdWZmaXggPSB1cmxTdWZmaXhNYXRjaCAmJiB1cmxTdWZmaXhNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdHVybFN1ZmZpeCB8fD0gXCJcIjtcclxuXHJcblx0XHRcdGxldCBmcmFtZSA9IG5ldyBDdXN0b21GcmFtZSh0aGlzLnNldHRpbmdzLCBkYXRhKTtcclxuXHRcdFx0ZS5hcHBlbmRDaGlsZChmcmFtZS5jcmVhdGUoc3R5bGUsIHVybFN1ZmZpeCkpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgb3BlbkxlYWYobmFtZTogc3RyaW5nLCBjZW50ZXI6IGJvb2xlYW4sIHNwbGl0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRsZXQgbGVhZjogV29ya3NwYWNlTGVhZjtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0bGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWFmKHNwbGl0KTtcclxuXHRcdFx0YXdhaXQgbGVhZi5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoIXRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSkubGVuZ3RoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRSaWdodExlYWYoZmFsc2UpLnNldFZpZXdTdGF0ZSh7IHR5cGU6IG5hbWUsIGFjdGl2ZTogdHJ1ZSB9KTtcclxuXHRcdFx0bGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF07XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKGxlYWYpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGxlYWYudmlldyBpbnN0YW5jZW9mIEN1c3RvbUZyYW1lVmlldylcclxuXHRcdFx0bGVhZi52aWV3LmZvY3VzKCk7XHJcblx0fVxyXG59XHJcbiIsICJpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZVNldHRpbmdzLCBDdXN0b21GcmFtZXNTZXR0aW5ncywgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZShhZGRpdGlvbmFsU3R5bGU6IHN0cmluZyA9IHVuZGVmaW5lZCwgdXJsU3VmZml4OiBzdHJpbmcgPSB1bmRlZmluZWQpOiBhbnkge1xyXG4gICAgICAgIGxldCBzdHlsZSA9IGBwYWRkaW5nOiAke3RoaXMuc2V0dGluZ3MucGFkZGluZ31weDtgO1xyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsU3R5bGUpXHJcbiAgICAgICAgICAgIHN0eWxlICs9IGFkZGl0aW9uYWxTdHlsZTtcclxuICAgICAgICBpZiAoUGxhdGZvcm0uaXNEZXNrdG9wQXBwICYmICF0aGlzLmRhdGEuZm9yY2VJZnJhbWUpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ3ZWJ2aWV3XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93cG9wdXBzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRab29tRmFjdG9yKHRoaXMuZGF0YS56b29tTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5pbnNlcnRDU1ModGhpcy5kYXRhLmN1c3RvbUNzcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInNhbmRib3hcIiwgXCJhbGxvdy1mb3JtcyBhbGxvdy1tb2RhbHMgYWxsb3ctcG9wdXBzIGFsbG93LXByZXNlbnRhdGlvbiBhbGxvdy1zYW1lLW9yaWdpbiBhbGxvdy1zY3JpcHRzIGFsbG93LXRvcC1uYXZpZ2F0aW9uLWJ5LXVzZXItYWN0aXZhdGlvblwiKTtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJhbGxvd1wiLCBcImVuY3J5cHRlZC1tZWRpYTsgZnVsbHNjcmVlbjsgb3ZlcnNpemVkLWltYWdlczsgcGljdHVyZS1pbi1waWN0dXJlOyBzeW5jLXhocjsgZ2VvbG9jYXRpb247XCIpO1xyXG4gICAgICAgICAgICBzdHlsZSArPSBgdHJhbnNmb3JtOiBzY2FsZSgke3RoaXMuZGF0YS56b29tTGV2ZWx9KTsgdHJhbnNmb3JtLW9yaWdpbjogMCAwO2A7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJhbWUuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLWZyYW1lXCIpO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuYWRkQ2xhc3MoYGN1c3RvbS1mcmFtZXMtJHtnZXRJZCh0aGlzLmRhdGEpfWApO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgc3R5bGUpO1xyXG5cclxuICAgICAgICBsZXQgc3JjID0gdGhpcy5kYXRhLnVybDtcclxuICAgICAgICBpZiAodXJsU3VmZml4KSB7XHJcbiAgICAgICAgICAgIGlmICghdXJsU3VmZml4LnN0YXJ0c1dpdGgoXCIvXCIpKVxyXG4gICAgICAgICAgICAgICAgc3JjICs9IFwiL1wiO1xyXG4gICAgICAgICAgICBzcmMgKz0gdXJsU3VmZml4O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcInNyY1wiLCBzcmMpO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5mcmFtZTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUucmVsb2FkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybigpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5vcGVuKHRoaXMuZGF0YS51cmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUubG9hZFVSTCh0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ29CYWNrKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5jb250ZW50V2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZ29CYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdvRm9yd2FyZCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmZvcndhcmQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvRm9yd2FyZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVEZXZUb29scygpOiB2b2lkIHtcclxuICAgICAgICBpZiAoISh0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5mcmFtZS5pc0RldlRvb2xzT3BlbmVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnJhbWUub3BlbkRldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmNsb3NlRGV2VG9vbHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50VXJsKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCA/IHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmIDogdGhpcy5mcmFtZS5nZXRVUkwoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1cygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5mb2N1cygpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwgImV4cG9ydCBjb25zdCBkZWZhdWx0U2V0dGluZ3M6IEN1c3RvbUZyYW1lc1NldHRpbmdzID0ge1xyXG4gICAgZnJhbWVzOiBbXSxcclxuICAgIHBhZGRpbmc6IDVcclxufTtcclxuZXhwb3J0IGNvbnN0IHByZXNldHM6IFJlY29yZDxzdHJpbmcsIEN1c3RvbUZyYW1lU2V0dGluZ3M+ID0ge1xyXG4gICAgXCJvYnNpZGlhblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiT2JzaWRpYW4gRm9ydW1cIixcclxuICAgICAgICBpY29uOiBcImVkaXRcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogdHJ1ZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IHRydWUsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH0sXHJcbiAgICBcImRldGV4aWZ5XCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9kZXRleGlmeS5raXJlbGFicy5vcmcvY2xhc3NpZnkuaHRtbFwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkRldGV4aWZ5XCIsXHJcbiAgICAgICAgaWNvbjogXCJ0eXBlXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IHRydWUsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IC45NSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSBpbmZvIGNsdXR0ZXIgYW5kIGFkIGJhbm5lciAqL1xyXG4jY2xhc3NpZnktLWluZm8tYXJlYSxcclxuLmFkc2J5Z29vZ2xlIHtcclxuXHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnRcclxufWBcclxuICAgIH0sXHJcbiAgICBcImNhbGVuZGFyXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9jYWxlbmRhci5nb29nbGUuY29tL2NhbGVuZGFyXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIENhbGVuZGFyXCIsXHJcbiAgICAgICAgaWNvbjogXCJjYWxlbmRhclwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIG1lbnUgYmFyLCBcIktlZXBcIiB0ZXh0LCBhbmQgbG9nbyAqL1xyXG5odG1sID4gYm9keSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2OmZpcnN0LWNoaWxkW2NsYXNzKj1cIiBcIl0sXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkLFxyXG5odG1sID4gYm9keSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2OmZpcnN0LWNoaWxkIHtcclxuZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59YFxyXG4gICAgfSxcclxuICAgIFwia2VlcFwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8va2VlcC5nb29nbGUuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiR29vZ2xlIEtlZXBcIixcclxuICAgICAgICBpY29uOiBcImZpbGVzXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IGAvKiBoaWRlIHRoZSBtZW51IGJhciBhbmQgdGhlIFwiS2VlcFwiIHRleHQgKi9cclxuaHRtbCA+IGJvZHkgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpmaXJzdC1jaGlsZCxcclxuaHRtbCA+IGJvZHkgPiBkaXY6Zmlyc3QtY2hpbGQgPiBoZWFkZXI6Zmlyc3QtY2hpbGQgPiBkaXYgPiBkaXY6Zmlyc3QtY2hpbGQgPiBkaXYgPiBkaXY6Zmlyc3QtY2hpbGQgPiBhOmZpcnN0LWNoaWxkID4gc3BhbiB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59YFxyXG4gICAgfSxcclxuICAgIFwidG9kb2lzdFwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdG9kb2lzdC5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUb2RvaXN0XCIsXHJcbiAgICAgICAgaWNvbjogXCJsaXN0LWNoZWNrc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgaGVscCwgaG9tZSwgc2VhcmNoLCBhbmQgcHJvZHVjdGl2aXR5IG92ZXJ2aWV3IGJ1dHRvbnMsIGNyZWF0ZSBleHRyYSBzcGFjZSwgYW5kIHByZXZlbnQgdG9hc3QgcG9wLXVwIGZyb20gYWN0aW5nIHdlaXJkICovXHJcblthcmlhLWxhYmVsPVwiR28gdG8gSG9tZSB2aWV3XCJdLCAjcXVpY2tfZmluZCwgW2FyaWEtbGFiZWw9XCJQcm9kdWN0aXZpdHlcIl0sIFthcmlhLWxhYmVsPVwiSGVscCAmIEZlZWRiYWNrXCJdIHtcclxuXHRkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XHJcbn1cclxuXHJcbi52aWV3X2NvbnRlbnQge1xyXG5cdHBhZGRpbmctbGVmdDogMTVweDtcclxufVxyXG5cclxuLnZpZXdfaGVhZGVyIHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcblx0cGFkZGluZy10b3A6IDEwcHg7XHJcbn1cclxuXHJcbi51bmRvX3RvYXN0IHtcclxuXHR3aWR0aDogOTUlO1xyXG59YFxyXG4gICAgfSxcclxuICAgIFwibm90aW9uXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly93d3cubm90aW9uLnNvL1wiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIk5vdGlvblwiLFxyXG4gICAgICAgIGljb246IFwiYm94XCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IHRydWUsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiB0cnVlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgXCJ0d2l0dGVyXCI6IHtcclxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly90d2l0dGVyLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIlR3aXR0ZXJcIixcclxuICAgICAgICBpY29uOiBcInR3aXR0ZXJcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfVxyXG59O1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21GcmFtZXNTZXR0aW5ncyB7XHJcbiAgICBmcmFtZXM6IEN1c3RvbUZyYW1lU2V0dGluZ3NbXTtcclxuICAgIHBhZGRpbmc6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDdXN0b21GcmFtZVNldHRpbmdzIHtcclxuICAgIHVybDogc3RyaW5nO1xyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICAgIGljb246IHN0cmluZztcclxuICAgIGhpZGVPbk1vYmlsZTogYm9vbGVhbjtcclxuICAgIGFkZFJpYmJvbkljb246IGJvb2xlYW47XHJcbiAgICBvcGVuSW5DZW50ZXI6IGJvb2xlYW47XHJcbiAgICB6b29tTGV2ZWw6IG51bWJlcjtcclxuICAgIGZvcmNlSWZyYW1lOiBib29sZWFuO1xyXG4gICAgY3VzdG9tQ3NzOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uKHNldHRpbmdzOiBDdXN0b21GcmFtZVNldHRpbmdzKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3MuaWNvbiA/IGBsdWNpZGUtJHtzZXR0aW5ncy5pY29ufWAgOiBcImRvY3VtZW50c1wiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWQoc2V0dGluZ3M6IEN1c3RvbUZyYW1lU2V0dGluZ3MpIHtcclxuICAgIHJldHVybiBzZXR0aW5ncy5kaXNwbGF5TmFtZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xccy9nLCBcIi1cIik7XHJcbn1cclxuIiwgImltcG9ydCB7IEFwcCwgQnV0dG9uQ29tcG9uZW50LCBEcm9wZG93bkNvbXBvbmVudCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBkZWZhdWx0U2V0dGluZ3MsIHByZXNldHMgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgQ3VzdG9tRnJhbWVzUGx1Z2luIGZyb20gXCIuL21haW5cIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GcmFtZXNTZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XHJcblxyXG4gICAgcGx1Z2luOiBDdXN0b21GcmFtZXNQbHVnaW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogQ3VzdG9tRnJhbWVzUGx1Z2luKSB7XHJcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5lbXB0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoMlwiLCB7IHRleHQ6IFwiQ3VzdG9tIEZyYW1lcyBTZXR0aW5nc1wiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJwXCIsIHsgdGV4dDogXCJQbGVhc2Ugbm90ZSB0aGF0IE9ic2lkaWFuIGhhcyB0byBiZSByZXN0YXJ0ZWQgb3IgcmVsb2FkZWQgZm9yIG1vc3Qgb2YgdGhlc2Ugc2V0dGluZ3MgdG8gdGFrZSBlZmZlY3QuXCIsIGNsczogXCJtb2Qtd2FybmluZ1wiIH0pO1xyXG5cclxuICAgICAgICBuZXcgU2V0dGluZyh0aGlzLmNvbnRhaW5lckVsKVxyXG4gICAgICAgICAgICAuc2V0TmFtZShcIkZyYW1lIFBhZGRpbmdcIilcclxuICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgcGFkZGluZyB0aGF0IHNob3VsZCBiZSBsZWZ0IGFyb3VuZCB0aGUgaW5zaWRlIG9mIGN1c3RvbSBmcmFtZSBwYW5lcywgaW4gcGl4ZWxzLlwiKVxyXG4gICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgIHQuaW5wdXRFbC50eXBlID0gXCJudW1iZXJcIjtcclxuICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcpKTtcclxuICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MucGFkZGluZyA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIDogZGVmYXVsdFNldHRpbmdzLnBhZGRpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGZyYW1lIG9mIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcykge1xyXG4gICAgICAgICAgICBsZXQgaGVhZGluZyA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoM1wiLCB7IHRleHQ6IGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiIH0pO1xyXG4gICAgICAgICAgICBsZXQgdG9nZ2xlID0gbmV3IEJ1dHRvbkNvbXBvbmVudCh0aGlzLmNvbnRhaW5lckVsKVxyXG4gICAgICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJTaG93IFNldHRpbmdzXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0Q2xhc3MoXCJjdXN0b20tZnJhbWVzLXNob3dcIilcclxuICAgICAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50LmhpZGRlbiA9ICFjb250ZW50LmhpZGRlbjtcclxuICAgICAgICAgICAgICAgICAgICB0b2dnbGUuc2V0QnV0dG9uVGV4dChjb250ZW50LmhpZGRlbiA/IFwiU2hvdyBTZXR0aW5nc1wiIDogXCJIaWRlIFNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gdGhpcy5jb250YWluZXJFbC5jcmVhdGVEaXYoKTtcclxuICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiRGlzcGxheSBOYW1lXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSBkaXNwbGF5IG5hbWUgdGhhdCB0aGlzIGZyYW1lIHNob3VsZCBoYXZlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuZGlzcGxheU5hbWUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkaW5nLnNldFRleHQoZnJhbWUuZGlzcGxheU5hbWUgfHwgXCJVbm5hbWVkIEZyYW1lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJJY29uXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhjcmVhdGVGcmFnbWVudChmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZVNwYW4oeyB0ZXh0OiBcIlRoZSBpY29uIHRoYXQgdGhpcyBmcmFtZSdzIHBhbmUgc2hvdWxkIGhhdmUuIFRoZSBuYW1lcyBvZiBhbnkgXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImFcIiwgeyB0ZXh0OiBcIkx1Y2lkZSBpY29uc1wiLCBocmVmOiBcImh0dHBzOi8vbHVjaWRlLmRldi9cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZVNwYW4oeyB0ZXh0OiBcIiBjYW4gYmUgdXNlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5pY29uKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5pY29uID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiVVJMXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSBVUkwgdGhhdCBzaG91bGQgYmUgb3BlbmVkIGluIHRoaXMgZnJhbWUuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLnVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUudXJsID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiRGlzYWJsZSBvbiBNb2JpbGVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiQ3VzdG9tIEZyYW1lcyBpcyBhIGxvdCBtb3JlIHJlc3RyaWN0ZWQgb24gbW9iaWxlIGRldmljZXMgYW5kIGRvZXNuJ3QgYWxsb3cgZm9yIHRoZSBzYW1lIHR5cGVzIG9mIGNvbnRlbnQgdG8gYmUgZGlzcGxheWVkLiBJZiBhIGZyYW1lIGRvZXNuJ3Qgd29yayBhcyBleHBlY3RlZCBvbiBtb2JpbGUsIGl0IGNhbiBiZSBkaXNhYmxlZC5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUb2dnbGUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5oaWRlT25Nb2JpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmhpZGVPbk1vYmlsZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkFkZCBSaWJib24gSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJXaGV0aGVyIGEgYnV0dG9uIHRvIG9wZW4gdGhpcyBmcmFtZSBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHJpYmJvbi5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUb2dnbGUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5hZGRSaWJib25JY29uKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5hZGRSaWJib25JY29uID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiT3BlbiBpbiBDZW50ZXJcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCBiZSBvcGVuZWQgaW4gdGhlIHVucGlubmVkIGNlbnRlciBlZGl0b3IgcmF0aGVyIHRoYW4gb25lIG9mIHRoZSBwYW5lcyBvbiB0aGUgc2lkZS4gVGhpcyBpcyB1c2VmdWwgZm9yIHNpdGVzIHRoYXQgZG9uJ3Qgd29yayB3ZWxsIGluIGEgbmFycm93IHZpZXcsIG9yIHNpdGVzIHRoYXQgZG9uJ3QgcmVxdWlyZSBhIG5vdGUgdG8gYmUgb3BlbiB3aGVuIHZpZXdlZC5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUb2dnbGUodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5vcGVuSW5DZW50ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLm9wZW5JbkNlbnRlciA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkZvcmNlIGlmcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJXaGV0aGVyIHRoaXMgZnJhbWUgc2hvdWxkIHVzZSBpZnJhbWVzIG9uIGRlc2t0b3AgYXMgb3Bwb3NlZCB0byBFbGVjdHJvbiB3ZWJ2aWV3cy5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJPbmx5IGVuYWJsZSB0aGlzIHNldHRpbmcgaWYgdGhlIGZyYW1lIGlzIGNhdXNpbmcgaXNzdWVzIG9yIGZyZXF1ZW50IGNyYXNoZXMuIFRoaXMgc2V0dGluZyBjYXVzZXMgYWxsIERlc2t0b3Atb25seSBzZXR0aW5ncyB0byBiZSBpZ25vcmVkLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZm9yY2VJZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmZvcmNlSWZyYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiUGFnZSBab29tXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIlRoZSB6b29tIHRoYXQgdGhpcyBmcmFtZSdzIHBhZ2Ugc2hvdWxkIGJlIGRpc3BsYXllZCB3aXRoLCBhcyBhIHBlcmNlbnRhZ2UuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShTdHJpbmcoZnJhbWUuem9vbUxldmVsICogMTAwKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuem9vbUxldmVsID0gdi5sZW5ndGggPyBOdW1iZXIodikgLyAxMDAgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGRpdGlvbmFsIENTU1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJBIHNuaXBwZXQgb2YgYWRkaXRpb25hbCBDU1MgdGhhdCBzaG91bGQgYmUgYXBwbGllZCB0byB0aGlzIGZyYW1lLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJiclwiKTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiZW1cIiwgeyB0ZXh0OiBcIk5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgYXBwbGllZCBvbiBEZXNrdG9wLlwiIH0pO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAuYWRkVGV4dEFyZWEodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnJvd3MgPSA1O1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5jb2xzID0gNTA7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS5jdXN0b21Dc3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmN1c3RvbUNzcyA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiUmVtb3ZlIEZyYW1lXCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnJlbW92ZShmcmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiQ3JlYXRlIGEgbmV3IGZyYW1lLCBlaXRoZXIgZnJvbSBhIHByZXNldCBzaGlwcGVkIHdpdGggdGhlIHBsdWdpbiwgb3IgYSBjdXN0b20gb25lIHRoYXQgeW91IGNhbiBlZGl0IHlvdXJzZWxmLiBFYWNoIGZyYW1lJ3MgcGFuZSBjYW4gYmUgb3BlbmVkIHVzaW5nIHRoZSBcXFwiQ3VzdG9tIEZyYW1lczogT3BlblxcXCIgY29tbWFuZC5cIiB9KTtcclxuXHJcbiAgICAgICAgbGV0IGFkZERpdiA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgbGV0IGRyb3Bkb3duID0gbmV3IERyb3Bkb3duQ29tcG9uZW50KGFkZERpdik7XHJcbiAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKFwibmV3XCIsIFwiQ3VzdG9tXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhwcmVzZXRzKSlcclxuICAgICAgICAgICAgZHJvcGRvd24uYWRkT3B0aW9uKGtleSwgcHJlc2V0c1trZXldLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGFkZERpdilcclxuICAgICAgICAgICAgLnNldEJ1dHRvblRleHQoXCJBZGQgRnJhbWVcIilcclxuICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1hZGRcIilcclxuICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGRyb3Bkb3duLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09IFwibmV3XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IFwiTmV3IEZyYW1lXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2gocHJlc2V0c1tvcHRpb25dKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB2YXIgZGlzY2xhaW1lciA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJwXCIsIHsgY2xzOiBcIm1vZC13YXJuaW5nXCIgfSk7XHJcbiAgICAgICAgZGlzY2xhaW1lci5jcmVhdGVTcGFuKHsgdGV4dDogXCJQbGVhc2UgYmUgYWR2aXNlZCB0aGF0LCB3aGVuIGFkZGluZyBhIHNpdGUgYXMgYSBjdXN0b20gZnJhbWUsIHlvdSBwb3RlbnRpYWxseSBleHBvc2UgcGVyc29uYWwgaW5mb3JtYXRpb24geW91IGVudGVyIHRvIG90aGVyIHBsdWdpbnMgeW91IGhhdmUgaW5zdGFsbGVkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFwiIH0pO1xyXG4gICAgICAgIGRpc2NsYWltZXIuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJ0aGlzIGRpc2N1c3Npb25cIiwgaHJlZjogXCJodHRwczovL2dpdGh1Yi5jb20vRWxscGVjay9PYnNpZGlhbkN1c3RvbUZyYW1lcy9pc3N1ZXMvNTQjaXNzdWVjb21tZW50LTEyMTA4Nzk2ODVcIiwgY2xzOiBcIm1vZC13YXJuaW5nXCIgfSk7XHJcbiAgICAgICAgZGlzY2xhaW1lci5jcmVhdGVTcGFuKHsgdGV4dDogXCIuXCIgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJoclwiKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiSWYgeW91IGxpa2UgdGhpcyBwbHVnaW4gYW5kIHdhbnQgdG8gc3VwcG9ydCBpdHMgZGV2ZWxvcG1lbnQsIHlvdSBjYW4gZG8gc28gdGhyb3VnaCBteSB3ZWJzaXRlIGJ5IGNsaWNraW5nIHRoaXMgZmFuY3kgaW1hZ2UhXCIgfSk7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vZWxscGVjay5kZS9zdXBwb3J0XCIgfSlcclxuICAgICAgICAgICAgLmNyZWF0ZUVsKFwiaW1nXCIsIHsgYXR0cjogeyBzcmM6IFwiaHR0cHM6Ly9lbGxwZWNrLmRlL3Jlcy9nZW5lcmFsc3VwcG9ydC5wbmdcIiB9LCBjbHM6IFwiY3VzdG9tLWZyYW1lcy1zdXBwb3J0XCIgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwgImltcG9ydCB7IEl0ZW1WaWV3LCBXb3Jrc3BhY2VMZWFmLCBNZW51IH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVTZXR0aW5ncywgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGdldEljb24gfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lVmlldyBleHRlbmRzIEl0ZW1WaWV3IHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBhY3Rpb25zOiBBY3Rpb25bXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmV0dXJuIHRvIG9yaWdpbmFsIHBhZ2VcIixcclxuICAgICAgICAgICAgaWNvbjogXCJob21lXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnJldHVybigpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gZGV2IHRvb2xzXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiYmluYXJ5XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLnRvZ2dsZURldlRvb2xzKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBsaW5rXCIsXHJcbiAgICAgICAgICAgIGljb246IFwibGlua1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodi5mcmFtZS5nZXRDdXJyZW50VXJsKCkpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIk9wZW4gaW4gYnJvd3NlclwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImdsb2JlXCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiBvcGVuKHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJSZWZyZXNoXCIsXHJcbiAgICAgICAgICAgIGljb246IFwicmVmcmVzaC1jd1wiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZWZyZXNoKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gYmFja1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LWxlZnRcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUuZ29CYWNrKClcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiR28gZm9yd2FyZFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcImFycm93LXJpZ2h0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvRm9yd2FyZCgpXHJcbiAgICAgICAgfVxyXG4gICAgXTtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3M7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcclxuICAgIHByaXZhdGUgZnJhbWU6IEN1c3RvbUZyYW1lO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGxlYWY6IFdvcmtzcGFjZUxlYWYsIHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncywgbmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgc3VwZXIobGVhZik7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgICAgIHRoaXMuZnJhbWUgPSBuZXcgQ3VzdG9tRnJhbWUoc2V0dGluZ3MsIGRhdGEpO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQWN0aW9uKGFjdGlvbi5pY29uLCBhY3Rpb24ubmFtZSwgKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25sb2FkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmVtcHR5KCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYWRkQ2xhc3MoXCJjdXN0b20tZnJhbWVzLXZpZXdcIik7XHJcbiAgICAgICAgdGhpcy5jb250ZW50RWwuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZS5jcmVhdGUoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25QYW5lTWVudShtZW51OiBNZW51LCBzb3VyY2U6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHN1cGVyLm9uUGFuZU1lbnUobWVudSwgc291cmNlKTtcclxuICAgICAgICBmb3IgKGxldCBhY3Rpb24gb2YgQ3VzdG9tRnJhbWVWaWV3LmFjdGlvbnMpIHtcclxuICAgICAgICAgICAgbWVudS5hZGRJdGVtKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaS5zZXRUaXRsZShhY3Rpb24ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICBpLnNldEljb24oYWN0aW9uLmljb24pO1xyXG4gICAgICAgICAgICAgICAgaS5vbkNsaWNrKCgpID0+IGFjdGlvbi5hY3Rpb24odGhpcykpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Vmlld1R5cGUoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERpc3BsYXlUZXh0KCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kaXNwbGF5TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJY29uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGdldEljb24odGhpcy5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBmb2N1cygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmZyYW1lLmZvY3VzKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgaWNvbjogc3RyaW5nO1xyXG4gICAgYWN0aW9uOiAodmlldzogQ3VzdG9tRnJhbWVWaWV3KSA9PiBhbnk7XHJcbn1cclxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUFnRDs7O0FDQWhELHNCQUF5Qjs7O0FDQWxCLElBQU0sa0JBQXdDO0FBQUEsRUFDakQsUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBO0FBRU4sSUFBTSxVQUErQztBQUFBLEVBQ3hELFlBQVk7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBLEVBRWYsWUFBWTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1mLFlBQVk7QUFBQSxJQUNSLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdB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 +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2ZyYW1lLnRzIiwgInNyYy9zZXR0aW5ncy50cyIsICJzcmMvc2V0dGluZ3MtdGFiLnRzIiwgInNyYy92aWV3LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4sIFBsYXRmb3JtLCBXb3Jrc3BhY2VMZWFmIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lIH0gZnJvbSBcIi4vZnJhbWVcIjtcclxuaW1wb3J0IHsgQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRlZmF1bHRTZXR0aW5ncywgZ2V0SWNvbiwgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZXNTZXR0aW5nVGFiIH0gZnJvbSBcIi4vc2V0dGluZ3MtdGFiXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lVmlldyB9IGZyb20gXCIuL3ZpZXdcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEN1c3RvbUZyYW1lc1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcblxyXG5cdHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuXHJcblx0YXN5bmMgb25sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHRmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnNldHRpbmdzLmZyYW1lcykge1xyXG5cdFx0XHRpZiAoIWZyYW1lLnVybCB8fCAhZnJhbWUuZGlzcGxheU5hbWUpXHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdGxldCBuYW1lID0gYGN1c3RvbS1mcmFtZXMtJHtnZXRJZChmcmFtZSl9YDtcclxuXHRcdFx0aWYgKFBsYXRmb3JtLmlzTW9iaWxlQXBwICYmIGZyYW1lLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBTa2lwcGluZyBmcmFtZSAke25hbWV9IHdoaWNoIGlzIGhpZGRlbiBvbiBtb2JpbGVgKTtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGBSZWdpc3RlcmluZyBmcmFtZSAke25hbWV9IGZvciBVUkwgJHtmcmFtZS51cmx9YCk7XHJcblxyXG5cdFx0XHRcdHRoaXMucmVnaXN0ZXJWaWV3KG5hbWUsIGwgPT4gbmV3IEN1c3RvbUZyYW1lVmlldyhsLCB0aGlzLnNldHRpbmdzLCBmcmFtZSwgbmFtZSkpO1xyXG5cdFx0XHRcdHRoaXMuYWRkQ29tbWFuZCh7XHJcblx0XHRcdFx0XHRpZDogYG9wZW4tJHtuYW1lfWAsXHJcblx0XHRcdFx0XHRuYW1lOiBgT3BlbiAke2ZyYW1lLmRpc3BsYXlOYW1lfWAsXHJcblx0XHRcdFx0XHRjYWxsYmFjazogKCkgPT4gdGhpcy5vcGVuTGVhZihuYW1lLCBmcmFtZS5vcGVuSW5DZW50ZXIsIGZhbHNlKSxcclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0aWYgKGZyYW1lLmFkZFJpYmJvbkljb24pXHJcblx0XHRcdFx0XHR0aGlzLmFkZFJpYmJvbkljb24oZ2V0SWNvbihmcmFtZSksIGBPcGVuICR7ZnJhbWUuZGlzcGxheU5hbWV9YCxcclxuXHRcdFx0XHRcdFx0ZSA9PiB0aGlzLm9wZW5MZWFmKG5hbWUsIGZyYW1lLm9wZW5JbkNlbnRlciwgUGxhdGZvcm0uaXNNYWNPUyA/IGUubWV0YUtleSA6IGUuY3RybEtleSkpO1xyXG5cdFx0XHR9IGNhdGNoIHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGBDb3VsZG4ndCByZWdpc3RlciBmcmFtZSAke25hbWV9LCBpcyB0aGVyZSBhbHJlYWR5IG9uZSB3aXRoIHRoZSBzYW1lIG5hbWU/YCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IEN1c3RvbUZyYW1lc1NldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXCJjdXN0b20tZnJhbWVzXCIsIChzLCBlKSA9PiB7XHJcblx0XHRcdGUuZW1wdHkoKTtcclxuXHRcdFx0ZS5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtdmlldy1maWxlXCIpO1xyXG5cclxuXHRcdFx0bGV0IGZyYW1lTWF0Y2ggPSAvZnJhbWU6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCBmcmFtZU5hbWUgPSBmcmFtZU1hdGNoICYmIGZyYW1lTWF0Y2hbMV0udHJpbSgpO1xyXG5cdFx0XHRpZiAoIWZyYW1lTmFtZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQ291bGRuJ3QgcGFyc2UgZnJhbWUgbmFtZVwiIH0pO1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgZGF0YSA9IHRoaXMuc2V0dGluZ3MuZnJhbWVzLmZpbmQoZiA9PiBmLmRpc3BsYXlOYW1lID09IGZyYW1lTmFtZSk7XHJcblx0XHRcdGlmICghZGF0YSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGBDb3VsZG4ndCBmaW5kIGEgZnJhbWUgd2l0aCBuYW1lICR7ZnJhbWVOYW1lfWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChQbGF0Zm9ybS5pc01vYmlsZUFwcCAmJiBkYXRhLmhpZGVPbk1vYmlsZSkge1xyXG5cdFx0XHRcdGUuY3JlYXRlU3Bhbih7IHRleHQ6IGAke2ZyYW1lTmFtZX0gaXMgaGlkZGVuIG9uIG1vYmlsZWAgfSk7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRsZXQgc3R5bGVNYXRjaCA9IC9zdHlsZTooW15cXG5dKykvZ2kuZXhlYyhzKTtcclxuXHRcdFx0bGV0IHN0eWxlID0gc3R5bGVNYXRjaCAmJiBzdHlsZU1hdGNoWzFdLnRyaW0oKTtcclxuXHRcdFx0c3R5bGUgfHw9IFwiaGVpZ2h0OiA2MDBweDtcIjtcclxuXHJcblx0XHRcdGxldCB1cmxTdWZmaXhNYXRjaCA9IC91cmxzdWZmaXg6KFteXFxuXSspL2dpLmV4ZWMocyk7XHJcblx0XHRcdGxldCB1cmxTdWZmaXggPSB1cmxTdWZmaXhNYXRjaCAmJiB1cmxTdWZmaXhNYXRjaFsxXS50cmltKCk7XHJcblx0XHRcdHVybFN1ZmZpeCB8fD0gXCJcIjtcclxuXHJcblx0XHRcdGxldCBmcmFtZSA9IG5ldyBDdXN0b21GcmFtZSh0aGlzLnNldHRpbmdzLCBkYXRhKTtcclxuXHRcdFx0ZnJhbWUuY3JlYXRlKGUsIHN0eWxlLCB1cmxTdWZmaXgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBsb2FkU2V0dGluZ3MoKSB7XHJcblx0XHR0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdFNldHRpbmdzLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgYXN5bmMgb3BlbkxlYWYobmFtZTogc3RyaW5nLCBjZW50ZXI6IGJvb2xlYW4sIHNwbGl0OiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcblx0XHRsZXQgbGVhZjogV29ya3NwYWNlTGVhZjtcclxuXHRcdGlmIChjZW50ZXIpIHtcclxuXHRcdFx0bGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWFmKHNwbGl0KTtcclxuXHRcdFx0YXdhaXQgbGVhZi5zZXRWaWV3U3RhdGUoeyB0eXBlOiBuYW1lLCBhY3RpdmU6IHRydWUgfSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAoIXRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSkubGVuZ3RoKVxyXG5cdFx0XHRcdGF3YWl0IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRSaWdodExlYWYoZmFsc2UpLnNldFZpZXdTdGF0ZSh7IHR5cGU6IG5hbWUsIGFjdGl2ZTogdHJ1ZSB9KTtcclxuXHRcdFx0bGVhZiA9IHRoaXMuYXBwLndvcmtzcGFjZS5nZXRMZWF2ZXNPZlR5cGUobmFtZSlbMF07XHJcblx0XHRcdHRoaXMuYXBwLndvcmtzcGFjZS5yZXZlYWxMZWFmKGxlYWYpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGxlYWYudmlldyBpbnN0YW5jZW9mIEN1c3RvbUZyYW1lVmlldylcclxuXHRcdFx0bGVhZi52aWV3LmZvY3VzKCk7XHJcblx0fVxyXG59XHJcbiIsICJpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZVNldHRpbmdzLCBDdXN0b21GcmFtZXNTZXR0aW5ncywgZ2V0SWQgfSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEN1c3RvbUZyYW1lIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncztcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncztcclxuICAgIHByaXZhdGUgZnJhbWU6IEhUTUxJRnJhbWVFbGVtZW50IHwgYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncywgZGF0YTogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZShwYXJlbnQ6IEhUTUxFbGVtZW50LCBhZGRpdGlvbmFsU3R5bGU6IHN0cmluZyA9IHVuZGVmaW5lZCwgdXJsU3VmZml4OiBzdHJpbmcgPSB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBsZXQgc3R5bGUgPSBgcGFkZGluZzogJHt0aGlzLnNldHRpbmdzLnBhZGRpbmd9cHg7YDtcclxuICAgICAgICBpZiAoYWRkaXRpb25hbFN0eWxlKVxyXG4gICAgICAgICAgICBzdHlsZSArPSBhZGRpdGlvbmFsU3R5bGU7XHJcbiAgICAgICAgaWYgKFBsYXRmb3JtLmlzRGVza3RvcEFwcCAmJiAhdGhpcy5kYXRhLmZvcmNlSWZyYW1lKSB7XHJcbiAgICAgICAgICAgIGxldCBmcmFtZURvYyA9IHBhcmVudC5kb2M7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBmcmFtZURvYy5jcmVhdGVFbGVtZW50KFwid2Vidmlld1wiKTtcclxuICAgICAgICAgICAgcGFyZW50LmFwcGVuZENoaWxkKHRoaXMuZnJhbWUpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93cG9wdXBzXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJkb20tcmVhZHlcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5zZXRab29tRmFjdG9yKHRoaXMuZGF0YS56b29tTGV2ZWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5pbnNlcnRDU1ModGhpcy5kYXRhLmN1c3RvbUNzcyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXCJkZXN0cm95ZWRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gcmVjcmVhdGUgdGhlIHdlYnZpZXcgaWYgaXQgd2FzIG1vdmVkIHRvIGEgbmV3IHdpbmRvd1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYW1lRG9jICE9IHBhcmVudC5kb2MpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLmRldGFjaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlKHBhcmVudCwgYWRkaXRpb25hbFN0eWxlLCB1cmxTdWZmaXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lID0gcGFyZW50LmRvYy5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO1xyXG4gICAgICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5mcmFtZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwic2FuZGJveFwiLCBcImFsbG93LWZvcm1zIGFsbG93LW1vZGFscyBhbGxvdy1wb3B1cHMgYWxsb3ctcHJlc2VudGF0aW9uIGFsbG93LXNhbWUtb3JpZ2luIGFsbG93LXNjcmlwdHMgYWxsb3ctdG9wLW5hdmlnYXRpb24tYnktdXNlci1hY3RpdmF0aW9uXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnNldEF0dHJpYnV0ZShcImFsbG93XCIsIFwiZW5jcnlwdGVkLW1lZGlhOyBmdWxsc2NyZWVuOyBvdmVyc2l6ZWQtaW1hZ2VzOyBwaWN0dXJlLWluLXBpY3R1cmU7IHN5bmMteGhyOyBnZW9sb2NhdGlvbjtcIik7XHJcbiAgICAgICAgICAgIHN0eWxlICs9IGB0cmFuc2Zvcm06IHNjYWxlKCR7dGhpcy5kYXRhLnpvb21MZXZlbH0pOyB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mcmFtZS5hZGRDbGFzcyhcImN1c3RvbS1mcmFtZXMtZnJhbWVcIik7XHJcbiAgICAgICAgdGhpcy5mcmFtZS5hZGRDbGFzcyhgY3VzdG9tLWZyYW1lcy0ke2dldElkKHRoaXMuZGF0YSl9YCk7XHJcbiAgICAgICAgdGhpcy5mcmFtZS5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBzdHlsZSk7XHJcblxyXG4gICAgICAgIGxldCBzcmMgPSB0aGlzLmRhdGEudXJsO1xyXG4gICAgICAgIGlmICh1cmxTdWZmaXgpIHtcclxuICAgICAgICAgICAgaWYgKCF1cmxTdWZmaXguc3RhcnRzV2l0aChcIi9cIikpXHJcbiAgICAgICAgICAgICAgICBzcmMgKz0gXCIvXCI7XHJcbiAgICAgICAgICAgIHNyYyArPSB1cmxTdWZmaXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZnJhbWUuc2V0QXR0cmlidXRlKFwic3JjXCIsIHNyYyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLnJlbG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cub3Blbih0aGlzLmRhdGEudXJsKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmxvYWRVUkwodGhpcy5kYXRhLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdvQmFjaygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWUuY29udGVudFdpbmRvdy5oaXN0b3J5LmJhY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmdvQmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnb0ZvcndhcmQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuaGlzdG9yeS5mb3J3YXJkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5mcmFtZS5nb0ZvcndhcmQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlRGV2VG9vbHMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCEodGhpcy5mcmFtZSBpbnN0YW5jZW9mIEhUTUxJRnJhbWVFbGVtZW50KSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZnJhbWUuaXNEZXZUb29sc09wZW5lZCgpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZyYW1lLm9wZW5EZXZUb29scygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mcmFtZS5jbG9zZURldlRvb2xzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZyYW1lIGluc3RhbmNlb2YgSFRNTElGcmFtZUVsZW1lbnQgPyB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA6IHRoaXMuZnJhbWUuZ2V0VVJMKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZnJhbWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmNvbnRlbnRXaW5kb3cuZm9jdXMoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZyYW1lLmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsICJleHBvcnQgY29uc3QgZGVmYXVsdFNldHRpbmdzOiBDdXN0b21GcmFtZXNTZXR0aW5ncyA9IHtcclxuICAgIGZyYW1lczogW10sXHJcbiAgICBwYWRkaW5nOiA1XHJcbn07XHJcbmV4cG9ydCBjb25zdCBwcmVzZXRzOiBSZWNvcmQ8c3RyaW5nLCBDdXN0b21GcmFtZVNldHRpbmdzPiA9IHtcclxuICAgIFwib2JzaWRpYW5cIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL1wiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIk9ic2lkaWFuIEZvcnVtXCIsXHJcbiAgICAgICAgaWNvbjogXCJlZGl0XCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IHRydWUsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiB0cnVlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgXCJkZXRleGlmeVwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vZGV0ZXhpZnkua2lyZWxhYnMub3JnL2NsYXNzaWZ5Lmh0bWxcIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJEZXRleGlmeVwiLFxyXG4gICAgICAgIGljb246IFwidHlwZVwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAuOTUsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgaW5mbyBjbHV0dGVyIGFuZCBhZCBiYW5uZXIgKi9cclxuI2NsYXNzaWZ5LS1pbmZvLWFyZWEsXHJcbi5hZHNieWdvb2dsZSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50XHJcbn1gXHJcbiAgICB9LFxyXG4gICAgXCJjYWxlbmRhclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vY2FsZW5kYXIuZ29vZ2xlLmNvbS9jYWxlbmRhclwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBDYWxlbmRhclwiLFxyXG4gICAgICAgIGljb246IFwiY2FsZW5kYXJcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogdHJ1ZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IHRydWUsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IGAvKiBoaWRlIHRoZSBtZW51IGJhciwgXCJLZWVwXCIgdGV4dCwgYW5kIGxvZ28gKi9cclxuaHRtbCA+IGJvZHkgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpmaXJzdC1jaGlsZFtjbGFzcyo9XCIgXCJdLFxyXG5odG1sID4gYm9keSA+IGRpdjpmaXJzdC1jaGlsZCA+IGhlYWRlcjpmaXJzdC1jaGlsZCA+IGRpdiA+IGRpdjpmaXJzdC1jaGlsZCA+IGRpdiA+IGRpdjpmaXJzdC1jaGlsZCxcclxuaHRtbCA+IGJvZHkgPiBkaXY6bnRoLWNoaWxkKDIpID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpmaXJzdC1jaGlsZCA+IGRpdjpmaXJzdC1jaGlsZCB7XHJcbmRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcImtlZXBcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL2tlZXAuZ29vZ2xlLmNvbVwiLFxyXG4gICAgICAgIGRpc3BsYXlOYW1lOiBcIkdvb2dsZSBLZWVwXCIsXHJcbiAgICAgICAgaWNvbjogXCJmaWxlc1wiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiBmYWxzZSxcclxuICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgIHpvb21MZXZlbDogMSxcclxuICAgICAgICBmb3JjZUlmcmFtZTogZmFsc2UsXHJcbiAgICAgICAgY3VzdG9tQ3NzOiBgLyogaGlkZSB0aGUgbWVudSBiYXIgYW5kIHRoZSBcIktlZXBcIiB0ZXh0ICovXHJcbmh0bWwgPiBib2R5ID4gZGl2Om50aC1jaGlsZCgyKSA+IGRpdjpudGgtY2hpbGQoMikgPiBkaXY6Zmlyc3QtY2hpbGQsXHJcbmh0bWwgPiBib2R5ID4gZGl2OmZpcnN0LWNoaWxkID4gaGVhZGVyOmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gZGl2ID4gZGl2OmZpcnN0LWNoaWxkID4gYTpmaXJzdC1jaGlsZCA+IHNwYW4ge1xyXG5cdGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcclxufWBcclxuICAgIH0sXHJcbiAgICBcInRvZG9pc3RcIjoge1xyXG4gICAgICAgIHVybDogXCJodHRwczovL3RvZG9pc3QuY29tXCIsXHJcbiAgICAgICAgZGlzcGxheU5hbWU6IFwiVG9kb2lzdFwiLFxyXG4gICAgICAgIGljb246IFwibGlzdC1jaGVja3NcIixcclxuICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgYWRkUmliYm9uSWNvbjogZmFsc2UsXHJcbiAgICAgICAgb3BlbkluQ2VudGVyOiBmYWxzZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogYC8qIGhpZGUgdGhlIGhlbHAsIGhvbWUsIHNlYXJjaCwgYW5kIHByb2R1Y3Rpdml0eSBvdmVydmlldyBidXR0b25zLCBjcmVhdGUgZXh0cmEgc3BhY2UsIGFuZCBwcmV2ZW50IHRvYXN0IHBvcC11cCBmcm9tIGFjdGluZyB3ZWlyZCAqL1xyXG5bYXJpYS1sYWJlbD1cIkdvIHRvIEhvbWUgdmlld1wiXSwgI3F1aWNrX2ZpbmQsIFthcmlhLWxhYmVsPVwiUHJvZHVjdGl2aXR5XCJdLCBbYXJpYS1sYWJlbD1cIkhlbHAgJiBGZWVkYmFja1wiXSB7XHJcblx0ZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xyXG59XHJcblxyXG4udmlld19jb250ZW50IHtcclxuXHRwYWRkaW5nLWxlZnQ6IDE1cHg7XHJcbn1cclxuXHJcbi52aWV3X2hlYWRlciB7XHJcblx0cGFkZGluZy1sZWZ0OiAxNXB4O1xyXG5cdHBhZGRpbmctdG9wOiAxMHB4O1xyXG59XHJcblxyXG4udW5kb190b2FzdCB7XHJcblx0d2lkdGg6IDk1JTtcclxufWBcclxuICAgIH0sXHJcbiAgICBcIm5vdGlvblwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vd3d3Lm5vdGlvbi5zby9cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJOb3Rpb25cIixcclxuICAgICAgICBpY29uOiBcImJveFwiLFxyXG4gICAgICAgIGhpZGVPbk1vYmlsZTogdHJ1ZSxcclxuICAgICAgICBhZGRSaWJib25JY29uOiB0cnVlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogdHJ1ZSxcclxuICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgZm9yY2VJZnJhbWU6IGZhbHNlLFxyXG4gICAgICAgIGN1c3RvbUNzczogXCJcIlxyXG4gICAgfSxcclxuICAgIFwidHdpdHRlclwiOiB7XHJcbiAgICAgICAgdXJsOiBcImh0dHBzOi8vdHdpdHRlci5jb21cIixcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJUd2l0dGVyXCIsXHJcbiAgICAgICAgaWNvbjogXCJ0d2l0dGVyXCIsXHJcbiAgICAgICAgaGlkZU9uTW9iaWxlOiB0cnVlLFxyXG4gICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgIG9wZW5JbkNlbnRlcjogZmFsc2UsXHJcbiAgICAgICAgem9vbUxldmVsOiAxLFxyXG4gICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICBjdXN0b21Dc3M6IFwiXCJcclxuICAgIH1cclxufTtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVzU2V0dGluZ3Mge1xyXG4gICAgZnJhbWVzOiBDdXN0b21GcmFtZVNldHRpbmdzW107XHJcbiAgICBwYWRkaW5nOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ3VzdG9tRnJhbWVTZXR0aW5ncyB7XHJcbiAgICB1cmw6IHN0cmluZztcclxuICAgIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBoaWRlT25Nb2JpbGU6IGJvb2xlYW47XHJcbiAgICBhZGRSaWJib25JY29uOiBib29sZWFuO1xyXG4gICAgb3BlbkluQ2VudGVyOiBib29sZWFuO1xyXG4gICAgem9vbUxldmVsOiBudW1iZXI7XHJcbiAgICBmb3JjZUlmcmFtZTogYm9vbGVhbjtcclxuICAgIGN1c3RvbUNzczogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0SWNvbihzZXR0aW5nczogQ3VzdG9tRnJhbWVTZXR0aW5ncykge1xyXG4gICAgcmV0dXJuIHNldHRpbmdzLmljb24gPyBgbHVjaWRlLSR7c2V0dGluZ3MuaWNvbn1gIDogXCJkb2N1bWVudHNcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldElkKHNldHRpbmdzOiBDdXN0b21GcmFtZVNldHRpbmdzKSB7XHJcbiAgICByZXR1cm4gc2V0dGluZ3MuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMvZywgXCItXCIpO1xyXG59XHJcbiIsICJpbXBvcnQgeyBBcHAsIEJ1dHRvbkNvbXBvbmVudCwgRHJvcGRvd25Db21wb25lbnQsIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmcgfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgZGVmYXVsdFNldHRpbmdzLCBwcmVzZXRzIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuaW1wb3J0IEN1c3RvbUZyYW1lc1BsdWdpbiBmcm9tIFwiLi9tYWluXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tRnJhbWVzU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG5cclxuICAgIHBsdWdpbjogQ3VzdG9tRnJhbWVzUGx1Z2luO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IEN1c3RvbUZyYW1lc1BsdWdpbikge1xyXG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcclxuICAgICAgICB0aGlzLnBsdWdpbiA9IHBsdWdpbjtcclxuICAgIH1cclxuXHJcbiAgICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDJcIiwgeyB0ZXh0OiBcIkN1c3RvbSBGcmFtZXMgU2V0dGluZ3NcIiB9KTtcclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IHRleHQ6IFwiUGxlYXNlIG5vdGUgdGhhdCBPYnNpZGlhbiBoYXMgdG8gYmUgcmVzdGFydGVkIG9yIHJlbG9hZGVkIGZvciBtb3N0IG9mIHRoZXNlIHNldHRpbmdzIHRvIHRha2UgZWZmZWN0LlwiLCBjbHM6IFwibW9kLXdhcm5pbmdcIiB9KTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoXCJGcmFtZSBQYWRkaW5nXCIpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKFwiVGhlIHBhZGRpbmcgdGhhdCBzaG91bGQgYmUgbGVmdCBhcm91bmQgdGhlIGluc2lkZSBvZiBjdXN0b20gZnJhbWUgcGFuZXMsIGluIHBpeGVscy5cIilcclxuICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0LmlucHV0RWwudHlwZSA9IFwibnVtYmVyXCI7XHJcbiAgICAgICAgICAgICAgICB0LnNldFZhbHVlKFN0cmluZyh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYWRkaW5nKSk7XHJcbiAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnBhZGRpbmcgPSB2Lmxlbmd0aCA/IE51bWJlcih2KSA6IGRlZmF1bHRTZXR0aW5ncy5wYWRkaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBmcmFtZSBvZiB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mcmFtZXMpIHtcclxuICAgICAgICAgICAgbGV0IGhlYWRpbmcgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaDNcIiwgeyB0ZXh0OiBmcmFtZS5kaXNwbGF5TmFtZSB8fCBcIlVubmFtZWQgRnJhbWVcIiB9KTtcclxuICAgICAgICAgICAgbGV0IHRvZ2dsZSA9IG5ldyBCdXR0b25Db21wb25lbnQodGhpcy5jb250YWluZXJFbClcclxuICAgICAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiU2hvdyBTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICAgICAgLnNldENsYXNzKFwiY3VzdG9tLWZyYW1lcy1zaG93XCIpXHJcbiAgICAgICAgICAgICAgICAub25DbGljayhhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGVudC5oaWRkZW4gPSAhY29udGVudC5oaWRkZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlLnNldEJ1dHRvblRleHQoY29udGVudC5oaWRkZW4gPyBcIlNob3cgU2V0dGluZ3NcIiA6IFwiSGlkZSBTZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRGl2KCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaGlkZGVuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc3BsYXkgTmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgZGlzcGxheSBuYW1lIHRoYXQgdGhpcyBmcmFtZSBzaG91bGQgaGF2ZS5cIilcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuZGlzcGxheU5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLmRpc3BsYXlOYW1lID0gdjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGluZy5zZXRUZXh0KGZyYW1lLmRpc3BsYXlOYW1lIHx8IFwiVW5uYW1lZCBGcmFtZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiSWNvblwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoY3JlYXRlRnJhZ21lbnQoZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCJUaGUgaWNvbiB0aGF0IHRoaXMgZnJhbWUncyBwYW5lIHNob3VsZCBoYXZlLiBUaGUgbmFtZXMgb2YgYW55IFwiIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJhXCIsIHsgdGV4dDogXCJMdWNpZGUgaWNvbnNcIiwgaHJlZjogXCJodHRwczovL2x1Y2lkZS5kZXYvXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVTcGFuKHsgdGV4dDogXCIgY2FuIGJlIHVzZWQuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgIC5hZGRUZXh0KHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuaWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlVSTFwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgVVJMIHRoYXQgc2hvdWxkIGJlIG9wZW5lZCBpbiB0aGlzIGZyYW1lLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5zZXRWYWx1ZShmcmFtZS51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnVybCA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIkRpc2FibGUgb24gTW9iaWxlXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIkN1c3RvbSBGcmFtZXMgaXMgYSBsb3QgbW9yZSByZXN0cmljdGVkIG9uIG1vYmlsZSBkZXZpY2VzIGFuZCBkb2Vzbid0IGFsbG93IGZvciB0aGUgc2FtZSB0eXBlcyBvZiBjb250ZW50IHRvIGJlIGRpc3BsYXllZC4gSWYgYSBmcmFtZSBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQgb24gbW9iaWxlLCBpdCBjYW4gYmUgZGlzYWJsZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuaGlkZU9uTW9iaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5oaWRlT25Nb2JpbGUgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJBZGQgUmliYm9uIEljb25cIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKFwiV2hldGhlciBhIGJ1dHRvbiB0byBvcGVuIHRoaXMgZnJhbWUgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSByaWJib24uXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuYWRkUmliYm9uSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5vbkNoYW5nZShhc3luYyB2ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUuYWRkUmliYm9uSWNvbiA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIk9wZW4gaW4gQ2VudGVyXCIpXHJcbiAgICAgICAgICAgICAgICAuc2V0RGVzYyhcIldoZXRoZXIgdGhpcyBmcmFtZSBzaG91bGQgYmUgb3BlbmVkIGluIHRoZSB1bnBpbm5lZCBjZW50ZXIgZWRpdG9yIHJhdGhlciB0aGFuIG9uZSBvZiB0aGUgcGFuZXMgb24gdGhlIHNpZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBzaXRlcyB0aGF0IGRvbid0IHdvcmsgd2VsbCBpbiBhIG5hcnJvdyB2aWV3LCBvciBzaXRlcyB0aGF0IGRvbid0IHJlcXVpcmUgYSBub3RlIHRvIGJlIG9wZW4gd2hlbiB2aWV3ZWQuXCIpXHJcbiAgICAgICAgICAgICAgICAuYWRkVG9nZ2xlKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUub3BlbkluQ2VudGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5vcGVuSW5DZW50ZXIgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgU2V0dGluZyhjb250ZW50KVxyXG4gICAgICAgICAgICAgICAgLnNldE5hbWUoXCJGb3JjZSBpZnJhbWVcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiV2hldGhlciB0aGlzIGZyYW1lIHNob3VsZCB1c2UgaWZyYW1lcyBvbiBkZXNrdG9wIGFzIG9wcG9zZWQgdG8gRWxlY3Ryb24gd2Vidmlld3MuXCIgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImJyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlRWwoXCJlbVwiLCB7IHRleHQ6IFwiT25seSBlbmFibGUgdGhpcyBzZXR0aW5nIGlmIHRoZSBmcmFtZSBpcyBjYXVzaW5nIGlzc3VlcyBvciBmcmVxdWVudCBjcmFzaGVzLiBUaGlzIHNldHRpbmcgY2F1c2VzIGFsbCBEZXNrdG9wLW9ubHkgc2V0dGluZ3MgdG8gYmUgaWdub3JlZC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRvZ2dsZSh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0LnNldFZhbHVlKGZyYW1lLmZvcmNlSWZyYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5mb3JjZUlmcmFtZSA9IHY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIG5ldyBTZXR0aW5nKGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0TmFtZShcIlBhZ2UgWm9vbVwiKVxyXG4gICAgICAgICAgICAgICAgLnNldERlc2MoXCJUaGUgem9vbSB0aGF0IHRoaXMgZnJhbWUncyBwYWdlIHNob3VsZCBiZSBkaXNwbGF5ZWQgd2l0aCwgYXMgYSBwZXJjZW50YWdlLlwiKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHQodCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5pbnB1dEVsLnR5cGUgPSBcIm51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoU3RyaW5nKGZyYW1lLnpvb21MZXZlbCAqIDEwMCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHQub25DaGFuZ2UoYXN5bmMgdiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLnpvb21MZXZlbCA9IHYubGVuZ3RoID8gTnVtYmVyKHYpIC8gMTAwIDogMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbmV3IFNldHRpbmcoY29udGVudClcclxuICAgICAgICAgICAgICAgIC5zZXROYW1lKFwiQWRkaXRpb25hbCBDU1NcIilcclxuICAgICAgICAgICAgICAgIC5zZXREZXNjKGNyZWF0ZUZyYWdtZW50KGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGYuY3JlYXRlU3Bhbih7IHRleHQ6IFwiQSBzbmlwcGV0IG9mIGFkZGl0aW9uYWwgQ1NTIHRoYXQgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhpcyBmcmFtZS5cIiB9KTtcclxuICAgICAgICAgICAgICAgICAgICBmLmNyZWF0ZUVsKFwiYnJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgZi5jcmVhdGVFbChcImVtXCIsIHsgdGV4dDogXCJOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IGFwcGxpZWQgb24gRGVza3RvcC5cIiB9KTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmFkZFRleHRBcmVhKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHQuaW5wdXRFbC5yb3dzID0gNTtcclxuICAgICAgICAgICAgICAgICAgICB0LmlucHV0RWwuY29scyA9IDUwO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuc2V0VmFsdWUoZnJhbWUuY3VzdG9tQ3NzKTtcclxuICAgICAgICAgICAgICAgICAgICB0Lm9uQ2hhbmdlKGFzeW5jIHYgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS5jdXN0b21Dc3MgPSB2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGNvbnRlbnQpXHJcbiAgICAgICAgICAgICAgICAuc2V0QnV0dG9uVGV4dChcIlJlbW92ZSBGcmFtZVwiKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5yZW1vdmUoZnJhbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIkNyZWF0ZSBhIG5ldyBmcmFtZSwgZWl0aGVyIGZyb20gYSBwcmVzZXQgc2hpcHBlZCB3aXRoIHRoZSBwbHVnaW4sIG9yIGEgY3VzdG9tIG9uZSB0aGF0IHlvdSBjYW4gZWRpdCB5b3Vyc2VsZi4gRWFjaCBmcmFtZSdzIHBhbmUgY2FuIGJlIG9wZW5lZCB1c2luZyB0aGUgXFxcIkN1c3RvbSBGcmFtZXM6IE9wZW5cXFwiIGNvbW1hbmQuXCIgfSk7XHJcblxyXG4gICAgICAgIGxldCBhZGREaXYgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZURpdigpO1xyXG4gICAgICAgIGxldCBkcm9wZG93biA9IG5ldyBEcm9wZG93bkNvbXBvbmVudChhZGREaXYpO1xyXG4gICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihcIm5ld1wiLCBcIkN1c3RvbVwiKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMocHJlc2V0cykpXHJcbiAgICAgICAgICAgIGRyb3Bkb3duLmFkZE9wdGlvbihrZXksIHByZXNldHNba2V5XS5kaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChhZGREaXYpXHJcbiAgICAgICAgICAgIC5zZXRCdXR0b25UZXh0KFwiQWRkIEZyYW1lXCIpXHJcbiAgICAgICAgICAgIC5zZXRDbGFzcyhcImN1c3RvbS1mcmFtZXMtYWRkXCIpXHJcbiAgICAgICAgICAgIC5vbkNsaWNrKGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBkcm9wZG93bi5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbiA9PSBcIm5ld1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJhbWVzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBcIk5ldyBGcmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoaWRlT25Nb2JpbGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJpYmJvbkljb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVuSW5DZW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b29tTGV2ZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmNlSWZyYW1lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tQ3NzOiBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyYW1lcy5wdXNoKHByZXNldHNbb3B0aW9uXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIGRpc2NsYWltZXIgPSB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwicFwiLCB7IGNsczogXCJtb2Qtd2FybmluZ1wiIH0pO1xyXG4gICAgICAgIGRpc2NsYWltZXIuY3JlYXRlU3Bhbih7IHRleHQ6IFwiUGxlYXNlIGJlIGFkdmlzZWQgdGhhdCwgd2hlbiBhZGRpbmcgYSBzaXRlIGFzIGEgY3VzdG9tIGZyYW1lLCB5b3UgcG90ZW50aWFsbHkgZXhwb3NlIHBlcnNvbmFsIGluZm9ybWF0aW9uIHlvdSBlbnRlciB0byBvdGhlciBwbHVnaW5zIHlvdSBoYXZlIGluc3RhbGxlZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBcIiB9KTtcclxuICAgICAgICBkaXNjbGFpbWVyLmNyZWF0ZUVsKFwiYVwiLCB7IHRleHQ6IFwidGhpcyBkaXNjdXNzaW9uXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL0VsbHBlY2svT2JzaWRpYW5DdXN0b21GcmFtZXMvaXNzdWVzLzU0I2lzc3VlY29tbWVudC0xMjEwODc5Njg1XCIsIGNsczogXCJtb2Qtd2FybmluZ1wiIH0pO1xyXG4gICAgICAgIGRpc2NsYWltZXIuY3JlYXRlU3Bhbih7IHRleHQ6IFwiLlwiIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbnRhaW5lckVsLmNyZWF0ZUVsKFwiaHJcIik7XHJcbiAgICAgICAgdGhpcy5jb250YWluZXJFbC5jcmVhdGVFbChcInBcIiwgeyB0ZXh0OiBcIklmIHlvdSBsaWtlIHRoaXMgcGx1Z2luIGFuZCB3YW50IHRvIHN1cHBvcnQgaXRzIGRldmVsb3BtZW50LCB5b3UgY2FuIGRvIHNvIHRocm91Z2ggbXkgd2Vic2l0ZSBieSBjbGlja2luZyB0aGlzIGZhbmN5IGltYWdlIVwiIH0pO1xyXG4gICAgICAgIHRoaXMuY29udGFpbmVyRWwuY3JlYXRlRWwoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL2VsbHBlY2suZGUvc3VwcG9ydFwiIH0pXHJcbiAgICAgICAgICAgIC5jcmVhdGVFbChcImltZ1wiLCB7IGF0dHI6IHsgc3JjOiBcImh0dHBzOi8vZWxscGVjay5kZS9yZXMvZ2VuZXJhbHN1cHBvcnQucG5nXCIgfSwgY2xzOiBcImN1c3RvbS1mcmFtZXMtc3VwcG9ydFwiIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsICJpbXBvcnQgeyBJdGVtVmlldywgV29ya3NwYWNlTGVhZiwgTWVudSB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgeyBDdXN0b21GcmFtZSB9IGZyb20gXCIuL2ZyYW1lXCI7XHJcbmltcG9ydCB7IEN1c3RvbUZyYW1lU2V0dGluZ3MsIEN1c3RvbUZyYW1lc1NldHRpbmdzLCBnZXRJY29uIH0gZnJvbSBcIi4vc2V0dGluZ3NcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21GcmFtZVZpZXcgZXh0ZW5kcyBJdGVtVmlldyB7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgYWN0aW9uczogQWN0aW9uW10gPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBuYW1lOiBcIlJldHVybiB0byBvcmlnaW5hbCBwYWdlXCIsXHJcbiAgICAgICAgICAgIGljb246IFwiaG9tZVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5yZXR1cm4oKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJPcGVuIGRldiB0b29sc1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImJpbmFyeVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS50b2dnbGVEZXZUb29scygpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkNvcHkgbGlua1wiLFxyXG4gICAgICAgICAgICBpY29uOiBcImxpbmtcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHYuZnJhbWUuZ2V0Q3VycmVudFVybCgpKVxyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgICAgbmFtZTogXCJPcGVuIGluIGJyb3dzZXJcIixcclxuICAgICAgICAgICAgaWNvbjogXCJnbG9iZVwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gb3Blbih2LmZyYW1lLmdldEN1cnJlbnRVcmwoKSlcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICAgIG5hbWU6IFwiUmVmcmVzaFwiLFxyXG4gICAgICAgICAgICBpY29uOiBcInJlZnJlc2gtY3dcIixcclxuICAgICAgICAgICAgYWN0aW9uOiB2ID0+IHYuZnJhbWUucmVmcmVzaCgpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkdvIGJhY2tcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvdy1sZWZ0XCIsXHJcbiAgICAgICAgICAgIGFjdGlvbjogdiA9PiB2LmZyYW1lLmdvQmFjaygpXHJcbiAgICAgICAgfSwge1xyXG4gICAgICAgICAgICBuYW1lOiBcIkdvIGZvcndhcmRcIixcclxuICAgICAgICAgICAgaWNvbjogXCJhcnJvdy1yaWdodFwiLFxyXG4gICAgICAgICAgICBhY3Rpb246IHYgPT4gdi5mcmFtZS5nb0ZvcndhcmQoKVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkYXRhOiBDdXN0b21GcmFtZVNldHRpbmdzO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmc7XHJcbiAgICBwcml2YXRlIGZyYW1lOiBDdXN0b21GcmFtZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihsZWFmOiBXb3Jrc3BhY2VMZWFmLCBzZXR0aW5nczogQ3VzdG9tRnJhbWVzU2V0dGluZ3MsIGRhdGE6IEN1c3RvbUZyYW1lU2V0dGluZ3MsIG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHN1cGVyKGxlYWYpO1xyXG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgICAgICB0aGlzLmZyYW1lID0gbmV3IEN1c3RvbUZyYW1lKHNldHRpbmdzLCBkYXRhKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgYWN0aW9uIG9mIEN1c3RvbUZyYW1lVmlldy5hY3Rpb25zKVxyXG4gICAgICAgICAgICB0aGlzLmFkZEFjdGlvbihhY3Rpb24uaWNvbiwgYWN0aW9uLm5hbWUsICgpID0+IGFjdGlvbi5hY3Rpb24odGhpcykpO1xyXG4gICAgfVxyXG5cclxuICAgIG9ubG9hZCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRlbnRFbC5lbXB0eSgpO1xyXG4gICAgICAgIHRoaXMuY29udGVudEVsLmFkZENsYXNzKFwiY3VzdG9tLWZyYW1lcy12aWV3XCIpO1xyXG4gICAgICAgIHRoaXMuZnJhbWUuY3JlYXRlKHRoaXMuY29udGVudEVsKTtcclxuICAgIH1cclxuXHJcbiAgICBvblBhbmVNZW51KG1lbnU6IE1lbnUsIHNvdXJjZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgc3VwZXIub25QYW5lTWVudShtZW51LCBzb3VyY2UpO1xyXG4gICAgICAgIGZvciAobGV0IGFjdGlvbiBvZiBDdXN0b21GcmFtZVZpZXcuYWN0aW9ucykge1xyXG4gICAgICAgICAgICBtZW51LmFkZEl0ZW0oaSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpLnNldFRpdGxlKGFjdGlvbi5uYW1lKTtcclxuICAgICAgICAgICAgICAgIGkuc2V0SWNvbihhY3Rpb24uaWNvbik7XHJcbiAgICAgICAgICAgICAgICBpLm9uQ2xpY2soKCkgPT4gYWN0aW9uLmFjdGlvbih0aGlzKSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRWaWV3VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzcGxheVRleHQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmRpc3BsYXlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEljb24oKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gZ2V0SWNvbih0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvY3VzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZnJhbWUuZm9jdXMoKTtcclxuICAgIH1cclxufVxyXG5cclxuaW50ZXJmYWNlIEFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBpY29uOiBzdHJpbmc7XHJcbiAgICBhY3Rpb246ICh2aWV3OiBDdXN0b21GcmFtZVZpZXcpID0+IGFueTtcclxufVxyXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQWdEOzs7QUNBaEQsc0JBQXlCOzs7QUNBbEIsSUFBTSxrQkFBd0M7QUFBQSxFQUNqRCxRQUFRO0FBQUEsRUFDUixTQUFTO0FBQUE7QUFFTixJQUFNLFVBQStDO0FBQUEsRUFDeEQsWUFBWTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUEsRUFFZixZQUFZO0FBQUEsSUFDUixLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBTWYsWUFBWTtBQUFBLElBQ1IsS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT2YsUUFBUTtBQUFBLElBQ0osS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU1mLFdBQVc7QUFBQSxJQUNQLEtBQUs7QUFBQSxJQUNMLGFBQWE7QUFBQSxJQUNiLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxJQUNkLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFdBQVc7QUFBQSxJQUNYLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFrQmYsVUFBVTtBQUFBLElBQ04sS0FBSztBQUFBLElBQ0wsYUFBYTtBQUFBLElBQ2IsTUFBTTtBQUFBLElBQ04sY0FBYztBQUFBLElBQ2QsZUFBZTtBQUFBLElBQ2YsY0FBYztBQUFBLElBQ2QsV0FBVztBQUFBLElBQ1gsYUFBYTtBQUFBLElBQ2IsV0FBVztBQUFBO0FBQUEsRUFFZixXQUFXO0FBQUEsSUFDUCxLQUFLO0FBQUEsSUFDTCxhQUFhO0FBQUEsSUFDYixNQUFNO0FBQUEsSUFDTixjQUFjO0FBQUEsSUFDZCxlQUFlO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxXQUFXO0FBQUEsSUFDWCxhQUFhO0FBQUEsSUFDYixXQUFXO0FBQUE7QUFBQTtBQXFCWixpQkFBaUIsVUFBK0I7QUFDbkQsU0FBTyxTQUFTLE9BQU8sVUFBVSxTQUFTLFNBQVM7QUFBQTtBQUdoRCxlQUFlLFVBQStCO0FBQ2pELFNBQU8sU0FBUyxZQUFZLGNBQWMsUUFBUSxPQUFPO0FBQUE7OztBRHBJdEQsd0JBQWtCO0FBQUEsRUFNckIsWUFBWSxVQUFnQyxNQUEyQjtBQUNuRSxTQUFLLFdBQVc7QUFDaEIsU0FBSyxPQUFPO0FBQUE7QUFBQSxFQUdoQixPQUFPLFFBQXFCLGtCQUEwQixRQUFXLFlBQW9CLFFBQWlCO0FBQ2xHLFFBQUksUUFBUSxZQUFZLEtBQUssU0FBUztBQUN0QyxRQUFJO0FBQ0EsZUFBUztBQUNiLFFBQUkseUJBQVMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLGFBQWE7QUFDakQsVUFBSSxXQUFXLE9BQU87QUFDdEIsV0FBSyxRQUFRLFNBQVMsY0FBYztBQUNwQyxhQUFPLFlBQVksS0FBSztBQUN4QixXQUFLLE1BQU0sYUFBYSxlQUFlO0FBQ3ZDLFdBQUssTUFBTSxpQkFBaUIsYUFBYSxNQUFNO0FBQzNDLGFBQUssTUFBTSxjQUFjLEtBQUssS0FBSztBQUNuQyxhQUFLLE1BQU0sVUFBVSxLQUFLLEtBQUs7QUFBQTtBQUVuQyxXQUFLLE1BQU0saUJBQWlCLGFBQWEsTUFBTTtBQUUzQyxZQUFJLFlBQVksT0FBTyxLQUFLO0FBQ3hCLGVBQUssTUFBTTtBQUNYLGVBQUssT0FBTyxRQUFRLGlCQUFpQjtBQUFBO0FBQUE7QUFBQSxXQUcxQztBQUNILFdBQUssUUFBUSxPQUFPLElBQUksY0FBYztBQUN0QyxhQUFPLFlBQVksS0FBSztBQUN4QixXQUFLLE1BQU0sYUFBYSxXQUFXO0FBQ25DLFdBQUssTUFBTSxhQUFhLFNBQVM7QUFDakMsZUFBUyxvQkFBb0IsS0FBSyxLQUFLO0FBQUE7QUFFM0MsU0FBSyxNQUFNLFNBQVM7QUFDcEIsU0FBSyxNQUFNLFNBQVMsaUJBQWlCLE1BQU0sS0FBSztBQUNoRCxTQUFLLE1BQU0sYUFBYSxTQUFTO0FBRWpDLFFBQUksTUFBTSxLQUFLLEtBQUs7QUFDcEIsUUFBSSxXQUFXO0FBQ1gsVUFBSSxDQUFDLFVBQVUsV0FBVztBQUN0QixlQUFPO0FBQ1gsYUFBTztBQUFBO0FBRVgsU0FBSyxNQUFNLGFBQWEsT0FBTztBQUFBO0FBQUEsRUFHbkMsVUFBZ0I7QUFDWixRQUFJLEtBQUssaUJBQWlCLG1CQUFtQjtBQUN6QyxXQUFLLE1BQU0sY0FBYyxTQUFTO0FBQUEsV0FDL0I7QUFDSCxXQUFLLE1BQU07QUFBQTtBQUFBO0FBQUEsRUFJbkIsU0FBZTtBQUNYLFFBQUksS0FBSyxpQkFBaUIsbUJBQW1CO0FBQ3pDLFdBQUssTUFBTSxjQUFjLEtBQUssS0FBSyxLQUFLO0FBQUEsV0FDckM7QUFDSCxXQUFLLE1BQU0sUUFBUSxLQUFLLEtBQUs7QUFBQTtBQUFBO0FBQUEsRUFJckMsU0FBZTtBQUNYLFFBQUksS0FBSyxpQkFBaUIsbUJBQW1CO0FBQ3pDLFdBQUssTUFBTSxjQUFjLFFBQVE7QUFBQSxXQUM5QjtBQUNILFdBQUssTUFBTTtBQUFBO0FBQUE7QUFBQSxFQUluQixZQUFrQjtBQUNkLFFBQUksS0FBSyxpQkFBaUIsbUJBQW1CO0FBQ3pDLFdBQUssTUFBTSxjQUFjLFFBQVE7QUFBQSxXQUM5QjtBQUNILFdBQUssTUFBTTtBQUFBO0FBQUE7QUFBQSxFQUluQixpQkFBdUI7QUFDbkIsUUFBSSxDQUFFLE1BQUssaUJBQWlCLG9CQUFvQjtBQUM1QyxVQUFJLENBQUMsS0FBSyxNQUFNLG9CQUFvQjtBQUNoQyxhQUFLLE1BQU07QUFBQSxhQUNSO0FBQ0gsYUFBSyxNQUFNO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLdkIsZ0JBQXdCO0FBQ3BCLFdBQU8sS0FBSyxpQkFBaUIsb0JBQW9CLEtBQUssTUFBTSxjQUFjLFNBQVMsT0FBTyxLQUFLLE1BQU07QUFBQTtBQUFBLEVBR3pHLFFBQWM7QUFDVixRQUFJLEtBQUssaUJBQWlCLG1CQUFtQjtBQUN6QyxXQUFLLE1BQU0sY0FBYztBQUFBLFdBQ3RCO0FBQ0gsV0FBSyxNQUFNO0FBQUE7QUFBQTtBQUFBOzs7QUV4R3ZCLHVCQUFtRjtBQUk1RSwyQ0FBcUMsa0NBQWlCO0FBQUEsRUFJekQsWUFBWSxLQUFVLFFBQTRCO0FBQzlDLFVBQU0sS0FBSztBQUNYLFNBQUssU0FBUztBQUFBO0FBQUEsRUFHbEIsVUFBZ0I7QUFDWixTQUFLLFlBQVk7QUFDakIsU0FBSyxZQUFZLFNBQVMsTUFBTSxFQUFFLE1BQU07QUFDeEMsU0FBSyxZQUFZLFNBQVMsS0FBSyxFQUFFLE1BQU0sd0dBQXdHLEtBQUs7QUFFcEosUUFBSSx5QkFBUSxLQUFLLGFBQ1osUUFBUSxpQkFDUixRQUFRLHVGQUNSLFFBQVEsT0FBSztBQUNWLFFBQUUsUUFBUSxPQUFPO0FBQ2pCLFFBQUUsU0FBUyxPQUFPLEtBQUssT0FBTyxTQUFTO0FBQ3ZDLFFBQUUsU0FBUyxDQUFNLE1BQUs7QUFDbEIsYUFBSyxPQUFPLFNBQVMsVUFBVSxFQUFFLFNBQVMsT0FBTyxLQUFLLGdCQUFnQjtBQUN0RSxjQUFNLEtBQUssT0FBTztBQUFBO0FBQUE7QUFJOUIsYUFBUyxTQUFTLEtBQUssT0FBTyxTQUFTLFFBQVE7QUFDM0MsVUFBSSxVQUFVLEtBQUssWUFBWSxTQUFTLE1BQU0sRUFBRSxNQUFNLE1BQU0sZUFBZTtBQUMzRSxVQUFJLFNBQVMsSUFBSSxpQ0FBZ0IsS0FBSyxhQUNqQyxjQUFjLGlCQUNkLFNBQVMsc0JBQ1QsUUFBUSxNQUFZO0FBQ2pCLGdCQUFRLFNBQVMsQ0FBQyxRQUFRO0FBQzFCLGVBQU8sY0FBYyxRQUFRLFNBQVMsa0JBQWtCO0FBQUE7QUFFaEUsVUFBSSxVQUFVLEtBQUssWUFBWTtBQUMvQixjQUFRLFNBQVM7QUFFakIsVUFBSSx5QkFBUSxTQUNQLFFBQVEsZ0JBQ1IsUUFBUSxpREFDUixRQUFRLE9BQUs7QUFDVixVQUFFLFNBQVMsTUFBTTtBQUNqQixVQUFFLFNBQVMsQ0FBTSxNQUFLO0FBQ2xCLGdCQUFNLGNBQWM7QUFDcEIsa0JBQVEsUUFBUSxNQUFNLGVBQWU7QUFDckMsZ0JBQU0sS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUc5QixVQUFJLHlCQUFRLFNBQ1AsUUFBUSxRQUNSLFFBQVEsZUFBZSxPQUFLO0FBQ3pCLFVBQUUsV0FBVyxFQUFFLE1BQU07QUFDckIsVUFBRSxTQUFTLEtBQUssRUFBRSxNQUFNLGdCQUFnQixNQUFNO0FBQzlDLFVBQUUsV0FBVyxFQUFFLE1BQU07QUFBQSxVQUV4QixRQUFRLE9BQUs7QUFDVixVQUFFLFNBQVMsTUFBTTtBQUNqQixVQUFFLFNBQVMsQ0FBTSxNQUFLO0FBQ2xCLGdCQUFNLE9BQU87QUFDYixnQkFBTSxLQUFLLE9BQU87QUFBQTtBQUFBO0FBRzlCLFVBQUkseUJBQVEsU0FDUCxRQUFRLE9BQ1IsUUFBUSxnREFDUixRQUFRLE9BQUs7QUFDVixVQUFFLFNBQVMsTUFBTTtBQUNqQixVQUFFLFNBQVMsQ0FBTSxNQUFLO0FBQ2xCLGdCQUFNLE1BQU07QUFDWixnQkFBTSxLQUFLLE9BQU87QUFBQTtBQUFBO0FBRzlCLFVBQUkseUJBQVEsU0FDUCxRQUFRLHFCQUNSLFFBQVEsZ01BQ1IsVUFBVSxPQUFLO0FBQ1osVUFBRSxTQUFTLE1BQU07QUFDakIsVUFBRSxTQUFTLENBQU0sTUFBSztBQUNsQixnQkFBTSxlQUFlO0FBQ3JCLGdCQUFNLEtBQUssT0FBTztBQUFBO0FBQUE7QUFHOUIsVUFBSSx5QkFBUSxTQUNQLFFBQVEsbUJBQ1IsUUFBUSxzRUFDUixVQUFVLE9BQUs7QUFDWixVQUFFLFNBQVMsTUFBTTtBQUNqQixVQUFFLFNBQVMsQ0FBTSxNQUFLO0FBQ2xCLGdCQUFNLGdCQUFnQjtBQUN0QixnQkFBTSxLQUFLLE9BQU87QUFBQTtBQUFBO0FBRzlCLFVBQUkseUJBQVEsU0FDUCxRQUFRLGtCQUNSLFFBQVEsME9BQ1IsVUFBVSxPQUFLO0FBQ1osVUFBRSxTQUFTLE1BQU07QUFDakIsVUFBRSxTQUFTLENBQU0sTUFBSztBQUNsQixnQkFBTSxlQUFlO0FBQ3JCLGdCQUFNLEtBQUssT0FBTztBQUFBO0FBQUE7QUFHOUIsVUFBSSx5QkFBUSxTQUNQLFFBQVEsZ0JBQ1IsUUFBUSxlQUFlLE9BQUs7QUFDekIsVUFBRSxXQUFXLEVBQUUsTUFBTTtBQUNyQixVQUFFLFNBQVM7QUFDWCxVQUFFLFNBQVMsTUFBTSxFQUFFLE1BQU07QUFBQSxVQUU1QixVQUFVLE9BQUs7QUFDWixVQUFFLFNBQVMsTUFBTTtBQUNqQixVQUFFLFNBQVMsQ0FBTSxNQUFLO0FBQ2xCLGdCQUFNLGNBQWM7QUFDcEIsZ0JBQU0sS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUc5QixVQUFJLHlCQUFRLFNBQ1AsUUFBUSxhQUNSLFFBQVEsOEVBQ1IsUUFBUSxPQUFLO0FBQ1YsVUFBRSxRQUFRLE9BQU87QUFDakIsVUFBRSxTQUFTLE9BQU8sTUFBTSxZQUFZO0FBQ3BDLFVBQUUsU0FBUyxDQUFNLE1BQUs7QUFDbEIsZ0JBQU0sWUFBWSxFQUFFLFNBQVMsT0FBTyxLQUFLLE1BQU07QUFDL0MsZ0JBQU0sS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUc5QixVQUFJLHlCQUFRLFNBQ1AsUUFBUSxrQkFDUixRQUFRLGVBQWUsT0FBSztBQUN6QixVQUFFLFdBQVcsRUFBRSxNQUFNO0FBQ3JCLFVBQUUsU0FBUztBQUNYLFVBQUUsU0FBUyxNQUFNLEVBQUUsTUFBTTtBQUFBLFVBRTVCLFlBQVksT0FBSztBQUNkLFVBQUUsUUFBUSxPQUFPO0FBQ2pCLFVBQUUsUUFBUSxPQUFPO0FBQ2pCLFVBQUUsU0FBUyxNQUFNO0FBQ2pCLFVBQUUsU0FBUyxDQUFNLE1BQUs7QUFDbEIsZ0JBQU0sWUFBWTtBQUNsQixnQkFBTSxLQUFLLE9BQU87QUFBQTtBQUFBO0FBRzlCLFVBQUksaUNBQWdCLFNBQ2YsY0FBYyxnQkFDZCxRQUFRLE1BQVk7QUFDakIsYUFBSyxPQUFPLFNBQVMsT0FBTyxPQUFPO0FBQ25DLGNBQU0sS0FBSyxPQUFPO0FBQ2xCLGFBQUs7QUFBQTtBQUFBO0FBSWpCLFNBQUssWUFBWSxTQUFTO0FBQzFCLFNBQUssWUFBWSxTQUFTLEtBQUssRUFBRSxNQUFNO0FBRXZDLFFBQUksU0FBUyxLQUFLLFlBQVk7QUFDOUIsUUFBSSxXQUFXLElBQUksbUNBQWtCO0FBQ3JDLGFBQVMsVUFBVSxPQUFPO0FBQzFCLGFBQVMsT0FBTyxPQUFPLEtBQUs7QUFDeEIsZUFBUyxVQUFVLEtBQUssUUFBUSxLQUFLO0FBQ3pDLFFBQUksaUNBQWdCLFFBQ2YsY0FBYyxhQUNkLFNBQVMscUJBQ1QsUUFBUSxNQUFZO0FBQ2pCLFVBQUksU0FBUyxTQUFTO0FBQ3RCLFVBQUksVUFBVSxPQUFPO0FBQ2pCLGFBQUssT0FBTyxTQUFTLE9BQU8sS0FBSztBQUFBLFVBQzdCLEtBQUs7QUFBQSxVQUNMLGFBQWE7QUFBQSxVQUNiLE1BQU07QUFBQSxVQUNOLGNBQWM7QUFBQSxVQUNkLGVBQWU7QUFBQSxVQUNmLGNBQWM7QUFBQSxVQUNkLFdBQVc7QUFBQSxVQUNYLGFBQWE7QUFBQSxVQUNiLFdBQVc7QUFBQTtBQUFBLGFBRVo7QUFDSCxhQUFLLE9BQU8sU0FBUyxPQUFPLEtBQUssUUFBUTtBQUFBO0FBRTdDLFlBQU0sS0FBSyxPQUFPO0FBQ2xCLFdBQUs7QUFBQTtBQUdiLFFBQUksYUFBYSxLQUFLLFlBQVksU0FBUyxLQUFLLEVBQUUsS0FBSztBQUN2RCxlQUFXLFdBQVcsRUFBRSxNQUFNO0FBQzlCLGVBQVcsU0FBUyxLQUFLLEVBQUUsTUFBTSxtQkFBbUIsTUFBTSxxRkFBcUYsS0FBSztBQUNwSixlQUFXLFdBQVcsRUFBRSxNQUFNO0FBRTlCLFNBQUssWUFBWSxTQUFTO0FBQzFCLFNBQUssWUFBWSxTQUFTLEtBQUssRUFBRSxNQUFNO0FBQ3ZDLFNBQUssWUFBWSxTQUFTLEtBQUssRUFBRSxNQUFNLGdDQUNsQyxTQUFTLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSywrQ0FBK0MsS0FBSztBQUFBO0FBQUE7OztBQ3JNaEcsdUJBQThDO0FBSXZDLHFDQUE4QiwwQkFBUztBQUFBLEVBc0MxQyxZQUFZLE1BQXFCLFVBQWdDLE1BQTJCLE1BQWM7QUFDdEcsVUFBTTtBQUNOLFNBQUssT0FBTztBQUNaLFNBQUssT0FBTztBQUNaLFNBQUssUUFBUSxJQUFJLFlBQVksVUFBVTtBQUV2QyxhQUFTLFVBQVUsaUJBQWdCO0FBQy9CLFdBQUssVUFBVSxPQUFPLE1BQU0sT0FBTyxNQUFNLE1BQU0sT0FBTyxPQUFPO0FBQUE7QUFBQSxFQUdyRSxTQUFlO0FBQ1gsU0FBSyxVQUFVO0FBQ2YsU0FBSyxVQUFVLFNBQVM7QUFDeEIsU0FBSyxNQUFNLE9BQU8sS0FBSztBQUFBO0FBQUEsRUFHM0IsV0FBVyxNQUFZLFFBQXNCO0FBQ3pDLFVBQU0sV0FBVyxNQUFNO0FBQ3ZCLGFBQVMsVUFBVSxpQkFBZ0IsU0FBUztBQUN4QyxXQUFLLFFBQVEsT0FBSztBQUNkLFVBQUUsU0FBUyxPQUFPO0FBQ2xCLFVBQUUsUUFBUSxPQUFPO0FBQ2pCLFVBQUUsUUFBUSxNQUFNLE9BQU8sT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSzFDLGNBQXNCO0FBQ2xCLFdBQU8sS0FBSztBQUFBO0FBQUEsRUFHaEIsaUJBQXlCO0FBQ3JCLFdBQU8sS0FBSyxLQUFLO0FBQUE7QUFBQSxFQUdyQixVQUFrQjtBQUNkLFdBQU8sUUFBUSxLQUFLO0FBQUE7QUFBQSxFQUd4QixRQUFjO0FBQ1YsU0FBSyxNQUFNO0FBQUE7QUFBQTtBQTlFWjtBQUVxQixBQUZyQixnQkFFcUIsVUFBb0I7QUFBQSxFQUN4QztBQUFBLElBQ0ksTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sUUFBUSxPQUFLLEVBQUUsTUFBTTtBQUFBO0FBQUEsRUFDdEI7QUFBQSxJQUNDLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFFBQVEsT0FBSyxFQUFFLE1BQU07QUFBQTtBQUFBLEVBQ3RCO0FBQUEsSUFDQyxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixRQUFRLE9BQUssVUFBVSxVQUFVLFVBQVUsRUFBRSxNQUFNO0FBQUE7QUFBQSxFQUNwRDtBQUFBLElBQ0MsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sUUFBUSxPQUFLLEtBQUssRUFBRSxNQUFNO0FBQUE7QUFBQSxFQUMzQjtBQUFBLElBQ0MsTUFBTTtBQUFBLElBQ04sTUFBTTtBQUFBLElBQ04sUUFBUSxPQUFLLEVBQUUsTUFBTTtBQUFBO0FBQUEsRUFDdEI7QUFBQSxJQUNDLE1BQU07QUFBQSxJQUNOLE1BQU07QUFBQSxJQUNOLFFBQVEsT0FBSyxFQUFFLE1BQU07QUFBQTtBQUFBLEVBQ3RCO0FBQUEsSUFDQyxNQUFNO0FBQUEsSUFDTixNQUFNO0FBQUEsSUFDTixRQUFRLE9BQUssRUFBRSxNQUFNO0FBQUE7QUFBQTs7O0FKNUJqQyx1Q0FBZ0Qsd0JBQU87QUFBQSxFQUloRCxTQUF3QjtBQUFBO0FBQzdCLFlBQU0sS0FBSztBQUVYLGVBQVMsU0FBUyxLQUFLLFNBQVMsUUFBUTtBQUN2QyxZQUFJLENBQUMsTUFBTSxPQUFPLENBQUMsTUFBTTtBQUN4QjtBQUNELFlBQUksT0FBTyxpQkFBaUIsTUFBTTtBQUNsQyxZQUFJLDBCQUFTLGVBQWUsTUFBTSxjQUFjO0FBQy9DLGtCQUFRLElBQUksa0JBQWtCO0FBQzlCO0FBQUE7QUFFRCxZQUFJO0FBQ0gsa0JBQVEsSUFBSSxxQkFBcUIsZ0JBQWdCLE1BQU07QUFFdkQsZUFBSyxhQUFhLE1BQU0sT0FBSyxJQUFJLGdCQUFnQixHQUFHLEtBQUssVUFBVSxPQUFPO0FBQzFFLGVBQUssV0FBVztBQUFBLFlBQ2YsSUFBSSxRQUFRO0FBQUEsWUFDWixNQUFNLFFBQVEsTUFBTTtBQUFBLFlBQ3BCLFVBQVUsTUFBTSxLQUFLLFNBQVMsTUFBTSxNQUFNLGNBQWM7QUFBQTtBQUd6RCxjQUFJLE1BQU07QUFDVCxpQkFBSyxjQUFjLFFBQVEsUUFBUSxRQUFRLE1BQU0sZUFDaEQsT0FBSyxLQUFLLFNBQVMsTUFBTSxNQUFNLGNBQWMsMEJBQVMsVUFBVSxFQUFFLFVBQVUsRUFBRTtBQUFBLGlCQUN6RSxHQUFOO0FBQ0Qsa0JBQVEsTUFBTSwyQkFBMkI7QUFBQTtBQUFBO0FBSTNDLFdBQUssY0FBYyxJQUFJLHVCQUF1QixLQUFLLEtBQUs7QUFFeEQsV0FBSyxtQ0FBbUMsaUJBQWlCLENBQUMsR0FBRyxNQUFNO0FBQ2xFLFVBQUU7QUFDRixVQUFFLFNBQVM7QUFFWCxZQUFJLGFBQWEsbUJBQW1CLEtBQUs7QUFDekMsWUFBSSxZQUFZLGNBQWMsV0FBVyxHQUFHO0FBQzVDLFlBQUksQ0FBQyxXQUFXO0FBQ2YsWUFBRSxXQUFXLEVBQUUsTUFBTTtBQUNyQjtBQUFBO0FBRUQsWUFBSSxPQUFPLEtBQUssU0FBUyxPQUFPLEtBQUssT0FBSyxFQUFFLGVBQWU7QUFDM0QsWUFBSSxDQUFDLE1BQU07QUFDVixZQUFFLFdBQVcsRUFBRSxNQUFNLG1DQUFtQztBQUN4RDtBQUFBO0FBRUQsWUFBSSwwQkFBUyxlQUFlLEtBQUssY0FBYztBQUM5QyxZQUFFLFdBQVcsRUFBRSxNQUFNLEdBQUc7QUFDeEI7QUFBQTtBQUdELFlBQUksYUFBYSxtQkFBbUIsS0FBSztBQUN6QyxZQUFJLFFBQVEsY0FBYyxXQUFXLEdBQUc7QUFDeEMsMEJBQVU7QUFFVixZQUFJLGlCQUFpQix1QkFBdUIsS0FBSztBQUNqRCxZQUFJLFlBQVksa0JBQWtCLGVBQWUsR0FBRztBQUNwRCxrQ0FBYztBQUVkLFlBQUksUUFBUSxJQUFJLFlBQVksS0FBSyxVQUFVO0FBQzNDLGNBQU0sT0FBTyxHQUFHLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUluQixlQUFlO0FBQUE7QUFDcEIsV0FBSyxXQUFXLE9BQU8sT0FBTyxJQUFJLGlCQUFpQixNQUFNLEtBQUs7QUFBQTtBQUFBO0FBQUEsRUFHekQsZUFBZTtBQUFBO0FBQ3BCLFlBQU0sS0FBSyxTQUFTLEtBQUs7QUFBQTtBQUFBO0FBQUEsRUFHWixTQUFTLE1BQWMsUUFBaUIsT0FBK0I7QUFBQTtBQUNwRixVQUFJO0FBQ0osVUFBSSxRQUFRO0FBQ1gsZUFBTyxLQUFLLElBQUksVUFBVSxRQUFRO0FBQ2xDLGNBQU0sS0FBSyxhQUFhLEVBQUUsTUFBTSxNQUFNLFFBQVE7QUFBQSxhQUN4QztBQUNOLFlBQUksQ0FBQyxLQUFLLElBQUksVUFBVSxnQkFBZ0IsTUFBTTtBQUM3QyxnQkFBTSxLQUFLLElBQUksVUFBVSxhQUFhLE9BQU8sYUFBYSxFQUFFLE1BQU0sTUFBTSxRQUFRO0FBQ2pGLGVBQU8sS0FBSyxJQUFJLFVBQVUsZ0JBQWdCLE1BQU07QUFDaEQsYUFBSyxJQUFJLFVBQVUsV0FBVztBQUFBO0FBRS9CLFVBQUksS0FBSyxnQkFBZ0I7QUFDeEIsYUFBSyxLQUFLO0FBQUE7QUFBQTtBQUFBOyIsCiAgIm5hbWVzIjogW10KfQo=