ctt-babylon 0.1.152 → 0.1.154

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,15 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, ViewChild, Input, ViewEncapsulation, } from '@angular/core';
1
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
2
+ import { Component, Inject, Input, PLATFORM_ID, ViewChild, ViewEncapsulation, } from '@angular/core';
3
3
  import { FormsModule } from '@angular/forms';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "../../../services/color-panel.service";
6
6
  import * as i2 from "@angular/common";
7
7
  import * as i3 from "@angular/forms";
8
8
  export class BabylonColorPickerComponent {
9
- constructor(colorService, renderer) {
9
+ constructor(colorService, renderer, platformId) {
10
10
  this.colorService = colorService;
11
11
  this.renderer = renderer;
12
+ this.platformId = platformId;
12
13
  this.userPanel = '';
13
14
  this.passPanel = '';
14
15
  this.googleFontsApiKey = 'AIzaSyAVbzzOmAJfsAsi951e636ym-ABWy2BOMA';
@@ -28,21 +29,23 @@ export class BabylonColorPickerComponent {
28
29
  this.dragStartY = 0;
29
30
  }
30
31
  ngOnInit() {
31
- const params = new URLSearchParams(window.location.search);
32
- this.mostrarPanel = params.has('activar_panel');
33
- const storedTab = this.colorService.getStoredTab(this.tabs);
34
- this.activeTab = storedTab;
35
- const storedSession = sessionStorage.getItem('panel-login-ok');
36
- if (storedSession === 'true') {
37
- this.loginHecho = true;
38
- const variables = this.colorService.getAllCSSVariables();
39
- this.groupedVariables =
40
- this.colorService.groupByCategory(variables);
41
- this.colorService.fetchGoogleFonts(this.googleFontsApiKey);
42
- this.setInitialFontValues();
32
+ if (isPlatformBrowser(this.platformId)) {
33
+ const params = new URLSearchParams(window.location.search);
34
+ this.mostrarPanel = params.has('activar_panel');
35
+ const storedTab = this.colorService.getStoredTab(this.tabs);
36
+ this.activeTab = storedTab;
37
+ const storedSession = sessionStorage.getItem('panel-login-ok');
38
+ if (storedSession === 'true') {
39
+ this.loginHecho = true;
40
+ const variables = this.colorService.getAllCSSVariables();
41
+ this.groupedVariables =
42
+ this.colorService.groupByCategory(variables);
43
+ this.colorService.fetchGoogleFonts(this.googleFontsApiKey);
44
+ this.setInitialFontValues();
45
+ }
46
+ this.renderer.listen('window', 'mousemove', (e) => this.onDragMove(e));
47
+ this.renderer.listen('window', 'mouseup', () => this.onDragEnd());
43
48
  }
44
- this.renderer.listen('window', 'mousemove', (e) => this.onDragMove(e));
45
- this.renderer.listen('window', 'mouseup', () => this.onDragEnd());
46
49
  }
47
50
  async login() {
48
51
  if (this.emailInput === this.userPanel &&
@@ -214,13 +217,16 @@ export class BabylonColorPickerComponent {
214
217
  parseInt(g).toString(16).padStart(2, '0') +
215
218
  parseInt(b).toString(16).padStart(2, '0'));
216
219
  }
217
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonColorPickerComponent, deps: [{ token: i1.ColorPickerService }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component }); }
220
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonColorPickerComponent, deps: [{ token: i1.ColorPickerService }, { token: i0.Renderer2 }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Component }); }
218
221
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BabylonColorPickerComponent, isStandalone: true, selector: "lib-babylon-color-picker", inputs: { userPanel: "userPanel", passPanel: "passPanel" }, viewQueries: [{ propertyName: "panelRef", first: true, predicate: ["panel"], descendants: true }], ngImport: i0, template: "<!-- Mostrar el panel solo si mostrarPanel es true -->\n@if (mostrarPanel) {\n <!-- LOGIN PANEL -->\n @if (!loginHecho) {\n <div class=\"login-panel\">\n <h2>Panel de estilos</h2>\n <input\n type=\"text\"\n placeholder=\"Usuario\"\n [(ngModel)]=\"emailInput\"\n (keydown.enter)=\"login()\"\n />\n <input\n type=\"password\"\n placeholder=\"Contrase\u00F1a\"\n [(ngModel)]=\"passInput\"\n (keydown.enter)=\"login()\"\n />\n <button (click)=\"login()\">Entrar</button>\n </div>\n } @else {\n <!-- ESTILO PANEL -->\n <div\n #panel\n class=\"color-picker-panel\"\n [class.minimizado]=\"minimizado\"\n (mousedown)=\"onDragStart($event)\"\n >\n <div class=\"drag-header\">\n <h1>Panel de estilos</h1>\n <button\n class=\"minimize-btn\"\n (click)=\"toggleMinimizado()\"\n title=\"Minimizar/Restaurar panel\"\n >\n {{ minimizado ? '\uFF0B' : '\uFF0D' }}\n </button>\n </div>\n\n @if (!minimizado) {\n <!-- TABS -->\n <div class=\"tabs\">\n @for (tab of tabs; track tab) {\n <button\n [class.active]=\"activeTab === tab\"\n (click)=\"setActiveTab(tab)\"\n >\n {{ tab }}\n </button>\n }\n </div>\n\n <!-- RESET & EXPORT -->\n <div class=\"reset-export-container\">\n <button class=\"reset-button\" (click)=\"resetColors()\">\n Resetear estilos\n </button>\n <button class=\"export-button\" (click)=\"exportCSS()\">\n Exportar CSS\n </button>\n </div>\n\n <!-- GRUPOS DE VARIABLES -->\n <div class=\"groups-wrapper\">\n @for (\n group of groupedVariables | keyvalue;\n track group.key\n ) {\n @if (getTabForGroup(group.key) === activeTab) {\n <div class=\"group-box\">\n <div\n class=\"group-header\"\n (click)=\"toggleGroup(group.key)\"\n >\n <h2>{{ group.key }}</h2>\n <span\n class=\"arrow\"\n [class.expanded]=\"\n isGroupExpanded(group.key)\n \"\n >\u2335</span\n >\n </div>\n\n @if (isGroupExpanded(group.key)) {\n <div class=\"group-content\">\n @for (\n variable of group.value;\n track variable.name\n ) {\n <div class=\"color-picker-item\">\n <label>{{\n variable.name.replace(\n '--',\n ''\n )\n }}</label>\n\n @if (isColor(variable.value)) {\n <input\n type=\"color\"\n [value]=\"\n getHexForColorInput(\n variable.name\n )\n \"\n (input)=\"\n changeColor(\n $event,\n variable.name\n )\n \"\n />\n } @else {\n @if (\n group.key ===\n 'Tipograf\u00EDas'\n ) {\n <select\n [ngModel]=\"\n getFontNameOnly(\n variable.value\n )\n \"\n (ngModelChange)=\"\n updateFontVariable(\n variable.name,\n $event\n )\n \"\n >\n <optgroup\n label=\"Fuentes del proyecto\"\n >\n @for (\n font of colorService.projectFonts;\n track font\n ) {\n @if (\n ![\n 'font-title',\n 'font-pretitle',\n 'font-text',\n 'font-claim',\n ].includes(\n font\n )\n ) {\n <option\n [value]=\"\n font\n \"\n >\n {{\n font\n }}\n </option>\n }\n }\n </optgroup>\n\n <optgroup\n label=\"Google Fonts\"\n >\n @for (\n font of colorService.googleFonts;\n track font\n ) {\n <option\n [value]=\"\n font\n \"\n >\n {{\n font\n }}\n </option>\n }\n </optgroup>\n </select>\n } @else {\n <input\n type=\"text\"\n [value]=\"\n variable.value\n \"\n (input)=\"\n changeColor(\n $event,\n variable.name\n )\n \"\n />\n }\n }\n\n <div class=\"tooltip-container\">\n <button\n class=\"copy-btn\"\n (click)=\"\n copyToClipboard(\n variable.value,\n variable.name\n )\n \"\n >\n \uD83D\uDCCB\n </button>\n <span class=\"tooltip-text\"\n >Copiar</span\n >\n </div>\n\n @if (wasCopied(variable.name)) {\n <span class=\"copied-msg\"\n >Copiado \u2714\uFE0F</span\n >\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n}\n", styles: [".login-panel{all:initial;position:fixed;top:50px;left:50px;width:350px;background:#fff;border:2px solid #ddd;border-radius:10px;box-shadow:0 8px 20px #0000001a;padding:1rem;z-index:100000;display:flex;flex-direction:column;gap:.5rem;font-family:sans-serif}.login-panel *{all:revert}.login-panel h2{margin-top:0;font-size:1.2rem;text-align:center}.login-panel input{padding:.5rem;font-size:1rem;border:1px solid #ccc;border-radius:6px}.login-panel button{background-color:#d93030;color:#fff;border:none;border-radius:6px;padding:.6rem;cursor:pointer;font-weight:700}.login-panel button:hover{background-color:#b92626}.color-picker-panel{all:initial;position:fixed;top:50px;left:50px;width:450px;max-width:95%;max-height:50vh;overflow-y:auto;overflow-x:hidden;background-color:#fff;border:2px solid #ddd;border-radius:10px;box-shadow:0 8px 20px #0000001a;z-index:100000;-webkit-user-select:none;user-select:none;cursor:grab;scrollbar-gutter:stable;font-family:sans-serif;padding-bottom:20px}.color-picker-panel *{all:revert}.color-picker-panel:active{cursor:grabbing}.color-picker-panel.minimizado{height:auto;width:350px;overflow:hidden;padding-bottom:.5rem}.drag-header{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10;background-color:#fafafa;padding:.5rem 1rem;border-bottom:1px solid #ddd;border-radius:8px 8px 0 0}.drag-header h1{font-size:1.2rem;margin:0;-webkit-user-select:none;user-select:none;text-align:center;flex-grow:1}.drag-header .minimize-btn{background:none;background-color:#d93030;color:#fff;border:none;font-size:1.2rem;cursor:pointer;padding:.2rem .5rem;-webkit-user-select:none;user-select:none}.drag-header .minimize-btn:hover{transform:scale(1.1)}.tabs{display:flex;border-bottom:1px solid #ddd}.tabs button{flex:1;padding:.5rem;background:#f5f5f5;border:none;cursor:pointer;font-weight:700;font-size:.9rem}.tabs button.active{background:#fff;border-bottom:2px solid #d93030}.tabs button:hover{background:#e5e5e5}.reset-export-container{display:flex;flex-direction:row;gap:.5rem;padding:.5rem}.reset-button{width:100%;background-color:#ff4d4d;color:#fff;padding:.6rem;border:none;border-radius:8px;cursor:pointer;margin:.5rem 0;font-size:.95rem}.reset-button:hover{background-color:#d93030}.export-button{width:100%;background-color:#4caf50;color:#fff;padding:.6rem;border:none;border-radius:8px;cursor:pointer;margin:.5rem 0;font-size:.95rem}.export-button:hover{background-color:#3e8e41}.groups-wrapper{display:flex;flex-direction:column;gap:.5rem;padding:0 .5rem}.group-box{background:#f7f7f7;border-radius:8px;padding:.5rem .8rem}.group-header{display:flex;justify-content:space-between;align-items:center;cursor:pointer}.group-header h2{font-size:1rem;margin:0}.group-header .arrow{font-size:1.2rem;transition:transform .3s ease}.group-header .arrow.expanded{transform:rotate(180deg)}.group-content{margin-top:.5rem}.color-picker-item{display:flex;align-items:center;gap:.5rem}.color-picker-item label{flex:1;font-size:.85rem;color:#555;white-space:nowrap}.color-picker-item input[type=color]{width:45px;height:28px;padding:0;border:1px solid #ccc;border-radius:4px;flex-shrink:0}.color-picker-item input[type=text],.color-picker-item select{width:140px;height:28px;padding:0 .4rem;font-size:.85rem;border:1px solid #ccc;border-radius:4px}.color-picker-item .tooltip-container{position:relative;display:inline-block}.color-picker-item .tooltip-container .copy-btn{flex-shrink:0;font-size:1rem;background:none;border:none;cursor:pointer;padding:.3rem}.color-picker-item .tooltip-container .copy-btn:hover{transform:scale(1.1)}.color-picker-item .tooltip-container .copy-btn:hover+.tooltip-text{opacity:1;visibility:visible}.color-picker-item .tooltip-container .tooltip-text{position:absolute;bottom:120%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:.3rem .5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .2s ease;z-index:1000}.color-picker-item .copied-msg{font-size:.75rem;color:green;margin-left:auto;animation:fadeOut 1s ease forwards}@keyframes fadeOut{0%{opacity:1}80%{opacity:1}to{opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i2.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], encapsulation: i0.ViewEncapsulation.ShadowDom }); }
219
222
  }
220
223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BabylonColorPickerComponent, decorators: [{
221
224
  type: Component,
222
225
  args: [{ selector: 'lib-babylon-color-picker', standalone: true, imports: [CommonModule, FormsModule], encapsulation: ViewEncapsulation.ShadowDom, template: "<!-- Mostrar el panel solo si mostrarPanel es true -->\n@if (mostrarPanel) {\n <!-- LOGIN PANEL -->\n @if (!loginHecho) {\n <div class=\"login-panel\">\n <h2>Panel de estilos</h2>\n <input\n type=\"text\"\n placeholder=\"Usuario\"\n [(ngModel)]=\"emailInput\"\n (keydown.enter)=\"login()\"\n />\n <input\n type=\"password\"\n placeholder=\"Contrase\u00F1a\"\n [(ngModel)]=\"passInput\"\n (keydown.enter)=\"login()\"\n />\n <button (click)=\"login()\">Entrar</button>\n </div>\n } @else {\n <!-- ESTILO PANEL -->\n <div\n #panel\n class=\"color-picker-panel\"\n [class.minimizado]=\"minimizado\"\n (mousedown)=\"onDragStart($event)\"\n >\n <div class=\"drag-header\">\n <h1>Panel de estilos</h1>\n <button\n class=\"minimize-btn\"\n (click)=\"toggleMinimizado()\"\n title=\"Minimizar/Restaurar panel\"\n >\n {{ minimizado ? '\uFF0B' : '\uFF0D' }}\n </button>\n </div>\n\n @if (!minimizado) {\n <!-- TABS -->\n <div class=\"tabs\">\n @for (tab of tabs; track tab) {\n <button\n [class.active]=\"activeTab === tab\"\n (click)=\"setActiveTab(tab)\"\n >\n {{ tab }}\n </button>\n }\n </div>\n\n <!-- RESET & EXPORT -->\n <div class=\"reset-export-container\">\n <button class=\"reset-button\" (click)=\"resetColors()\">\n Resetear estilos\n </button>\n <button class=\"export-button\" (click)=\"exportCSS()\">\n Exportar CSS\n </button>\n </div>\n\n <!-- GRUPOS DE VARIABLES -->\n <div class=\"groups-wrapper\">\n @for (\n group of groupedVariables | keyvalue;\n track group.key\n ) {\n @if (getTabForGroup(group.key) === activeTab) {\n <div class=\"group-box\">\n <div\n class=\"group-header\"\n (click)=\"toggleGroup(group.key)\"\n >\n <h2>{{ group.key }}</h2>\n <span\n class=\"arrow\"\n [class.expanded]=\"\n isGroupExpanded(group.key)\n \"\n >\u2335</span\n >\n </div>\n\n @if (isGroupExpanded(group.key)) {\n <div class=\"group-content\">\n @for (\n variable of group.value;\n track variable.name\n ) {\n <div class=\"color-picker-item\">\n <label>{{\n variable.name.replace(\n '--',\n ''\n )\n }}</label>\n\n @if (isColor(variable.value)) {\n <input\n type=\"color\"\n [value]=\"\n getHexForColorInput(\n variable.name\n )\n \"\n (input)=\"\n changeColor(\n $event,\n variable.name\n )\n \"\n />\n } @else {\n @if (\n group.key ===\n 'Tipograf\u00EDas'\n ) {\n <select\n [ngModel]=\"\n getFontNameOnly(\n variable.value\n )\n \"\n (ngModelChange)=\"\n updateFontVariable(\n variable.name,\n $event\n )\n \"\n >\n <optgroup\n label=\"Fuentes del proyecto\"\n >\n @for (\n font of colorService.projectFonts;\n track font\n ) {\n @if (\n ![\n 'font-title',\n 'font-pretitle',\n 'font-text',\n 'font-claim',\n ].includes(\n font\n )\n ) {\n <option\n [value]=\"\n font\n \"\n >\n {{\n font\n }}\n </option>\n }\n }\n </optgroup>\n\n <optgroup\n label=\"Google Fonts\"\n >\n @for (\n font of colorService.googleFonts;\n track font\n ) {\n <option\n [value]=\"\n font\n \"\n >\n {{\n font\n }}\n </option>\n }\n </optgroup>\n </select>\n } @else {\n <input\n type=\"text\"\n [value]=\"\n variable.value\n \"\n (input)=\"\n changeColor(\n $event,\n variable.name\n )\n \"\n />\n }\n }\n\n <div class=\"tooltip-container\">\n <button\n class=\"copy-btn\"\n (click)=\"\n copyToClipboard(\n variable.value,\n variable.name\n )\n \"\n >\n \uD83D\uDCCB\n </button>\n <span class=\"tooltip-text\"\n >Copiar</span\n >\n </div>\n\n @if (wasCopied(variable.name)) {\n <span class=\"copied-msg\"\n >Copiado \u2714\uFE0F</span\n >\n }\n </div>\n }\n </div>\n }\n </div>\n }\n }\n </div>\n }\n </div>\n }\n}\n", styles: [".login-panel{all:initial;position:fixed;top:50px;left:50px;width:350px;background:#fff;border:2px solid #ddd;border-radius:10px;box-shadow:0 8px 20px #0000001a;padding:1rem;z-index:100000;display:flex;flex-direction:column;gap:.5rem;font-family:sans-serif}.login-panel *{all:revert}.login-panel h2{margin-top:0;font-size:1.2rem;text-align:center}.login-panel input{padding:.5rem;font-size:1rem;border:1px solid #ccc;border-radius:6px}.login-panel button{background-color:#d93030;color:#fff;border:none;border-radius:6px;padding:.6rem;cursor:pointer;font-weight:700}.login-panel button:hover{background-color:#b92626}.color-picker-panel{all:initial;position:fixed;top:50px;left:50px;width:450px;max-width:95%;max-height:50vh;overflow-y:auto;overflow-x:hidden;background-color:#fff;border:2px solid #ddd;border-radius:10px;box-shadow:0 8px 20px #0000001a;z-index:100000;-webkit-user-select:none;user-select:none;cursor:grab;scrollbar-gutter:stable;font-family:sans-serif;padding-bottom:20px}.color-picker-panel *{all:revert}.color-picker-panel:active{cursor:grabbing}.color-picker-panel.minimizado{height:auto;width:350px;overflow:hidden;padding-bottom:.5rem}.drag-header{display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10;background-color:#fafafa;padding:.5rem 1rem;border-bottom:1px solid #ddd;border-radius:8px 8px 0 0}.drag-header h1{font-size:1.2rem;margin:0;-webkit-user-select:none;user-select:none;text-align:center;flex-grow:1}.drag-header .minimize-btn{background:none;background-color:#d93030;color:#fff;border:none;font-size:1.2rem;cursor:pointer;padding:.2rem .5rem;-webkit-user-select:none;user-select:none}.drag-header .minimize-btn:hover{transform:scale(1.1)}.tabs{display:flex;border-bottom:1px solid #ddd}.tabs button{flex:1;padding:.5rem;background:#f5f5f5;border:none;cursor:pointer;font-weight:700;font-size:.9rem}.tabs button.active{background:#fff;border-bottom:2px solid #d93030}.tabs button:hover{background:#e5e5e5}.reset-export-container{display:flex;flex-direction:row;gap:.5rem;padding:.5rem}.reset-button{width:100%;background-color:#ff4d4d;color:#fff;padding:.6rem;border:none;border-radius:8px;cursor:pointer;margin:.5rem 0;font-size:.95rem}.reset-button:hover{background-color:#d93030}.export-button{width:100%;background-color:#4caf50;color:#fff;padding:.6rem;border:none;border-radius:8px;cursor:pointer;margin:.5rem 0;font-size:.95rem}.export-button:hover{background-color:#3e8e41}.groups-wrapper{display:flex;flex-direction:column;gap:.5rem;padding:0 .5rem}.group-box{background:#f7f7f7;border-radius:8px;padding:.5rem .8rem}.group-header{display:flex;justify-content:space-between;align-items:center;cursor:pointer}.group-header h2{font-size:1rem;margin:0}.group-header .arrow{font-size:1.2rem;transition:transform .3s ease}.group-header .arrow.expanded{transform:rotate(180deg)}.group-content{margin-top:.5rem}.color-picker-item{display:flex;align-items:center;gap:.5rem}.color-picker-item label{flex:1;font-size:.85rem;color:#555;white-space:nowrap}.color-picker-item input[type=color]{width:45px;height:28px;padding:0;border:1px solid #ccc;border-radius:4px;flex-shrink:0}.color-picker-item input[type=text],.color-picker-item select{width:140px;height:28px;padding:0 .4rem;font-size:.85rem;border:1px solid #ccc;border-radius:4px}.color-picker-item .tooltip-container{position:relative;display:inline-block}.color-picker-item .tooltip-container .copy-btn{flex-shrink:0;font-size:1rem;background:none;border:none;cursor:pointer;padding:.3rem}.color-picker-item .tooltip-container .copy-btn:hover{transform:scale(1.1)}.color-picker-item .tooltip-container .copy-btn:hover+.tooltip-text{opacity:1;visibility:visible}.color-picker-item .tooltip-container .tooltip-text{position:absolute;bottom:120%;left:50%;transform:translate(-50%);background-color:#333;color:#fff;padding:.3rem .5rem;border-radius:4px;font-size:.75rem;white-space:nowrap;opacity:0;visibility:hidden;transition:opacity .2s ease;z-index:1000}.color-picker-item .copied-msg{font-size:.75rem;color:green;margin-left:auto;animation:fadeOut 1s ease forwards}@keyframes fadeOut{0%{opacity:1}80%{opacity:1}to{opacity:0}}\n"] }]
223
- }], ctorParameters: () => [{ type: i1.ColorPickerService }, { type: i0.Renderer2 }], propDecorators: { userPanel: [{
226
+ }], ctorParameters: () => [{ type: i1.ColorPickerService }, { type: i0.Renderer2 }, { type: Object, decorators: [{
227
+ type: Inject,
228
+ args: [PLATFORM_ID]
229
+ }] }], propDecorators: { userPanel: [{
224
230
  type: Input
225
231
  }], passPanel: [{
226
232
  type: Input
@@ -228,4 +234,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
228
234
  type: ViewChild,
229
235
  args: ['panel', { static: false }]
230
236
  }] } });
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWNvbG9yLXBpY2tlci9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tY29sb3ItcGlja2VyL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQ0gsU0FBUyxFQUlULFNBQVMsRUFDVCxLQUFLLEVBQ0wsaUJBQWlCLEdBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFXN0MsTUFBTSxPQUFPLDJCQUEyQjtJQXdCcEMsWUFDVyxZQUFnQyxFQUMvQixRQUFtQjtRQURwQixpQkFBWSxHQUFaLFlBQVksQ0FBb0I7UUFDL0IsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQXpCdEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFHeEIsc0JBQWlCLEdBQUcseUNBQXlDLENBQUM7UUFDOUQsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLFNBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMs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VyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLG1DQUFtQztRQUNuQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFakQsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLE9BQU8sQ0FDSCxHQUFHO1lBQ0gsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUN6QyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO1lBQ3pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FDNUMsQ0FBQztJQUNOLENBQUM7K0dBeFFRLDJCQUEyQjttR0FBM0IsMkJBQTJCLG1QQ3JCeEMsbXJaQXNPQSw2bklEdE5jLFlBQVkseUZBQUUsV0FBVzs7NEZBSzFCLDJCQUEyQjtrQkFSdkMsU0FBUzsrQkFDSSwwQkFBMEIsY0FDeEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxpQkFHckIsaUJBQWlCLENBQUMsU0FBUzsrR0FHakMsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNpQyxRQUFRO3NCQUE5QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBJbnB1dCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvbG9yUGlja2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NvbG9yLXBhbmVsLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1iYWJ5bG9uLWNvbG9yLXBpY2tlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLlNoYWRvd0RvbSxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkNvbG9yUGlja2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSB1c2VyUGFuZWwgPSAnJztcbiAgICBASW5wdXQoKSBwYXNzUGFuZWwgPSAnJztcbiAgICBAVmlld0NoaWxkKCdwYW5lbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwYW5lbFJlZiE6IEVsZW1lbnRSZWY7XG5cbiAgICBnb29nbGVGb250c0FwaUtleSA9ICdBSXphU3lBVmJ6ek9tQUpmc0FzaTk1MWU2MzZ5bS1BQld5MkJPTUEnO1xuICAgIGVtYWlsSW5wdXQgPSAnJztcbiAgICBwYXNzSW5wdXQgPSAnJztcbiAgICBtb3N0cmFyUGFuZWwgPSBmYWxzZTtcbiAgICBsb2dpbkhlY2hvID0gZmFsc2U7XG4gICAgbWluaW1pemFkbyA9IGZhbHNlO1xuXG4gICAgdGFicyA9IFsnQ29sb3JlcycsICdUaXBvZ3JhZsOtYXMnLCAnQm90b25lcycsICdUYW1hw7FvcycsICdPdHJvcyddO1xuICAgIGFjdGl2ZVRhYiA9ICdDb2xvcmVzJztcblxuICAgIGdyb3VwZWRWYXJpYWJsZXMgPSBuZXcgTWFwPHN0cmluZywgeyBuYW1lOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdPigpO1xuICAgIGNvcGllZFN0YXR1cyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xuICAgIGV4cGFuZGVkR3JvdXBzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgZm9udFZhbHVlczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gICAgaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgIGRyYWdTdGFydFggPSAwO1xuICAgIGRyYWdTdGFydFkgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBjb2xvclNlcnZpY2U6IENvbG9yUGlja2VyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gICAgICAgIHRoaXMubW9zdHJhclBhbmVsID0gcGFyYW1zLmhhcygnYWN0aXZhcl9wYW5lbCcpO1xuXG4gICAgICAgIGNvbnN0IHN0b3JlZFRhYiA9IHRoaXMuY29sb3JTZXJ2aWNlLmdldFN0b3JlZFRhYih0aGlzLnRhYnMpO1xuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHN0b3JlZFRhYjtcblxuICAgICAgICBjb25zdCBzdG9yZWRTZXNzaW9uID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgncGFuZWwtbG9naW4tb2snKTtcbiAgICAgICAgaWYgKHN0b3JlZFNlc3Npb24gPT09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkhlY2hvID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29sb3JTZXJ2aWNlLmdldEFsbENTU1ZhcmlhYmxlcygpO1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzID1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5ncm91cEJ5Q2F0ZWdvcnkodmFyaWFibGVzKTtcbiAgICAgICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLmZldGNoR29vZ2xlRm9udHModGhpcy5nb29nbGVGb250c0FwaUtleSk7XG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxGb250VmFsdWVzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ21vdXNlbW92ZScsIChlKSA9PiB0aGlzLm9uRHJhZ01vdmUoZSkpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ21vdXNldXAnLCAoKSA9PiB0aGlzLm9uRHJhZ0VuZCgpKTtcbiAgICB9XG5cbiAgICBhc3luYyBsb2dpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5lbWFpbElucHV0ID09PSB0aGlzLnVzZXJQYW5lbCAmJlxuICAgICAgICAgICAgdGhpcy5wYXNzSW5wdXQgPT09IHRoaXMucGFzc1BhbmVsXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkhlY2hvID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3BhbmVsLWxvZ2luLW9rJywgJ3RydWUnKTtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29sb3JTZXJ2aWNlLmdldEFsbENTU1ZhcmlhYmxlcygpO1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzID1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5ncm91cEJ5Q2F0ZWdvcnkodmFyaWFibGVzKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sb3JTZXJ2aWNlLmZldGNoR29vZ2xlRm9udHModGhpcy5nb29nbGVGb250c0FwaUtleSk7XG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxGb250VmFsdWVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGVydCgnVXN1YXJpbyBvIGNvbnRyYXNlw7FhIGluY29ycmVjdG9zJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJbml0aWFsRm9udFZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBbZ3JvdXAsIHZhcmlhYmxlc10gb2YgdGhpcy5ncm91cGVkVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBpZiAoZ3JvdXAgPT09ICdUaXBvZ3JhZsOtYXMnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiB2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9udE5hbWUgPSB0aGlzLmdldEZvbnROYW1lT25seShjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRWYWx1ZXNbdmFyaWFibGUubmFtZV0gPSBmb250TmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzSW50ZXJhY3RpdmUgPSBbXG4gICAgICAgICAgICAnSU5QVVQnLFxuICAgICAgICAgICAgJ0JVVFRPTicsXG4gICAgICAgICAgICAnTEFCRUwnLFxuICAgICAgICAgICAgJ1NQQU4nLFxuICAgICAgICAgICAgJ1NFTEVDVCcsXG4gICAgICAgIF0uaW5jbHVkZXModGFyZ2V0LnRhZ05hbWUpO1xuICAgICAgICBpZiAoaXNJbnRlcmFjdGl2ZSB8fCAhdGhpcy5wYW5lbFJlZikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9XG4gICAgICAgICAgICBldmVudC5jbGllbnRYIC0gdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRHJhZ01vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgfHwgIXRoaXMucGFuZWxSZWYpIHJldHVybjtcblxuICAgICAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZHJhZ1N0YXJ0WDtcbiAgICAgICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLmRyYWdTdGFydFk7XG5cbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gYCR7eX1weGA7XG4gICAgfVxuXG4gICAgb25EcmFnRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0b2dnbGVHcm91cChncm91cDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkR3JvdXBzLmhhcyhncm91cCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRHcm91cHMuZGVsZXRlKGdyb3VwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRHcm91cHMuYWRkKGdyb3VwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzR3JvdXBFeHBhbmRlZChncm91cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkR3JvdXBzLmhhcyhncm91cCk7XG4gICAgfVxuXG4gICAgaXNDb2xvcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yU2VydmljZS5pc0NvbG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDb2xvcihldmVudDogRXZlbnQsIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dD8udmFsdWU7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBpc0ZvbnRWYXJpYWJsZSA9XG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUuc3RhcnRzV2l0aCgnLS1mb250LScpICYmXG4gICAgICAgICAgICAhdmFyaWFibGVOYW1lLmluY2x1ZGVzKCctLWZvbnQtc2l6ZScpO1xuXG4gICAgICAgIGlmIChpc0ZvbnRWYXJpYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5mb250VmFsdWVzW3ZhcmlhYmxlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0ZvbnRWYWx1ZSA9IGAnJHt2YWx1ZX0nLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgO1xuICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY2hhbmdlQ29sb3IoXG4gICAgICAgICAgICAgICAgdmFyaWFibGVOYW1lLFxuICAgICAgICAgICAgICAgIG5ld0ZvbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRWYXJpYWJsZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jaGFuZ2VDb2xvcihcbiAgICAgICAgICAgICAgICB2YXJpYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDb2xvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLnJlc2V0Q29sb3JzKHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgY29weVRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jb3B5VG9DbGlwYm9hcmQodmFsdWUsIG5hbWUsIHRoaXMuY29waWVkU3RhdHVzKTtcbiAgICB9XG5cbiAgICB3YXNDb3BpZWQodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29waWVkU3RhdHVzLmdldCh2YXJpYWJsZU5hbWUpID09PSB0cnVlO1xuICAgIH1cblxuICAgIGdldFRhYkZvckdyb3VwKGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclNlcnZpY2UuZ2V0VGFiRm9yR3JvdXAoZ3JvdXApO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZVRhYih0YWI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BhbmVsLWVzdGlsb3MtdGFiJywgdGFiKTtcbiAgICB9XG5cbiAgICB0b2dnbGVNaW5pbWl6YWRvKCkge1xuICAgICAgICB0aGlzLm1pbmltaXphZG8gPSAhdGhpcy5taW5pbWl6YWRvO1xuICAgIH1cblxuICAgIGV4cG9ydENTUygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuZXhwb3J0Q3VzdG9tVmFyaWFibGVzKHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgZ2V0Rm9udE5hbWVPbmx5KGZ1bGxWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBmdWxsVmFsdWUubWF0Y2goL15bJ1wiXT8oW14nXCIsXSspWydcIl0/Lyk7XG4gICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogZnVsbFZhbHVlO1xuICAgIH1cblxuICAgIHVwZGF0ZUZvbnRWYXJpYWJsZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgZm9udE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGAnJHtmb250TmFtZX0nLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgO1xuICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jaGFuZ2VDb2xvcihcbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaXNQcmVkZWZpbmVkID0gW1xuICAgICAgICAgICAgJ2ZvbnQtdGl0bGUnLFxuICAgICAgICAgICAgJ2ZvbnQtcHJldGl0bGUnLFxuICAgICAgICAgICAgJ2ZvbnQtdGV4dCcsXG4gICAgICAgICAgICAnZm9udC1jbGFpbScsXG4gICAgICAgIF0uaW5jbHVkZXMoZm9udE5hbWUpO1xuICAgICAgICBpZiAoaXNQcmVkZWZpbmVkKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRm9udCA9IGZvbnROYW1lLnJlcGxhY2UoLyAvZywgJysnKTtcbiAgICAgICAgY29uc3QgaWQgPSBgZm9udC0ke2Zvcm1hdHRlZEZvbnR9YDtcblxuICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSkge1xuICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgICAgIGxpbmsuaWQgPSBpZDtcbiAgICAgICAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgICAgICAgbGluay5ocmVmID0gYGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9JHtmb3JtYXR0ZWRGb250fSZkaXNwbGF5PXN3YXBgO1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXB1dGVkQ29sb3IodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByYXcgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKHZhcmlhYmxlTmFtZSlcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGNvbnN0IGNsZWFuID0gcmF3LnJlcGxhY2UoL1tcIiddL2csICcnKTtcblxuICAgICAgICAvLyBFeHBhbmRlICNmZmYgYSAjZmZmZmZmXG4gICAgICAgIGlmICgvXiMoWzAtOWEtZkEtRl17M30pJC8udGVzdChjbGVhbikpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgICAgICBjbGVhblxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjKSA9PiBjICsgYylcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JTZXJ2aWNlLmlzQ29sb3IoY2xlYW4pID8gY2xlYW4gOiAnIzAwMDAwMCc7XG4gICAgfVxuXG4gICAgZ2V0SGV4Rm9yQ29sb3JJbnB1dCh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZU5hbWUpXG4gICAgICAgICAgICAudHJpbSgpO1xuXG4gICAgICAgIC8vIENyZWFtb3MgdW4gZWxlbWVudG8gdGVtcG9yYWwgcGFyYSByZXNvbHZlciBlbCBjb2xvciByZWFsXG4gICAgICAgIGNvbnN0IHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGVtcC5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXApO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGdldENvbXB1dGVkU3R5bGUodGVtcCkuY29sb3I7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVtcCk7XG5cbiAgICAgICAgLy8gRXh0cmFlIFJHQiB5IGNvbnZpZXJ0ZSBhICNSUkdHQkJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByZXNvbHZlZC5tYXRjaCgvXFxkKy9nKTtcbiAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5sZW5ndGggPCAzKSByZXR1cm4gJyMwMDAwMDAnO1xuXG4gICAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IG1hdGNoO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgIHBhcnNlSW50KHIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgIHBhcnNlSW50KGcpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgIHBhcnNlSW50KGIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPCEtLSBNb3N0cmFyIGVsIHBhbmVsIHNvbG8gc2kgbW9zdHJhclBhbmVsIGVzIHRydWUgLS0+XG5AaWYgKG1vc3RyYXJQYW5lbCkge1xuICAgIDwhLS0gTE9HSU4gUEFORUwgLS0+XG4gICAgQGlmICghbG9naW5IZWNobykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tcGFuZWxcIj5cbiAgICAgICAgICAgIDxoMj5QYW5lbCBkZSBlc3RpbG9zPC9oMj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlVzdWFyaW9cIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxJbnB1dFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibG9naW4oKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbnRyYXNlw7FhXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3NJbnB1dFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibG9naW4oKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9naW4oKVwiPkVudHJhcjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBFU1RJTE8gUEFORUwgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICNwYW5lbFxuICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXItcGFuZWxcIlxuICAgICAgICAgICAgW2NsYXNzLm1pbmltaXphZG9dPVwibWluaW1pemFkb1wiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDE+UGFuZWwgZGUgZXN0aWxvczwvaDE+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbmltaXplLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNaW5pbWl6YWRvKClcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk1pbmltaXphci9SZXN0YXVyYXIgcGFuZWxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgbWluaW1pemFkbyA/ICfvvIsnIDogJ++8jScgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBAaWYgKCFtaW5pbWl6YWRvKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBUQUJTIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHRhYiBvZiB0YWJzOyB0cmFjayB0YWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PT0gdGFiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0QWN0aXZlVGFiKHRhYilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRhYiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gUkVTRVQgJiBFWFBPUlQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2V0LWV4cG9ydC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlc2V0LWJ1dHRvblwiIChjbGljayk9XCJyZXNldENvbG9ycygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldGVhciBlc3RpbG9zXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJleHBvcnRDU1MoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0YXIgQ1NTXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBHUlVQT1MgREUgVkFSSUFCTEVTIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHMtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwIG9mIGdyb3VwZWRWYXJpYWJsZXMgfCBrZXl2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGdyb3VwLmtleVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0VGFiRm9yR3JvdXAoZ3JvdXAua2V5KSA9PT0gYWN0aXZlVGFiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlR3JvdXAoZ3JvdXAua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj57eyBncm91cC5rZXkgfX08L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXhwYW5kZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzR3JvdXBFeHBhbmRlZChncm91cC5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+4oy1PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNHcm91cEV4cGFuZGVkKGdyb3VwLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9mIGdyb3VwLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayB2YXJpYWJsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXItaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUubmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc0NvbG9yKHZhcmlhYmxlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRIZXhGb3JDb2xvcklucHV0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlQ29sb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAua2V5ID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGlwb2dyYWbDrWFzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGb250TmFtZU9ubHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZvbnRWYXJpYWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJGdWVudGVzIGRlbCBwcm95ZWN0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgb2YgY29sb3JTZXJ2aWNlLnByb2plY3RGb250cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgZm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC10aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtcHJldGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXRleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250LWNsYWltJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkdvb2dsZSBGb250c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgb2YgY29sb3JTZXJ2aWNlLmdvb2dsZUZvbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBmb250XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VDb2xvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3B5LWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUb0NsaXBib2FyZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDwn5OLXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Q29waWFyPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAod2FzQ29waWVkKHZhcmlhYmxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3BpZWQtbXNnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPkNvcGlhZG8g4pyU77iPPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbn1cbiJdfQ==
237
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFieWxvbi9zcmMvbGliL2NvbXBvbmVudHMvY29yZS9iYWJ5bG9uLWNvbG9yLXBpY2tlci9iYWJ5bG9uLWNvbG9yLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tY29sb3ItcGlja2VyL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUVULE1BQU0sRUFDTixLQUFLLEVBRUwsV0FBVyxFQUVYLFNBQVMsRUFDVCxpQkFBaUIsR0FDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQVc3QyxNQUFNLE9BQU8sMkJBQTJCO0lBd0JwQyxZQUNXLFlBQWdDLEVBQy9CLFFBQW1CLEVBQ1csVUFBa0I7UUFGakQsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBQy9CLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDVyxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBMUJuRCxjQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ2YsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUd4QixzQkFBaUIsR0FBRyx5Q0FBeUMsQ0FBQztRQUM5RCxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFF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QixLQUFLO2dCQUNpQyxRQUFRO3NCQUE5QyxTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQ29sb3JQaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29sb3ItcGFuZWwuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbGliLWJhYnlsb24tY29sb3ItcGlja2VyJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFieWxvbi1jb2xvci1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2JhYnlsb24tY29sb3ItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uU2hhZG93RG9tLFxufSlcbmV4cG9ydCBjbGFzcyBCYWJ5bG9uQ29sb3JQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHVzZXJQYW5lbCA9ICcnO1xuICAgIEBJbnB1dCgpIHBhc3NQYW5lbCA9ICcnO1xuICAgIEBWaWV3Q2hpbGQoJ3BhbmVsJywgeyBzdGF0aWM6IGZhbHNlIH0pIHBhbmVsUmVmITogRWxlbWVudFJlZjtcblxuICAgIGdvb2dsZUZvbnRzQXBpS2V5ID0gJ0FJemFTeUFWYnp6T21BSmZzQXNpOTUxZTYzNnltLUFCV3kyQk9NQSc7XG4gICAgZW1haWxJbnB1dCA9ICcnO1xuICAgIHBhc3NJbnB1dCA9ICcnO1xuICAgIG1vc3RyYXJQYW5lbCA9IGZhbHNlO1xuICAgIGxvZ2luSGVjaG8gPSBmYWxzZTtcbiAgICBtaW5pbWl6YWRvID0gZmFsc2U7XG5cbiAgICB0YWJzID0gWydDb2xvcmVzJywgJ1RpcG9ncmFmw61hcycsICdCb3RvbmVzJywgJ1RhbWHDsW9zJywgJ090cm9zJ107XG4gICAgYWN0aXZlVGFiID0gJ0NvbG9yZXMnO1xuXG4gICAgZ3JvdXBlZFZhcmlhYmxlcyA9IG5ldyBNYXA8c3RyaW5nLCB7IG5hbWU6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10+KCk7XG4gICAgY29waWVkU3RhdHVzID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG4gICAgZXhwYW5kZWRHcm91cHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBmb250VmFsdWVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgZHJhZ1N0YXJ0WCA9IDA7XG4gICAgZHJhZ1N0YXJ0WSA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGNvbG9yU2VydmljZTogQ29sb3JQaWNrZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZDogT2JqZWN0XG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpO1xuICAgICAgICAgICAgdGhpcy5tb3N0cmFyUGFuZWwgPSBwYXJhbXMuaGFzKCdhY3RpdmFyX3BhbmVsJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZFRhYiA9IHRoaXMuY29sb3JTZXJ2aWNlLmdldFN0b3JlZFRhYih0aGlzLnRhYnMpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVUYWIgPSBzdG9yZWRUYWI7XG5cbiAgICAgICAgICAgIGNvbnN0IHN0b3JlZFNlc3Npb24gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdwYW5lbC1sb2dpbi1vaycpO1xuICAgICAgICAgICAgaWYgKHN0b3JlZFNlc3Npb24gPT09ICd0cnVlJykge1xuICAgICAgICAgICAgICAgIHRoaXMubG9naW5IZWNobyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0gdGhpcy5jb2xvclNlcnZpY2UuZ2V0QWxsQ1NTVmFyaWFibGVzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuZ3JvdXBCeUNhdGVnb3J5KHZhcmlhYmxlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuZmV0Y2hHb29nbGVGb250cyh0aGlzLmdvb2dsZUZvbnRzQXBpS2V5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEluaXRpYWxGb250VmFsdWVzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2Vtb3ZlJywgKGUpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRyYWdNb3ZlKGUpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdtb3VzZXVwJywgKCkgPT4gdGhpcy5vbkRyYWdFbmQoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBsb2dpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5lbWFpbElucHV0ID09PSB0aGlzLnVzZXJQYW5lbCAmJlxuICAgICAgICAgICAgdGhpcy5wYXNzSW5wdXQgPT09IHRoaXMucGFzc1BhbmVsXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5sb2dpbkhlY2hvID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ3BhbmVsLWxvZ2luLW9rJywgJ3RydWUnKTtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHRoaXMuY29sb3JTZXJ2aWNlLmdldEFsbENTU1ZhcmlhYmxlcygpO1xuICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzID1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5ncm91cEJ5Q2F0ZWdvcnkodmFyaWFibGVzKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29sb3JTZXJ2aWNlLmZldGNoR29vZ2xlRm9udHModGhpcy5nb29nbGVGb250c0FwaUtleSk7XG4gICAgICAgICAgICB0aGlzLnNldEluaXRpYWxGb250VmFsdWVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGVydCgnVXN1YXJpbyBvIGNvbnRyYXNlw7FhIGluY29ycmVjdG9zJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJbml0aWFsRm9udFZhbHVlcygpOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBbZ3JvdXAsIHZhcmlhYmxlc10gb2YgdGhpcy5ncm91cGVkVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBpZiAoZ3JvdXAgPT09ICdUaXBvZ3JhZsOtYXMnKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YXJpYWJsZSBvZiB2YXJpYWJsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZ2V0Q29tcHV0ZWRTdHlsZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9udE5hbWUgPSB0aGlzLmdldEZvbnROYW1lT25seShjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvbnRWYWx1ZXNbdmFyaWFibGUubmFtZV0gPSBmb250TmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGlzSW50ZXJhY3RpdmUgPSBbXG4gICAgICAgICAgICAnSU5QVVQnLFxuICAgICAgICAgICAgJ0JVVFRPTicsXG4gICAgICAgICAgICAnTEFCRUwnLFxuICAgICAgICAgICAgJ1NQQU4nLFxuICAgICAgICAgICAgJ1NFTEVDVCcsXG4gICAgICAgIF0uaW5jbHVkZXModGFyZ2V0LnRhZ05hbWUpO1xuICAgICAgICBpZiAoaXNJbnRlcmFjdGl2ZSB8fCAhdGhpcy5wYW5lbFJlZikgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9XG4gICAgICAgICAgICBldmVudC5jbGllbnRYIC0gdGhpcy5wYW5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQ7XG4gICAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIG9uRHJhZ01vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgfHwgIXRoaXMucGFuZWxSZWYpIHJldHVybjtcblxuICAgICAgICBjb25zdCB4ID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuZHJhZ1N0YXJ0WDtcbiAgICAgICAgY29uc3QgeSA9IGV2ZW50LmNsaWVudFkgLSB0aGlzLmRyYWdTdGFydFk7XG5cbiAgICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnBhbmVsUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHBhbmVsLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcbiAgICAgICAgcGFuZWwuc3R5bGUudG9wID0gYCR7eX1weGA7XG4gICAgfVxuXG4gICAgb25EcmFnRW5kKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB0b2dnbGVHcm91cChncm91cDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkR3JvdXBzLmhhcyhncm91cCkpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRHcm91cHMuZGVsZXRlKGdyb3VwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWRHcm91cHMuYWRkKGdyb3VwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzR3JvdXBFeHBhbmRlZChncm91cDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkR3JvdXBzLmhhcyhncm91cCk7XG4gICAgfVxuXG4gICAgaXNDb2xvcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbG9yU2VydmljZS5pc0NvbG9yKHZhbHVlKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VDb2xvcihldmVudDogRXZlbnQsIHZhcmlhYmxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MU2VsZWN0RWxlbWVudDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dD8udmFsdWU7XG4gICAgICAgIGlmICghdmFsdWUpIHJldHVybjtcblxuICAgICAgICBjb25zdCBpc0ZvbnRWYXJpYWJsZSA9XG4gICAgICAgICAgICB2YXJpYWJsZU5hbWUuc3RhcnRzV2l0aCgnLS1mb250LScpICYmXG4gICAgICAgICAgICAhdmFyaWFibGVOYW1lLmluY2x1ZGVzKCctLWZvbnQtc2l6ZScpO1xuXG4gICAgICAgIGlmIChpc0ZvbnRWYXJpYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5mb250VmFsdWVzW3ZhcmlhYmxlTmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld0ZvbnRWYWx1ZSA9IGAnJHt2YWx1ZX0nLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgO1xuICAgICAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuY2hhbmdlQ29sb3IoXG4gICAgICAgICAgICAgICAgdmFyaWFibGVOYW1lLFxuICAgICAgICAgICAgICAgIG5ld0ZvbnRWYWx1ZSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwZWRWYXJpYWJsZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jaGFuZ2VDb2xvcihcbiAgICAgICAgICAgICAgICB2YXJpYWJsZU5hbWUsXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDb2xvcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sb3JTZXJ2aWNlLnJlc2V0Q29sb3JzKHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgY29weVRvQ2xpcGJvYXJkKHZhbHVlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jb3B5VG9DbGlwYm9hcmQodmFsdWUsIG5hbWUsIHRoaXMuY29waWVkU3RhdHVzKTtcbiAgICB9XG5cbiAgICB3YXNDb3BpZWQodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29waWVkU3RhdHVzLmdldCh2YXJpYWJsZU5hbWUpID09PSB0cnVlO1xuICAgIH1cblxuICAgIGdldFRhYkZvckdyb3VwKGdyb3VwOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclNlcnZpY2UuZ2V0VGFiRm9yR3JvdXAoZ3JvdXApO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZVRhYih0YWI6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZVRhYiA9IHRhYjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3BhbmVsLWVzdGlsb3MtdGFiJywgdGFiKTtcbiAgICB9XG5cbiAgICB0b2dnbGVNaW5pbWl6YWRvKCkge1xuICAgICAgICB0aGlzLm1pbmltaXphZG8gPSAhdGhpcy5taW5pbWl6YWRvO1xuICAgIH1cblxuICAgIGV4cG9ydENTUygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2xvclNlcnZpY2UuZXhwb3J0Q3VzdG9tVmFyaWFibGVzKHRoaXMuZ3JvdXBlZFZhcmlhYmxlcyk7XG4gICAgfVxuXG4gICAgZ2V0Rm9udE5hbWVPbmx5KGZ1bGxWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBmdWxsVmFsdWUubWF0Y2goL15bJ1wiXT8oW14nXCIsXSspWydcIl0/Lyk7XG4gICAgICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogZnVsbFZhbHVlO1xuICAgIH1cblxuICAgIHVwZGF0ZUZvbnRWYXJpYWJsZSh2YXJpYWJsZU5hbWU6IHN0cmluZywgZm9udE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGAnJHtmb250TmFtZX0nLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWZgO1xuICAgICAgICB0aGlzLmNvbG9yU2VydmljZS5jaGFuZ2VDb2xvcihcbiAgICAgICAgICAgIHZhcmlhYmxlTmFtZSxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgdGhpcy5ncm91cGVkVmFyaWFibGVzXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaXNQcmVkZWZpbmVkID0gW1xuICAgICAgICAgICAgJ2ZvbnQtdGl0bGUnLFxuICAgICAgICAgICAgJ2ZvbnQtcHJldGl0bGUnLFxuICAgICAgICAgICAgJ2ZvbnQtdGV4dCcsXG4gICAgICAgICAgICAnZm9udC1jbGFpbScsXG4gICAgICAgIF0uaW5jbHVkZXMoZm9udE5hbWUpO1xuICAgICAgICBpZiAoaXNQcmVkZWZpbmVkKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRm9udCA9IGZvbnROYW1lLnJlcGxhY2UoLyAvZywgJysnKTtcbiAgICAgICAgY29uc3QgaWQgPSBgZm9udC0ke2Zvcm1hdHRlZEZvbnR9YDtcblxuICAgICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSkge1xuICAgICAgICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcbiAgICAgICAgICAgIGxpbmsuaWQgPSBpZDtcbiAgICAgICAgICAgIGxpbmsucmVsID0gJ3N0eWxlc2hlZXQnO1xuICAgICAgICAgICAgbGluay5ocmVmID0gYGh0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9JHtmb3JtYXR0ZWRGb250fSZkaXNwbGF5PXN3YXBgO1xuICAgICAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXB1dGVkQ29sb3IodmFyaWFibGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCByYXcgPSBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKHZhcmlhYmxlTmFtZSlcbiAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgIGNvbnN0IGNsZWFuID0gcmF3LnJlcGxhY2UoL1tcIiddL2csICcnKTtcblxuICAgICAgICAvLyBFeHBhbmRlICNmZmYgYSAjZmZmZmZmXG4gICAgICAgIGlmICgvXiMoWzAtOWEtZkEtRl17M30pJC8udGVzdChjbGVhbikpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgICAgICBjbGVhblxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjKSA9PiBjICsgYylcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29sb3JTZXJ2aWNlLmlzQ29sb3IoY2xlYW4pID8gY2xlYW4gOiAnIzAwMDAwMCc7XG4gICAgfVxuXG4gICAgZ2V0SGV4Rm9yQ29sb3JJbnB1dCh2YXJpYWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXG4gICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSh2YXJpYWJsZU5hbWUpXG4gICAgICAgICAgICAudHJpbSgpO1xuXG4gICAgICAgIC8vIENyZWFtb3MgdW4gZWxlbWVudG8gdGVtcG9yYWwgcGFyYSByZXNvbHZlciBlbCBjb2xvciByZWFsXG4gICAgICAgIGNvbnN0IHRlbXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGVtcC5zdHlsZS5jb2xvciA9IGNvbG9yO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRlbXApO1xuICAgICAgICBjb25zdCByZXNvbHZlZCA9IGdldENvbXB1dGVkU3R5bGUodGVtcCkuY29sb3I7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodGVtcCk7XG5cbiAgICAgICAgLy8gRXh0cmFlIFJHQiB5IGNvbnZpZXJ0ZSBhICNSUkdHQkJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSByZXNvbHZlZC5tYXRjaCgvXFxkKy9nKTtcbiAgICAgICAgaWYgKCFtYXRjaCB8fCBtYXRjaC5sZW5ndGggPCAzKSByZXR1cm4gJyMwMDAwMDAnO1xuXG4gICAgICAgIGNvbnN0IFtyLCBnLCBiXSA9IG1hdGNoO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJyMnICtcbiAgICAgICAgICAgIHBhcnNlSW50KHIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgIHBhcnNlSW50KGcpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpICtcbiAgICAgICAgICAgIHBhcnNlSW50KGIpLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICk7XG4gICAgfVxufVxuIiwiPCEtLSBNb3N0cmFyIGVsIHBhbmVsIHNvbG8gc2kgbW9zdHJhclBhbmVsIGVzIHRydWUgLS0+XG5AaWYgKG1vc3RyYXJQYW5lbCkge1xuICAgIDwhLS0gTE9HSU4gUEFORUwgLS0+XG4gICAgQGlmICghbG9naW5IZWNobykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwibG9naW4tcGFuZWxcIj5cbiAgICAgICAgICAgIDxoMj5QYW5lbCBkZSBlc3RpbG9zPC9oMj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlVzdWFyaW9cIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxJbnB1dFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibG9naW4oKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkNvbnRyYXNlw7FhXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3NJbnB1dFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwibG9naW4oKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9naW4oKVwiPkVudHJhcjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBFU1RJTE8gUEFORUwgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgICNwYW5lbFxuICAgICAgICAgICAgY2xhc3M9XCJjb2xvci1waWNrZXItcGFuZWxcIlxuICAgICAgICAgICAgW2NsYXNzLm1pbmltaXphZG9dPVwibWluaW1pemFkb1wiXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJhZy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDE+UGFuZWwgZGUgZXN0aWxvczwvaDE+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pbmltaXplLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNaW5pbWl6YWRvKClcIlxuICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIk1pbmltaXphci9SZXN0YXVyYXIgcGFuZWxcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgbWluaW1pemFkbyA/ICfvvIsnIDogJ++8jScgfX1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICBAaWYgKCFtaW5pbWl6YWRvKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBUQUJTIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHRhYiBvZiB0YWJzOyB0cmFjayB0YWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImFjdGl2ZVRhYiA9PT0gdGFiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0QWN0aXZlVGFiKHRhYilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRhYiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gUkVTRVQgJiBFWFBPUlQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2V0LWV4cG9ydC1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlc2V0LWJ1dHRvblwiIChjbGljayk9XCJyZXNldENvbG9ycygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBSZXNldGVhciBlc3RpbG9zXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiZXhwb3J0LWJ1dHRvblwiIChjbGljayk9XCJleHBvcnRDU1MoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgRXhwb3J0YXIgQ1NTXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBHUlVQT1MgREUgVkFSSUFCTEVTIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cHMtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwIG9mIGdyb3VwZWRWYXJpYWJsZXMgfCBrZXl2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrIGdyb3VwLmtleVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZ2V0VGFiRm9yR3JvdXAoZ3JvdXAua2V5KSA9PT0gYWN0aXZlVGFiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWJveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3VwLWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlR3JvdXAoZ3JvdXAua2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj57eyBncm91cC5rZXkgfX08L2gyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFycm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXhwYW5kZWRdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzR3JvdXBFeHBhbmRlZChncm91cC5rZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+4oy1PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXNHcm91cEV4cGFuZGVkKGdyb3VwLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlIG9mIGdyb3VwLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayB2YXJpYWJsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xvci1waWNrZXItaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUubmFtZS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9sYWJlbD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpc0NvbG9yKHZhcmlhYmxlLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRIZXhGb3JDb2xvcklucHV0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlQ29sb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAua2V5ID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGlwb2dyYWbDrWFzJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRGb250TmFtZU9ubHkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZvbnRWYXJpYWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJGdWVudGVzIGRlbCBwcm95ZWN0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgb2YgY29sb3JTZXJ2aWNlLnByb2plY3RGb250cztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgZm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC10aXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtcHJldGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250LXRleHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb250LWNsYWltJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGdyb3VwPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0Z3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD1cIkdvb2dsZSBGb250c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQgb2YgY29sb3JTZXJ2aWNlLmdvb2dsZUZvbnRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayBmb250XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0Z3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VDb2xvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb3B5LWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlUb0NsaXBib2FyZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDwn5OLXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Q29waWFyPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAod2FzQ29waWVkKHZhcmlhYmxlLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb3BpZWQtbXNnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPkNvcGlhZG8g4pyU77iPPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, computed, EventEmitter, inject, Input, signal, } from '@angular/core';
3
3
  import { MatDialog } from '@angular/material/dialog';
