ctt-puro 0.47.9 → 0.48.0
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.
- package/esm2022/lib/components/puro-engine-modal/puro-engine-modal.component.mjs +13 -25
- package/esm2022/lib/directives/puro-script/puro-modal-scripts.directive.mjs +83 -0
- package/esm2022/lib/services/mapper/mapper.service.mjs +2 -2
- package/fesm2022/ctt-puro.mjs +89 -23
- package/fesm2022/ctt-puro.mjs.map +1 -1
- package/lib/directives/puro-script/puro-modal-scripts.directive.d.ts +11 -0
- package/package.json +1 -1
|
@@ -2,9 +2,10 @@ import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
|
2
2
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, inject, Input, NgZone, PLATFORM_ID, } from '@angular/core';
|
|
3
3
|
import { FormBuilder, ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
4
4
|
import { distinctUntilChanged } from 'rxjs/operators';
|
|
5
|
-
import { PuroSliderDirective
|
|
6
|
-
import { PuroDynamicHeadingComponent } from '../../shared/puro-dynamic-heading';
|
|
5
|
+
import { PuroSliderDirective } from '../../directives';
|
|
7
6
|
import { ModalStateService } from '../../services/modal-state';
|
|
7
|
+
import { PuroDynamicHeadingComponent } from '../../shared/puro-dynamic-heading';
|
|
8
|
+
import { EngineModalScriptsDirective } from '../../directives/puro-script/puro-modal-scripts.directive';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@angular/forms";
|
|
10
11
|
export class PuroEngineModalComponent {
|
|
@@ -115,10 +116,12 @@ export class PuroEngineModalComponent {
|
|
|
115
116
|
this.saveEngineData();
|
|
116
117
|
});
|
|
117
118
|
if (isPlatformBrowser(this.platformId)) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
119
|
+
this.ngZone.runOutsideAngular(() => {
|
|
120
|
+
setTimeout(() => {
|
|
121
|
+
this.bindDatepickerEvents();
|
|
122
|
+
this.bindLocationChange();
|
|
123
|
+
}, 400);
|
|
124
|
+
});
|
|
122
125
|
}
|
|
123
126
|
this.updateGeneratedUrl();
|
|
124
127
|
this.cdr.markForCheck();
|
|
@@ -220,19 +223,6 @@ export class PuroEngineModalComponent {
|
|
|
220
223
|
}
|
|
221
224
|
});
|
|
222
225
|
};
|
|
223
|
-
// 🔁 Watcher con requestAnimationFrame (ultraligero)
|
|
224
|
-
const watchInput = (el, onChange) => {
|
|
225
|
-
let last = '';
|
|
226
|
-
const tick = () => {
|
|
227
|
-
const cur = el.value;
|
|
228
|
-
if (cur !== last) {
|
|
229
|
-
last = cur;
|
|
230
|
-
onChange();
|
|
231
|
-
}
|
|
232
|
-
requestAnimationFrame(tick);
|
|
233
|
-
};
|
|
234
|
-
requestAnimationFrame(tick);
|
|
235
|
-
};
|
|
236
226
|
// Dispara también en eventos “por si acaso”
|
|
237
227
|
['input', 'change', 'blur', 'keyup', 'paste', 'click'].forEach((evt) => {
|
|
238
228
|
inInput.addEventListener(evt, applySync);
|
|
@@ -240,8 +230,6 @@ export class PuroEngineModalComponent {
|
|
|
240
230
|
});
|
|
241
231
|
// Arranque
|
|
242
232
|
applySync();
|
|
243
|
-
watchInput(inInput, applySync);
|
|
244
|
-
watchInput(outInput, applySync);
|
|
245
233
|
}
|
|
246
234
|
// helpers
|
|
247
235
|
extractDMY(raw) {
|
|
@@ -362,7 +350,7 @@ export class PuroEngineModalComponent {
|
|
|
362
350
|
this.modal.closeEngine();
|
|
363
351
|
}
|
|
364
352
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroEngineModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
365
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroEngineModalComponent, isStandalone: true, selector: "lib-puro-engine-modal", inputs: { isHotel: "isHotel" }, ngImport: i0, template: "@if (isOpen()) {\n <section class=\"engine-modal\">\n <div class=\"engine-modal__overlay\" (click)=\"close()\"></div>\n <div class=\"engine-modal__content\">\n <button class=\"engine-modal__close\" type=\"button\" (click)=\"close()\">\n \u2715\n </button>\n\n <section class=\"booking\">\n <!-- \uD83D\uDD39 Slider de ventajas -->\n <div\n class=\"booking__advantages js-active-slider\"\n [puroSlider]=\"data()?.advantages\"\n data-slidesrows_pc=\"3\"\n data-slidesrows_laptop=\"3\"\n data-slidesrows_tablet=\"3\"\n data-slidesrows_mobile=\"3\"\n data-slidesrows_mobile_small=\"3\"\n data-slides_infinite=\"true\"\n data-slider_name=\"js-adv-slider\"\n data-slider_showbtns=\"true\"\n data-slider_showdots=\"false\"\n data-slider_fade=\"false\"\n data-slider_autoplay=\"false\"\n data-slides_pc=\"1\"\n >\n <div class=\"booking__advantages--inner\">\n @if (data()?.titleAdvantages) {\n <lib-puro-dynamic-heading\n [tag]=\"data()?.tags?.title || 'span'\"\n cssClass=\"booking__title\"\n [content]=\"data()?.titleAdvantages\"\n ></lib-puro-dynamic-heading>\n }\n <div class=\"js-adv-slider adv__slider\">\n @for (\n item of data()?.advantages;\n track $index\n ) {\n <div class=\"booking__advItem\">\n @if (item.icon) {\n <div class=\"booking__advIcon\">\n <i class=\"icon-{{ item.icon }}\"></i>\n </div>\n }\n @if (item.title) {\n <span class=\"booking__advText\">{{ item.title }}</span>\n }\n </div>\n }\n </div>\n <div class=\"js-slider-arrows\"></div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 FORMULARIO -->\n @if (form) {\n <div class=\"booking__form\">\n <div class=\"booking__form--inner\">\n <form\n [formGroup]=\"form\"\n (submit)=\"onSubmit($event)\"\n scriptLoader\n [dataLoaded]=\"true\"\n >\n @if (data()?.engine?.title) {\n <span class=\"booking__title\">{{\n data()?.engine?.title\n }}</span>\n }\n\n <div class=\"booking__box\">\n @if (!isHotel) {\n <!-- \uD83D\uDD39 LOCATION -->\n <div class=\"booking__fieldGroup\">\n <div\n class=\"booking__fieldInner\"\n style=\"\n --label-left-position: 34rem;\n \"\n >\n @if (\n data()?.engine\n ?.locationDropdown\n ?.title\n ) {\n <label\n class=\"booking__fieldLabel\"\n for=\"location\"\n >\n <span>{{\n data()?.engine\n ?.locationDropdown\n ?.title\n }}</span>\n </label>\n }\n <select\n class=\"booking__fieldControl\"\n formControlName=\"location\"\n id=\"location\"\n (input)=\"\n changeHotelLabelPosition(\n $event\n )\n \"\n >\n @for (\n option of data()?.engine\n ?.locationDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-62\"></i>\n </div>\n </div>\n </div>\n }\n\n <!-- \uD83D\uDD39 DATEPICKERS -->\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"In-date2\"\n style=\"\n --label-left-position: 14rem;\n \"\n >\n <span>{{\n data()?.engine?.datepickerIn\n ?.title\n }}</span>\n </label>\n <input\n type=\"text\"\n class=\"booking__fieldControl\"\n id=\"In-date2\"\n formControlName=\"datepickerIn\"\n [placeholder]=\"\n data()?.engine?.datepickerIn\n ?.placeholder\n \"\n data-toggle=\"datepicker1\"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-89\"></i>\n </div>\n </div>\n </div>\n\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"Out-date2\"\n style=\"\n --label-left-position: 14rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.datepickerOut?.title\n }}</span>\n </label>\n <input\n type=\"text\"\n class=\"booking__fieldControl\"\n id=\"Out-date2\"\n formControlName=\"datepickerOut\"\n [placeholder]=\"\n data()?.engine\n ?.datepickerOut\n ?.placeholder\n \"\n data-toggle=\"datepicker1\"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-89\"></i>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 GUESTS -->\n <div class=\"booking__fieldGroup\">\n <div\n class=\"booking__fieldInner js-personas-subfields\"\n role=\"button\"\n >\n <label\n class=\"booking__fieldLabel\"\n for=\"guests\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine?.guestsInput\n ?.title\n }}</span>\n </label>\n <div class=\"booking__fieldControl\">\n 00\n </div>\n <div class=\"booking__fieldIcon\">\n <svg width=\"15\" height=\"8\">\n <use\n href=\"#select-arrow\"\n ></use>\n </svg>\n </div>\n </div>\n\n <div\n class=\"booking__fieldSub js-fieldSub\"\n >\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"adult\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.adultsDropdown\n ?.title\n }}</span>\n </label>\n <select\n class=\"booking__fieldControl\"\n id=\"adult1\"\n (change)=\"applyGuests()\"\n >\n @for (\n option of data()?.engine\n ?.adultsDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-92\"></i>\n </div>\n </div>\n\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"child\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.kidsDropdown\n ?.title\n }}</span>\n </label>\n <select\n class=\"booking__fieldControl\"\n id=\"child1\"\n (change)=\"applyGuests()\"\n >\n @for (\n option of data()?.engine\n ?.kidsDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <svg width=\"22\" height=\"22\"><use href=\"#little-girl\"></use></svg>\n </div>\n </div>\n\n <div class=\"btn__group\">\n <button\n type=\"button\"\n class=\"btn btn__primary js-apply-guests1\"\n (click)=\"applyGuests()\"\n >\n <span>{{\n data()?.engine?.btnApply\n ?.label ?? 'Apply'\n }}</span>\n </button>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 PROMO -->\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n style=\"\n --label-left-position: 9rem;\n \"\n for=\"promo\"\n >\n <span>{{\n data()?.engine?.promoInput\n ?.title\n }}</span>\n </label>\n <input\n id=\"promo\"\n type=\"text\"\n placeholder=\"xxxx\"\n class=\"booking__fieldControl\"\n formControlName=\"promoInput\"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-90\"></i>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 SUBMIT -->\n <div class=\"btn__group\">\n <button\n type=\"submit\"\n class=\"btn btn__primary\"\n >\n <span>{{\n data()?.engine?.button?.label\n }}</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n }\n </section>\n </div>\n </section>\n}\n", styles: [":host ::ng-deep .booking__fieldLabel{margin-left:var(--label-left-position, 0)}.booking__fieldControl{font-family:var(--font-text)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: PuroSliderDirective, selector: "[puroSlider]", inputs: ["puroSlider"] }, { kind: "component", type: PuroDynamicHeadingComponent, selector: "lib-puro-dynamic-heading", inputs: ["tag", "wrapper", "cssClass", "content", "color"] }, { kind: "directive", type: PuroScriptDirective, selector: "[scriptLoader]", inputs: ["dataLoaded"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
353
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: PuroEngineModalComponent, isStandalone: true, selector: "lib-puro-engine-modal", inputs: { isHotel: "isHotel" }, ngImport: i0, template: "@if (isOpen()) {\n <section class=\"engine-modal\" ngSkipHydration>\n <div class=\"engine-modal__overlay\" (click)=\"close()\"></div>\n <div class=\"engine-modal__content\">\n <button class=\"engine-modal__close\" type=\"button\" (click)=\"close()\">\n \u2715\n </button>\n\n <section class=\"booking\">\n <!-- \uD83D\uDD39 Slider de ventajas -->\n <div\n class=\"booking__advantages js-active-slider\"\n [puroSlider]=\"data()?.advantages\"\n data-slidesrows_pc=\"3\"\n data-slidesrows_laptop=\"3\"\n data-slidesrows_tablet=\"3\"\n data-slidesrows_mobile=\"3\"\n data-slidesrows_mobile_small=\"3\"\n data-slides_infinite=\"true\"\n data-slider_name=\"js-adv-slider\"\n data-slider_showbtns=\"true\"\n data-slider_showdots=\"false\"\n data-slider_fade=\"false\"\n data-slider_autoplay=\"false\"\n data-slides_pc=\"1\"\n >\n <div class=\"booking__advantages--inner\">\n @if (data()?.titleAdvantages) {\n <lib-puro-dynamic-heading\n [tag]=\"data()?.tags?.title || 'span'\"\n cssClass=\"booking__title\"\n [content]=\"data()?.titleAdvantages\"\n ></lib-puro-dynamic-heading>\n }\n <div class=\"js-adv-slider adv__slider\">\n @for (\n item of data()?.advantages;\n track $index\n ) {\n <div class=\"booking__advItem\">\n @if (item.icon) {\n <div class=\"booking__advIcon\">\n <i class=\"icon-{{ item.icon }}\"></i>\n </div>\n }\n @if (item.title) {\n <span class=\"booking__advText\">{{ item.title }}</span>\n }\n </div>\n }\n </div>\n <div class=\"js-slider-arrows\"></div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 FORMULARIO -->\n @if (form) {\n <div class=\"booking__form\">\n <div class=\"booking__form--inner\">\n <form\n [formGroup]=\"form\"\n (submit)=\"onSubmit($event)\"\n engineModalScripts\n [active]=\"isOpen()\"\n >\n @if (data()?.engine?.title) {\n <span class=\"booking__title\">{{\n data()?.engine?.title\n }}</span>\n }\n\n <div class=\"booking__box\">\n @if (!isHotel) {\n <!-- \uD83D\uDD39 LOCATION -->\n <div class=\"booking__fieldGroup\">\n <div\n class=\"booking__fieldInner\"\n style=\"\n --label-left-position: 34rem;\n \"\n >\n @if (\n data()?.engine\n ?.locationDropdown\n ?.title\n ) {\n <label\n class=\"booking__fieldLabel\"\n for=\"location\"\n >\n <span>{{\n data()?.engine\n ?.locationDropdown\n ?.title\n }}</span>\n </label>\n }\n <select\n class=\"booking__fieldControl\"\n formControlName=\"location\"\n id=\"location\"\n (input)=\"\n changeHotelLabelPosition(\n $event\n )\n \"\n >\n @for (\n option of data()?.engine\n ?.locationDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-62\"></i>\n </div>\n </div>\n </div>\n }\n\n <!-- \uD83D\uDD39 DATEPICKERS -->\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"In-date2\"\n style=\"\n --label-left-position: 14rem;\n \"\n >\n <span>{{\n data()?.engine?.datepickerIn\n ?.title\n }}</span>\n </label>\n <input\n type=\"text\"\n class=\"booking__fieldControl\"\n id=\"In-date2\"\n formControlName=\"datepickerIn\"\n [placeholder]=\"\n data()?.engine?.datepickerIn\n ?.placeholder\n \"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-89\"></i>\n </div>\n </div>\n </div>\n\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"Out-date2\"\n style=\"\n --label-left-position: 14rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.datepickerOut?.title\n }}</span>\n </label>\n <input\n type=\"text\"\n class=\"booking__fieldControl\"\n id=\"Out-date2\"\n formControlName=\"datepickerOut\"\n [placeholder]=\"\n data()?.engine\n ?.datepickerOut\n ?.placeholder\n \"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-89\"></i>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 GUESTS -->\n <div class=\"booking__fieldGroup\">\n <div\n class=\"booking__fieldInner js-personas-subfields\"\n role=\"button\"\n >\n <label\n class=\"booking__fieldLabel\"\n for=\"guests\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine?.guestsInput\n ?.title\n }}</span>\n </label>\n <div class=\"booking__fieldControl\">\n 00\n </div>\n <div class=\"booking__fieldIcon\">\n <svg width=\"15\" height=\"8\">\n <use\n href=\"#select-arrow\"\n ></use>\n </svg>\n </div>\n </div>\n\n <div\n class=\"booking__fieldSub js-fieldSub\"\n >\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"adult\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.adultsDropdown\n ?.title\n }}</span>\n </label>\n <select\n class=\"booking__fieldControl\"\n id=\"adult1\"\n (change)=\"applyGuests()\"\n >\n @for (\n option of data()?.engine\n ?.adultsDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-92\"></i>\n </div>\n </div>\n\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"child\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.kidsDropdown\n ?.title\n }}</span>\n </label>\n <select\n class=\"booking__fieldControl\"\n id=\"child1\"\n (change)=\"applyGuests()\"\n >\n @for (\n option of data()?.engine\n ?.kidsDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <svg width=\"22\" height=\"22\"><use href=\"#little-girl\"></use></svg>\n </div>\n </div>\n\n <div class=\"btn__group\">\n <button\n type=\"button\"\n class=\"btn btn__primary js-apply-guests1\"\n (click)=\"applyGuests()\"\n >\n <span>{{\n data()?.engine?.btnApply\n ?.label ?? 'Apply'\n }}</span>\n </button>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 PROMO -->\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n style=\"\n --label-left-position: 9rem;\n \"\n for=\"promo\"\n >\n <span>{{\n data()?.engine?.promoInput\n ?.title\n }}</span>\n </label>\n <input\n id=\"promo\"\n type=\"text\"\n placeholder=\"xxxx\"\n class=\"booking__fieldControl\"\n formControlName=\"promoInput\"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-90\"></i>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 SUBMIT -->\n <div class=\"btn__group\">\n <button\n type=\"submit\"\n class=\"btn btn__primary\"\n >\n <span>{{\n data()?.engine?.button?.label\n }}</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n }\n </section>\n </div>\n </section>\n}\n", styles: [":host ::ng-deep .booking__fieldLabel{margin-left:var(--label-left-position, 0)}.booking__fieldControl{font-family:var(--font-text)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: PuroSliderDirective, selector: "[puroSlider]", inputs: ["puroSlider"] }, { kind: "component", type: PuroDynamicHeadingComponent, selector: "lib-puro-dynamic-heading", inputs: ["tag", "wrapper", "cssClass", "content", "color"] }, { kind: "directive", type: EngineModalScriptsDirective, selector: "[engineModalScripts]", inputs: ["active"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
366
354
|
}
|
|
367
355
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PuroEngineModalComponent, decorators: [{
|
|
368
356
|
type: Component,
|
|
@@ -371,9 +359,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
371
359
|
ReactiveFormsModule,
|
|
372
360
|
PuroSliderDirective,
|
|
373
361
|
PuroDynamicHeadingComponent,
|
|
374
|
-
|
|
375
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isOpen()) {\n <section class=\"engine-modal\">\n <div class=\"engine-modal__overlay\" (click)=\"close()\"></div>\n <div class=\"engine-modal__content\">\n <button class=\"engine-modal__close\" type=\"button\" (click)=\"close()\">\n \u2715\n </button>\n\n <section class=\"booking\">\n <!-- \uD83D\uDD39 Slider de ventajas -->\n <div\n class=\"booking__advantages js-active-slider\"\n [puroSlider]=\"data()?.advantages\"\n data-slidesrows_pc=\"3\"\n data-slidesrows_laptop=\"3\"\n data-slidesrows_tablet=\"3\"\n data-slidesrows_mobile=\"3\"\n data-slidesrows_mobile_small=\"3\"\n data-slides_infinite=\"true\"\n data-slider_name=\"js-adv-slider\"\n data-slider_showbtns=\"true\"\n data-slider_showdots=\"false\"\n data-slider_fade=\"false\"\n data-slider_autoplay=\"false\"\n data-slides_pc=\"1\"\n >\n <div class=\"booking__advantages--inner\">\n @if (data()?.titleAdvantages) {\n <lib-puro-dynamic-heading\n [tag]=\"data()?.tags?.title || 'span'\"\n cssClass=\"booking__title\"\n [content]=\"data()?.titleAdvantages\"\n ></lib-puro-dynamic-heading>\n }\n <div class=\"js-adv-slider adv__slider\">\n @for (\n item of data()?.advantages;\n track $index\n ) {\n <div class=\"booking__advItem\">\n @if (item.icon) {\n <div class=\"booking__advIcon\">\n <i class=\"icon-{{ item.icon }}\"></i>\n </div>\n }\n @if (item.title) {\n <span class=\"booking__advText\">{{ item.title }}</span>\n }\n </div>\n }\n </div>\n <div class=\"js-slider-arrows\"></div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 FORMULARIO -->\n @if (form) {\n <div class=\"booking__form\">\n <div class=\"booking__form--inner\">\n <form\n [formGroup]=\"form\"\n (submit)=\"onSubmit($event)\"\n scriptLoader\n [dataLoaded]=\"true\"\n >\n @if (data()?.engine?.title) {\n <span class=\"booking__title\">{{\n data()?.engine?.title\n }}</span>\n }\n\n <div class=\"booking__box\">\n @if (!isHotel) {\n <!-- \uD83D\uDD39 LOCATION -->\n <div class=\"booking__fieldGroup\">\n <div\n class=\"booking__fieldInner\"\n style=\"\n --label-left-position: 34rem;\n \"\n >\n @if (\n data()?.engine\n ?.locationDropdown\n ?.title\n ) {\n <label\n class=\"booking__fieldLabel\"\n for=\"location\"\n >\n <span>{{\n data()?.engine\n ?.locationDropdown\n ?.title\n }}</span>\n </label>\n }\n <select\n class=\"booking__fieldControl\"\n formControlName=\"location\"\n id=\"location\"\n (input)=\"\n changeHotelLabelPosition(\n $event\n )\n \"\n >\n @for (\n option of data()?.engine\n ?.locationDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-62\"></i>\n </div>\n </div>\n </div>\n }\n\n <!-- \uD83D\uDD39 DATEPICKERS -->\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"In-date2\"\n style=\"\n --label-left-position: 14rem;\n \"\n >\n <span>{{\n data()?.engine?.datepickerIn\n ?.title\n }}</span>\n </label>\n <input\n type=\"text\"\n class=\"booking__fieldControl\"\n id=\"In-date2\"\n formControlName=\"datepickerIn\"\n [placeholder]=\"\n data()?.engine?.datepickerIn\n ?.placeholder\n \"\n data-toggle=\"datepicker1\"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-89\"></i>\n </div>\n </div>\n </div>\n\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"Out-date2\"\n style=\"\n --label-left-position: 14rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.datepickerOut?.title\n }}</span>\n </label>\n <input\n type=\"text\"\n class=\"booking__fieldControl\"\n id=\"Out-date2\"\n formControlName=\"datepickerOut\"\n [placeholder]=\"\n data()?.engine\n ?.datepickerOut\n ?.placeholder\n \"\n data-toggle=\"datepicker1\"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-89\"></i>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 GUESTS -->\n <div class=\"booking__fieldGroup\">\n <div\n class=\"booking__fieldInner js-personas-subfields\"\n role=\"button\"\n >\n <label\n class=\"booking__fieldLabel\"\n for=\"guests\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine?.guestsInput\n ?.title\n }}</span>\n </label>\n <div class=\"booking__fieldControl\">\n 00\n </div>\n <div class=\"booking__fieldIcon\">\n <svg width=\"15\" height=\"8\">\n <use\n href=\"#select-arrow\"\n ></use>\n </svg>\n </div>\n </div>\n\n <div\n class=\"booking__fieldSub js-fieldSub\"\n >\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"adult\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.adultsDropdown\n ?.title\n }}</span>\n </label>\n <select\n class=\"booking__fieldControl\"\n id=\"adult1\"\n (change)=\"applyGuests()\"\n >\n @for (\n option of data()?.engine\n ?.adultsDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-92\"></i>\n </div>\n </div>\n\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"child\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.kidsDropdown\n ?.title\n }}</span>\n </label>\n <select\n class=\"booking__fieldControl\"\n id=\"child1\"\n (change)=\"applyGuests()\"\n >\n @for (\n option of data()?.engine\n ?.kidsDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <svg width=\"22\" height=\"22\"><use href=\"#little-girl\"></use></svg>\n </div>\n </div>\n\n <div class=\"btn__group\">\n <button\n type=\"button\"\n class=\"btn btn__primary js-apply-guests1\"\n (click)=\"applyGuests()\"\n >\n <span>{{\n data()?.engine?.btnApply\n ?.label ?? 'Apply'\n }}</span>\n </button>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 PROMO -->\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n style=\"\n --label-left-position: 9rem;\n \"\n for=\"promo\"\n >\n <span>{{\n data()?.engine?.promoInput\n ?.title\n }}</span>\n </label>\n <input\n id=\"promo\"\n type=\"text\"\n placeholder=\"xxxx\"\n class=\"booking__fieldControl\"\n formControlName=\"promoInput\"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-90\"></i>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 SUBMIT -->\n <div class=\"btn__group\">\n <button\n type=\"submit\"\n class=\"btn btn__primary\"\n >\n <span>{{\n data()?.engine?.button?.label\n }}</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n }\n </section>\n </div>\n </section>\n}\n", styles: [":host ::ng-deep .booking__fieldLabel{margin-left:var(--label-left-position, 0)}.booking__fieldControl{font-family:var(--font-text)}\n"] }]
|
|
362
|
+
EngineModalScriptsDirective,
|
|
363
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (isOpen()) {\n <section class=\"engine-modal\" ngSkipHydration>\n <div class=\"engine-modal__overlay\" (click)=\"close()\"></div>\n <div class=\"engine-modal__content\">\n <button class=\"engine-modal__close\" type=\"button\" (click)=\"close()\">\n \u2715\n </button>\n\n <section class=\"booking\">\n <!-- \uD83D\uDD39 Slider de ventajas -->\n <div\n class=\"booking__advantages js-active-slider\"\n [puroSlider]=\"data()?.advantages\"\n data-slidesrows_pc=\"3\"\n data-slidesrows_laptop=\"3\"\n data-slidesrows_tablet=\"3\"\n data-slidesrows_mobile=\"3\"\n data-slidesrows_mobile_small=\"3\"\n data-slides_infinite=\"true\"\n data-slider_name=\"js-adv-slider\"\n data-slider_showbtns=\"true\"\n data-slider_showdots=\"false\"\n data-slider_fade=\"false\"\n data-slider_autoplay=\"false\"\n data-slides_pc=\"1\"\n >\n <div class=\"booking__advantages--inner\">\n @if (data()?.titleAdvantages) {\n <lib-puro-dynamic-heading\n [tag]=\"data()?.tags?.title || 'span'\"\n cssClass=\"booking__title\"\n [content]=\"data()?.titleAdvantages\"\n ></lib-puro-dynamic-heading>\n }\n <div class=\"js-adv-slider adv__slider\">\n @for (\n item of data()?.advantages;\n track $index\n ) {\n <div class=\"booking__advItem\">\n @if (item.icon) {\n <div class=\"booking__advIcon\">\n <i class=\"icon-{{ item.icon }}\"></i>\n </div>\n }\n @if (item.title) {\n <span class=\"booking__advText\">{{ item.title }}</span>\n }\n </div>\n }\n </div>\n <div class=\"js-slider-arrows\"></div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 FORMULARIO -->\n @if (form) {\n <div class=\"booking__form\">\n <div class=\"booking__form--inner\">\n <form\n [formGroup]=\"form\"\n (submit)=\"onSubmit($event)\"\n engineModalScripts\n [active]=\"isOpen()\"\n >\n @if (data()?.engine?.title) {\n <span class=\"booking__title\">{{\n data()?.engine?.title\n }}</span>\n }\n\n <div class=\"booking__box\">\n @if (!isHotel) {\n <!-- \uD83D\uDD39 LOCATION -->\n <div class=\"booking__fieldGroup\">\n <div\n class=\"booking__fieldInner\"\n style=\"\n --label-left-position: 34rem;\n \"\n >\n @if (\n data()?.engine\n ?.locationDropdown\n ?.title\n ) {\n <label\n class=\"booking__fieldLabel\"\n for=\"location\"\n >\n <span>{{\n data()?.engine\n ?.locationDropdown\n ?.title\n }}</span>\n </label>\n }\n <select\n class=\"booking__fieldControl\"\n formControlName=\"location\"\n id=\"location\"\n (input)=\"\n changeHotelLabelPosition(\n $event\n )\n \"\n >\n @for (\n option of data()?.engine\n ?.locationDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-62\"></i>\n </div>\n </div>\n </div>\n }\n\n <!-- \uD83D\uDD39 DATEPICKERS -->\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"In-date2\"\n style=\"\n --label-left-position: 14rem;\n \"\n >\n <span>{{\n data()?.engine?.datepickerIn\n ?.title\n }}</span>\n </label>\n <input\n type=\"text\"\n class=\"booking__fieldControl\"\n id=\"In-date2\"\n formControlName=\"datepickerIn\"\n [placeholder]=\"\n data()?.engine?.datepickerIn\n ?.placeholder\n \"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-89\"></i>\n </div>\n </div>\n </div>\n\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"Out-date2\"\n style=\"\n --label-left-position: 14rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.datepickerOut?.title\n }}</span>\n </label>\n <input\n type=\"text\"\n class=\"booking__fieldControl\"\n id=\"Out-date2\"\n formControlName=\"datepickerOut\"\n [placeholder]=\"\n data()?.engine\n ?.datepickerOut\n ?.placeholder\n \"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-89\"></i>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 GUESTS -->\n <div class=\"booking__fieldGroup\">\n <div\n class=\"booking__fieldInner js-personas-subfields\"\n role=\"button\"\n >\n <label\n class=\"booking__fieldLabel\"\n for=\"guests\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine?.guestsInput\n ?.title\n }}</span>\n </label>\n <div class=\"booking__fieldControl\">\n 00\n </div>\n <div class=\"booking__fieldIcon\">\n <svg width=\"15\" height=\"8\">\n <use\n href=\"#select-arrow\"\n ></use>\n </svg>\n </div>\n </div>\n\n <div\n class=\"booking__fieldSub js-fieldSub\"\n >\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"adult\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.adultsDropdown\n ?.title\n }}</span>\n </label>\n <select\n class=\"booking__fieldControl\"\n id=\"adult1\"\n (change)=\"applyGuests()\"\n >\n @for (\n option of data()?.engine\n ?.adultsDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-92\"></i>\n </div>\n </div>\n\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n for=\"child\"\n style=\"\n --label-left-position: 6rem;\n \"\n >\n <span>{{\n data()?.engine\n ?.kidsDropdown\n ?.title\n }}</span>\n </label>\n <select\n class=\"booking__fieldControl\"\n id=\"child1\"\n (change)=\"applyGuests()\"\n >\n @for (\n option of data()?.engine\n ?.kidsDropdown\n ?.options;\n track $index\n ) {\n <option\n [value]=\"\n option.code\n \"\n >\n {{ option.name }}\n </option>\n }\n </select>\n <div class=\"booking__fieldIcon\">\n <svg width=\"22\" height=\"22\"><use href=\"#little-girl\"></use></svg>\n </div>\n </div>\n\n <div class=\"btn__group\">\n <button\n type=\"button\"\n class=\"btn btn__primary js-apply-guests1\"\n (click)=\"applyGuests()\"\n >\n <span>{{\n data()?.engine?.btnApply\n ?.label ?? 'Apply'\n }}</span>\n </button>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 PROMO -->\n <div class=\"booking__fieldGroup\">\n <div class=\"booking__fieldInner\">\n <label\n class=\"booking__fieldLabel\"\n style=\"\n --label-left-position: 9rem;\n \"\n for=\"promo\"\n >\n <span>{{\n data()?.engine?.promoInput\n ?.title\n }}</span>\n </label>\n <input\n id=\"promo\"\n type=\"text\"\n placeholder=\"xxxx\"\n class=\"booking__fieldControl\"\n formControlName=\"promoInput\"\n (input)=\"\n changeLabelPosition($event)\n \"\n />\n <div class=\"booking__fieldIcon\">\n <i class=\"icon-90\"></i>\n </div>\n </div>\n </div>\n\n <!-- \uD83D\uDD39 SUBMIT -->\n <div class=\"btn__group\">\n <button\n type=\"submit\"\n class=\"btn btn__primary\"\n >\n <span>{{\n data()?.engine?.button?.label\n }}</span>\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n }\n </section>\n </div>\n </section>\n}\n", styles: [":host ::ng-deep .booking__fieldLabel{margin-left:var(--label-left-position, 0)}.booking__fieldControl{font-family:var(--font-text)}\n"] }]
|
|
376
364
|
}], ctorParameters: () => [], propDecorators: { isHotel: [{
|
|
377
365
|
type: Input
|
|
378
366
|
}] } });
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyby1lbmdpbmUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1lbmdpbmUtbW9kYWwvcHVyby1lbmdpbmUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1lbmdpbmUtbW9kYWwvcHVyby1lbmdpbmUtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsV0FBVyxFQUVYLG1CQUFtQixFQUNuQixVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBaUIvRCxNQUFNLE9BQU8sd0JBQXdCO0lBbUJqQztRQWxCaUIsT0FBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QixlQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pDLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENB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bW9uTW9kdWxlLCBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBQTEFURk9STV9JRCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEZvcm1CdWlsZGVyLFxuICAgIEZvcm1Hcm91cCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIFZhbGlkYXRvcnMsXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgUHVyb1NsaWRlckRpcmVjdGl2ZSwgUHVyb1NjcmlwdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgUHVyb0R5bmFtaWNIZWFkaW5nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL3B1cm8tZHluYW1pYy1oZWFkaW5nJztcbmltcG9ydCB7IE1vZGFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWwtc3RhdGUnO1xuaW1wb3J0IHsgUHVyb0VuZ2luZU1vZGFsSSB9IGZyb20gJy4vcHVyby1lbmdpbmUtbW9kYWwuaW50ZXJmYWNlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItcHVyby1lbmdpbmUtbW9kYWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFB1cm9TbGlkZXJEaXJlY3RpdmUsXG4gICAgICAgIFB1cm9EeW5hbWljSGVhZGluZ0NvbXBvbmVudCxcbiAgICAgICAgUHVyb1NjcmlwdERpcmVjdGl2ZSxcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wdXJvLWVuZ2luZS1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL3B1cm8tZW5naW5lLW1vZGFsLmNvbXBvbmVudC5zY3NzJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUHVyb0VuZ2luZU1vZGFsQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiID0gaW5qZWN0KEZvcm1CdWlsZGVyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtSWQgPSBpbmplY3QoUExBVEZPUk1fSUQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWwgPSBpbmplY3QoTW9kYWxTdGF0ZVNlcnZpY2UpO1xuXG4gICAgQElucHV0KCkgaXNIb3RlbD86IGJvb2xlYW47XG5cbiAgICBpc09wZW4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1vZGFsLmlzRW5naW5lT3BlbigpKTtcbiAgICBkYXRhID0gY29tcHV0ZWQ8UHVyb0VuZ2luZU1vZGFsSSB8IHVuZGVmaW5lZD4oKCkgPT5cbiAgICAgICAgdGhpcy5tb2RhbC5lbmdpbmVEYXRhKClcbiAgICApO1xuXG4gICAgZm9ybT86IEZvcm1Hcm91cDtcbiAgICBnZW5lcmF0ZWRVcmwgPSAnJztcbiAgICBndWVzdHMgPSB7IGFkdWx0czogMiwga2lkczogMCB9O1xuICAgIHByaXZhdGUgY3VycmVudEVuZ2luZUlkPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIPCflLkgUmVhY2Npb25hIGEgY2FtYmlvcyBkZWwgZW5naW5lRGF0YSAobnVldm8gbW90b3IgY2FyZ2FkbylcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVuZ2luZURhdGEgPSB0aGlzLmRhdGEoKTtcbiAgICAgICAgICAgIGlmICghZW5naW5lRGF0YT8uZW5naW5lKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld0VuZ2luZVVybCA9XG4gICAgICAgICAgICAgICAgZW5naW5lRGF0YS5lbmdpbmUuYnV0dG9uPy51cmwgPz8gZW5naW5lRGF0YS5lbmdpbmUudXJsID8/IG51bGw7XG4gICAgICAgICAgICBjb25zdCBzaWduYXR1cmUgPSBgJHtuZXdFbmdpbmVVcmx9YDtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRFbmdpbmVJZCA9PT0gc2lnbmF0dXJlKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIPCfp6AgQW50ZXMgZGUgcmUtaW5pY2lhbGl6YXIsIGNvbnNlcnZhIGVsIGhvdGVsIHNlbGVjY2lvbmFkbyBhY3R1YWxcbiAgICAgICAgICAgIGNvbnN0IHByZXZMb2NhdGlvbiA9IHRoaXMuZm9ybT8udmFsdWUubG9jYXRpb247XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2VsZWN0ZWQgPSB0aGlzLm1vZGFsLnNlbGVjdGVkSG90ZWxJZCgpO1xuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRFbmdpbmVJZCA9IHNpZ25hdHVyZTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oZW5naW5lRGF0YSk7XG5cbiAgICAgICAgICAgIC8vIPCfqbUgUmVzdGF1cmEgc2VsZWNjacOzbiBzaSBlbCBtb3RvciBjYW1iacOzIHBvciB1cGRhdGUgZGUgaG90ZWxcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2VsZWN0ZWQgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHsgbG9jYXRpb246IFN0cmluZyhjdXJyZW50U2VsZWN0ZWQpIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RFbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgICAgICAgICAnbG9jYXRpb24nXG4gICAgICAgICAgICAgICAgKSBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdEVsKSBzZWxlY3RFbC52YWx1ZSA9IFN0cmluZyhjdXJyZW50U2VsZWN0ZWQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2TG9jYXRpb24gJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgICAgICAgICAgLy8gZmFsbGJhY2sgc2kgZWwgbW90b3Igc2UgcmVjYXJnYSBzaW4gY2FtYmlvIGRlIGhvdGVsXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgIHsgbG9jYXRpb246IHByZXZMb2NhdGlvbiB9LFxuICAgICAgICAgICAgICAgICAgICB7IGVtaXRFdmVudDogZmFsc2UgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHByb21vIHZhbHVlIGVtcHR5IGFuZCByZXNldCBsYWJlbCBwb3NpdGlvblxuICAgICAgICAgICAgY29uc3QgcHJvbW9JbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgJyNwcm9tbydcbiAgICAgICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0/LmdldCgncHJvbW9JbnB1dCcpPy52YWx1ZSA9PT0gJycgJiYgcHJvbW9JbnB1dCkge1xuICAgICAgICAgICAgICAgIHByb21vSW5wdXQudmFsdWUgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUxhYmVsUG9zaXRpb24ocHJvbW9JbnB1dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBob3RlbElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnbG9jYXRpb24nXG4gICAgICAgICAgICAgICAgICAgICkgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChob3RlbElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUhvdGVsTGFiZWxQb3NpdGlvbihob3RlbElucHV0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gUmVnZW5lcmEgbGEgVVJMIGN1YW5kbyBjYW1iaWVuIGxvcyB2YWxvcmVzIGRlbCBtb3RvclxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW5naW5lRGF0YSA9IHRoaXMuZGF0YSgpO1xuICAgICAgICAgICAgaWYgKCFlbmdpbmVEYXRhPy5lbmdpbmUgfHwgIXRoaXMuZm9ybSkgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmF0ZWRVcmwoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNPcGVuKCkpIHJldHVybjsgLy8gU29sbyBjdWFuZG8gc2UgYWJyZSBlbCBtb2RhbFxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3RlbElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAgICAgICAgICdsb2NhdGlvbidcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoaG90ZWxJbnB1dCkgdGhpcy5jaGFuZ2VIb3RlbExhYmVsUG9zaXRpb24oaG90ZWxJbnB1dCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9tb0lucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAgICAgICAgICdwcm9tbydcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChwcm9tb0lucHV0ICYmIHRoaXMuZm9ybT8uZ2V0KCdwcm9tb0lucHV0Jyk/LnZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUxhYmVsUG9zaXRpb24ocHJvbW9JbnB1dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgNTApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZCA9IHRoaXMuZGF0YSgpO1xuICAgICAgICBpZiAoZD8uZW5naW5lKSB0aGlzLmluaXRpYWxpemVGb3JtKGQpO1xuICAgIH1cblxuICAgIC8vIGZvcm0gaW5pdGlhbGl6YXRpb25cbiAgICBwcml2YXRlIGluaXRpYWxpemVGb3JtKGQ6IFB1cm9FbmdpbmVNb2RhbEkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgICAgICBjb25zdCB0b21vcnJvdyA9IG5ldyBEYXRlKHRvZGF5KTtcbiAgICAgICAgdG9tb3Jyb3cuc2V0RGF0ZSh0b2RheS5nZXREYXRlKCkgKyAxKTtcblxuICAgICAgICBjb25zdCBmb3JtYXR0ZWRUb2RheSA9IHRoaXMuZm9ybWF0RE1ZKHRvZGF5KTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkVG9tb3Jyb3cgPSB0aGlzLmZvcm1hdERNWSh0b21vcnJvdyk7XG5cbiAgICAgICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICAgICAgICBsb2NhdGlvbjogW1xuICAgICAgICAgICAgICAgIGQ/LmVuZ2luZT8ubG9jYXRpb25Ecm9wZG93bj8ub3B0aW9ucz8uWzBdPy5jb2RlIHx8ICcnLFxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGF0ZXBpY2tlckluOiBbXG4gICAgICAgICAgICAgICAgZD8uZW5naW5lPy5kYXRlcGlja2VySW4/LnZhbHVlIHx8IGZvcm1hdHRlZFRvZGF5LFxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGF0ZXBpY2tlck91dDogW1xuICAgICAgICAgICAgICAgIGQ/LmVuZ2luZT8uZGF0ZXBpY2tlck91dD8udmFsdWUgfHwgZm9ybWF0dGVkVG9tb3Jyb3csXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBwcm9tb0lucHV0OiBbZD8uZW5naW5lPy5wcm9tb0lucHV0Py52YWx1ZSB8fCAnJ10sXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubm9ybWFsaXplRGF0ZXNGcm9tRm9ybSgpO1xuXG4gICAgICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT4gSlNPTi5zdHJpbmdpZnkoYSkgPT09IEpTT04uc3RyaW5naWZ5KGIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmF0ZWRVcmwoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVFbmdpbmVEYXRhKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRGF0ZXBpY2tlckV2ZW50cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZExvY2F0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICB9LCA0MDApO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVHZW5lcmF0ZWRVcmwoKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gbG9jYXRpb25cbiAgICBwcml2YXRlIGJpbmRMb2NhdGlvbkNoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAnbG9jYXRpb24nXG4gICAgICAgICkgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBpZiAoIXNlbGVjdCkgcmV0dXJuO1xuXG4gICAgICAgIHNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvZGUgPSBzZWxlY3QudmFsdWU7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZENvZGUgIT09IHRoaXMuZm9ybT8udmFsdWUubG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtPy5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBsb2NhdGlvbjogc2VsZWN0ZWRDb2RlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGVtaXRFdmVudDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR2VuZXJhdGVkVXJsKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUVuZ2luZURhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaG90ZWxJZCA9IE51bWJlcihzZWxlY3RlZENvZGUpIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5tb2RhbC5zZXRTZWxlY3RlZEhvdGVsKGhvdGVsSWQpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlR2VuZXJhdGVkVXJsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gbGFiZWwgc3l0bGVcblxuICAgIHB1YmxpYyBjaGFuZ2VMYWJlbFBvc2l0aW9uKGU6IEV2ZW50IHwgSFRNTElucHV0RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dFRhcmdldCA9XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgRXZlbnQgPyAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkgOiBlO1xuXG4gICAgICAgIGlmICghaW5wdXRUYXJnZXQpIHJldHVybjtcblxuICAgICAgICBjb25zdCBmaWVsZExhYmVsID0gaW5wdXRUYXJnZXQ/LnByZXZpb3VzU2libGluZyBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gaW5wdXRUYXJnZXQudmFsdWUubGVuZ3RoICogMS4yO1xuICAgICAgICBpZiAodGV4dExlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICBmaWVsZExhYmVsPy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tbGFiZWwtbGVmdC1wb3NpdGlvbicsICc4cmVtJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoISh0ZXh0TGVuZ3RoID4gMjgpKVxuICAgICAgICAgICAgICAgIGZpZWxkTGFiZWw/LnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAgICAgJy0tbGFiZWwtbGVmdC1wb3NpdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHRleHRMZW5ndGggKyAzICsgJ3JlbSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHB1YmxpYyBjaGFuZ2VIb3RlbExhYmVsUG9zaXRpb24oZTogRXZlbnQgfCBIVE1MU2VsZWN0RWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnB1dFRhcmdldCA9XG4gICAgICAgICAgICBlIGluc3RhbmNlb2YgRXZlbnQgPyAoZS50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQpIDogZTtcbiAgICAgICAgY29uc3QgZmllbGRMYWJlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICBgbGFiZWxbZm9yPVwiJHtpbnB1dFRhcmdldD8uaWR9XCJdYFxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCB0ZXh0ID0gaW5wdXRUYXJnZXQub3B0aW9uc1tpbnB1dFRhcmdldC5zZWxlY3RlZEluZGV4XS50ZXh0O1xuXG4gICAgICAgIGNvbnN0IHRleHRMZW5ndGggPSB0ZXh0Lmxlbmd0aCAqIDEuMjtcbiAgICAgICAgaWYgKHRleHRMZW5ndGggPiAyNiAmJiBmaWVsZExhYmVsICYmIGZpZWxkTGFiZWwuc3R5bGUpIHtcbiAgICAgICAgICAgIGZpZWxkTGFiZWw/LnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS1sYWJlbC1sZWZ0LXBvc2l0aW9uJywgJzM0cmVtJyk7XG4gICAgICAgICAgICBmaWVsZExhYmVsLnN0eWxlLm1heFdpZHRoID0gJzEwMHB4JztcbiAgICAgICAgfSBlbHNlIGlmIChmaWVsZExhYmVsICYmIGZpZWxkTGFiZWwuc3R5bGUpIHtcbiAgICAgICAgICAgIGZpZWxkTGFiZWw/LnN0eWxlPy5zZXRQcm9wZXJ0eShcbiAgICAgICAgICAgICAgICAnLS1sYWJlbC1sZWZ0LXBvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICB0ZXh0TGVuZ3RoICsgMiArICdyZW0nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgZmllbGRMYWJlbC5zdHlsZS5tYXhXaWR0aCA9ICdpbmhlcml0JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGVwaWNrZXIgc3luY1xuICAgIHByaXZhdGUgYmluZERhdGVwaWNrZXJFdmVudHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgICdJbi1kYXRlMidcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgY29uc3Qgb3V0SW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgICdPdXQtZGF0ZTInXG4gICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgICAgIGlmICghaW5JbnB1dCB8fCAhb3V0SW5wdXQpIHJldHVybjtcblxuICAgICAgICAvLyBOb3JtYWxpemEgYSBkZC9tbS95eXl5IHNpIHZpZW5lIGNvbiBvdHJvcyBzZXBhcmFkb3Jlc1xuICAgICAgICBjb25zdCBub3JtID0gKHJhdzogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtID0gcmF3LnRyaW0oKS5tYXRjaCgvKFxcZHsxLDJ9KVxcRCsoXFxkezEsMn0pXFxEKyhcXGR7NH0pLyk7XG4gICAgICAgICAgICBpZiAoIW0pIHJldHVybiAnJztcbiAgICAgICAgICAgIGNvbnN0IGQgPSBtWzFdLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgICAgICBjb25zdCBtbyA9IG1bMl0ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBtWzNdO1xuICAgICAgICAgICAgcmV0dXJuIGAke2R9LyR7bW99LyR7eX1gO1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGFwcGx5U3luYyA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIEzDqWUgdmFsb3JlcyByZWFsZXMgZGVsIERPTVxuICAgICAgICAgICAgY29uc3QgcmF3SW4gPSBpbklucHV0LnZhbHVlIHx8ICcnO1xuICAgICAgICAgICAgY29uc3QgcmF3T3V0ID0gb3V0SW5wdXQudmFsdWUgfHwgJyc7XG5cbiAgICAgICAgICAgIC8vIE5vcm1hbGl6YVxuICAgICAgICAgICAgY29uc3QgaW5TdHIgPSBub3JtKHJhd0luKTtcbiAgICAgICAgICAgIGNvbnN0IG91dFN0ciA9IG5vcm0ocmF3T3V0KTtcblxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcGF0Y2hlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGluU3RyICYmIGluU3RyICE9PSB0aGlzLmZvcm0/LnZhbHVlLmRhdGVwaWNrZXJJbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGRhdGVwaWNrZXJJbjogaW5TdHIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChvdXRTdHIgJiYgb3V0U3RyICE9PSB0aGlzLmZvcm0/LnZhbHVlLmRhdGVwaWNrZXJPdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtPy5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBkYXRlcGlja2VyT3V0OiBvdXRTdHIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcGF0Y2hlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gQXNlZ3VyYSBvdXQgPj0gaW4gKCsxIG5vY2hlIHNpIGhhY2UgZmFsdGEpXG4gICAgICAgICAgICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMubm9ybWFsaXplRGF0ZXNGcm9tRm9ybSgpO1xuICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VkICYmIHRoaXMuZm9ybSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGVwaWNrZXJPdXQgfSA9IHRoaXMuZm9ybS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVwaWNrZXJPdXQgJiYgb3V0SW5wdXQudmFsdWUgIT09IGRhdGVwaWNrZXJPdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dElucHV0LnZhbHVlID0gZGF0ZXBpY2tlck91dDsgLy8gcmVmbGVqYSBlbiBVSSBwb3Igc2kgZWwgcGx1Z2luIG5vIGxvIGhhY2VcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChwYXRjaGVkIHx8IGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmF0ZWRVcmwoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlRW5naW5lRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyDwn5SBIFdhdGNoZXIgY29uIHJlcXVlc3RBbmltYXRpb25GcmFtZSAodWx0cmFsaWdlcm8pXG4gICAgICAgIGNvbnN0IHdhdGNoSW5wdXQgPSAoZWw6IEhUTUxJbnB1dEVsZW1lbnQsIG9uQ2hhbmdlOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgICBsZXQgbGFzdCA9ICcnO1xuICAgICAgICAgICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjdXIgPSBlbC52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoY3VyICE9PSBsYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3QgPSBjdXI7XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRGlzcGFyYSB0YW1iacOpbiBlbiBldmVudG9zIOKAnHBvciBzaSBhY2Fzb+KAnVxuICAgICAgICBbJ2lucHV0JywgJ2NoYW5nZScsICdibHVyJywgJ2tleXVwJywgJ3Bhc3RlJywgJ2NsaWNrJ10uZm9yRWFjaChcbiAgICAgICAgICAgIChldnQpID0+IHtcbiAgICAgICAgICAgICAgICBpbklucHV0LmFkZEV2ZW50TGlzdGVuZXIoZXZ0LCBhcHBseVN5bmMpO1xuICAgICAgICAgICAgICAgIG91dElucHV0LmFkZEV2ZW50TGlzdGVuZXIoZXZ0LCBhcHBseVN5bmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFycmFucXVlXG4gICAgICAgIGFwcGx5U3luYygpO1xuICAgICAgICB3YXRjaElucHV0KGluSW5wdXQsIGFwcGx5U3luYyk7XG4gICAgICAgIHdhdGNoSW5wdXQob3V0SW5wdXQsIGFwcGx5U3luYyk7XG4gICAgfVxuXG4gICAgLy8gaGVscGVyc1xuICAgIHByaXZhdGUgZXh0cmFjdERNWShcbiAgICAgICAgcmF3OiBzdHJpbmdcbiAgICApOiB7IGQ6IG51bWJlcjsgbTogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBpZiAoIXJhdykgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IG0gPSByYXcubWF0Y2goLyhcXGR7MSwyfSlcXEQrKFxcZHsxLDJ9KVxcRCsoXFxkezR9KS8pO1xuICAgICAgICBpZiAoIW0pIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBkID0gTnVtYmVyKG1bMV0pO1xuICAgICAgICBjb25zdCBtbyA9IE51bWJlcihtWzJdKTtcbiAgICAgICAgY29uc3QgeSA9IE51bWJlcihtWzNdKTtcbiAgICAgICAgaWYgKCFkIHx8ICFtbyB8fCAheSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB7IGQsIG06IG1vLCB5IH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b0RhdGUoeyBkLCBtLCB5IH06IHsgZDogbnVtYmVyOyBtOiBudW1iZXI7IHk6IG51bWJlciB9KTogRGF0ZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtIC0gMSwgZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRETVkoZGF0ZTogRGF0ZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRkID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICBjb25zdCBtbSA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICBjb25zdCB5eXl5ID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICByZXR1cm4gYCR7ZGR9LyR7bW19LyR7eXl5eX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZm9ybWF0RGF0ZUZvclVybChkYXRlU3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBkbXkgPSB0aGlzLmV4dHJhY3RETVkoZGF0ZVN0cik7XG4gICAgICAgIGlmICghZG15KSByZXR1cm4gJyc7XG4gICAgICAgIGNvbnN0IGRkID0gU3RyaW5nKGRteS5kKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICBjb25zdCBtbSA9IFN0cmluZyhkbXkubSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgY29uc3QgeXl5eSA9IGRteS55O1xuICAgICAgICByZXR1cm4gYCR7ZGR9LSR7bW19LSR7eXl5eX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgbm9ybWFsaXplRGF0ZXNGcm9tRm9ybSgpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCF0aGlzLmZvcm0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgeyBkYXRlcGlja2VySW4sIGRhdGVwaWNrZXJPdXQgfSA9IHRoaXMuZm9ybS52YWx1ZTtcblxuICAgICAgICBjb25zdCBpbkRNWSA9IHRoaXMuZXh0cmFjdERNWShTdHJpbmcoZGF0ZXBpY2tlckluIHx8ICcnKSk7XG4gICAgICAgIGNvbnN0IG91dERNWSA9IHRoaXMuZXh0cmFjdERNWShTdHJpbmcoZGF0ZXBpY2tlck91dCB8fCAnJykpO1xuXG4gICAgICAgIGlmICghaW5ETVkpIHJldHVybiBmYWxzZTtcblxuICAgICAgICBjb25zdCBpbkRhdGUgPSB0aGlzLnRvRGF0ZShpbkRNWSk7XG4gICAgICAgIGxldCB1cGRhdGVkID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFvdXRETVkgfHwgdGhpcy50b0RhdGUob3V0RE1ZKSA8PSBpbkRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsdXMxID0gbmV3IERhdGUoaW5EYXRlKTtcbiAgICAgICAgICAgIHBsdXMxLnNldERhdGUoaW5EYXRlLmdldERhdGUoKSArIDEpO1xuICAgICAgICAgICAgY29uc3QgbmV3T3V0ID0gdGhpcy5mb3JtYXRETVkocGx1czEpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgeyBkYXRlcGlja2VyT3V0OiBuZXdPdXQgfSxcbiAgICAgICAgICAgICAgICB7IGVtaXRFdmVudDogdHJ1ZSB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdXBkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVFbmdpbmVEYXRhKCk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHJldHVybjtcbiAgICAgICAgY29uc3QgeyBsb2NhdGlvbiwgZGF0ZXBpY2tlckluLCBkYXRlcGlja2VyT3V0LCBwcm9tb0lucHV0IH0gPVxuICAgICAgICAgICAgdGhpcy5mb3JtIS52YWx1ZTtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgICAgIGxvY2F0aW9uLFxuICAgICAgICAgICAgZGF0ZXBpY2tlckluLFxuICAgICAgICAgICAgZGF0ZXBpY2tlck91dCxcbiAgICAgICAgICAgIHByb21vSW5wdXQsXG4gICAgICAgICAgICAuLi50aGlzLmd1ZXN0cyxcbiAgICAgICAgfTtcbiAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbSgncHVyb0VuZ2luZU1vZGFsRGF0YScsIEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICB9XG5cbiAgICAvLyB1cmwgZ2VuZXJhdGlvblxuICAgIHByaXZhdGUgdXBkYXRlR2VuZXJhdGVkVXJsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkID0gdGhpcy5kYXRhKCk/LmVuZ2luZTtcbiAgICAgICAgaWYgKCFkIHx8ICF0aGlzLmZvcm0pIHJldHVybjtcblxuICAgICAgICB0aGlzLm5vcm1hbGl6ZURhdGVzRnJvbUZvcm0oKTtcblxuICAgICAgICBjb25zdCB7IGxvY2F0aW9uLCBkYXRlcGlja2VySW4sIGRhdGVwaWNrZXJPdXQsIHByb21vSW5wdXQgfSA9XG4gICAgICAgICAgICB0aGlzLmZvcm0udmFsdWU7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblxuICAgICAgICBpZiAobG9jYXRpb24pIHBhcmFtcy5hcHBlbmQoJ2hvdGVsJywgbG9jYXRpb24pO1xuICAgICAgICBpZiAoZGF0ZXBpY2tlckluKVxuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCgnZGF0ZWluJywgdGhpcy5mb3JtYXREYXRlRm9yVXJsKGRhdGVwaWNrZXJJbikpO1xuICAgICAgICBpZiAoZGF0ZXBpY2tlck91dClcbiAgICAgICAgICAgIHBhcmFtcy5hcHBlbmQoJ2RhdGVvdXQnLCB0aGlzLmZvcm1hdERhdGVGb3JVcmwoZGF0ZXBpY2tlck91dCkpO1xuICAgICAgICBpZiAocHJvbW9JbnB1dCkgcGFyYW1zLmFwcGVuZCgncHJvbScsIHByb21vSW5wdXQpO1xuICAgICAgICBwYXJhbXMuYXBwZW5kKCdhZHVsdHMnLCBTdHJpbmcodGhpcy5ndWVzdHMuYWR1bHRzKSk7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoJ2NoaWxkcmVuJywgU3RyaW5nKHRoaXMuZ3Vlc3RzLmtpZHMpKTtcblxuICAgICAgICBsZXQgYmFzZVVybCA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmlzSG90ZWwpIHtcbiAgICAgICAgICAgIGJhc2VVcmwgPSBkLnVybCA/PyBkLmJ1dHRvbj8udXJsID8/ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRIb3RlbCA9IGQubG9jYXRpb25Ecm9wZG93bj8ub3B0aW9ucz8uZmluZChcbiAgICAgICAgICAgICAgICAob3B0KSA9PiBTdHJpbmcob3B0LmNvZGUpID09PSBTdHJpbmcobG9jYXRpb24pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYmFzZVVybCA9IHNlbGVjdGVkSG90ZWw/LnVybCA/PyBkLnVybCA/PyBkLmJ1dHRvbj8udXJsID8/ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFiYXNlVXJsKSByZXR1cm47XG5cbiAgICAgICAgY29uc3Qgc2VwID0gYmFzZVVybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nO1xuICAgICAgICBjb25zdCBzYWZlUGFyYW1zID1cbiAgICAgICAgICAgIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zLnRvU3RyaW5nID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgPyBwYXJhbXMudG9TdHJpbmcoKVxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVkVXJsID0gYCR7YmFzZVVybH0ke3NlcH0ke3NhZmVQYXJhbXN9YDtcbiAgICB9XG5cbiAgICAvLyBhY3Rpb25zXG4gICAgYXBwbHlHdWVzdHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFkdWx0c1NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgJ2FkdWx0MSdcbiAgICAgICAgKSBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IG51bGw7XG4gICAgICAgIGNvbnN0IGtpZHNTZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgICdjaGlsZDEnXG4gICAgICAgICkgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBpZiAoYWR1bHRzU2VsZWN0KSB0aGlzLmd1ZXN0cy5hZHVsdHMgPSBOdW1iZXIoYWR1bHRzU2VsZWN0LnZhbHVlKSB8fCAyO1xuICAgICAgICBpZiAoa2lkc1NlbGVjdCkgdGhpcy5ndWVzdHMua2lkcyA9IE51bWJlcihraWRzU2VsZWN0LnZhbHVlKSB8fCAwO1xuICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYXRlZFVybCgpO1xuICAgIH1cblxuICAgIG9uU3VibWl0KGU6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVHZW5lcmF0ZWRVcmwoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2VuZXJhdGVkVXJsKSB7XG4gICAgICAgICAgICB3aW5kb3cub3Blbih0aGlzLmdlbmVyYXRlZFVybCwgJ19ibGFuaycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xvc2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kYWwuY2xvc2VFbmdpbmUoKTtcbiAgICB9XG59XG4iLCJAaWYgKGlzT3BlbigpKSB7XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJlbmdpbmUtbW9kYWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVuZ2luZS1tb2RhbF9fb3ZlcmxheVwiIChjbGljayk9XCJjbG9zZSgpXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbmdpbmUtbW9kYWxfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlbmdpbmUtbW9kYWxfX2Nsb3NlXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJib29raW5nXCI+XG4gICAgICAgICAgICAgICAgPCEtLSDwn5S5IFNsaWRlciBkZSB2ZW50YWphcyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fYWR2YW50YWdlcyBqcy1hY3RpdmUtc2xpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3B1cm9TbGlkZXJdPVwiZGF0YSgpPy5hZHZhbnRhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXNyb3dzX3BjPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtc2xpZGVzcm93c19sYXB0b3A9XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXNyb3dzX3RhYmxldD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXNsaWRlc3Jvd3NfbW9iaWxlPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtc2xpZGVzcm93c19tb2JpbGVfc21hbGw9XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXNfaW5maW5pdGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXJfbmFtZT1cImpzLWFkdi1zbGlkZXJcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXNsaWRlcl9zaG93YnRucz1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXNsaWRlcl9zaG93ZG90cz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXJfZmFkZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXJfYXV0b3BsYXk9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtc2xpZGVzX3BjPVwiMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fYWR2YW50YWdlcy0taW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGF0YSgpPy50aXRsZUFkdmFudGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXB1cm8tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWddPVwiZGF0YSgpPy50YWdzPy50aXRsZSB8fCAnc3BhbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcz1cImJvb2tpbmdfX3RpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiZGF0YSgpPy50aXRsZUFkdmFudGFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi1wdXJvLWR5bmFtaWMtaGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqcy1hZHYtc2xpZGVyIGFkdl9fc2xpZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gb2YgZGF0YSgpPy5hZHZhbnRhZ2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2Fkdkl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2Fkdkljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uLXt7IGl0ZW0uaWNvbiB9fVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm9va2luZ19fYWR2VGV4dFwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzLXNsaWRlci1hcnJvd3NcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIPCflLkgRk9STVVMQVJJTyAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2Zvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19mb3JtLS1pbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdExvYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YUxvYWRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGF0YSgpPy5lbmdpbmU/LnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvb2tpbmdfX3RpdGxlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaXNIb3RlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g8J+UuSBMT0NBVElPTiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRHcm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSW5uZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWxhYmVsLWxlZnQtcG9zaXRpb246IDM0cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmxvY2F0aW9uRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ubG9jYXRpb25Ecm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlSG90ZWxMYWJlbFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gb2YgZGF0YSgpPy5lbmdpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ubG9jYXRpb25Ecm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24tNjJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g8J+UuSBEQVRFUElDS0VSUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZEdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiSW4tZGF0ZTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWxhYmVsLWxlZnQtcG9zaXRpb246IDE0cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8uZGF0ZXBpY2tlckluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fZmllbGRDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiSW4tZGF0ZTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZXBpY2tlckluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8uZGF0ZXBpY2tlckluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRhdGVwaWNrZXIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMYWJlbFBvc2l0aW9uKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbi04OVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkR3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJPdXQtZGF0ZTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWxhYmVsLWxlZnQtcG9zaXRpb246IDE0cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmRhdGVwaWNrZXJPdXQ/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIk91dC1kYXRlMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkYXRlcGlja2VyT3V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmRhdGVwaWNrZXJPdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtdG9nZ2xlPVwiZGF0ZXBpY2tlcjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxhYmVsUG9zaXRpb24oJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uLTg5XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIPCflLkgR1VFU1RTIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkR3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fZmllbGRJbm5lciBqcy1wZXJzb25hcy1zdWJmaWVsZHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImd1ZXN0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbGFiZWwtbGVmdC1wb3NpdGlvbjogNnJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSgpPy5lbmdpbmU/Lmd1ZXN0c0lucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRDb250cm9sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiOFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cIiNzZWxlY3QtYXJyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3VzZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZFN1YiBqcy1maWVsZFN1YlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJhZHVsdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1sYWJlbC1sZWZ0LXBvc2l0aW9uOiA2cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSgpPy5lbmdpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYWR1bHRzRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYWR1bHQxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImFwcGx5R3Vlc3RzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gb2YgZGF0YSgpPy5lbmdpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8uYWR1bHRzRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ub3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uLTkyXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZElubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImNoaWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWxhYmVsLWxlZnQtcG9zaXRpb246IDZyZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5raWRzRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiY2hpbGQxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImFwcGx5R3Vlc3RzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gb2YgZGF0YSgpPy5lbmdpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ua2lkc0Ryb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Lm9wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uLmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSWNvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCI+PHVzZSBocmVmPVwiI2xpdHRsZS1naXJsXCI+PC91c2U+PC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bl9fZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG5fX3ByaW1hcnkganMtYXBwbHktZ3Vlc3RzMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5R3Vlc3RzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEoKT8uZW5naW5lPy5idG5BcHBseVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5sYWJlbCA/PyAnQXBwbHknXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDwn5S5IFBST01PIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkR3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbGFiZWwtbGVmdC1wb3NpdGlvbjogOXJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3I9XCJwcm9tb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSgpPy5lbmdpbmU/LnByb21vSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJwcm9tb1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInh4eHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicHJvbW9JbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTGFiZWxQb3NpdGlvbigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24tOTBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g8J+UuSBTVUJNSVQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuX19ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bl9fcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSgpPy5lbmdpbmU/LmJ1dHRvbj8ubGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxufVxuIl19
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVyby1lbmdpbmUtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1lbmdpbmUtbW9kYWwvcHVyby1lbmdpbmUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHVyby9zcmMvbGliL2NvbXBvbmVudHMvcHVyby1lbmdpbmUtbW9kYWwvcHVyby1lbmdpbmUtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsR0FDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsV0FBVyxFQUVYLG1CQUFtQixFQUNuQixVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUVoRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQzs7O0FBZ0J4RyxNQUFNLE9BQU8sd0JBQXdCO0lBbUJqQztRQWxCaUIsT0FBRSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QixlQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FB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QztJQUVELFFBQVEsQ0FBQyxDQUFRO1FBQ2IsQ0FBQyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDNUM7SUFDTCxDQUFDO0lBRUQsS0FBSztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDN0IsQ0FBQzsrR0EzYlEsd0JBQXdCO21HQUF4Qix3QkFBd0IsaUhDdkNyQyxtMXJCQXNYQSw4TER6VlEsWUFBWSw4QkFDWixtQkFBbUIsdzJDQUNuQixtQkFBbUIsaUZBQ25CLDJCQUEyQixpSUFDM0IsMkJBQTJCOzs0RkFNdEIsd0JBQXdCO2tCQWRwQyxTQUFTOytCQUNJLHVCQUF1QixjQUNyQixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsMkJBQTJCO3dCQUMzQiwyQkFBMkI7cUJBQzlCLG1CQUdnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQVN0QyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIFBMQVRGT1JNX0lELFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRm9ybUJ1aWxkZXIsXG4gICAgRm9ybUdyb3VwLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQdXJvU2xpZGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBNb2RhbFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsLXN0YXRlJztcbmltcG9ydCB7IFB1cm9EeW5hbWljSGVhZGluZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9wdXJvLWR5bmFtaWMtaGVhZGluZyc7XG5pbXBvcnQgeyBQdXJvRW5naW5lTW9kYWxJIH0gZnJvbSAnLi9wdXJvLWVuZ2luZS1tb2RhbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRW5naW5lTW9kYWxTY3JpcHRzRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9wdXJvLXNjcmlwdC9wdXJvLW1vZGFsLXNjcmlwdHMuZGlyZWN0aXZlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItcHVyby1lbmdpbmUtbW9kYWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFB1cm9TbGlkZXJEaXJlY3RpdmUsXG4gICAgICAgIFB1cm9EeW5hbWljSGVhZGluZ0NvbXBvbmVudCxcbiAgICAgICAgRW5naW5lTW9kYWxTY3JpcHRzRGlyZWN0aXZlLFxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL3B1cm8tZW5naW5lLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vcHVyby1lbmdpbmUtbW9kYWwuY29tcG9uZW50LnNjc3MnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBQdXJvRW5naW5lTW9kYWxDb21wb25lbnQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmIgPSBpbmplY3QoRm9ybUJ1aWxkZXIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1JZCA9IGluamVjdChQTEFURk9STV9JRCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtb2RhbCA9IGluamVjdChNb2RhbFN0YXRlU2VydmljZSk7XG5cbiAgICBASW5wdXQoKSBpc0hvdGVsPzogYm9vbGVhbjtcblxuICAgIGlzT3BlbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMubW9kYWwuaXNFbmdpbmVPcGVuKCkpO1xuICAgIGRhdGEgPSBjb21wdXRlZDxQdXJvRW5naW5lTW9kYWxJIHwgdW5kZWZpbmVkPigoKSA9PlxuICAgICAgICB0aGlzLm1vZGFsLmVuZ2luZURhdGEoKVxuICAgICk7XG5cbiAgICBmb3JtPzogRm9ybUdyb3VwO1xuICAgIGdlbmVyYXRlZFVybCA9ICcnO1xuICAgIGd1ZXN0cyA9IHsgYWR1bHRzOiAyLCBraWRzOiAwIH07XG4gICAgcHJpdmF0ZSBjdXJyZW50RW5naW5lSWQ/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8g8J+UuSBSZWFjY2lvbmEgYSBjYW1iaW9zIGRlbCBlbmdpbmVEYXRhIChudWV2byBtb3RvciBjYXJnYWRvKVxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZW5naW5lRGF0YSA9IHRoaXMuZGF0YSgpO1xuICAgICAgICAgICAgaWYgKCFlbmdpbmVEYXRhPy5lbmdpbmUpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgbmV3RW5naW5lVXJsID1cbiAgICAgICAgICAgICAgICBlbmdpbmVEYXRhLmVuZ2luZS5idXR0b24/LnVybCA/PyBlbmdpbmVEYXRhLmVuZ2luZS51cmwgPz8gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGAke25ld0VuZ2luZVVybH1gO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3VycmVudEVuZ2luZUlkID09PSBzaWduYXR1cmUpIHJldHVybjtcblxuICAgICAgICAgICAgLy8g8J+noCBBbnRlcyBkZSByZS1pbmljaWFsaXphciwgY29uc2VydmEgZWwgaG90ZWwgc2VsZWNjaW9uYWRvIGFjdHVhbFxuICAgICAgICAgICAgY29uc3QgcHJldkxvY2F0aW9uID0gdGhpcy5mb3JtPy52YWx1ZS5sb2NhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZWxlY3RlZCA9IHRoaXMubW9kYWwuc2VsZWN0ZWRIb3RlbElkKCk7XG5cbiAgICAgICAgICAgIHRoaXMuY3VycmVudEVuZ2luZUlkID0gc2lnbmF0dXJlO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplRm9ybShlbmdpbmVEYXRhKTtcblxuICAgICAgICAgICAgLy8g8J+ptSBSZXN0YXVyYSBzZWxlY2Npw7NuIHNpIGVsIG1vdG9yIGNhbWJpw7MgcG9yIHVwZGF0ZSBkZSBob3RlbFxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3RlZCAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgeyBsb2NhdGlvbjogU3RyaW5nKGN1cnJlbnRTZWxlY3RlZCkgfSxcbiAgICAgICAgICAgICAgICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdEVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAgICAgICAgICdsb2NhdGlvbidcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0RWwpIHNlbGVjdEVsLnZhbHVlID0gU3RyaW5nKGN1cnJlbnRTZWxlY3RlZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZMb2NhdGlvbiAmJiB0aGlzLmZvcm0pIHtcbiAgICAgICAgICAgICAgICAvLyBmYWxsYmFjayBzaSBlbCBtb3RvciBzZSByZWNhcmdhIHNpbiBjYW1iaW8gZGUgaG90ZWxcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgeyBsb2NhdGlvbjogcHJldkxvY2F0aW9uIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiBmYWxzZSB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgcHJvbW8gdmFsdWUgZW1wdHkgYW5kIHJlc2V0IGxhYmVsIHBvc2l0aW9uXG4gICAgICAgICAgICBjb25zdCBwcm9tb0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnI3Byb21vJ1xuICAgICAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybT8uZ2V0KCdwcm9tb0lucHV0Jyk/LnZhbHVlID09PSAnJyAmJiBwcm9tb0lucHV0KSB7XG4gICAgICAgICAgICAgICAgcHJvbW9JbnB1dC52YWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTGFiZWxQb3NpdGlvbihwcm9tb0lucHV0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvdGVsSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgICAgICAgICAgICAgICdsb2NhdGlvbidcbiAgICAgICAgICAgICAgICAgICAgKSBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGhvdGVsSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlSG90ZWxMYWJlbFBvc2l0aW9uKGhvdGVsSW5wdXQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWdlbmVyYSBsYSBVUkwgY3VhbmRvIGNhbWJpZW4gbG9zIHZhbG9yZXMgZGVsIG1vdG9yXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbmdpbmVEYXRhID0gdGhpcy5kYXRhKCk7XG4gICAgICAgICAgICBpZiAoIWVuZ2luZURhdGE/LmVuZ2luZSB8fCAhdGhpcy5mb3JtKSByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYXRlZFVybCgpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc09wZW4oKSkgcmV0dXJuOyAvLyBTb2xvIGN1YW5kbyBzZSBhYnJlIGVsIG1vZGFsXG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvdGVsSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgICAgICAgICAgJ2xvY2F0aW9uJ1xuICAgICAgICAgICAgICAgICkgYXMgSFRNTFNlbGVjdEVsZW1lbnQgfCBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChob3RlbElucHV0KSB0aGlzLmNoYW5nZUhvdGVsTGFiZWxQb3NpdGlvbihob3RlbElucHV0KTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHByb21vSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgICAgICAgICAgJ3Byb21vJ1xuICAgICAgICAgICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHByb21vSW5wdXQgJiYgdGhpcy5mb3JtPy5nZXQoJ3Byb21vSW5wdXQnKT8udmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlTGFiZWxQb3NpdGlvbihwcm9tb0lucHV0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBkID0gdGhpcy5kYXRhKCk7XG4gICAgICAgIGlmIChkPy5lbmdpbmUpIHRoaXMuaW5pdGlhbGl6ZUZvcm0oZCk7XG4gICAgfVxuXG4gICAgLy8gZm9ybSBpbml0aWFsaXphdGlvblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm0oZDogUHVyb0VuZ2luZU1vZGFsSSk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGNvbnN0IHRvbW9ycm93ID0gbmV3IERhdGUodG9kYXkpO1xuICAgICAgICB0b21vcnJvdy5zZXREYXRlKHRvZGF5LmdldERhdGUoKSArIDEpO1xuXG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFRvZGF5ID0gdGhpcy5mb3JtYXRETVkodG9kYXkpO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRUb21vcnJvdyA9IHRoaXMuZm9ybWF0RE1ZKHRvbW9ycm93KTtcblxuICAgICAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICAgIGxvY2F0aW9uOiBbXG4gICAgICAgICAgICAgICAgZD8uZW5naW5lPy5sb2NhdGlvbkRyb3Bkb3duPy5vcHRpb25zPy5bMF0/LmNvZGUgfHwgJycsXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRlcGlja2VySW46IFtcbiAgICAgICAgICAgICAgICBkPy5lbmdpbmU/LmRhdGVwaWNrZXJJbj8udmFsdWUgfHwgZm9ybWF0dGVkVG9kYXksXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBkYXRlcGlja2VyT3V0OiBbXG4gICAgICAgICAgICAgICAgZD8uZW5naW5lPy5kYXRlcGlja2VyT3V0Py52YWx1ZSB8fCBmb3JtYXR0ZWRUb21vcnJvdyxcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHByb21vSW5wdXQ6IFtkPy5lbmdpbmU/LnByb21vSW5wdXQ/LnZhbHVlIHx8ICcnXSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ub3JtYWxpemVEYXRlc0Zyb21Gb3JtKCk7XG5cbiAgICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoXG4gICAgICAgICAgICAgICAgICAgIChhLCBiKSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gSlNPTi5zdHJpbmdpZnkoYilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYXRlZFVybCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUVuZ2luZURhdGEoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRGF0ZXBpY2tlckV2ZW50cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZExvY2F0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgfSwgNDAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYXRlZFVybCgpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBsb2NhdGlvblxuICAgIHByaXZhdGUgYmluZExvY2F0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICAgICAgICdsb2NhdGlvbidcbiAgICAgICAgKSBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IG51bGw7XG4gICAgICAgIGlmICghc2VsZWN0KSByZXR1cm47XG5cbiAgICAgICAgc2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQ29kZSA9IHNlbGVjdC52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ29kZSAhPT0gdGhpcy5mb3JtPy52YWx1ZS5sb2NhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGxvY2F0aW9uOiBzZWxlY3RlZENvZGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiB0cnVlIH1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmF0ZWRVcmwoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlRW5naW5lRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBob3RlbElkID0gTnVtYmVyKHNlbGVjdGVkQ29kZSkgfHwgbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGFsLnNldFNlbGVjdGVkSG90ZWwoaG90ZWxJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmF0ZWRVcmwoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBsYWJlbCBzeXRsZVxuXG4gICAgcHVibGljIGNoYW5nZUxhYmVsUG9zaXRpb24oZTogRXZlbnQgfCBIVE1MSW5wdXRFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0VGFyZ2V0ID1cbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiBFdmVudCA/IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KSA6IGU7XG5cbiAgICAgICAgaWYgKCFpbnB1dFRhcmdldCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IGZpZWxkTGFiZWwgPSBpbnB1dFRhcmdldD8ucHJldmlvdXNTaWJsaW5nIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgICAgIGNvbnN0IHRleHRMZW5ndGggPSBpbnB1dFRhcmdldC52YWx1ZS5sZW5ndGggKiAxLjI7XG4gICAgICAgIGlmICh0ZXh0TGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIGZpZWxkTGFiZWw/LnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS1sYWJlbC1sZWZ0LXBvc2l0aW9uJywgJzhyZW0nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghKHRleHRMZW5ndGggPiAyOCkpXG4gICAgICAgICAgICAgICAgZmllbGRMYWJlbD8uc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICAgICAnLS1sYWJlbC1sZWZ0LXBvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgdGV4dExlbmd0aCArIDMgKyAncmVtJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIGNoYW5nZUhvdGVsTGFiZWxQb3NpdGlvbihlOiBFdmVudCB8IEhUTUxTZWxlY3RFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0VGFyZ2V0ID1cbiAgICAgICAgICAgIGUgaW5zdGFuY2VvZiBFdmVudCA/IChlLnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkgOiBlO1xuICAgICAgICBjb25zdCBmaWVsZExhYmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgIGBsYWJlbFtmb3I9XCIke2lucHV0VGFyZ2V0Py5pZH1cIl1gXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRleHQgPSBpbnB1dFRhcmdldC5vcHRpb25zW2lucHV0VGFyZ2V0LnNlbGVjdGVkSW5kZXhdLnRleHQ7XG5cbiAgICAgICAgY29uc3QgdGV4dExlbmd0aCA9IHRleHQubGVuZ3RoICogMS4yO1xuICAgICAgICBpZiAodGV4dExlbmd0aCA+IDI2ICYmIGZpZWxkTGFiZWwgJiYgZmllbGRMYWJlbC5zdHlsZSkge1xuICAgICAgICAgICAgZmllbGRMYWJlbD8uc3R5bGU/LnNldFByb3BlcnR5KCctLWxhYmVsLWxlZnQtcG9zaXRpb24nLCAnMzRyZW0nKTtcbiAgICAgICAgICAgIGZpZWxkTGFiZWwuc3R5bGUubWF4V2lkdGggPSAnMTAwcHgnO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkTGFiZWwgJiYgZmllbGRMYWJlbC5zdHlsZSkge1xuICAgICAgICAgICAgZmllbGRMYWJlbD8uc3R5bGU/LnNldFByb3BlcnR5KFxuICAgICAgICAgICAgICAgICctLWxhYmVsLWxlZnQtcG9zaXRpb24nLFxuICAgICAgICAgICAgICAgIHRleHRMZW5ndGggKyAyICsgJ3JlbSdcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmaWVsZExhYmVsLnN0eWxlLm1heFdpZHRoID0gJ2luaGVyaXQnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZXBpY2tlciBzeW5jXG4gICAgcHJpdmF0ZSBiaW5kRGF0ZXBpY2tlckV2ZW50cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5JbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgJ0luLWRhdGUyJ1xuICAgICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBjb25zdCBvdXRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgJ091dC1kYXRlMidcbiAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgaWYgKCFpbklucHV0IHx8ICFvdXRJbnB1dCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIE5vcm1hbGl6YSBhIGRkL21tL3l5eXkgc2kgdmllbmUgY29uIG90cm9zIHNlcGFyYWRvcmVzXG4gICAgICAgIGNvbnN0IG5vcm0gPSAocmF3OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSByYXcudHJpbSgpLm1hdGNoKC8oXFxkezEsMn0pXFxEKyhcXGR7MSwyfSlcXEQrKFxcZHs0fSkvKTtcbiAgICAgICAgICAgIGlmICghbSkgcmV0dXJuICcnO1xuICAgICAgICAgICAgY29uc3QgZCA9IG1bMV0ucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgICAgICAgIGNvbnN0IG1vID0gbVsyXS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICAgICAgY29uc3QgeSA9IG1bM107XG4gICAgICAgICAgICByZXR1cm4gYCR7ZH0vJHttb30vJHt5fWA7XG4gICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgYXBwbHlTeW5jID0gKCkgPT4ge1xuICAgICAgICAgICAgLy8gTMOpZSB2YWxvcmVzIHJlYWxlcyBkZWwgRE9NXG4gICAgICAgICAgICBjb25zdCByYXdJbiA9IGluSW5wdXQudmFsdWUgfHwgJyc7XG4gICAgICAgICAgICBjb25zdCByYXdPdXQgPSBvdXRJbnB1dC52YWx1ZSB8fCAnJztcblxuICAgICAgICAgICAgLy8gTm9ybWFsaXphXG4gICAgICAgICAgICBjb25zdCBpblN0ciA9IG5vcm0ocmF3SW4pO1xuICAgICAgICAgICAgY29uc3Qgb3V0U3RyID0gbm9ybShyYXdPdXQpO1xuXG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBwYXRjaGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5TdHIgJiYgaW5TdHIgIT09IHRoaXMuZm9ybT8udmFsdWUuZGF0ZXBpY2tlckluKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybT8ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgZGF0ZXBpY2tlckluOiBpblN0ciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBlbWl0RXZlbnQ6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKG91dFN0ciAmJiBvdXRTdHIgIT09IHRoaXMuZm9ybT8udmFsdWUuZGF0ZXBpY2tlck91dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGRhdGVwaWNrZXJPdXQ6IG91dFN0ciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgeyBlbWl0RXZlbnQ6IHRydWUgfVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBBc2VndXJhIG91dCA+PSBpbiAoKzEgbm9jaGUgc2kgaGFjZSBmYWx0YSlcbiAgICAgICAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5ub3JtYWxpemVEYXRlc0Zyb21Gb3JtKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZWQgJiYgdGhpcy5mb3JtKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0ZXBpY2tlck91dCB9ID0gdGhpcy5mb3JtLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZXBpY2tlck91dCAmJiBvdXRJbnB1dC52YWx1ZSAhPT0gZGF0ZXBpY2tlck91dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0SW5wdXQudmFsdWUgPSBkYXRlcGlja2VyT3V0OyAvLyByZWZsZWphIGVuIFVJIHBvciBzaSBlbCBwbHVnaW4gbm8gbG8gaGFjZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHBhdGNoZWQgfHwgY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYXRlZFVybCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVFbmdpbmVEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIERpc3BhcmEgdGFtYmnDqW4gZW4gZXZlbnRvcyDigJxwb3Igc2kgYWNhc2/igJ1cbiAgICAgICAgWydpbnB1dCcsICdjaGFuZ2UnLCAnYmx1cicsICdrZXl1cCcsICdwYXN0ZScsICdjbGljayddLmZvckVhY2goXG4gICAgICAgICAgICAoZXZ0KSA9PiB7XG4gICAgICAgICAgICAgICAgaW5JbnB1dC5hZGRFdmVudExpc3RlbmVyKGV2dCwgYXBwbHlTeW5jKTtcbiAgICAgICAgICAgICAgICBvdXRJbnB1dC5hZGRFdmVudExpc3RlbmVyKGV2dCwgYXBwbHlTeW5jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBcnJhbnF1ZVxuICAgICAgICBhcHBseVN5bmMoKTtcbiAgICB9XG5cbiAgICAvLyBoZWxwZXJzXG4gICAgcHJpdmF0ZSBleHRyYWN0RE1ZKFxuICAgICAgICByYXc6IHN0cmluZ1xuICAgICk6IHsgZDogbnVtYmVyOyBtOiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QgbSA9IHJhdy5tYXRjaCgvKFxcZHsxLDJ9KVxcRCsoXFxkezEsMn0pXFxEKyhcXGR7NH0pLyk7XG4gICAgICAgIGlmICghbSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGQgPSBOdW1iZXIobVsxXSk7XG4gICAgICAgIGNvbnN0IG1vID0gTnVtYmVyKG1bMl0pO1xuICAgICAgICBjb25zdCB5ID0gTnVtYmVyKG1bM10pO1xuICAgICAgICBpZiAoIWQgfHwgIW1vIHx8ICF5KSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHsgZCwgbTogbW8sIHkgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvRGF0ZSh7IGQsIG0sIHkgfTogeyBkOiBudW1iZXI7IG06IG51bWJlcjsgeTogbnVtYmVyIH0pOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHksIG0gLSAxLCBkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdERNWShkYXRlOiBEYXRlKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZGQgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIGNvbnN0IG1tID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIGNvbnN0IHl5eXkgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHJldHVybiBgJHtkZH0vJHttbX0vJHt5eXl5fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXREYXRlRm9yVXJsKGRhdGVTdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGRteSA9IHRoaXMuZXh0cmFjdERNWShkYXRlU3RyKTtcbiAgICAgICAgaWYgKCFkbXkpIHJldHVybiAnJztcbiAgICAgICAgY29uc3QgZGQgPSBTdHJpbmcoZG15LmQpLnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgICAgIGNvbnN0IG1tID0gU3RyaW5nKGRteS5tKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgICAgICBjb25zdCB5eXl5ID0gZG15Lnk7XG4gICAgICAgIHJldHVybiBgJHtkZH0tJHttbX0tJHt5eXl5fWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBub3JtYWxpemVEYXRlc0Zyb21Gb3JtKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICBjb25zdCB7IGRhdGVwaWNrZXJJbiwgZGF0ZXBpY2tlck91dCB9ID0gdGhpcy5mb3JtLnZhbHVlO1xuXG4gICAgICAgIGNvbnN0IGluRE1ZID0gdGhpcy5leHRyYWN0RE1ZKFN0cmluZyhkYXRlcGlja2VySW4gfHwgJycpKTtcbiAgICAgICAgY29uc3Qgb3V0RE1ZID0gdGhpcy5leHRyYWN0RE1ZKFN0cmluZyhkYXRlcGlja2VyT3V0IHx8ICcnKSk7XG5cbiAgICAgICAgaWYgKCFpbkRNWSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGluRGF0ZSA9IHRoaXMudG9EYXRlKGluRE1ZKTtcbiAgICAgICAgbGV0IHVwZGF0ZWQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIW91dERNWSB8fCB0aGlzLnRvRGF0ZShvdXRETVkpIDw9IGluRGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcGx1czEgPSBuZXcgRGF0ZShpbkRhdGUpO1xuICAgICAgICAgICAgcGx1czEuc2V0RGF0ZShpbkRhdGUuZ2V0RGF0ZSgpICsgMSk7XG4gICAgICAgICAgICBjb25zdCBuZXdPdXQgPSB0aGlzLmZvcm1hdERNWShwbHVzMSk7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShcbiAgICAgICAgICAgICAgICB7IGRhdGVwaWNrZXJPdXQ6IG5ld091dCB9LFxuICAgICAgICAgICAgICAgIHsgZW1pdEV2ZW50OiB0cnVlIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB1cGRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUVuZ2luZURhdGEoKTogdm9pZCB7XG4gICAgICAgIGlmICghaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkgcmV0dXJuO1xuICAgICAgICBjb25zdCB7IGxvY2F0aW9uLCBkYXRlcGlja2VySW4sIGRhdGVwaWNrZXJPdXQsIHByb21vSW5wdXQgfSA9XG4gICAgICAgICAgICB0aGlzLmZvcm0hLnZhbHVlO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgICAgICAgbG9jYXRpb24sXG4gICAgICAgICAgICBkYXRlcGlja2VySW4sXG4gICAgICAgICAgICBkYXRlcGlja2VyT3V0LFxuICAgICAgICAgICAgcHJvbW9JbnB1dCxcbiAgICAgICAgICAgIC4uLnRoaXMuZ3Vlc3RzLFxuICAgICAgICB9O1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdwdXJvRW5naW5lTW9kYWxEYXRhJywgSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpO1xuICAgIH1cblxuICAgIC8vIHVybCBnZW5lcmF0aW9uXG4gICAgcHJpdmF0ZSB1cGRhdGVHZW5lcmF0ZWRVcmwoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGQgPSB0aGlzLmRhdGEoKT8uZW5naW5lO1xuICAgICAgICBpZiAoIWQgfHwgIXRoaXMuZm9ybSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMubm9ybWFsaXplRGF0ZXNGcm9tRm9ybSgpO1xuXG4gICAgICAgIGNvbnN0IHsgbG9jYXRpb24sIGRhdGVwaWNrZXJJbiwgZGF0ZXBpY2tlck91dCwgcHJvbW9JbnB1dCB9ID1cbiAgICAgICAgICAgIHRoaXMuZm9ybS52YWx1ZTtcbiAgICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gICAgICAgIGlmIChsb2NhdGlvbikgcGFyYW1zLmFwcGVuZCgnaG90ZWwnLCBsb2NhdGlvbik7XG4gICAgICAgIGlmIChkYXRlcGlja2VySW4pXG4gICAgICAgICAgICBwYXJhbXMuYXBwZW5kKCdkYXRlaW4nLCB0aGlzLmZvcm1hdERhdGVGb3JVcmwoZGF0ZXBpY2tlckluKSk7XG4gICAgICAgIGlmIChkYXRlcGlja2VyT3V0KVxuICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCgnZGF0ZW91dCcsIHRoaXMuZm9ybWF0RGF0ZUZvclVybChkYXRlcGlja2VyT3V0KSk7XG4gICAgICAgIGlmIChwcm9tb0lucHV0KSBwYXJhbXMuYXBwZW5kKCdwcm9tJywgcHJvbW9JbnB1dCk7XG4gICAgICAgIHBhcmFtcy5hcHBlbmQoJ2FkdWx0cycsIFN0cmluZyh0aGlzLmd1ZXN0cy5hZHVsdHMpKTtcbiAgICAgICAgcGFyYW1zLmFwcGVuZCgnY2hpbGRyZW4nLCBTdHJpbmcodGhpcy5ndWVzdHMua2lkcykpO1xuXG4gICAgICAgIGxldCBiYXNlVXJsID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNIb3RlbCkge1xuICAgICAgICAgICAgYmFzZVVybCA9IGQudXJsID8/IGQuYnV0dG9uPy51cmwgPz8gJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEhvdGVsID0gZC5sb2NhdGlvbkRyb3Bkb3duPy5vcHRpb25zPy5maW5kKFxuICAgICAgICAgICAgICAgIChvcHQpID0+IFN0cmluZyhvcHQuY29kZSkgPT09IFN0cmluZyhsb2NhdGlvbilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBiYXNlVXJsID0gc2VsZWN0ZWRIb3RlbD8udXJsID8/IGQudXJsID8/IGQuYnV0dG9uPy51cmwgPz8gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWJhc2VVcmwpIHJldHVybjtcblxuICAgICAgICBjb25zdCBzZXAgPSBiYXNlVXJsLmluY2x1ZGVzKCc/JykgPyAnJicgOiAnPyc7XG4gICAgICAgIGNvbnN0IHNhZmVQYXJhbXMgPVxuICAgICAgICAgICAgcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMudG9TdHJpbmcgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICA/IHBhcmFtcy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgOiAnJztcbiAgICAgICAgdGhpcy5nZW5lcmF0ZWRVcmwgPSBgJHtiYXNlVXJsfSR7c2VwfSR7c2FmZVBhcmFtc31gO1xuICAgIH1cblxuICAgIC8vIGFjdGlvbnNcbiAgICBhcHBseUd1ZXN0cygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWR1bHRzU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgICAgICAgICAnYWR1bHQxJ1xuICAgICAgICApIGFzIEhUTUxTZWxlY3RFbGVtZW50IHwgbnVsbDtcbiAgICAgICAgY29uc3Qga2lkc1NlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgICAgICAgJ2NoaWxkMSdcbiAgICAgICAgKSBhcyBIVE1MU2VsZWN0RWxlbWVudCB8IG51bGw7XG4gICAgICAgIGlmIChhZHVsdHNTZWxlY3QpIHRoaXMuZ3Vlc3RzLmFkdWx0cyA9IE51bWJlcihhZHVsdHNTZWxlY3QudmFsdWUpIHx8IDI7XG4gICAgICAgIGlmIChraWRzU2VsZWN0KSB0aGlzLmd1ZXN0cy5raWRzID0gTnVtYmVyKGtpZHNTZWxlY3QudmFsdWUpIHx8IDA7XG4gICAgICAgIHRoaXMudXBkYXRlR2VuZXJhdGVkVXJsKCk7XG4gICAgfVxuXG4gICAgb25TdWJtaXQoZTogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYXRlZFVybCgpO1xuICAgICAgICBpZiAodGhpcy5nZW5lcmF0ZWRVcmwpIHtcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMuZ2VuZXJhdGVkVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tb2RhbC5jbG9zZUVuZ2luZSgpO1xuICAgIH1cbn1cbiIsIkBpZiAoaXNPcGVuKCkpIHtcbiAgICA8c2VjdGlvbiBjbGFzcz1cImVuZ2luZS1tb2RhbFwiIG5nU2tpcEh5ZHJhdGlvbj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVuZ2luZS1tb2RhbF9fb3ZlcmxheVwiIChjbGljayk9XCJjbG9zZSgpXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbmdpbmUtbW9kYWxfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlbmdpbmUtbW9kYWxfX2Nsb3NlXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZSgpXCI+XG4gICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJib29raW5nXCI+XG4gICAgICAgICAgICAgICAgPCEtLSDwn5S5IFNsaWRlciBkZSB2ZW50YWphcyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fYWR2YW50YWdlcyBqcy1hY3RpdmUtc2xpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3B1cm9TbGlkZXJdPVwiZGF0YSgpPy5hZHZhbnRhZ2VzXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXNyb3dzX3BjPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtc2xpZGVzcm93c19sYXB0b3A9XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXNyb3dzX3RhYmxldD1cIjNcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXNsaWRlc3Jvd3NfbW9iaWxlPVwiM1wiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtc2xpZGVzcm93c19tb2JpbGVfc21hbGw9XCIzXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXNfaW5maW5pdGU9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXJfbmFtZT1cImpzLWFkdi1zbGlkZXJcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXNsaWRlcl9zaG93YnRucz1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXNsaWRlcl9zaG93ZG90cz1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXJfZmFkZT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1zbGlkZXJfYXV0b3BsYXk9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtc2xpZGVzX3BjPVwiMVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fYWR2YW50YWdlcy0taW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGF0YSgpPy50aXRsZUFkdmFudGFnZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGliLXB1cm8tZHluYW1pYy1oZWFkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0YWddPVwiZGF0YSgpPy50YWdzPy50aXRsZSB8fCAnc3BhbidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjc3NDbGFzcz1cImJvb2tpbmdfX3RpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiZGF0YSgpPy50aXRsZUFkdmFudGFnZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2xpYi1wdXJvLWR5bmFtaWMtaGVhZGluZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJqcy1hZHYtc2xpZGVyIGFkdl9fc2xpZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0gb2YgZGF0YSgpPy5hZHZhbnRhZ2VzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2Fkdkl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2Fkdkljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uLXt7IGl0ZW0uaWNvbiB9fVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaXRlbS50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYm9va2luZ19fYWR2VGV4dFwiPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImpzLXNsaWRlci1hcnJvd3NcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tIPCflLkgRk9STVVMQVJJTyAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2Zvcm1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19mb3JtLS1pbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiZm9ybVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZU1vZGFsU2NyaXB0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlXT1cImlzT3BlbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZGF0YSgpPy5lbmdpbmU/LnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvb2tpbmdfX3RpdGxlXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2JveFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghaXNIb3RlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g8J+UuSBMT0NBVElPTiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRHcm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSW5uZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWxhYmVsLWxlZnQtcG9zaXRpb246IDM0cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmxvY2F0aW9uRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImxvY2F0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ubG9jYXRpb25Ecm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibG9jYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlSG90ZWxMYWJlbFBvc2l0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24gb2YgZGF0YSgpPy5lbmdpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ubG9jYXRpb25Ecm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24tNjJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g8J+UuSBEQVRFUElDS0VSUyAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZEdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiSW4tZGF0ZTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWxhYmVsLWxlZnQtcG9zaXRpb246IDE0cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8uZGF0ZXBpY2tlckluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8udGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fZmllbGRDb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiSW4tZGF0ZTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZXBpY2tlckluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8uZGF0ZXBpY2tlckluXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTGFiZWxQb3NpdGlvbigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24tODlcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZEdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiT3V0LWRhdGUyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1sYWJlbC1sZWZ0LXBvc2l0aW9uOiAxNHJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSgpPy5lbmdpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5kYXRlcGlja2VyT3V0Py50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZENvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJPdXQtZGF0ZTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZXBpY2tlck91dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSgpPy5lbmdpbmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5kYXRlcGlja2VyT3V0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ucGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTGFiZWxQb3NpdGlvbigkZXZlbnQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24tODlcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0g8J+UuSBHVUVTVFMgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRHcm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZElubmVyIGpzLXBlcnNvbmFzLXN1YmZpZWxkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiZ3Vlc3RzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1sYWJlbC1sZWZ0LXBvc2l0aW9uOiA2cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8uZ3Vlc3RzSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZENvbnRyb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCI4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwiI3NlbGVjdC1hcnJvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdXNlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkU3ViIGpzLWZpZWxkU3ViXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZElubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkTGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImFkdWx0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLWxhYmVsLWxlZnQtcG9zaXRpb246IDZyZW07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hZHVsdHNEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJhZHVsdDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXBwbHlHdWVzdHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBvZiBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5hZHVsdHNEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5vcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbi5jb2RlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImljb24tOTJcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkSW5uZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9va2luZ19fZmllbGRMYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiY2hpbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tbGFiZWwtbGVmdC1wb3NpdGlvbjogNnJlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEoKT8uZW5naW5lXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmtpZHNEcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjaGlsZDFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiYXBwbHlHdWVzdHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiBvZiBkYXRhKCk/LmVuZ2luZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5raWRzRHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ub3B0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2sgJGluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24uY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIyXCIgaGVpZ2h0PVwiMjJcIj48dXNlIGhyZWY9XCIjbGl0dGxlLWdpcmxcIj48L3VzZT48L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuX19ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bl9fcHJpbWFyeSBqcy1hcHBseS1ndWVzdHMxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlHdWVzdHMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSgpPy5lbmdpbmU/LmJ0bkFwcGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LmxhYmVsID8/ICdBcHBseSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIPCflLkgUFJPTU8gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9va2luZ19fZmllbGRHcm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZElubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib29raW5nX19maWVsZExhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1sYWJlbC1sZWZ0LXBvc2l0aW9uOiA5cmVtO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cInByb21vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8ucHJvbW9JbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInByb21vXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwieHh4eFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJvb2tpbmdfX2ZpZWxkQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9tb0lucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMYWJlbFBvc2l0aW9uKCRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib29raW5nX19maWVsZEljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbi05MFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSDwn5S5IFNVQk1JVCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG5fX2dyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuX19wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKCk/LmVuZ2luZT8uYnV0dG9uPy5sYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG59XG4iXX0=
|