4
- import { tap } from 'rxjs';
4
+ import { Subject, takeUntil, tap } from 'rxjs';
5
5
  import { BabylonLightGalleryDirective } from '../../../directives/babylon-galleries/babylon-light-gallery.directive';
6
6
  import { BabylonDataBackgroundDirective } from '../../../directives/data-background/data-background.directive';
7
7
  import { BabylonFilterModalComponent } from '../babylon-filter-modal';
@@ -10,6 +10,7 @@ import * as i1 from "@angular/common";
10
10
  export class BabylonGalleryComponent {
11
11
  constructor() {
12
12
  this.filterSelected = signal(undefined);
13
+ this.destroy$ = new Subject();
13
14
  this.imagesDisplayed = computed(() => {
14
15
  if (this.filterSelected()?.all || !this.filterSelected()) {
15
16
  return this.images;
@@ -23,6 +24,9 @@ export class BabylonGalleryComponent {
23
24
  ngOnInit() {
24
25
  this.filterSelected.set(this.filters?.find((f) => f.all));
25
26
  }
27
+ ngOnDestroy() {
28
+ this.destroy$.next(true), this.destroy$.complete();
29
+ }
26
30
  filterItems(filter) {
27
31
  if (filter) {
28
32
  !filter.rooms
@@ -39,7 +43,7 @@ export class BabylonGalleryComponent {
39
43
  });
40
44
  const event = new EventEmitter();
41
45
  event
42
- .pipe(tap((filter) => {
46
+ .pipe(takeUntil(this.destroy$), tap((filter) => {
43
47
  this.filterItems(filter);
44
48
  }))
45
49
  .subscribe();
@@ -77,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
77
81
  }], roomsBtn: [{
78
82
  type: Input
79
83
  }] } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1nYWxsZXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhYnlsb24vc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvYmFieWxvbi1nYWxsZXJ5L2JhYnlsb24tZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tZ2FsbGVyeS9iYWJ5bG9uLWdhbGxlcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0IsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDckgsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFHL0csT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQWN0RSxNQUFNLE9BQU8sdUJBQXVCO0lBWnBDO1FBc0JJLG1CQUFjLEdBQUcsTUFBTSxDQUFtQyxTQUFTLENBQUMsQ0FBQztRQUVyRSxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFO2dCQUN0RCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FDdEIsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLEVBQUUsQ0FDdEQsQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFYyxXQUFNLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBMEMvQztJQXhDRyxRQUFRO1FBQ0osSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxXQUFXLENBQUMsTUFBNkI7UUFDckMsSUFBSSxNQUFNLEVBQUU7WUFDUixDQUFDLE1BQU0sQ0FBQyxLQUFLO2dCQUNULENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBZTtRQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUM1RCxLQUFLLEVBQUUsT0FBTztZQUNkLE1BQU0sRUFBRSxPQUFPO1lBQ2YsUUFBUSxFQUFFLE9BQU87WUFDakIsV0FBVyxFQUFFLElBQUk7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLEdBQUcsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFFdkQsS0FBSzthQUNBLElBQUksQ0FDRCxHQUFHLENBQUMsQ0FBQyxNQUE2QixFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsRUFBRSxDQUFDO1FBRWpCLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQ3RELENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FDakUsQ0FBQztRQUVGLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ2pELFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsS0FBSztZQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVM7WUFDaEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDdkIsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDckQsQ0FBQzsrR0EvRFEsdUJBQXVCO21HQUF2Qix1QkFBdUIsMlFDL0JwQyw0aUhBc0ZBLDAyeUJEL0RRLFlBQVksNkhBQ1osNEJBQTRCLGtFQUM1Qiw4QkFBOEI7OzRGQU16Qix1QkFBdUI7a0JBWm5DLFNBQVM7K0JBQ0kscUJBQXFCLGNBQ25CLElBQUksV0FDUDt3QkFDTCxZQUFZO3dCQUNaLDRCQUE0Qjt3QkFDNUIsOEJBQThCO3FCQUNqQyxtQkFHZ0IsdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIHNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYWJ5bG9uTGlnaHRHYWxsZXJ5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9iYWJ5bG9uLWdhbGxlcmllcy9iYWJ5bG9uLWxpZ2h0LWdhbGxlcnkuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhYnlsb25EYXRhQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZGF0YS1iYWNrZ3JvdW5kL2RhdGEtYmFja2dyb3VuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQmFieWxvbkJ1dHRvbkkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJhYnlsb25JbWFnZUkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24taW1hZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhYnlsb25GaWx0ZXJNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2JhYnlsb24tZmlsdGVyLW1vZGFsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItYmFieWxvbi1nYWxsZXJ5JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBCYWJ5bG9uTGlnaHRHYWxsZXJ5RGlyZWN0aXZlLFxuICAgICAgICBCYWJ5bG9uRGF0YUJhY2tncm91bmREaXJlY3RpdmUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFieWxvbi1nYWxsZXJ5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vYmFieWxvbi1nYWxsZXJ5LmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkdhbGxlcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHByZXRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHJvb21UaXRsZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBmaWx0ZXJUaXRsZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBmaWx0ZXJzPzogQmFieWxvbkdhbGxlcnlGaWx0ZXJbXTtcbiAgICBASW5wdXQoKSBpbWFnZXM/OiBCYWJ5bG9uR2FsbGVyeUl0ZW1bXTtcbiAgICBASW5wdXQoKSBmaWx0ZXJzQnRuPzogQmFieWxvbkJ1dHRvbkk7XG4gICAgQElucHV0KCkgcm9vbXNCdG4/OiBCYWJ5bG9uQnV0dG9uSTtcblxuICAgIGZpbHRlclNlbGVjdGVkID0gc2lnbmFsPEJhYnlsb25HYWxsZXJ5RmlsdGVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgaW1hZ2VzRGlzcGxheWVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJTZWxlY3RlZCgpPy5hbGwgfHwgIXRoaXMuZmlsdGVyU2VsZWN0ZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW1hZ2VzPy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0uZmlsdGVyID09PSB0aGlzLmZpbHRlclNlbGVjdGVkKCk/LmlkXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWQuc2V0KHRoaXMuZmlsdGVycz8uZmluZCgoZikgPT4gZi5hbGwpKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVtcyhmaWx0ZXI/OiBCYWJ5bG9uR2FsbGVyeUZpbHRlcik6IHZvaWQge1xuICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAhZmlsdGVyLnJvb21zXG4gICAgICAgICAgICAgICAgPyB0aGlzLmZpbHRlclNlbGVjdGVkLnNldChmaWx0ZXIpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm9wZW5GaWx0ZXJzTW9kYWwodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVuRmlsdGVyc01vZGFsKHJvb21zPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEJhYnlsb25GaWx0ZXJNb2RhbENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICcxMDB2dycsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDB2aCcsXG4gICAgICAgICAgICBtYXhXaWR0aDogJzEwMHZ3JyxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8QmFieWxvbkdhbGxlcnlGaWx0ZXI+KCk7XG5cbiAgICAgICAgZXZlbnRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoZmlsdGVyPzogQmFieWxvbkdhbGxlcnlGaWx0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJJdGVtcyhmaWx0ZXIpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmZpbHRlcnMgPSB0aGlzLmZpbHRlcnM/LmZpbHRlcihcbiAgICAgICAgICAgIChmaWx0ZXIpID0+ICghcm9vbXMgJiYgIWZpbHRlci5yb29tKSB8fCAocm9vbXMgJiYgZmlsdGVyLnJvb20pXG4gICAgICAgICk7XG5cbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmZpbHRlclNlbGVjdCA9IGV2ZW50O1xuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSByb29tc1xuICAgICAgICAgICAgPyB0aGlzLnJvb21UaXRsZVxuICAgICAgICAgICAgOiB0aGlzLmZpbHRlclRpdGxlO1xuICAgICAgICBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZmlsdGVyU2VsZWN0ID0gZXZlbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhYnlsb25HYWxsZXJ5SXRlbSB7XG4gICAgaW1nPzogQmFieWxvbkltYWdlSTtcbiAgICB0aXRsZT86IHN0cmluZztcbiAgICBmaWx0ZXI/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFieWxvbkdhbGxlcnlGaWx0ZXIge1xuICAgIGlkOiBudW1iZXI7XG4gICAgdGV4dD86IHN0cmluZztcbiAgICByb29tcz86IGJvb2xlYW47XG4gICAgcm9vbT86IGJvb2xlYW47XG4gICAgYWxsPzogYm9vbGVhbjtcbn1cbiIsIjxzZWN0aW9uIGNsYXNzPVwiYmFieWxvbl9fZ2FsbGVyeSBtYXJnaW4tbWFpblwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludHJvX2luZm8gYWxpZ24tLWNlbnRlclwiPlxuICAgICAgICAgICAgQGlmIChwcmV0aXRsZSkge1xuICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInByZXRpdGxlIG1iLS0xMFwiPnt7IHByZXRpdGxlIH19PC9oMj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBpZiAodGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJ0aXRsZVwiPnt7IHRpdGxlIH19PC9oMz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgQGlmIChmaWx0ZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgIEBmb3IgKGZpbHRlciBvZiBmaWx0ZXJzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBAaWYgKGZpbHRlciAmJiAhZmlsdGVyLnJvb20pIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3VidGl0bGUgYmFieWxvbl9fZ2FsbGVyeV9fZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXJJdGVtcyhmaWx0ZXIpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFieWxvbl9fZ2FsbGVyeV9fZmlsdGVyLS1zZWxlY3RlZCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclNlbGVjdGVkKCkgPT09IGZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBmaWx0ZXIudGV4dCB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cImJhYnlsb25fX2dhbGxlcnlfX2ZpbHRlci1idXR0b25zIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgIEBpZiAocm9vbXNCdG4pIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cInJvb21zQnRuLmxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlbkZpbHRlcnNNb2RhbCh0cnVlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcm9vbXNCdG4ubGFiZWwgfX0gPHNwYW4+PTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoZmlsdGVyc0J0bikge1xuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiZmlsdGVyc0J0bi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJzTW9kYWwoZmFsc2UpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXJzQnRuLmxhYmVsIH19IDxzcGFuPj08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgY3NfcGxyXzEwMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3NfZ3JpZF9zdHlsZV8yIGNzX2xpZ2h0Z2FsbGVyeVwiIEJhYnlsb25MaWdodEdhbGxlcnk+XG4gICAgICAgICAgICBAaWYgKGltYWdlc0Rpc3BsYXllZCgpPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBAZm9yIChpdGVtIG9mIGltYWdlc0Rpc3BsYXllZCgpOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNzX2dyaWRfaXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0/LmltZz8uc3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJpdGVtLmltZz8uc3JjXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNzX2dhbGxlcnlfaXRlbSBjc19zdHlsZV8zIGNzX2xpZ2h0Ym94X2l0ZW0gZC1ibG9jayBjc19iZ19maWxlZCBwb3NpdGlvbi1yZWxhdGl2ZSBjc190eXBlXzEgY3MtLXJhZGl1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUJhY2tncm91bmQ9XCJ1cmwoJ3t7IGl0ZW0/LmltZz8uc3JjIH19JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjc19nYWxsZXJ5X2l0ZW1faG92ZXIgY3MtLXJhZGl1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNzX2hvdmVyX2ljb24gY3NfYWNjZW50X2NvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhYnlsb24tZnVsbHNjcmVlblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGl0ZW0udGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjc19ob3Zlcl90ZXh0IHRpdGxlLS1zbWFsbGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgaXRlbS50aXRsZSB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLmltZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cIml0ZW0uaW1nLnNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWx0XT1cIml0ZW0uaW1nLmFsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtbm9uZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkaW5nPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFieWxvbi1nYWxsZXJ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhYnlsb24vc3JjL2xpYi9jb21wb25lbnRzL2NvcmUvYmFieWxvbi1nYWxsZXJ5L2JhYnlsb24tZ2FsbGVyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYWJ5bG9uL3NyYy9saWIvY29tcG9uZW50cy9jb3JlL2JhYnlsb24tZ2FsbGVyeS9iYWJ5bG9uLWdhbGxlcnkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUNySCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUcvRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7O0FBY3RFLE1BQU0sT0FBTyx1QkFBdUI7SUFacEM7UUFzQkksbUJBQWMsR0FBRyxNQUFNLENBQW1DLFNBQVMsQ0FBQyxDQUFDO1FBRXJFLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBVyxDQUFDO1FBRWxDLG9CQUFlLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLElBQUks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QkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCYWJ5bG9uTGlnaHRHYWxsZXJ5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9iYWJ5bG9uLWdhbGxlcmllcy9iYWJ5bG9uLWxpZ2h0LWdhbGxlcnkuZGlyZWN0aXZlJztcbmltcG9ydCB7IEJhYnlsb25EYXRhQmFja2dyb3VuZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZGF0YS1iYWNrZ3JvdW5kL2RhdGEtYmFja2dyb3VuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQmFieWxvbkJ1dHRvbkkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEJhYnlsb25JbWFnZUkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL2JhYnlsb24taW1hZ2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IEJhYnlsb25GaWx0ZXJNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2JhYnlsb24tZmlsdGVyLW1vZGFsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItYmFieWxvbi1nYWxsZXJ5JyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBCYWJ5bG9uTGlnaHRHYWxsZXJ5RGlyZWN0aXZlLFxuICAgICAgICBCYWJ5bG9uRGF0YUJhY2tncm91bmREaXJlY3RpdmUsXG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFieWxvbi1nYWxsZXJ5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vYmFieWxvbi1nYWxsZXJ5LmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQmFieWxvbkdhbGxlcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KCkgdGl0bGU/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHJldGl0bGU/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcm9vbVRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZpbHRlclRpdGxlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZpbHRlcnM/OiBCYWJ5bG9uR2FsbGVyeUZpbHRlcltdO1xuICAgIEBJbnB1dCgpIGltYWdlcz86IEJhYnlsb25HYWxsZXJ5SXRlbVtdO1xuICAgIEBJbnB1dCgpIGZpbHRlcnNCdG4/OiBCYWJ5bG9uQnV0dG9uSTtcbiAgICBASW5wdXQoKSByb29tc0J0bj86IEJhYnlsb25CdXR0b25JO1xuXG4gICAgZmlsdGVyU2VsZWN0ZWQgPSBzaWduYWw8QmFieWxvbkdhbGxlcnlGaWx0ZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBpbWFnZXNEaXNwbGF5ZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlclNlbGVjdGVkKCk/LmFsbCB8fCAhdGhpcy5maWx0ZXJTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbWFnZXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5maWx0ZXIgPT09IHRoaXMuZmlsdGVyU2VsZWN0ZWQoKT8uaWRcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nID0gaW5qZWN0KE1hdERpYWxvZyk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZC5zZXQodGhpcy5maWx0ZXJzPy5maW5kKChmKSA9PiBmLmFsbCkpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSksIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVtcyhmaWx0ZXI/OiBCYWJ5bG9uR2FsbGVyeUZpbHRlcik6IHZvaWQge1xuICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAhZmlsdGVyLnJvb21zXG4gICAgICAgICAgICAgICAgPyB0aGlzLmZpbHRlclNlbGVjdGVkLnNldChmaWx0ZXIpXG4gICAgICAgICAgICAgICAgOiB0aGlzLm9wZW5GaWx0ZXJzTW9kYWwodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcGVuRmlsdGVyc01vZGFsKHJvb21zPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEJhYnlsb25GaWx0ZXJNb2RhbENvbXBvbmVudCwge1xuICAgICAgICAgICAgd2lkdGg6ICcxMDB2dycsXG4gICAgICAgICAgICBoZWlnaHQ6ICcxMDB2aCcsXG4gICAgICAgICAgICBtYXhXaWR0aDogJzEwMHZ3JyxcbiAgICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8QmFieWxvbkdhbGxlcnlGaWx0ZXI+KCk7XG5cbiAgICAgICAgZXZlbnRcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICB0YXAoKGZpbHRlcj86IEJhYnlsb25HYWxsZXJ5RmlsdGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVySXRlbXMoZmlsdGVyKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5maWx0ZXJzID0gdGhpcy5maWx0ZXJzPy5maWx0ZXIoXG4gICAgICAgICAgICAoZmlsdGVyKSA9PiAoIXJvb21zICYmICFmaWx0ZXIucm9vbSkgfHwgKHJvb21zICYmIGZpbHRlci5yb29tKVxuICAgICAgICApO1xuXG4gICAgICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5maWx0ZXJTZWxlY3QgPSBldmVudDtcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gcm9vbXNcbiAgICAgICAgICAgID8gdGhpcy5yb29tVGl0bGVcbiAgICAgICAgICAgIDogdGhpcy5maWx0ZXJUaXRsZTtcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmZpbHRlclNlbGVjdCA9IGV2ZW50O1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCYWJ5bG9uR2FsbGVyeUl0ZW0ge1xuICAgIGltZz86IEJhYnlsb25JbWFnZUk7XG4gICAgdGl0bGU/OiBzdHJpbmc7XG4gICAgZmlsdGVyPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhYnlsb25HYWxsZXJ5RmlsdGVyIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIHRleHQ/OiBzdHJpbmc7XG4gICAgcm9vbXM/OiBib29sZWFuO1xuICAgIHJvb20/OiBib29sZWFuO1xuICAgIGFsbD86IGJvb2xlYW47XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImJhYnlsb25fX2dhbGxlcnkgbWFyZ2luLW1haW5cIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnRyb19pbmZvIGFsaWduLS1jZW50ZXJcIj5cbiAgICAgICAgICAgIEBpZiAocHJldGl0bGUpIHtcbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJwcmV0aXRsZSBtYi0tMTBcIj57eyBwcmV0aXRsZSB9fTwvaDI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKHRpdGxlKSB7XG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwidGl0bGVcIj57eyB0aXRsZSB9fTwvaDM+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIEBpZiAoZmlsdGVycz8ubGVuZ3RoKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgICAgICAgICBAZm9yIChmaWx0ZXIgb2YgZmlsdGVyczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXIgJiYgIWZpbHRlci5yb29tKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN1YnRpdGxlIGJhYnlsb25fX2dhbGxlcnlfX2ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVySXRlbXMoZmlsdGVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhYnlsb25fX2dhbGxlcnlfX2ZpbHRlci0tc2VsZWN0ZWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJTZWxlY3RlZCgpID09PSBmaWx0ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyLnRleHQgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuICAgIDxkaXYgY2xhc3M9XCJiYWJ5bG9uX19nYWxsZXJ5X19maWx0ZXItYnV0dG9ucyBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICBAaWYgKHJvb21zQnRuKSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCJyb29tc0J0bi5sYWJlbFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5GaWx0ZXJzTW9kYWwodHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHJvb21zQnRuLmxhYmVsIH19IDxzcGFuPj08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKGZpbHRlcnNCdG4pIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cImZpbHRlcnNCdG4ubGFiZWxcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuRmlsdGVyc01vZGFsKGZhbHNlKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyc0J0bi5sYWJlbCB9fSA8c3Bhbj49PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGNzX3Bscl8xMDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNzX2dyaWRfc3R5bGVfMiBjc19saWdodGdhbGxlcnlcIiBCYWJ5bG9uTGlnaHRHYWxsZXJ5PlxuICAgICAgICAgICAgQGlmIChpbWFnZXNEaXNwbGF5ZWQoKT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpbWFnZXNEaXNwbGF5ZWQoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjc19ncmlkX2l0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtPy5pbWc/LnNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiaXRlbS5pbWc/LnNyY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjc19nYWxsZXJ5X2l0ZW0gY3Nfc3R5bGVfMyBjc19saWdodGJveF9pdGVtIGQtYmxvY2sgY3NfYmdfZmlsZWQgcG9zaXRpb24tcmVsYXRpdmUgY3NfdHlwZV8xIGNzLS1yYWRpdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFCYWNrZ3JvdW5kPVwidXJsKCd7eyBpdGVtPy5pbWc/LnNyYyB9fScpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3NfZ2FsbGVyeV9pdGVtX2hvdmVyIGNzLS1yYWRpdXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjc19ob3Zlcl9pY29uIGNzX2FjY2VudF9jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWJ5bG9uLWZ1bGxzY3JlZW5cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChpdGVtLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3NfaG92ZXJfdGV4dCB0aXRsZS0tc21hbGxlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGl0ZW0udGl0bGUgfX08L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pbWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpdGVtLmltZy5zcmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsdF09XCJpdGVtLmltZy5hbHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLW5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==